2024 最新PyTorch源码编译流程和踩坑记录,PyTorch build from source

当你搜到这篇文章的时候,我就知道被折磨的不止我一个人。

注意:

如果需要编译GPU版本的Pytorch,需要配置Cuda。

本次编译环境是linux Ubuntu22.04,windows和mac编译主要流程是一样的,可以看官网的流程。https://github.com/pytorch/pytorch?tab=readme-ov-file#from-source

本次编译是在docker上实现的,使用的是Build and Develop PyTorch - Lei Mao's Log Book作者提供的Dockerfile,因为这个配置好了cuda环境和Cmake,以及build pytorch所需要的依赖包。

注意,该版本的cuda镜像是

nvcr.io/nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04

请确保你的GPU是否支持这个版本。

请确保你的环境支持Docker。

第一步:创建Dockerfile

在你的工作目录下,新建一个torch-build.Dockerfile文件,torch-build名字可以随便取,保证Dockerfile后缀名正确。然后将下面的内容写入torch-build.Dockerfile文件,然后到第二步。

FROM nvcr.io/nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04

ARG CMAKE_VERSION=3.28.3
ARG NUM_JOBS=8

ENV DEBIAN_FRONTEND noninteractive

# Install package dependencies
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        build-essential \
        software-properties-common \
        autoconf \
        automake \
        libtool \
        libssl-dev \
        pkg-config \
        ca-certificates \
        wget \
        git \
        curl \
        libjpeg-dev \
        libpng-dev \
        language-pack-en \
        locales \
        locales-all \
        python3 \
        python3-py \
        python3-dev \
        python3-pip \
        python3-numpy \
        python3-pytest \
        python3-setuptools \
        libprotobuf-dev \
        protobuf-compiler \
        zlib1g-dev \
        swig \
        vim \
        gdb \
        valgrind && \
    apt-get clean

RUN cd /usr/local/bin && \
    ln -s /usr/bin/python3 python && \
    ln -s /usr/bin/pip3 pip && \
    pip install --upgrade pip setuptools wheel

# System locale
# Important for UTF-8
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

