使用官方Dockerfile构建PyTorch源码镜像失败求助
问题
尝试构建可用于修改PyTorch的Docker开发环境镜像,使用仓库自带Dockerfile,执行步骤如下:
git clone --recursive https://github.com/pytorch/pytorchcd pytorchDOCKER_BUILDKIT=1 docker build -t pytorchtest .
构建时出现错误:CMake执行C++源文件测试HAS_WERROR_CAST_FUNCTION_TYPE失败,cc1plus报错-Werror=cast-function-type: no option -Wcast-function-type,且无法获取镜像构建临时文件系统中的错误日志。疑惑稳定版本镜像构建为何失败,是否操作有误?
使用的Dockerfile内容:
# syntax = docker/dockerfile:experimental # # NOTE: To build this you will need a docker version > 18.06 with # experimental enabled and DOCKER_BUILDKIT=1 # # If you do not use buildkit you are not going to have a good time # # For reference: # https://docs.docker.com/develop/develop-images/build_enhancements/ ARG BASE_IMAGE=ubuntu:18.04 ARG PYTHON_VERSION=3.8 FROM ${BASE_IMAGE} as dev-base RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ ccache \ # cmake=3.10.2-1ubuntu2.18.04.2 \ cmake \ curl \ git \ libjpeg-dev \ libpng-dev && \ rm -rf /var/lib/apt/lists/* RUN /usr/sbin/update-ccache-symlinks RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache ENV PATH /opt/conda/bin:$PATH FROM dev-base as conda ARG PYTHON_VERSION=3.8 # Automatically set by buildx ARG TARGETPLATFORM # translating Docker's TARGETPLATFORM into miniconda arches RUN case ${TARGETPLATFORM} in \ "linux/arm64") MINICONDA_ARCH=aarch64 ;; \ *) MINICONDA_ARCH=x86_64 ;; \ esac && \ curl -fsSL -v -o ~/miniconda.sh -O "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-${MINICONDA_ARCH}.sh" COPY requirements.txt . RUN chmod +x ~/miniconda.sh && \ ~/miniconda.sh -b -p /opt/conda && \ rm ~/miniconda.sh && \ /opt/conda/bin/conda install -y python=${PYTHON_VERSION} cmake conda-build pyyaml numpy ipython && \ /opt/conda/bin/python -mpip install -r requirements.txt && \ /opt/conda/bin/conda clean -ya FROM dev-base as submodule-update WORKDIR /opt/pytorch COPY . . RUN git submodule update --init --recursive --jobs 0 FROM conda as build WORKDIR /opt/pytorch COPY --from=conda /opt/conda /opt/conda COPY --from=submodule-update /opt/pytorch /opt/pytorch RUN --mount=type=cache,target=/opt/ccache \ TORCH_CUDA_ARCH_LIST="3.5 5.2 6.0 6.1 7.0+PTX 8.0" TORCH_NVCC_FLAGS="-Xfatbin -compress-all" \ CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \ python setup.py install || cat /opt/pytorch/build/CMakeFiles/CMakeError.log
解决方案
1. 解决编译选项不兼容问题
错误根源是Ubuntu 18.04默认的GCC 7.5.0不支持-Wcast-function-type编译选项(该选项在GCC 8及以上版本才引入),PyTorch的CMake测试启用该选项导致编译失败。修改dev-base阶段,升级编译器:
FROM ${BASE_IMAGE} as dev-base RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ ccache \ gcc-8 \ g++-8 \ cmake \ curl \ git \ libjpeg-dev \ libpng-dev && \ rm -rf /var/lib/apt/lists/* && \ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 --slave /usr/bin/g++ g++ /usr/bin/g++-8
2. 修复错误日志无法查看的问题
- 构建时添加
--progress=plain参数,禁用BuildKit进度条,直接输出完整日志:DOCKER_BUILDKIT=1 docker build --progress=plain -t pytorchtest . - 若构建失败,找到最后一个成功的镜像层,运行临时容器查看日志:
进入容器后查看docker run -it <最后成功的镜像ID> /bin/bash/opt/pytorch/build/CMakeFiles/CMakeError.log
3. 优化基础镜像版本(可选)
如果使用PyTorch较新的稳定版本,建议直接将基础镜像切换为Ubuntu 20.04及以上版本,其默认GCC版本更高,无需手动升级编译器:
修改Dockerfile开头的参数:
ARG BASE_IMAGE=ubuntu:20.04
内容的提问来源于stack exchange,提问作者corazza
相关产品推荐
相关产品推荐

