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 经常失败,说明还是网络的问题。如果你的网络不行,可以参考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操作系统上安装PyTorch深度学习框架 #### 准备工作 为了确保顺利安装PyTorch,建议先更新系统并安装必要的依赖项。可以通过执行以下命令来实现: ```bash sudo apt update && sudo apt upgrade -y sudo apt install build-essential cmake git libssl-dev libffi-dev python3-pip python3-dev -y ``` 这些操作能够保证系统的软件包是最新的,并且安装编译CUDA扩展所需的工具链[^4]。 #### 查看显卡信息及安装NVIDIA驱动 确认计算机配备有支持CUDA的NVIDIA GPU非常重要。通过运行`lspci | grep VGA`可查看显卡型号;而要获取更详细的GPU信息,则可以使用`nvidia-smi`命令。然而在此之前,需先正确安装对应的NVIDIA驱动程序。对于Ubuntu 20.04而言,推荐采用官方提供的`.run`文件方式进行安装,或者借助APT仓库简化流程。具体步骤如下所示: 1. 添加NVIDIA APT源; 2. 使用`apt-get`命令安装最新稳定版驱动; 3. 完成后重启机器使更改生效[^1]。 #### 安装Anaconda管理Python环境 考虑到不同项目可能依赖不同的库版本,因此强烈建议创建独立的虚拟环境来进行实验。Anaconda是一个广泛使用的科学计算平台,它自带Conda作为强大的包管理和环境管理系统。可以直接从官方网站下载适用于Linux的Anaconda或Miniconda安装脚本,之后依照提示完成本地部署即可。 #### 配置CUDA与cuDNN 当准备就绪后,下一步便是集成CUDA和cuDNN至现有环境中。这一步骤同样可通过多种途径达成——既可以手动解压预构建二进制文件到指定路径下,也能依靠Conda渠道一键搞定。鉴于后者更为便捷高效,这里优先考虑这种方法: ```bash conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch ``` 上述命令会自动拉取相匹配版本的CUDA Toolkit连同PyTorch一起安装下来。 #### 测试PyTorch是否可用 最后但同样重要的是验证整个设置过程无误。打开一个新的终端窗口(有时旧实例中的变动不会立即反映出来),尝试导入PyTorch模块并打印当前设备名称以检验能否识别出GPU资源: ```python import torch print(torch.cuda.is_available()) print(torch.version.cuda) ``` 如果一切正常的话,应该能看到类似于下面的结果: ``` True '11.3' ``` 这意味着已经成功启用了基于GPU加速的支持!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值