非 congda 环境 ubuntu 22.04 源码编译安装 pytorch 并初步检查可用性

非 congda 环境 编译安装 pytorch

0, 安装 cuda sdk ,cudnn 及 nccl

按照官网步骤,blacklist需要特别注意

0.1 cuda sdk

0.2 cudnn

0.3 安装nccl

bash 复制代码
git clone --recursive https://github.com/NVIDIA/nccl.git
ls
cd nccl/
make -j src.build
sudo apt install build-essential devscripts debhelper fakeroot
make pkg.debian.build
sudo dpkg -i  build/pkg/deb/libnccl2_2.22.3-1+cuda12.3_amd64.deb 
sudo dpkg -i  build/pkg/deb/libnccl-dev_2.22.3-1+cuda12.3_amd64.deb

注:

cudnn 9.x不需要登陆开发者账户即可 wget 下载,按照官网 类似 cuda sdk 安装方法,wget到如下两个文件:

验证cuda ,这台是个笔记本:

验证cudnn的可用性:

bash 复制代码
cp -r /usr/src/cudnn_samples_v9/  ./tmp/

cd tm/cudnn_samples_v9/

mkdir build

cd build

cmake ..

执行 multiHead...测试:

如果编译上面的示例时,提示找不到 cudnn,这注释掉 top 的 CMakelists.txt 的这一行:

1, 下载 pytorch 源代码

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

cd pytorch

if you are updating an existing checkout

git submodule sync

git submodule update --init --recursive

选定好 源码分支之后,安装 ci依赖:

workspace/pytorch$
$ pip install -r .ci/docker/requirements-ci.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

如果遇到版本冲突,则首选删除以前安装过的 模块: 当时使用 pip install 安装的模块,可以类似这样删除:

pip uninstall numpy

sudo pip install ...的模块,则类似:

sudo pip uninstall numpy

这步最好在编译pytorch 之间就执行,因为会依赖这其中某些包。编译安装 pytorch 之后再改动 模块版本,会带来不兼容或找不到等问题。

2, 安装cmake 3.30

新的pytorch 需要依赖3.27及其以上 cmake

bash 复制代码
$ sudo apt install libssl-dev
$ wget  https://github.com/Kitware/CMake/releases/download/v3.30.3/cmake-3.30.3.tar.gz

$ tar xf v3.30.3/cmake-3.30.3.tar.gz
$ cd cmake-3.30.3/
$ ./bootstrap
$ make -j
$ sudo make install

3, 预备环境

3.1 安装python 包

在非conda 环境,即普通环境中安装依赖包:

bash 复制代码
$ sudo pip install mkl-static mkl-include -i https://pypi.tuna.tsinghua.edu.cn/simple

$ sudo pip  install numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses -i https://pypi.tuna.tsinghua.edu.cn/simple




$ sudo pip install expecttest

$ sudo pip install hypothesis
$ sudo pip install boto3

$ sudo apt install llvm clang

FileCheck:

bash 复制代码
$ sudo apt-get install llvm clang
$ FileCheck-14 --version
$ which FileCheck-14
$ cd /usr/bin/
$ sudo ln -s FileCheck-14 FileCheck

3.2 安装 OpenBLAS

Makefile:

bash 复制代码
all:
	wget https://github.com/OpenMathLib/OpenBLAS/archive/refs/tags/v0.3.27.tar.gz
	tar zxf v0.3.27.tar.gz 
	make -C OpenBLAS-0.3.27 FC=gfortran -j

install:
	make -C OpenBLAS-0.3.27 install
#PREFIX=/opt/OpenBLAS
# PREFIX=../local/

clean:
	-rm -rf ./local/ ./OpenBLAS-0.3.27/ ./v0.3.27.tar.gz

下载编译安装:

bash 复制代码
$ make

$ sudo make install

make 之后会经过几分钟的编译。

ls /opt/OpenBLAS/

4, 编译安装pytorch

4.1 检查 nvcc

检查nvcc是否可以执行:

bash 复制代码
$ nvcc

如果不能执行,则设置 PATH:

bash 复制代码
$ export PATH=/usr/local/cuda/bin:$PATH

4.2 编译release版本的 pytorch 并出错

配置C++

bash 复制代码
$ export _GLIBCXX_USE_CXX11_ABI=1

清理之前的编译并配置

bash 复制代码
$ python setup.py clean
$ python setup.py build --cmake-only

如果系统中同时存在ROCm和cuda 环境,则选择屏蔽 ROCm:

bash 复制代码
$ USE_ROCM=OFF python setup.py build --cmake-only

