Ubuntu 22.04 LTS 源码编译安装 PyTorch

本文详细描述了解决PyTorch源码编译过程中遇到的问题,如依赖库版本不匹配、编译错误和提高编译速度的方法,包括使用CCache缓存、离线安装torchvision以及调试设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 经常失败,说明还是网络的问题。如果你的网络不行,可以参考git clone —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

有一种说法:在安装环境的时候可以使用 TORCH_CUDA_ARCH_LIST=“7.5” 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

安装 torchvision

PyTorch 和 torchvision 的版本对应 PyTorch Versions

直接安装

问题:编译安装成功后想使用 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}")

编译安装

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

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

pip install pillow==4.1.1

编译pytorch2.0.0+torchvision0.15.0后,在import torchvision后遇到一个报错:

TypeError: 'ABCMeta' object is not subscriptable

应该是pillow版本的问题,或者conda环境里就没有pillow。解决方法:conda install pillow

尝试使用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 正在工作[参考]。

调试

在编译的时候注意加入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目录中

调试方法:

参考资料

### 如何在 Ubuntu 22.04.5 LTS安装 Anaconda #### 准备工作 确保系统已更新至最新状态。可以通过以下命令完成系统的升级操作[^1]: ```bash sudo apt update && sudo apt upgrade -y ``` 下载适用于 Linux 的 Anaconda 安装脚本。访问官方网站获取最新的安装包链接[^3],或者直接使用 `wget` 下载指定版本的安装文件。例如: ```bash wget https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-x86_64.sh ``` 注意:上述 URL 是示例地址,请根据实际需求替换为适合的版本。 赋予下载的 `.sh` 文件可执行权限并启动安装程序: ```bash chmod +x Anaconda3-*.sh ./Anaconda3-*.sh ``` #### 安装过程中的选项设置 在安装过程中会提示是否接受许可协议,输入 `yes` 继续。随后选择安装路径,默认情况下会将其放置于用户的主目录下(如 `/home/<username>/anaconda3`)。完成后会出现询问是否初始化 Conda 环境的选择,建议按照官方指导选择 `yes` 来自动配置环境变量[^2]。 如果选择了不初始化,则需要手动编辑 `~/.bashrc` 或者其他 shell 配置文件,在其中加入如下内容以便每次登录都能加载 conda 路径: ```bash export PATH="/home/$USER/anaconda3/bin:$PATH" ``` 接着重新加载该配置文件使更改生效: ```bash source ~/.bashrc ``` 验证安装成功与否可通过检查 conda 版本来确认: ```bash conda --version ``` 对于更进一步的操作比如创建虚拟环境、管理 Python 库等都可以借助 conda 提供的强大功能实现。 #### 创建 PyTorch 所需虚拟环境 (可选步骤) 为了更好地支持深度学习框架如 PyTorch ,可以新建一个专门用于此目的的独立 python 运行时环境。以下是具体做法之一: ```bash conda create -n pytorch_env python=3.9 conda activate pytorch_env pip install torch torchvision torchaudio ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值