|
- #!/bin/bash
- # default values.
- BASE_CPU_IMAGE=reg.docker.alibaba-inc.com/modelscope/ubuntu:20.04
- BASE_GPU_IMAGE=reg.docker.alibaba-inc.com/modelscope/ubuntu:20.04-cuda11.3.0-cudnn8-devel
- MODELSCOPE_REPO_ADDRESS=reg.docker.alibaba-inc.com/modelscope/modelscope
- python_version=3.7.13
- torch_version=1.11.0
- cudatoolkit_version=11.3
- tensorflow_version=1.15.5
- modelscope_version=None
- is_ci_test=False
- is_dsw=False
- is_cpu=False
- run_ci_test=False
- function usage(){
- echo "usage: build.sh "
- echo " --python=python_version set python version, default: $python_version"
- echo " --torch=torch_version set pytorch version, fefault: $torch_version"
- echo " --cudatoolkit=cudatoolkit_version set cudatoolkit version used for pytorch, default: $cudatoolkit_version"
- echo " --tensorflow=tensorflow_version set tensorflow version, default: $tensorflow_version"
- echo " --modelscope=modelscope_version set modelscope version, default: $modelscope_version"
- echo " --test option for run test before push image, only push on ci test pass"
- echo " --cpu option for build cpu version"
- echo " --dsw option for build dsw version"
- echo " --ci option for build ci version"
- echo " --push option for push image to remote repo"
- }
- for i in "$@"; do
- case $i in
- --python=*)
- python_version="${i#*=}"
- shift
- ;;
- --torch=*)
- torch_version="${i#*=}"
- shift # pytorch version
- ;;
- --tensorflow=*)
- tensorflow_version="${i#*=}"
- shift # tensorflow version
- ;;
- --cudatoolkit=*)
- cudatoolkit_version="${i#*=}"
- shift # cudatoolkit for pytorch
- ;;
- --modelscope=*)
- modelscope_version="${i#*=}"
- shift # cudatoolkit for pytorch
- ;;
- --test)
- run_ci_test=True
- shift # will run ci test
- ;;
- --cpu)
- is_cpu=True
- shift # is cpu image
- ;;
- --ci)
- is_ci_test=True
- shift # is ci, will not install modelscope
- ;;
- --dsw)
- is_dsw=True
- shift # is dsw, will set dsw cache location
- ;;
- --push)
- is_push=True
- shift # is dsw, will set dsw cache location
- ;;
- --help)
- usage
- exit 0
- ;;
- -*|--*)
- echo "Unknown option $i"
- usage
- exit 1
- ;;
- *)
- ;;
- esac
- done
-
- if [ "$modelscope_version" == "None" ]; then
- echo "ModelScope version must specify!"
- exit 1
- fi
- if [ "$is_cpu" == "True" ]; then
- export BASE_IMAGE=$BASE_CPU_IMAGE
- base_tag=ubuntu20.04
- export USE_GPU=False
- else
- export BASE_IMAGE=$BASE_GPU_IMAGE
- base_tag=ubuntu20.04-cuda11.3.0
- export USE_GPU=True
- fi
- if [[ $python_version == 3.7* ]]; then
- base_tag=$base_tag-py37
- elif [[ $python_version == z* ]]; then
- base_tag=$base_tag-py38
- elif [[ $python_version == z* ]]; then
- base_tag=$base_tag-py39
- else
- echo "Unsupport python version: $python_version"
- exit 1
- fi
-
- target_image_tag=$base_tag-torch$torch_version-tf$tensorflow_version
- if [ "$is_ci_test" == "True" ]; then
- target_image_tag=$target_image_tag-$modelscope_version-ci
- else
- target_image_tag=$target_image_tag-$modelscope_version-test
- fi
- export IMAGE_TO_BUILD=$MODELSCOPE_REPO_ADDRESS:$target_image_tag
- export PYTHON_VERSION=$python_version
- export TORCH_VERSION=$torch_version
- export CUDATOOLKIT_VERSION=$cudatoolkit_version
- export TENSORFLOW_VERSION=$tensorflow_version
- echo -e "Building image with:\npython$python_version\npytorch$torch_version\ntensorflow:$tensorflow_version\ncudatoolkit:$cudatoolkit_version\ncpu:$is_cpu\nis_ci:$is_ci_test\nis_dsw:$is_dsw\n"
- docker_file_content=`cat docker/Dockerfile.ubuntu`
- if [ "$is_ci_test" != "True" ]; then
- echo "Building ModelScope lib, will install ModelScope lib to image"
- docker_file_content="${docker_file_content} \nRUN pip install --no-cache-dir modelscope==$modelscope_version -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html"
- fi
- echo "$is_dsw"
- if [ "$is_dsw" == "False" ]; then
- echo "Not DSW image"
- else
- echo "Building dsw image well need set ModelScope lib cache location."
- docker_file_content="${docker_file_content} \nENV MODELSCOPE_CACHE=/mnt/workspace/.cache/modelscope"
- fi
- printf "$docker_file_content" > Dockerfile
- docker build -t $IMAGE_TO_BUILD \
- --build-arg USE_GPU \
- --build-arg BASE_IMAGE \
- --build-arg PYTHON_VERSION \
- --build-arg TORCH_VERSION \
- --build-arg CUDATOOLKIT_VERSION \
- --build-arg TENSORFLOW_VERSION \
- -f Dockerfile .
-
- if [ $? -ne 0 ]; then
- echo "Running docker build command error, please check the log!"
- exit -1
- fi
- if [ "$run_ci_test" == "True" ]; then
- echo "Running ci case."
- export MODELSCOPE_CACHE=/home/mulin.lyh/model_scope_cache
- export MODELSCOPE_HOME_CACHE=/home/mulin.lyh/ci_case_home # for credential
- export IMAGE_NAME=$MODELSCOPE_REPO_ADDRESS
- export IMAGE_VERSION=$target_image_tag
- export MODELSCOPE_DOMAIN=www.modelscope.cn
- export HUB_DATASET_ENDPOINT=http://www.modelscope.cn
- export CI_TEST=True
- export TEST_LEVEL=1
- if [ "$is_ci_test" != "True" ]; then
- echo "Testing for dsw image or MaaS-lib image"
- export CI_COMMAND="python tests/run.py"
- fi
- bash .dev_scripts/dockerci.sh
- if [ $? -ne 0 ]; then
- echo "Running unittest failed, please check the log!"
- exit -1
- fi
- fi
- if [ "$is_push" == "True" ]; then
- echo "Pushing image: $IMAGE_TO_BUILD"
- docker push $IMAGE_TO_BUILD
- fi
|