# Install CMake
RUN cd /tmp && \
    wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz && \
    tar xzf cmake-${CMAKE_VERSION}.tar.gz && \
    cd cmake-${CMAKE_VERSION} && \
    ./bootstrap && \
    make -j${NUM_JOBS} && \
    make install && \
    rm -rf /tmp/*

RUN cd /tmp && \
    wget https://raw.githubusercontent.com/pytorch/pytorch/master/requirements.txt && \
    pip install -r requirements.txt

RUN pip install lintrunner

第二步:根据Dockerfile创建docker镜像

使用的Cmake是3.25.1,你可以指定你想要的版本。

执行下面两条命令,开始创建docker镜像。

CMAKE_VERSION=3.25.1
docker build -f torch-build.Dockerfile --build-arg CMAKE_VERSION=${CMAKE_VERSION} --tag=torch-build:0.0.1 .

第一步和第二步比较耗时,请注意其中是否有报错,如果有报错建议删除重来,期间需要良好的网络,可以考虑给Ubuntu换源。

Ubuntu换源参考连接:https://www.cnblogs.com/dier-gaohe/p/17379705.html

第三步:下载Pytorch的源码

第三步,我们需要下载Pytorch的源码,这一步非常重要,我编译失败了好几次,发现Pytorch的源码下载是影响整个流程的。

在你的工作目录下面,创建一个空文件夹。

通过下面的命令下载Pytorch以及所需要的第三方插件,但这个过程会反复失败,问题就是github是境外的原因,即使挂了梯子,依然会反复失败,只能看运气下载成功,因为所有文件大小差不多1~2G,所以全看你的网络情况。

git clone --recursive https://github.com/pytorch/pytorch

解决方法有很多,可以参考下面,主要是保证Pytorch的主体代码下载下来就行了。关于子模块也就是pytorch/third_party的内容可以后续再下载。

【Pytorch下载】两行代码从源头上快速解决github clone速度慢问题(包括子模块--recursive)-CSDN博客

或者,一直重复上面的下载命令,多试几次,没准就成功了。

第四步:创建Docker容器

在你的工作目录下,执行这条命令。因为我们是将pytorch源代码挂载到docker容器里面,所以你应该在上一级目录执行。

docker run -it --gpus all -v $(pwd):/mnt torch-build:0.0.1

执行成功后,会直接进入到docker容器里面,并看到cuda版本信息输出。

接下来就是配置Conda,官方推荐使用Conda,而我反复折腾了几次,发现确实使用Conda好用。

所以按照下面的链接,安装Conda

Ubuntu 22.04上安装Anaconda,及 conda 的基础使用_ubuntu22安装conda-CSDN博客

第五步:安装依赖包

安装好Conda后,建议创建一个虚拟环境,并进入这个环境

conda create -n torch_build
conda activate torch_build

进入torch_build后,需要安装一些官网推荐的依赖包,我这里是linux安装,其它系统不一样,请参考官方文件。

请进入pytorch文件夹下面,执行以下命令

git submodule sync
git submodule update --init --recursive
conda install cmake ninja
pip install -r requirements.txt
conda install intel::mkl-static intel::mkl-include
conda install -c pytorch magma-cuda*

这几步命令要求安装过程中,没有报错或者中断,不然可能影响后面的编译。如果出现了报错或者中断,建议重新创建虚拟环境,重新执行。

然后执行下面的代码,这两步主要是检测之前下载pytorch源码的文件是否完备。特别是子模块。

但是这里有一个坑点:就是由于网络原因,导致只下载了一个空文件夹,但是这两条命令也能检查通过,到最后编译源码的时候,又会提示你找不到子模块的代码。比如提示你pytorch/third_party/foxi有问题。那么你就需要进入这个文件夹 删除foxi文件夹。然后重新执行下面的两条命令。 这个过程可能重复多次,取决于你前面下载pytorch时的网络质量。

git submodule sync
git submodule update --init --recursive

 第六步:开始编译PyTorch

执行这条命令。注意,你应该还是在pytorch源代码这个路径下面。

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}

然后执行,其中MAX_JOBS是并行编译,如果你机器性能不好,建议设置为1,不然可能编译到最后的时候,容易爆内存,然后重新来过.....我的环境是16G内存,CPU是13th Gen Intel(R) Core(TM) i9-13900H,基本上设置MAX_JOBS=4差不多能把内存占满。

MAX_JOBS=4 USE_DISTRIBUTED=0 python setup.py develop

python setup.py develop 前面还可以跟很多参数,取决你的编译需要,比如你要Debug,测试等,可能就需要执行下面,到底需要参数,你可以查看setup.py,有详细解释。默认就上面的就行了。

MAX_JOBS=4 DEBUG=1 USE_DISTRIBUTED=0 USE_CPP_CODE_COVERAGE=1 BUILD_TEST=1 CMAKE_BUILD_TYPE=Debug python setup.py develop

 坑点: python setup.py develop和前面的参数应该是作为同一行输入执行。不能分开执行。

最后编译成功后,测试。

运气好的应该一遍就能编译好,但一般都是不可能的,所以下面记录了我遇到的各种坑:

python setup.py clean
# 只要编译失败了,请执行这条语句,然后解决问题后,重新执行编译命令
[7190/8720] Building CXX object 
caffe2/CMakeFiles/torch_cpu.dir/__/torch/csrc/autograd/generated/VariableType_0.cpp.o FAILED: 
caffe2/CMakeFiles/torch_cpu.dir/__/torch/csrc/autograd/generated/VariableType_0.cpp.o 
# 原因:爆内存了,需要设置MAX_JOBS更小
No module named ‘yaml‘ 以及其它包
# 解决方法,正常安装就行了,比如conda install yaml
libstdc++.so.6: version ‘GLIBCXX_3.4.30‘ not found 
# 解决方法
https://blog.csdn.net/qq_39206732/article/details/135560935?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-135560935-blog-129650003.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-135560935-blog-129650003.235%5Ev43%5Epc_blog_bottom_relevance_base9

 

  • 34
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mask rcnn pytorch源码是一个用于目标检测和实例分割的深度学习模型的实现。其中包含了一些关键的文件和类来构建网络和实现相关功能。 在 Faster R-CNN 中,首次提出了 RPN 网络,该网络用于生成目标检测任务所需的候选区域框。在 MaskrcnnBenchmark 中,关于 RPN 网络的定义位于 ./maskrcnn_benchmark/modeling/rpn/ 文件夹中。这个文件夹包含以下四个文件:rpn.py、anchor_generator.py、inference.py、loss.py。在 class GeneralizedRCNN(nn.Module) 类中,通过 self.rpn = build_rpn(cfg) 函数来创建 RPN 网络,该函数位于 ./maskrcnn_benchmark/modeling/rpn/rpn.py 文件中。 在 rpn.py 文件中,有 build_fpn(cfg) 函数返回一个 RPNModule 的实例。make_anchor_generator() 函数是用来定义 RPN 网络默认的 anchor 的面积大小、高宽比和 feature map 采用的 stride,还有剪枝功能的设置。 需要注意的是,在最新版本的实现中,存在一些错误和不足,不适合用作理解 Mask R-CNN 架构的资源。因此,对于深入研究该源码,建议参考更可靠的资源或最新版本的实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【pytorch】Mask-RCNN官方源码剖析(Ⅲ)](https://blog.csdn.net/qq_43348528/article/details/107556259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Mask RCNN架构的PyTorch实现-Python开发](https://download.csdn.net/download/weixin_42098830/19060631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值