目錄
- 一、安裝CUDA和cudnn
- 1.1、下載CUDA驅動
- 1.2、安裝CUDA驅動
- 1.3、配置環境變量
- 1.4、安裝cudnn
- 1.5、安裝magma-cuda
- 二、安裝gcc編譯器
- 三、安裝CMake
- 四、安裝NCCL
- 五、編譯安裝Pytorch
- 5.1、前提準備
- 5.2、下載pytorch源碼
- 5.3、配置環境變量
- 5.4、Pytorch編譯安裝
- 5.5、測試Pytorch
- 特別鳴謝以下博客
最近拿到一臺昇騰aarch64服務器,顯卡為A100,非常難得,但是與平常配置環境不同,服務器存在三大難題:
- 由于安全控制,服務器本身不能訪問外網;
- 服務器本身為ARM架構(aarch64),網上所有鏡像源的ARM版本Pytorch安裝包均為CPU版,無法使用CUDA;
- 沒有管理員權限,只拿到非Root用戶;
在經過了6*12+小時的不斷實踐、試錯、排錯、詢問大佬、尋找解決方案、重頭來過等等過程后,總結了一套在昇騰aarch64服務器編譯安裝支持GPU的Pytorch的解決方案,記錄在此。
編譯安裝Pytorch需要極高的耐心和較強的動手能力,在動手之前,你還需要具備以下條件
- 熟練操作一種ssh工具,如MobaXtem,能夠通過ssh連接服務器,能讀懂Linux系統基本終端命令;
- 登錄的服務器節點具備顯卡;
- 具備訪問某些網站的能力;
- 一顆勇敢的心。
一、安裝CUDA和cudnn
1.1、下載CUDA驅動
1.首先查看系統的cuda驅動,可以看到這里是12.3版本,所以我們要下載比其低的CUDA,推薦11.8版本。
然后輸出nvcc --verison,如果是command not found說明沒有CUDA驅需要安裝,如果輸出了一大堆型號信息且版本低于上圖的CUDA 驅動版本,說明有CUDA且版本正確,就不要再安裝了,跳到#二步驟。
2.進入CUDA官網,根據系統版本選擇對應的runfile,注意因為是非root用戶,不要用sudo的rpm安裝,只能選擇下載runfile用sh安裝,因為其他版本需要管理員權限才行,(如果不知道機器是什么版本,可以使用uname -m查看架構)
可以使用wget下載:wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux_sbsa.run
如果沒有外網環境用不了wget,使用本機下載這個.run文件后,然后傳到服務器,使用sh安裝。
1.2、安裝CUDA驅動
如果是非root用戶,終端cd進入下載好.run文件的目錄,使用sh安裝:sh cuda_11.8.0_520.61.05_linux_sbsa.run
首先會彈出問你接不接受一個協議,輸入accept:
然后回彈出安裝配置:
↑↓進行上下,←→進行擴展,enter進行選擇和取消,A進行擴展選項
我們取消掉Driver選項,因為機器已經安裝了Driver,只安裝CUDA Toolkit和CUDA documentation:
然后選擇選中Options:
進入Toolkit Options:
/usr這種非用戶目錄的選項都要去掉,我這里全去掉了,另外進入 Change Toolkit Install Path設置cuda安裝到自己具有寫入權限的路徑(一定要是自己的目錄,提前建好文件夾,不然你安不了)
做完Done,回到Options菜單, 更改Library install path (不改不行,它會偷偷寫入/var/lib)
同樣設置安裝到自己具有寫入權限的路徑(同樣一定要是自己的目錄)
配置好以上兩個自定義目錄后,選擇Done,等待片刻會出現一個summary,說明安裝成功:
并且能在文件目錄中看到cuda里的文件都已經安裝好了:
1.3、配置環境變量
安裝好后還不能使用nvcc --V,需要配置環境變量:
輸入 vim ~/.bashrc
進入環境變量,進行更改:
# CUDA
export PATH="/剛剛的路徑/cuda-10.1/bin:$PATH"
export LD_LIBRARY_PATH="/剛剛的路徑/cuda-11.8/lib64:/剛剛的路徑/cuda-11.8/mylib/lib64:$LD_LIBRARY_PATH"
路徑要記得換成自己的:
添加好后,輸入wq!保存,然后刷新環境變量:source ~/.profile
最后測試CUDA,輸入nvcc -V
,如果顯示了版本號,則恭喜大獲成功:
1.4、安裝cudnn
這里參考了:https://blog.csdn.net/YY007H/article/details/134772564
1.5、安裝magma-cuda
magma-cuda主要用于大規模線性代數計算和GPU加速。
首先進入anaconda官方網站:https://anaconda.org/search?q=magma,選擇自己對應CUDA版本的安裝包,如果是CUDA11.8就找magma-cuda118,后面的版本號就是對應的CUDA號:
將其下載后,遷移到Anaconda安裝目錄的pkgs目錄下(因為注conda install 緩存文件路徑一般就是anaconda/pkgs),如果下載的包名是linux-64_開頭的,要重命名把linux-64_去除,以包名開頭,不然conda識別不到。然后使用終端cd到pkgs目錄那里,輸入:
conda install --use-local 包名.tar.bz2
等待片刻,安裝完成后輸入conda list就可以看到包名了,如果看不到包名的話大概率是包名的問題,比如linux-64_magma-cuda118-2.6.1-1.tar.bz2要改成magma-cuda118-2.6.1-1.tar.bz2。
二、安裝gcc編譯器
首先測試下機器有沒有gcc,輸入gcc -v,如果出現以下提示,說明有gcc,該版本為10.3.1,就不用再安裝了,但如果低于10版本則必須升級gcc版本。到#三。
這里可以參考這兩篇博客安裝好相應環境:
https://zhuanlan.zhihu.com/p/659247505(推薦)
https://blog.csdn.net/qq_36393978/article/details/118678521
安裝gcc的時間極其漫長,make的時候一般要至少4個小時,我實測為6小時,所以得提前做好準備。
三、安裝CMake
在編譯安裝Pytorch之前,需要要有CMake編譯構建工具。
CMake是一個開源的跨平臺構建工具,用于管理軟件構建過程中的配置、編譯和安裝。它提供了一個簡潔的跨平臺語言(CMakeLists.txt)來描述構建過程的規則,并通過生成與目標開發環境兼容的構建文件(如Makefile 或 Visual Studio 解決方案)來完成實際的構建過程。
首先進入CMake官網:https://cmake.org/download/,找到符合系統架構的.tar.gz格式的安裝包:
這里選擇了aarch64的3.27.9安裝包,并上傳到服務器進行解壓:
tar -zxvf cmake-3.27.9-linux-aarch64.tar.gz
解壓之后,將解壓后的目錄改名為CMake方便編寫環境變量。
最后一步,打開環境變量文件,如vim ~/.bashrc,在環境變量的最后加入一行即可:
export PATH=你的路徑/cmake/bin:$PATH
然后輸入cmake --version,如果出現版本號說明CMake安裝成功!
四、安裝NCCL
這里完全參考這篇博客:https://blog.csdn.net/Scenery0519/article/details/128081062
其最后一步的環境變量配置寫在~/.bashrc里面就行。
五、編譯安裝Pytorch
5.1、前提準備
在正式編譯安裝Pytorch前,你要確認已經弄好了以下配置:
- CUDA驅動和CUDA:使用nvidia-smi和nvcc -V均有值,并且已經安裝并配置了CUDNN;
2.具備10版本以上的gcc編譯環境:使用gcc -v查看
3.安裝了Anaconda或者Miniconda:輸入conda env list可以看到已有的虛擬環境;
4.安裝好了cmake,即輸入cmake --version可以看到cmake的版本號
5.2、下載pytorch源碼
源碼編譯安裝pytorch前,需要下載完整的pytorch源碼:https://github.com/pytorch/pytorch/tree/v1.10.2-rc1
首先使用git clone --recursive https://github.com/pytorch/pytorch開始克隆源碼,如果碰到網絡問題需要設置git代理:
# git 代理設置,前提是你有代理
# git config --global http.proxy "localhost:端口號"
# git config --global https.proxy "localhost:端口號"
# 代理設置好,下載完后,就可以取消了,否則可能影響你其他操作
# 取消代理
# git config --global --unset http.proxy
# git config --global --unset https.proxy
如果沒有代理,可以通過以下方式進行下載:
# 如果網絡不行可以試著通過鏡像地址 或 gitee 克隆
# 如 git clone --recursive https://hub.yzuu.cf/pytorch/pytorch
# 如 git clone --recursive https://gitee.com/ascend/pytorch.git
在下載好pytorch源碼后,非常重要的一步就是必須遞歸下載其中的鏈接包,這里使用git submodule遞歸下載:
git submodule sync
git submodule update --init --recursive
安裝好后,你的pytorch包一般在2.5GB以上,如果文件大小過小,說明你有些遞歸的包沒下載完整。
5.3、配置環境變量
使用vim ~/.bashrc或者使用mobaXtem的文件樹方式打開環境變量文件,里面的內容配置如下:
- export USE_CUDA=1:用于設置一個名為 USE_CUDA 的環境變量,并將其值設置為 1。可能用于告知后續的腳本或程序,在構建過程中需要使用 CUDA 進行加速或其他相關操作。
- export USE_SYSTEM_NCCL=ON:設置一個環境變量 USE_SYSTEM_NCCL 的值為 ON,表明使用系統中已安裝的 NCCL 庫。
- CUDA 相關的環境變量:設置 CUDA 安裝路徑、相關 bin 和 lib 路徑,同時還指定了 CMake 所使用的 CUDA 編譯器和 CUDNN 庫的路徑。
- CMAKE相關的環境變量:添加了 CMake 可執行文件的路徑到 PATH 環境變量中、設置 CMake 的前綴路徑,用于指定額外的 CMake 模塊和包的位置。
- export MAX_JOBS=4:設置一個名為 MAX_JOBS 的環境變量,并將其值設置為 4,可能用于指定并行編譯任務的最大數量。這個按機器進行設置,太大了容易崩潰。
- GCC相關的環境變量:包括gmp、mpc、mpfr、gcc以在運行時正確鏈接這些庫。
5.4、Pytorch編譯安裝
cd進入Pytorch目錄,采用直接安裝的方式進行安裝:
# 直接安裝
python setup.py install --cmake
# 或者 編譯成 whl安裝文件,編譯成功后在dist文件下面,可通過 pip install torch-xxxx.whl 安裝
python setup.py bdist_wheel --cmake
安裝過程大概在40分鐘到2小時不等:
5.5、測試Pytorch
安裝完成后,激活虛擬環境,然后輸入python,然后輸入一下代碼:
import torch
print(torch.__version__)
print(torch.cuda.is_available())
如果顯示True即大功告成!
如果報錯:NameError: name ‘sympy’ is not defined‘,則需要在conda里再安裝sympy模塊,如果還是報錯,需要安裝mpmath,反正就import torch報啥錯就補上相關的環境就好。
最后可以再運行以下代碼查看顯卡數量和顯卡型號
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))
就能看到torch成功調用到了A100啦!
特別鳴謝以下博客
安裝CUDA:
https://www.cnblogs.com/li-minghao/p/13089405.html
安裝CUDNN:
https://blog.csdn.net/YY007H/article/details/134772564
安裝gcc:
https://blog.csdn.net/qq_36393978/article/details/118678521
https://blog.csdn.net/qq_38308388/article/details/127574517
安裝nccl:https://blog.csdn.net/Scenery0519/article/details/128081062
安裝pytorch:
https://blog.csdn.net/CSDN_ten/article/details/132636688