编译pytorch

bash 复制代码
$ python setup.py install

如果编译成功,则会报安装权限不够:

bash 复制代码
$ sudo python setup.py install

由于编译器错误,产生一个错误:

builtin_xxx

故编译一个 debug版本的

4.3 编译一个 DEBUG版本的pytorch

编译 debug 版本的 pytorch

bash 复制代码
$ export _GLIBCXX_USE_CXX11_ABI=1

$ python setup.py clean

$ USE_ROCM=OFF DEBUG=1  python setup.py build --cmake-only

主要是其中这句要加DEBUG=1:

USE_ROCM=OFF DEBUG=1 python setup.py build --cmake-only

如果为系统内的ROCm编译pytorch,则需使用:

USE_CUDA=OFF DEBUG=1 python setup.py build --cmake-only

如果编译test 测试,需要加 BUILD_TEST=1:

$ BUILD_TEST=1 USE_ROCM=OFF DEBUG=1 python setup.py build --cmake-only

进一步配置:

bash 复制代码
$ ccmake build

\blas

[enter]

默认为MKL,按[enter] 改为OpenBLAS
bash 复制代码
$ ccmake build

#//查找 test
/test

选中前几个benchmark:
[enter] 切换 ON / OFF


[c] config

#//config 成功后执行 generate
[g]


#//退出
[e]

编译:

bash 复制代码
$ DEBUG=1 python setup.py install

安装:

加个 sudo

bash 复制代码
$ DEBUG=1 sudo  python setup.py install

4.4 卸载 pip 安装的pytorch

如果之前安装过pytorch,可以先卸载:

sudo pip uninstall torch

sudo pip uninstall torchvision

4.5 卸载自己编译安装的 pytorch

通过 python setup.py install 安装的系统,可以对安装文件做路径记录,利用这个功能对pytorch 进行卸载。

记录安装目录:

$ sudo python setup.py install  --record ../install_location.txt

卸载删除:

bash 复制代码
$ cd ..
$ cat install_location.txt | sudo xargs rm -rf

5. 验证可用性

5.1 简单验证

打印 torch 版本,并验证cuda gpu的可用:

或者在 terminal中输入:

bash 复制代码
$ python -c "import torch; print(torch.__version__)"
bash 复制代码
$ python -c "import torchvision; print(torchvision.__version__)"

5.2 跑个cusolver test case

bash 复制代码
#//in dir: pytorch$


$ pytest test/test_linalg.py -k "test_cholesky"

用 nvprof 跟一下 调用的cuda kernel,暴露了显卡能力 在 8.0 以下:

bash 复制代码
$ nvprof pytest test/test_linalg.py -k "test_cholesky" 

6.错误解决

6.1 无法 import torch

按照提示执行 python setup.py develop

bash 复制代码
$ sudo  python setup.py develop

6.2 导入测试矩阵时出错

执行

$ python

>>> from torch.testing._internal.common_utils import random_hermitian_pd_matrix

可能会出现一些问题,如果之前开启了 BUILD_TEST=1,那么可能需要解决一些包的依赖问题,参考如下:

bash 复制代码
$ sudo pip uninstall sympy
$ pip uninstall sympy
$ sudo pip install sympy

$ sudo pip install expecttest

$ sudo pip install hypothesis
$ sudo pip install boto3

7, 总结

在重新安装某些关联的 python moudle 后,最好重新编译安装 pytorch:

sudo python setup.py install

相关推荐
FreakStudio33 分钟前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
python·嵌入式·面向对象·电子diy
redcocal2 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
artificiali2 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
RaidenQ2 小时前
2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
图像处理·python·算法·课程设计
花生了什么树~.3 小时前
python基础知识(六)--字典遍历、公共运算符、公共方法、函数、变量分类、参数分类、拆包、引用
开发语言·python
酱香编程,风雨兼程3 小时前
深度学习——基础知识
人工智能·深度学习
Lossya3 小时前
【机器学习】参数学习的基本概念以及贝叶斯网络的参数学习和马尔可夫随机场的参数学习
人工智能·学习·机器学习·贝叶斯网络·马尔科夫随机场·参数学习
Trouvaille ~3 小时前
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
图像处理·python·机器学习·numpy·信号处理·时间序列分析·科学计算
爆更小小刘3 小时前
Python基础语法(3)下
开发语言·python
哪 吒3 小时前
华为OD机试 - 第 K 个字母在原来字符串的索引(Python/JS/C/C++ 2024 E卷 100分)
javascript·python·华为od