From 86128cd3a8f18d1a74f21d5be0d1c1e883d955b2 Mon Sep 17 00:00:00 2001 From: "mulin.lyh" Date: Tue, 7 Feb 2023 02:28:20 +0000 Subject: [PATCH] [to #47612577]feat: image supoort 3d models, python3.8 test version Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11542009 * mmcv-full<=1.7.0 for mmdet3d * fix code style issue * add speechbrain==0.5.7 * add compatible comments --- .dev_scripts/build_image.sh | 24 +++++-- docker/Dockerfile.ubuntu | 71 +++++++++++-------- docker/scripts/install_apex.sh | 12 ++-- docker/scripts/install_colmap.sh | 24 +++++++ docker/scripts/install_libs.sh | 12 ---- .../scripts/install_pytorch3d_nvdiffrast.sh | 14 ++++ docker/scripts/install_tiny_cuda_nn.sh | 8 +++ docs/source/conf.py | 2 +- 8 files changed, 110 insertions(+), 57 deletions(-) create mode 100644 docker/scripts/install_colmap.sh delete mode 100644 docker/scripts/install_libs.sh create mode 100644 docker/scripts/install_pytorch3d_nvdiffrast.sh create mode 100644 docker/scripts/install_tiny_cuda_nn.sh diff --git a/.dev_scripts/build_image.sh b/.dev_scripts/build_image.sh index e6403aed..81bce38b 100644 --- a/.dev_scripts/build_image.sh +++ b/.dev_scripts/build_image.sh @@ -96,9 +96,9 @@ else fi if [[ $python_version == 3.7* ]]; then base_tag=$base_tag-py37 -elif [[ $python_version == z* ]]; then +elif [[ $python_version == 3.8* ]]; then base_tag=$base_tag-py38 -elif [[ $python_version == z* ]]; then +elif [[ $python_version == 3.9* ]]; then base_tag=$base_tag-py39 else echo "Unsupport python version: $python_version" @@ -129,8 +129,15 @@ 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 +if [ "$is_ci_test" == "True" ]; then + echo "Building CI image, uninstall modelscope" + docker_file_content="${docker_file_content} \nRUN pip uninstall modelscope -y" +fi printf "$docker_file_content" > Dockerfile -docker build -t $IMAGE_TO_BUILD \ + +while true +do + docker build -t $IMAGE_TO_BUILD \ --build-arg USE_GPU \ --build-arg BASE_IMAGE \ --build-arg PYTHON_VERSION \ @@ -138,11 +145,14 @@ docker build -t $IMAGE_TO_BUILD \ --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 [ $? -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 diff --git a/docker/Dockerfile.ubuntu b/docker/Dockerfile.ubuntu index aa28d26b..27c0f1f3 100644 --- a/docker/Dockerfile.ubuntu +++ b/docker/Dockerfile.ubuntu @@ -12,7 +12,7 @@ RUN apt-get update && apt-get install -y --reinstall ca-certificates && \ apt-get clean && \ cp /tmp/resources/ubuntu20.04_sources.tuna /etc/apt/sources.list && \ apt-get update && \ - apt-get install -y locales wget git strace gdb vim ffmpeg libsm6 tzdata language-pack-zh-hans ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy libxext6 build-essential ninja-build && \ + apt-get install -y locales wget git strace gdb sox libopenmpi-dev curl strace vim ffmpeg libsm6 tzdata language-pack-zh-hans ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy libxext6 build-essential ninja-build && \ wget https://packagecloud.io/github/git-lfs/packages/debian/bullseye/git-lfs_3.2.0_amd64.deb/download -O ./git-lfs_3.2.0_amd64.deb && \ dpkg -i ./git-lfs_3.2.0_amd64.deb && \ rm -f ./git-lfs_3.2.0_amd64.deb && \ @@ -58,12 +58,46 @@ RUN if [ "$USE_GPU" = "True" ] ; then \ pip install --no-cache-dir tensorflow==$TENSORFLOW_VERSION; \ fi +# mmcv-full<=1.7.0 for mmdet3d compatible RUN if [ "$USE_GPU" = "True" ] ; then \ - CUDA_HOME=/usr/local/cuda TORCH_CUDA_ARCH_LIST="5.0 5.2 6.0 6.1 7.0 7.5 8.0 8.6" MMCV_WITH_OPS=1 MAX_JOBS=8 FORCE_CUDA=1 pip install --no-cache-dir mmcv-full && pip cache purge; \ + CUDA_HOME=/usr/local/cuda TORCH_CUDA_ARCH_LIST="5.0 5.2 6.0 6.1 7.0 7.5 8.0 8.6" MMCV_WITH_OPS=1 MAX_JOBS=8 FORCE_CUDA=1 pip install --no-cache-dir 'mmcv-full<=1.7.0' && pip cache purge; \ else \ - MMCV_WITH_OPS=1 MAX_JOBS=8 pip install --no-cache-dir mmcv-full && pip cache purge; \ + MMCV_WITH_OPS=1 MAX_JOBS=8 pip install --no-cache-dir 'mmcv-full<=1.7.0' && pip cache purge; \ fi +# default shell bash +ENV SHELL=/bin/bash +# install special package +RUN if [ "$USE_GPU" = "True" ] ; then \ + pip install --no-cache-dir dgl-cu113 dglgo -f https://data.dgl.ai/wheels/repo.html; \ + else \ + pip install --no-cache-dir dgl dglgo -f https://data.dgl.ai/wheels/repo.html; \ + fi + +# copy install scripts +COPY docker/scripts/install_unifold.sh docker/scripts/install_colmap.sh docker/scripts/install_pytorch3d_nvdiffrast.sh docker/scripts/install_tiny_cuda_nn.sh docker/scripts/install_apex.sh /tmp/ + +# for uniford +RUN if [ "$USE_GPU" = "True" ] ; then \ + bash /tmp/install_unifold.sh; \ + else \ + echo 'cpu unsupport uniford'; \ + fi + +RUN if [ "$USE_GPU" = "True" ] ; then \ + pip install --no-cache-dir git+https://github.com/gxd1994/Pointnet2.PyTorch.git@master#subdirectory=pointnet2; \ + else \ + echo 'cpu unsupport Pointnet2'; \ + fi + +RUN pip install --no-cache-dir detectron2==0.3 -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html + +# 3d supports +RUN bash /tmp/install_colmap.sh +RUN bash /tmp/install_tiny_cuda_nn.sh +RUN bash /tmp/install_pytorch3d_nvdiffrast.sh +# end of 3D + # install modelscope COPY requirements /var/modelscope RUN pip install --no-cache-dir --upgrade pip && \ @@ -76,42 +110,17 @@ RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r /var/modelscope/tests.txt -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html && \ pip cache purge -# default shell bash -ENV SHELL=/bin/bash - -# install special package -RUN if [ "$USE_GPU" = "True" ] ; then \ - pip install --no-cache-dir dgl-cu113 dglgo -f https://data.dgl.ai/wheels/repo.html; \ - else \ - pip install --no-cache-dir dgl dglgo -f https://data.dgl.ai/wheels/repo.html; \ - fi - # install jupyter plugin RUN mkdir -p /root/.local/share/jupyter/labextensions/ && \ cp -r /tmp/resources/jupyter_plugins/* /root/.local/share/jupyter/labextensions/ COPY docker/scripts/modelscope_env_init.sh /usr/local/bin/ms_env_init.sh -RUN pip install --no-cache-dir https://modelscope.oss-cn-beijing.aliyuncs.com/releases/dependencies/xtcocotools-1.12-cp37-cp37m-linux_x86_64.whl --force +RUN pip install --no-cache-dir xtcocotools==1.12 detectron2==0.3 -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html --force -# for uniford -COPY docker/scripts/install_unifold.sh /tmp/install_unifold.sh -RUN if [ "$USE_GPU" = "True" ] ; then \ - bash /tmp/install_unifold.sh; \ - else \ - echo 'cpu unsupport uniford'; \ - fi - -RUN pip install --no-cache-dir mmcls>=0.21.0 mmdet>=2.25.0 decord>=0.6.0 numpy==1.18.5 https://pypi.tuna.tsinghua.edu.cn/packages/70/ad/06f8a06cef819606cb1a521bcc144288daee5c7e73c5d722492866cb1b92/wenetruntime-1.11.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl ipykernel fairseq fasttext deepspeed -COPY docker/scripts/install_apex.sh /tmp/install_apex.sh +# speechbrain==0.5.7 for audio compatible +RUN pip install --no-cache-dir speechbrain==0.5.7 adaseq>=0.5.0 mmcls>=0.21.0 mmdet>=2.25.0 decord>=0.6.0 numpy==1.18.5 wenetruntime==1.11.0 ipykernel fairseq fasttext deepspeed RUN if [ "$USE_GPU" = "True" ] ; then \ bash /tmp/install_apex.sh; \ else \ echo 'cpu unsupport apex'; \ fi -RUN apt-get update && apt-get install -y sox && \ - apt-get clean -RUN if [ "$USE_GPU" = "True" ] ; then \ - pip install --no-cache-dir git+https://github.com/gxd1994/Pointnet2.PyTorch.git@master#subdirectory=pointnet2; \ - else \ - echo 'cpu unsupport Pointnet2'; \ - fi diff --git a/docker/scripts/install_apex.sh b/docker/scripts/install_apex.sh index f78e849e..47f34da7 100644 --- a/docker/scripts/install_apex.sh +++ b/docker/scripts/install_apex.sh @@ -1,6 +1,6 @@ -export MAX_JOBS=16 -git clone https://github.com/NVIDIA/apex -cd apex -TORCH_CUDA_ARCH_LIST="6.0;6.1;6.2;7.0;7.5;8.0;8.6" pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./ -cd .. -rm -rf apex +export MAX_JOBS=16 \ +&& git clone https://github.com/NVIDIA/apex \ +&& cd apex \ +&& TORCH_CUDA_ARCH_LIST="6.0;6.1;6.2;7.0;7.5;8.0;8.6" pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./ \ +&& cd .. \ +&& rm -rf apex diff --git a/docker/scripts/install_colmap.sh b/docker/scripts/install_colmap.sh new file mode 100644 index 00000000..296b40c5 --- /dev/null +++ b/docker/scripts/install_colmap.sh @@ -0,0 +1,24 @@ +wget -q https://cmake.org/files/v3.25/cmake-3.25.2-linux-x86_64.sh \ + && mkdir /opt/cmake \ + && sh cmake-3.25.2-linux-x86_64.sh --prefix=/opt/cmake --skip-license \ + && ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake \ + && rm -f cmake-3.25.2-linux-x86_64.sh \ + && apt-get update \ + && apt-get install libboost-program-options-dev libboost-filesystem-dev libboost-graph-dev libboost-system-dev libboost-test-dev libeigen3-dev libflann-dev libsuitesparse-dev libfreeimage-dev libmetis-dev libgoogle-glog-dev libgflags-dev libsqlite3-dev libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev libceres-dev -y \ + && export CMAKE_BUILD_PARALLEL_LEVEL=36 \ + && export MAX_JOBS=16 \ + && export COLMAP_VERSION=dev \ + && export CUDA_ARCHITECTURES="all" \ + && git clone https://github.com/colmap/colmap.git \ + && cd colmap \ + && git reset --hard ${COLMAP_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES=${CUDA_ARCHITECTURES} \ + && ninja \ + && ninja install \ + && cd ../.. \ + && rm -rf colmap \ + && apt-get clean \ + && strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 \ + && rm -rf /var/lib/apt/lists/* diff --git a/docker/scripts/install_libs.sh b/docker/scripts/install_libs.sh deleted file mode 100644 index dea0dc19..00000000 --- a/docker/scripts/install_libs.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -set -eo pipefail - -ModelScopeLib=/usr/local/modelscope/lib64 - -if [ ! -d /usr/local/modelscope ]; then - mkdir -p $ModelScopeLib -fi - -# audio libs -wget "http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/release/maas/libs/audio/libmitaec_pyio.so" -O ${ModelScopeLib}/libmitaec_pyio.so diff --git a/docker/scripts/install_pytorch3d_nvdiffrast.sh b/docker/scripts/install_pytorch3d_nvdiffrast.sh new file mode 100644 index 00000000..67f552e2 --- /dev/null +++ b/docker/scripts/install_pytorch3d_nvdiffrast.sh @@ -0,0 +1,14 @@ +export CMAKE_BUILD_PARALLEL_LEVEL=36 && export MAX_JOBS=36 && export CMAKE_CUDA_ARCHITECTURES="50;52;60;61;70;75;80;86" \ + && pip install --no-cache-dir fvcore iopath \ + && curl -LO https://github.com/NVIDIA/cub/archive/1.10.0.tar.gz \ + && tar xzf 1.10.0.tar.gz \ + && export CUB_HOME=$PWD/cub-1.10.0 \ + && pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable" \ + && rm -fr 1.10.0.tar.gz cub-1.10.0 \ + && apt-get update \ + && apt-get install -y --no-install-recommends pkg-config libglvnd0 libgl1 libglx0 libegl1 libgles2 libglvnd-dev libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev -y \ + && git clone https://github.com/NVlabs/nvdiffrast.git \ + && cd nvdiffrast \ + && pip install --no-cache-dir . \ + && cd .. \ + && rm -rf nvdiffrast diff --git a/docker/scripts/install_tiny_cuda_nn.sh b/docker/scripts/install_tiny_cuda_nn.sh new file mode 100644 index 00000000..96ae5c72 --- /dev/null +++ b/docker/scripts/install_tiny_cuda_nn.sh @@ -0,0 +1,8 @@ +export CMAKE_BUILD_PARALLEL_LEVEL=36 && export MAX_JOBS=36 && export TCNN_CUDA_ARCHITECTURES="50;52;60;61;70;75;80;86" \ + && git clone --recursive https://github.com/nvlabs/tiny-cuda-nn \ + && cd tiny-cuda-nn \ + && git checkout v1.6 \ + && cd bindings/torch \ + && python setup.py install \ + && cd ../../.. \ + && rm -rf tiny-cuda-nn diff --git a/docs/source/conf.py b/docs/source/conf.py index eb9e9955..3e4e2044 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -13,7 +13,7 @@ import os import sys -import sphinx_book_theme +# import sphinx_book_theme sys.path.insert(0, os.path.abspath('../../')) # -- Project information -----------------------------------------------------