You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用官方Dockerfile构建PyTorch源码镜像失败求助

问题

尝试构建可用于修改PyTorch的Docker开发环境镜像,使用仓库自带Dockerfile,执行步骤如下:

  • git clone --recursive https://github.com/pytorch/pytorch
  • cd pytorch
  • DOCKER_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:35:25