Ubuntu 22.04 LTS 源码编译安装 PyTorch

pytorch官方

过程记录

略过了创建虚拟环境、安装依赖和包等步骤,和 官方 提供的方法一样。

1、下载 PyTorch v1.13.1 源码包。

git clone -b v1.13.1 https://github.com/pytorch/pytorch torch_1.13.1

2、进入源码包获取被动依赖代码。

cd torch_1.13.1/
# git checkout v1.10.1 # 举个例子,切换到你想要的版本分支
git submodule sync
git submodule update --init --recursive

如果 git submodule update --init --recursive 经常失败,说明还是网络的问题。

3、安装 PyTorch。

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"} #导入conda路径
python setup.py install #编译安装

轻便安装:

USE_DISTRIBUTED=0 USE_MKLDNN=0 BUILD_TEST=0 USE_FBGEMM=0 USE_NNPACK=0 USE_QNNPACK=0 USE_XNNPACK=0 python setup.py install

重新编译

pip uninstall torch
python setup.py clean # 清除编译结果

参考:Python 清理 setup.py 中的构建目录

问题解决

1)第一次尝试,报错

Building wheel torch-1.13.0a0+git49444c3
-- Building version 1.13.0a0+git49444c3

……

-- Found CUDNN: /usr/local/cuda-11.8/lib64/libcudnn.so  
-- Found cuDNN: v?  (include: /usr/local/cuda-11.8/include, library: /usr/local/cuda-11.8/lib64/libcudnn.so)
CMake Error at cmake/public/cuda.cmake:185 (message):
  PyTorch requires cuDNN 7 and above.
Call Stack (most recent call first):
  cmake/Dependencies.cmake:43 (include)
  CMakeLists.txt:722 (include)

-- Configuring incomplete, errors occurred!

可能的问题:路径 /usr/local/cuda-11.8/include/ 里没有 cudnn_version.h 文件。

  • locate cudnn_version.h 找到 cudnn_version.h 的位置 /usr/include/cudnn_version.h
  • sudo cp /usr/include/cudnn_version.h /usr/local/cuda-11.8/include/ 复制

2)安装后,在 import torch 时遇到一个报错 /lib/libstdc++.so.6: version ‘GLIBCXX_3.4.30’ not found,可能是之前修改过 gcc 的版本导致的,解决方案:anaconda3/lib/libstdc++.so.6: version `GLIBCXX_3.4.*‘ not found 问题处理

find / -name "libstdc++.so.6*"
cd /home/username/.conda/envs/torch/lib
ln -s -f /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30  libstdc++.so.6

尝试提高编译速度

尝试1:使用CCache

ccache[参考] 缓存了编译结果,如果文件没有变化,下次编译时可以直接使用缓存。

在编译 PyTorch 之前,需要安装 ccache:conda install ccache

默认情况下,ccache 的缓存大小可能过小。可以通过如下命令增加缓存大小:

# 设置缓存的最大大小为 25 GiB。如果缓存超过此大小,ccache 将删除一些旧的缓存文件。
ccache -M 25Gi  # -M 0 表示不限制大小
# 设置缓存文件数量为无限制
ccache -F 0

缓存目录为 ~/.ccache,配置文件为 ~/.ccache/ccache.conf

为了验证 ccache 是否正常工作,可以连续两次干净地构建 PyTorch,第二次构建应该比第一次快得多。如果没有明显变快,可以检查build/CMakeCache.txt文件中的 CMAKE_<LANG>_COMPILER_LAUNCHER 规则(<LANG> 可以是 C、CXX 或 CUDA)。这些变量应该包含 ccache,例如:

// CXX 编译器启动器
CMAKE_CXX_COMPILER_LAUNCHER:STRING=/usr/bin/ccache

如果这些变量没有正确设置,可以在运行 setup.py 之前在命令行中定义它们(这里还可以[参考]):

# 这几行命令将告诉 CMake 使用 ccache 作为编译器启动器,从而启用 ccache 缓存功能,加速编译过程。
export CMAKE_C_COMPILER_LAUNCHER=ccache
export CMAKE_CXX_COMPILER_LAUNCHER=ccache
export CMAKE_CUDA_COMPILER_LAUNCHER=ccache
python setup.py develop

使用ccache -s命令查看 ccache 是否真的在工作。在第二次和所有后续编译中,cache hit值应该增加,从而表明 ccache 正在工作[参考]。

安装 torchvision

PyTorch 和 torchvision 的版本对应 PyTorch Versions

方式 1

问题:编译安装成功后想使用 torchvision,发现直接 conda install torchvision 会附带安装一个 pytorch,导致不能正常使用。

解决方案:离线安装 torchvision,且不安装任何依赖项。

1、在 这里 查找 pytorch 对应的 torchvision 的版本,因为我编译安装的 pytorch 是 v1.13.1,所以我需要安装 torchvision 0.14.1。

2、在 这里 查找并下载 torchvision,我下载的是 cu117/torchvision-0.14.1%2Bcu117-cp38-cp38-linux_x86_64.whl。

3、在虚拟环境中安装 pillow 包,conda install pillow

4、在虚拟环境中安装 torchvision 包,pip install --no-deps 文件位置/torchvision-0.14.1+cu117-cp38-cp38-linux_x86_64.whl,这里一定要加 --no-deps

关于 --no-deps,参考:python -m pip install [package] --no-deps

5、目前在 import torchvision 时,会出现下面的警告,暂时没解决。查了一下,应该是 cuda、cudnn、torch 这三者和 torchvision 版本的问题。测试了一下,不影响使用,先搁置这个问题。

.../lib/python3.8/site-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: libtorch_cuda_cu.so: cannot open shared object file: No such file or directory
  warn(f"Failed to load image Python extension: {e}")

方式 2

参考:CUDA11.2环境上MXNet源码和pytorch源码编译

编译安装 torchvision v0.8.0-rc1 前,先在虚拟环境中装 pillow 4.1.1

pip install pillow==4.1.1

调试

在编译的时候注意加入DEBUG信息,这里在python命令前面加DEBUG=1的环境变量,相当于GCC中的-g -O0,保留调试信息。

DEBUG=1 USE_DISTRIBUTED=0 USE_MKLDNN=0 BUILD_TEST=0 USE_FBGEMM=0 USE_NNPACK=0 USE_QNNPACK=0 USE_XNNPACK=0 python setup.py develop

编译命令的前面是一些编译选项。这些编译选项的意义以及其他的可选项可查看 setup.py 文件开头的注释部分,写的很清楚。

python setup.py developpython setup.py install是两种不同的安装方式。

  • develop选项会将编译好的pytorch安装到当前的源码根目录下。如果我们的修改只涉及 Python 文件部分,这个模式很有用。
  • install选项会将编译好的pytroch安装到python的site-package目录中

参考资料

安装参考

third_party 不能完全下载

如果你的网络不行,还可以参考下面的内容,虽然我没这样尝试成功过。

关于pytorch编译

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值