非 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