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文件,然后到第二步。

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

  2. ARG CMAKE_VERSION=3.28.3

  3. ARG NUM_JOBS=8

  4. ENV DEBIAN_FRONTEND noninteractive

  5. # Install package dependencies

  6. RUN apt-get update && \

  7. apt-get install -y --no-install-recommends \

  8. build-essential \

  9. software-properties-common \

  10. autoconf \

  11. automake \

  12. libtool \

  13. libssl-dev \

  14. pkg-config \

  15. ca-certificates \

  16. wget \

  17. git \

  18. curl \

  19. libjpeg-dev \

  20. libpng-dev \

  21. language-pack-en \

  22. locales \

  23. locales-all \

  24. python3 \

  25. python3-py \

  26. python3-dev \

  27. python3-pip \

  28. python3-numpy \

  29. python3-pytest \

  30. python3-setuptools \

  31. libprotobuf-dev \

  32. protobuf-compiler \

  33. zlib1g-dev \

  34. swig \

  35. vim \

  36. gdb \

  37. valgrind && \

  38. apt-get clean

  39. RUN cd /usr/local/bin && \

  40. ln -s /usr/bin/python3 python && \

  41. ln -s /usr/bin/pip3 pip && \

  42. pip install --upgrade pip setuptools wheel

  43. # System locale

  44. # Important for UTF-8

  45. ENV LC_ALL en_US.UTF-8

  46. ENV LANG en_US.UTF-8

  47. ENV LANGUAGE en_US.UTF-8

  48. # Install CMake

  49. RUN cd /tmp && \

  50. wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz && \

  51. tar xzf cmake-${CMAKE_VERSION}.tar.gz && \

  52. cd cmake-${CMAKE_VERSION} && \

  53. ./bootstrap && \

  54. make -j${NUM_JOBS} && \

  55. make install && \

  56. rm -rf /tmp/*

  57. RUN cd /tmp && \

  58. wget https://raw.githubusercontent.com/pytorch/pytorch/master/requirements.txt && \

  59. pip install -r requirements.txt

  60. RUN pip install lintrunner

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

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

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

 
  1. CMAKE_VERSION=3.25.1

  2. 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后,建议创建一个虚拟环境,并进入这个环境

 
  1. conda create -n torch_build

  2. conda activate torch_build

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

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

 
  1. git submodule sync

  2. git submodule update --init --recursive

 
  1. conda install cmake ninja

  2. pip install -r requirements.txt

  3. conda install intel::mkl-static intel::mkl-include

  4. conda install -c pytorch magma-cuda*

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

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

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

 
  1. git submodule sync

  2. 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和前面的参数应该是作为同一行输入执行。不能分开执行。

最后编译成功后,测试。

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

 
  1. python setup.py clean

  2. # 只要编译失败了,请执行这条语句,然后解决问题后,重新执行编译命令

 
  1. [7190/8720] Building CXX object

  2. caffe2/CMakeFiles/torch_cpu.dir/__/torch/csrc/autograd/generated/VariableType_0.cpp.o FAILED:

  3. caffe2/CMakeFiles/torch_cpu.dir/__/torch/csrc/autograd/generated/VariableType_0.cpp.o

  4. # 原因:爆内存了,需要设置MAX_JOBS更小

 
  1. No module named ‘yaml‘ 以及其它包

  2. # 解决方法,正常安装就行了,比如conda install yaml

 
  1. libstdc++.so.6: version ‘GLIBCXX_3.4.30‘ not found 

  2. # 解决方法

  3. 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

 



2024 最新PyTorch源码编译流程和踩坑记录,PyTorch build from source_编译pytorch-CSDN博客 

  • 26
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值