登录服务器后,首先查看下系统版本:cat /proc/version ,我们这个服务器有点特殊是arm版本的,通过nvidia-smi查看服务器显卡配置, 这意味着我们要安装的cuda版本最高不能超过11.4,那么我们这里选择一个比较稳定的版本cuda 11.3。
1. anaconda安装:由于cpu不是intel的,需要安装arm版本的anaconda
那么肯定会问,为什么要安装它呢:
Anaconda是一个打包的集合,官网,它里面预装好了conda、某个版本的python、众多packages、科学计算工具等等。Anaconda支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。
#一般用sh文件安装
wget https://github.com/Archiconda/build-tools/releases/download/0.2.2/Archiconda3-0.2.2-Linux-aarch64.sh
sh Archiconda3-0.2.2-Linux-aarch64.sh
# 添加环境变量
vi ~/.bashrc
export PATH=/home/devuser/anaconda3/bin:$PATH
# 保存退出后:
source ~/.bashrc
2. ARM64平台cuda安装:官网
下载arm64-sbsa版本cuda
# cuda版本号改为nvidia-smi显示的版本号
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_470.129.06_linux_sbsa.run
sh cuda_11.3.0_470.129.06_linux_sbsa.run
# 添加环境变量
vi ~/.bashrc
export PATH=/usr/local/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH
export CUDA_HOME="/usr/local/cuda-11.3:$CUDA_HOME"
source ~/.bashrc
验证cuda安装,nvcc -V,出现cuda信息即表明成功安装
3. 下载如下所示的cudnn:官网根据cuda版本11.3选择cudnn配套版本
# 在cudnn官网选择好版本配套后,选择对应的方式,下载并解压deb包
cudnn-local-repo-ubuntu1804-*_1.0-1_arm64.deb
sudo dpkg -i xxx.deb
# 添加缺少的文件
cp cudnn/include/cudnn* /usr/local/cuda-11.3/include/
cp cudnn/lib/libcudnn* /usr/local/cuda-11.3/lib64/
chmod a+r /usr/local/cuda-11.3/include/cudnn.h
chmod a+r /usr/local/cuda-11.3/lib64/libcudnn*
4. 安装gpu-pytorch
为了使创建的多个虚拟环境间能实现资源隔离和版本不冲突,anaconda自带base环境,这个base环境可以认为是基础包的集合,意味着创建的虚拟环境是可以共享这些基础包的。
conda create -n pytorch python=3.8 (创建虚拟环境pytorch)
Step1:下载源码
ARM版本的gpu-pytorch需要手动cmake编译,那么没办法,需要github上下载代码。大概等15min
# 注意git clone的时候最好写明版本
git clone --recursive --branch v1.10.0 https://github.com/pytorch/pytorch.git
cd pytorch
# 下载第三方依赖
git submodule update --init --recursive
Step2:安装依赖(可忽略)
# 这一步要注意依赖的版本,先看下requirements.txt的版本有没有pytorch,
# 否则会直接通过pip安装成cpu版本的pytorch
pip3 install -U setuptools
pip3 install -r requirements.txt
Step3:源码编译,直到最后有cmake编译完出现100%的字样
# 添加环境变量
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
source ~/.bashrc
python3 setup.py build --cmake-only
python3 setup.py install
Step4:安装torchvision,torchaudio,见版本配套关系
安装 torchvision 时避免更新 pytorch 到最新版本。
# 另外,如果安装依赖库的时间过长,可以指定 pypi 源
pip install 安装包==指定版本 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torchvision==0.11.1 --no-deps
pip install torchaudio==0.10.0 --no-deps
5. 测试安装的pytorch和cuda,cudnn是否可用:
python3
print(torch.__version__) # 查看pytorch版本
print(torch.cuda.is_available()) # 查看cuda是否可用 True
print(torch.cuda.device_count()) # 查看cuda可用的数量
print(torch.version.cuda) # 查看cuda版本
from torch.backends import cudnn
print(cudnn.is_available()) # 查看cudnn版本 True
# <<< conda initialize <<<
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PiATH}}
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
7. FAQ
1)conda基本命令:
# 创建虚拟环境
conda create -n 虚拟环境名称 python=3.8
# 删除虚拟环境
conda env remove --name 虚拟环境名称
# 查看所安装的依赖包版本
pip list
# 查看pip安装的依赖包版本
conda list|grep numpy
2)如果是源码安装的Pytorch,要卸载怎么办:
pip uninstall torch
python setup.py clean
同时卸载torchvision,torchaudio:
pip uninstall torchvision
pip uninstall torchaudio
在虚拟环境上通过pip安装的包在哪里:
(BEVFormer) panxiying@ubuntu:~/Downloads$ pip -V
pip 22.2.2 from /home/panxiying/.conda/envs/BEVFormer/lib/python3.8/site-packages/pip (python 3.8)
3)如果遇到问题怎么办:
一般谷歌/知乎搜索报错点,都能找到解决办法,以下是本人遇到的问题~~
1.解决pip找不到
export PATH="/usr/local/bin:$PATH"
2.解决cuda和pytorch版本不配套
cmake/Dependencies.cmake:43 (include)
CMakeLists.txt:692 (include)
pytorch1.12---》pytorch1.10
3.解决settools版本过低
pip uninstall setuptools
pip install setuptools==59.5.0
4.解决nccv -V没找到
export PATH=/usr/local/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH
4) 如果远端服务器因为网络无法安装依赖,怎么办:
# Colab制作arm的pytorch, 取包路径 https://drive.google.com/drive/my-drive
https://colab.research.google.com/drive/#scrollTo=mFvs-1htHYcr
# git下载仓
from google.colab import drive
drive.mount('/content/drive') # 资源都放这个路径下
!rm -rf /content/pytorch1.10.0 && rm -rf /content/pytorch1.10.0.zip
%cd /content
!git clone --recursive --branch v1.10.0 https://github.com/pytorch/pytorch.git
%cd /content/pytorch/
!git submodule update --init --recursive --jobs 0
# 打包
!zip -r /content/pytorch1.10.0.zip /content/pytorch/
%cd ..
!cp ./pytorch1.10.0.zip /content/drive/MyDrive/