NVIDIA顯卡硬件技術交流整理
1007
2022-05-29
前情回顧:
Nvidia Jetson Nano B01初體驗(一)?https://bbs.huaweicloud.com/blogs/330158
Nvidia Jetson Nano B01初體驗(二)https://bbs.huaweicloud.com/blogs/330177
Nvidia Jetson Nano B01初體驗(三)https://bbs.huaweicloud.com/blogs/330290
(二十)關于Nano上源碼安裝MindSpore 1.6.0 GPU版本的嘗試終結版
在 第三篇的 “(十七)再次探索:源碼編譯MindSpore 1.6.0”中,張小白曾經嘗試了在Jetson Nano上源碼安裝MindSpore 1.6.0的GPU版本。
最后遇到的錯誤是這個:
在張小白發了問題貼之后,并沒有得到什么解決方案。張小白一度想放棄,但一度又不甘心。
最近張小白趟坑的事情還少嗎?
張小白樹莓派4B踩坑記(一) https://bbs.huaweicloud.com/blogs/330786
張小白DataX踩坑記(一)待發表
哪一個不是困難重重?
于是張小白在MindSpore論壇繼續發了一個試驗貼:
Jetson Nano源碼編譯MindSpore 1.6 GPU版編譯的再次嘗試(連載中)https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=179276
由于張小白只有周末時間會寬裕一點,白天要上班處理公務,但對此又念念不忘,只好晚上繼續探索:
先將現有的mindspore目錄改名
mv mindspore mindspore.old
git clone?https://gitee.com/mindspore/mindspore.git?-b r1.6
修改 ~/mindspore/scripts/build/build_mindspore.sh,加入-DENABLE_GITEE=ON參數
(后面發現第二個改的不對,這是后話,暫且不提)
bash build.sh -e gpu -j12
這就又開始了漫長的編譯歷程。。。
結果編譯到這里報錯:
************ build core *************** -- Configuring done CMake Warning (dev) in mindspore/ccsrc/CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning. CUDA_ARCHITECTURES is empty for target "gpu_cuda_lib". This warning is for project developers. Use -Wno-dev to suppress it.
查了一下,需要在CMakeLists.txt中追加對CUDA_ARCHITECTURES的設置。
根據nvidia的編譯規則:貌似對于Nano設備而言,CUDA_ARCHITECTURES設為50應該比較合適。
所以,張小白做了如下處理
cp CMakeList.txt CMakeList.txt.old
vi CMakeList.txt
增加以下幾行:
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES) set(CMAKE_CUDA_ARCHITECTURES 50 52 53) endif(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
修改后后繼續編譯:
報錯如下:
這個已經跑到了build_mindspore.sh中的第二個改動的地方,顯然這里是不支持 -DENABLE_GITEE參數,所以果斷去掉這個參數,繼續編譯。。。
進入到了有顏色的百分率編譯歷程,這個張小白非常熟悉。。
。。。
。。。
。。。
。。。
照這個速度,如果不出錯的話,估計要編譯一晚上。。。張小白當時決定睡了。。(當時是 2022年02月10日 02:36:43,有論壇發帖為證)
早上7點左右,張小白被鬧鐘驚醒,正在跑編譯代碼的筆記本電腦需要,但是編譯僅僅進度到了 34%。。
無奈只好CTRL-C中斷編譯。。
(好在編譯過的內容下一次再編譯時會跳過去。。。)
特意在家里的電腦上安裝了teamviewer.
然后在帶走的筆記本電腦上也裝了teamviewer.
然后遠程控制家里的電腦,通過家里電腦的mobaxterm連接Nano。
這樣就可以白天間歇性地遠程控制Nano的編譯過程了。
張小白通過teamviewer遠程登錄到Nano上,重新開始編譯:
2022.2.10 19:30,進度74%
2022.2.10 22:26 進度79%
2022.2.11 0:19 ?進度85%
2022.2.11 6:16 97%
2022.2.11 6:23 100%
2022.2.11 6:32 100%
2022.2.11 6:39 100%
2022.2.11 6:46 100%
正當張小白以為“大功告成”的時候,居然報了這樣一個致命的錯誤。
張小白度娘了以下這個錯誤:
說應該是內存資源不足引起的:
盡管在 (三)中( https://bbs.huaweicloud.com/blogs/330290 ),張小白已經擴了4G的虛擬內存:
擴完之后,SWAP空間有了6G左右:
所以張小白一口氣將虛擬內存擴大了16G(變成了18G左右):
然后再開始編譯:
bash build.sh -e gpu -j12
到了 2022.2.12? 0:28,張小白看到編譯還卡在98%一動不動,于是就CTRL-C暫停了編譯:
張小白后面就去忙樹莓派去了。
當然,不死心的張小白開著Nano,采用j4方式重新進行編譯,就把終端一直開在那邊,野蠻生長。
結果到了 2022.2.13 7:09 ,居然有了新的變化:
張小白心想,難道死馬當活馬醫,這里有戲?
2022.2.13 8:05
報了這個錯,張小白卻是很熟悉。
安裝wheel就可以了:
pip3 install wheel --user
再來編譯:bash build.sh -e gpu -j4
。。。
居然編譯成功了!
趕緊將編譯好的whl文件備份一下:
那就開始安裝吧:
python3 -m pip install mindspore_gpu-1.6.0-cp37-cp37m-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
在安裝numpy的時候會比較慢,需要耐心等待:
安裝到scipy的時候也是一樣的慢:
結果到最后:
居然有權限問題。對,那只能安裝在這個用戶下了:
python3 -m pip install mindspore_gpu-1.6.0-cp37-cp37m-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple?--user
好在編譯的時候,它也用到了cache.
那么,常規做法,編輯test.py文件:
import numpy as np from mindspore import Tensor import mindspore.ops as ops import mindspore.context as context context.set_context(device_target="GPU") x = Tensor(np.ones([1,3,3,4]).astype(np.float32)) y = Tensor(np.ones([1,3,3,4]).astype(np.float32)) print(ops.add(x, y))
然后執行看看:
python3 test.py
這就表明mindspore成功地調用到了Nvidia Jetson Nano B01的GPU模塊了!
至此也排除了MindSpore團隊提到了暫不支持ARM GPU版本的問題:
張小白已經將編譯好的安裝包放到了網盤上:https://pan.baidu.com/s/1Eb5tSv-e1z4GNk005wlDSQ?(提取碼:eyxe)
歡迎有Jetson Nano設備的童鞋下載試用!
最后感謝在編譯過程中MindSpore團隊給予的幫助,特別是月月鳥大大的鼓勵,還有姐夫哥的支持。沒有你們,也許張小白堅持不下去,也完成不了這一首發。
至于幾位大大詢問為啥張小白不編譯Lite版本,張小白只能回答:full版本都可以的話,lite版本還怕不支持嗎?(張小白膽戰心驚的回答,卻也可能給自己后續的任務留下了伏筆。。。這是后話,暫且不提。)
撒花!
(全文完,謝謝閱讀)
MindSpore Ubuntu 神經網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。