mirror of
https://github.com/modelscope/modelscope.git
synced 2025-12-16 16:27:45 +01:00
169 lines
5.1 KiB
Bash
169 lines
5.1 KiB
Bash
#!/bin/bash
|
|
# default values.
|
|
BASE_CPU_IMAGE=reg.docker.alibaba-inc.com/modelscope/ubuntu
|
|
BASE_GPU_CUDA113_IMAGE=reg.docker.alibaba-inc.com/modelscope/ubuntu:20.04-cuda11.3.0-cudnn8-devel
|
|
BASE_GPU_CUDA117_IMAGE=reg.docker.alibaba-inc.com/modelscope/ubuntu:20.04-cuda11.7.1-cudnn8-devel
|
|
BASE_GPU_CUDA118_IMAGE=reg.docker.alibaba-inc.com/modelscope/ubuntu:20.04-cuda11.8.0-cudnn8-devel
|
|
BASE_GPU_CUDA121_IMAGE=reg.docker.alibaba-inc.com/modelscope/ubuntu:22.04-cuda12.1.0-cudnn8-devel
|
|
BASE_GPU_CUDA122_IMAGE=reg.docker.alibaba-inc.com/modelscope/ubuntu:22.04-cuda11.2.2-cudnn8-devel
|
|
MODELSCOPE_REPO_ADDRESS=reg.docker.alibaba-inc.com/modelscope/modelscope
|
|
python_version=3.7.13
|
|
torch_version=1.11.0
|
|
cuda_version=11.7.1
|
|
cudatoolkit_version=11.3
|
|
tensorflow_version=1.15.5
|
|
os_version=20.04
|
|
version=None
|
|
is_cpu=False
|
|
is_dryrun=False
|
|
function usage(){
|
|
echo "usage: build.sh "
|
|
echo " --os=ubuntu_version set ubuntu os version, default: 20.04"
|
|
echo " --python=python_version set python version, default: $python_version"
|
|
echo " --cuda=cuda_version set cuda version,only[11.3.0, 11.7.1], fefault: $cuda_version"
|
|
echo " --torch=torch_version set pytorch version, fefault: $torch_version"
|
|
echo " --tensorflow=tensorflow_version set tensorflow version, default: $tensorflow_version"
|
|
echo " --test option for run test before push image, only push on ci test pass"
|
|
echo " --cpu option for build cpu version"
|
|
echo " --push option for push image to remote repo"
|
|
echo " --dryrun create Dockerfile not build"
|
|
}
|
|
for i in "$@"; do
|
|
case $i in
|
|
--os=*)
|
|
os_version="${i#*=}"
|
|
shift
|
|
;;
|
|
--python=*)
|
|
python_version="${i#*=}"
|
|
shift
|
|
;;
|
|
--cuda=*)
|
|
cuda_version="${i#*=}"
|
|
shift # pytorch version
|
|
;;
|
|
--torch=*)
|
|
torch_version="${i#*=}"
|
|
shift # pytorch version
|
|
;;
|
|
--tensorflow=*)
|
|
tensorflow_version="${i#*=}"
|
|
shift # tensorflow version
|
|
;;
|
|
--version=*)
|
|
version="${i#*=}"
|
|
shift # version
|
|
;;
|
|
--cpu)
|
|
is_cpu=True
|
|
shift # is cpu image
|
|
;;
|
|
--push)
|
|
is_push=True
|
|
shift # option for push image to remote repo
|
|
;;
|
|
--dryrun)
|
|
is_dryrun=True
|
|
shift
|
|
;;
|
|
--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
-*|--*)
|
|
echo "Unknown option $i"
|
|
usage
|
|
exit 1
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "$cuda_version" == 11.3.0 ]; then
|
|
echo "Building base image cuda11.3.0"
|
|
BASE_GPU_IMAGE=$os_version-$cudatoolkit_version-cudnn8-devel
|
|
cudatoolkit_version=cu113
|
|
elif [ "$cuda_version" == 11.7.1 ]; then
|
|
echo "Building base image cuda11.7.1"
|
|
cudatoolkit_version=cu117
|
|
BASE_GPU_IMAGE=$BASE_GPU_CUDA117_IMAGE
|
|
elif [ "$cuda_version" == 11.8.0 ]; then
|
|
echo "Building base image cuda11.8.0"
|
|
cudatoolkit_version=cu118
|
|
BASE_GPU_IMAGE=$MODELSCOPE_REPO_ADDRESS:$os_version-cuda$cuda_version-cudnn8-devel
|
|
elif [ "$cuda_version" == 12.1.0 ]; then
|
|
cudatoolkit_version=cu121
|
|
BASE_GPU_IMAGE=$BASE_GPU_CUDA121_IMAGE
|
|
else
|
|
echo "Unsupport cuda version: $cuda_version"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$is_cpu" == "True" ]; then
|
|
export BASE_IMAGE=$BASE_CPU_IMAGE:$os_version
|
|
base_tag=ubuntu$os_version
|
|
export USE_GPU=False
|
|
else
|
|
export BASE_IMAGE=$BASE_GPU_IMAGE
|
|
base_tag=ubuntu$os_version-cuda$cuda_version
|
|
export USE_GPU=True
|
|
fi
|
|
|
|
if [[ $python_version == 3.7* ]]; then
|
|
base_tag=$base_tag-py37
|
|
elif [[ $python_version == 3.8* ]]; then
|
|
base_tag=$base_tag-py38
|
|
elif [[ $python_version == 3.10* ]]; then
|
|
base_tag=$base_tag-py310
|
|
else
|
|
echo "Unsupport python version: $python_version"
|
|
exit 1
|
|
fi
|
|
# target_image_tag=$base_tag-torch$torch_version-tf$tensorflow_version-base
|
|
# cpu no tensorflow
|
|
if [ "$is_cpu" == "True" ]; then
|
|
target_image_tag=$base_tag-torch$torch_version-base
|
|
else
|
|
target_image_tag=$base_tag-torch$torch_version-tf$tensorflow_version-base
|
|
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 "From: $BASE_IMAGE build: $target_image_tag"
|
|
echo -e "Building image with:\npython$python_version\npytorch$torch_version\ntensorflow:$tensorflow_version\ncudatoolkit:$cudatoolkit_version\ncpu:$is_cpu\n"
|
|
docker_file_content=`cat docker/Dockerfile.ubuntu_base`
|
|
printf "$docker_file_content" > Dockerfile
|
|
|
|
if [ "$is_dryrun" == "True" ]; then
|
|
echo 'Dockerfile created'
|
|
exit 0
|
|
fi
|
|
|
|
# DOCKER_BUILDKIT=0
|
|
while true
|
|
do
|
|
DOCKER_BUILDKIT=0 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 [ $? -eq 0 ]; then
|
|
echo "Image build done"
|
|
break
|
|
else
|
|
echo "Running docker build command error, we will retry"
|
|
fi
|
|
done
|
|
|
|
if [ "$is_push" == "True" ]; then
|
|
echo "Pushing image: $IMAGE_TO_BUILD"
|
|
docker push $IMAGE_TO_BUILD
|
|
fi
|