#!/usr/bin/env bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. set -e # Check Params programname=$0 function usage { echo "usage: $programname [version] [path]" echo " [version] Mxnet Version to build" echo " [path] Path to MXNet repository (to run tests)" echo " " exit 1 } if [ $# -le 1 ] || [ $# -ge 3 ] then usage exit 1 fi # Two params provided echo "Building Docker Images for Apache MXNet (Incubating) v$1" mxnet_version="${1}" test_dir="${2}" docker_build_image(){ echo "Building docker image mxnet/python:${1}" docker build -t mxnet/python:${1} -f ${2} . } docker_tag_image(){ docker tag mxnet/python:${1} mxnet/python:${2} } docker_test_image_cpu(){ echo "Running tests on mxnet/python:${1}" docker run -v ${test_dir}:/mxnet mxnet/python:${1} bash -c "python /mxnet/docker/docker-python/test_mxnet.py ${mxnet_version}" docker run -v ${test_dir}:/mxnet mxnet/python:${1} bash -c "python /mxnet/tests/python/train/test_conv.py" docker run -v ${test_dir}:/mxnet mxnet/python:${1} bash -c "python /mxnet/example/image-classification/train_mnist.py" } docker_test_image_gpu(){ echo "Running tests on mxnet/python:${1}" nvidia-docker run -v ${test_dir}:/mxnet mxnet/python:${1} bash -c "python /mxnet/docker/docker-python/test_mxnet.py ${mxnet_version}" nvidia-docker run -v ${test_dir}:/mxnet mxnet/python:${1} bash -c "python /mxnet/tests/python/train/test_conv.py --gpu" nvidia-docker run -v ${test_dir}:/mxnet mxnet/python:${1} bash -c "python /mxnet/example/image-classification/train_mnist.py --gpus 2" } # if both $MXNET_DOCKERHUB_PASSWORD and $MXNET_DOCKERHUB_USERNAME environment variables are set, docker will automatically login # if env variables are not set, login will be interactive. docker_account_login(){ if [[ -z $MXNET_DOCKERHUB_PASSWORD ]] || [[ -z $MXNET_DOCKERHUB_USERNAME ]]; then docker login else echo $MXNET_DOCKERHUB_PASSWORD | docker login -u $MXNET_DOCKERHUB_USERNAME --password-stdin fi } docker_account_logout(){ docker logout } docker_push_image(){ docker push mxnet/python:${1} } # Build and Test dockerfiles - CPU docker_build_image "${mxnet_version}_cpu" "Dockerfile.mxnet.python.cpu" docker_test_image_cpu "${mxnet_version}_cpu" docker_build_image "${mxnet_version}_cpu_mkl" "Dockerfile.mxnet.python.cpu.mkl" docker_test_image_cpu "${mxnet_version}_cpu_mkl" docker_tag_image "${mxnet_version}_cpu" "latest" docker_test_image_cpu "latest" #Build and Test dockerfiles - GPU docker_build_image "${mxnet_version}_gpu_cu90" "Dockerfile.mxnet.python.gpu.cu90" docker_test_image_gpu "${mxnet_version}_gpu_cu90" docker_build_image "${mxnet_version}_gpu_cu90_mkl" "Dockerfile.mxnet.python.gpu.cu90.mkl" docker_test_image_gpu "${mxnet_version}_gpu_cu90_mkl" docker_tag_image "${mxnet_version}_gpu_cu90" "gpu" docker_test_image_gpu "gpu" docker_build_image "${mxnet_version}_gpu_cu80" "Dockerfile.mxnet.python.gpu.cu80" docker_test_image_gpu "${mxnet_version}_gpu_cu80" docker_build_image "${mxnet_version}_gpu_cu80_mkl" "Dockerfile.mxnet.python.gpu.cu80.mkl" docker_test_image_gpu "${mxnet_version}_gpu_cu80_mkl" docker_build_image "${mxnet_version}_gpu_cu92" "Dockerfile.mxnet.python.gpu.cu92" docker_test_image_gpu "${mxnet_version}_gpu_cu92" docker_build_image "${mxnet_version}_gpu_cu92_mkl" "Dockerfile.mxnet.python.gpu.cu92.mkl" docker_test_image_gpu "${mxnet_version}_gpu_cu92_mkl" # Push dockerfiles echo "All images were successfully built. Now login to dockerhub and push images" docker_account_login docker_push_image "${mxnet_version}_cpu" docker_push_image "${mxnet_version}_cpu_mkl" docker_push_image "latest" docker_push_image "${mxnet_version}_gpu_cu90" docker_push_image "${mxnet_version}_gpu_cu90_mkl" docker_push_image "gpu" docker_push_image "${mxnet_version}_gpu_cu80" docker_push_image "${mxnet_version}_gpu_cu80_mkl" docker_push_image "${mxnet_version}_gpu_cu92" docker_push_image "${mxnet_version}_gpu_cu92_mkl" docker_account_logout echo "Successfully Built, Tested and Pushed all Images to Dockerhub. Link: https://hub.docker.com/r/mxnet/python/tags/"