博客1:
https://blog.csdn.net/weixin_46969696/article/details/106930043?utm_term=arm%E5%AE%89%E8%A3%85pytorch&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-0-106930043&spm=3001.4430
博客2
https://blog.csdn.net/weixin_39965127/article/details/102686314?utm_term=arm%E5%AE%89%E8%A3%85pytorch&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-1-102686314&spm=3001.4430
要在華為的atlas 200dk上配置一下深度學習的推理環境。
網上編譯好的包不能直接用,要重新開始編譯。
下載pytorch
對系統進行更新
1.sudo apt update && sudo apt upgrade
創建python的虛擬環境,因為這個架構還不支持conda,所以要用venv創建虛擬環境。
2.python3 -m venv pytorch
如果是指定版本的,將python3改為python3.6,python3.7即可。但是要先執行如下代碼。
3.sudo apt-get install python3.6-venv
接下來使用git下載源代碼。
4.git clone --recursive https://github.com/pytorch/pytorch
5.cd pytorch
切換到自己想要的版本,比如V1.0.1
6.git checkout tags/v1.0.1 -b build
7.git submodule update --init --recursive
在編譯pytorch之前,我們還是需要安裝依賴的python包。安裝依賴包:
8.pip install -r requirements.txt
9.設置環境變量
export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1
export NO_NNPACK=1
export NO_QNNPACK=1
也可以使用sudo USE_CUDA=0 USE_MKLDNN=0 USE_QNNPACK=0 USE_NNPACK=0 USE_DISTRIBUTED=0 python3 setup.py build
如果不進行環境變量設置 進行
10.對pytorch進行編譯,這個要很久很久。
python setup.py build
- 1
11.編譯完成后,利用命令進行安裝。
python setup.py install
第二個版本:
方法二就是大家都能想到的直接編譯源代碼,pytorch是用C++寫的,直接在樹莓派上編譯就好了。這個方法的步驟在本站、知乎還有外文網站上都有詳細描述,我參考了幾篇,其實都是大同小異,步驟如下:
- 准備工作:增加交換區的大小到2G
眾所周知,3B+的板只有1G的RAM,親測在編譯torch的時候,內存會爆掉(而且不止一次,無奈只有斷電強制reboot),所以必須通過增加交換區大小來幫助樹莓派在內容不夠用的時候使用閃存空間完成編譯。這一步網上的教程都是修改/etc下的配置文件:
sudo nano /etc/dphs-swapfile
- 1
打開以后,你會看到如下的文件:
# /etc/dphys-swapfile - user settings for dphys-swapfile package # author Neil Franklin, last modification 2010.05.05 # copyright ETH Zuerich Physics Departement # use under either modified/non-advertising BSD or GPL license # this file is sourced with . so full normal sh syntax applies # the default settings are added as commented out CONF_*=* lines # where we want the swapfile to be, this is the default #CONF_SWAPFILE=/var/swap # set size to absolute value, leaving empty (default) then uses computed value # you most likely don't want this, unless you have an special disk situation CONF_SWAPSIZE=100
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
下面還有一部分代碼,為了節省篇幅,我就不在此展示了。這里樹莓派是默認的100Mb的交換空間,我們把它修改成4096,也就是4Gb。最尾有一個最大限制的參數–CONF_MAXSWAP,把它前面的井號標注去掉,並把這個參數也改成4096。其實我一開始設置的是2Gb,因為我是這樣以為的:
網上有人說建議提高到4096也就是4Gb,其實個人測試過程感覺沒有必要,我沒有一直盯着編譯過程的內存使用情況,不過我偶爾瞄了幾眼,記得使用最大的時候,無非也就是在樹莓派自身的內存幾乎被占用的時候,交換空間給出了1800多Mb的空間,所以2Gb的swap是完全足夠的。
但是當后來跑到97%的時候,內存又爆掉了,機器卡死。我已經不記得這是我第幾次通過關掉電源reboot了。所以乖乖地設置4G的swap,並把這篇文章做了修改。然后通過命令行生效剛才的改變:
sudo service dphys-swapfile restart
- 1
這里不同的教程給出的命令行語句是不同的,不管你用哪一個,你可以在真正編譯開始之前top一下看看交換空間變了沒有
為了確保萬無一失,建議重啟一下,我這里是可能由於沒有reboot吧,所以swap空間仍然是100M,編譯的時候爆掉內存,重新開機才看到swap空間增加到2G(記得改4G哦,這里的2G是最后一次爆內存前的版本):
關於top的使用,推薦這一個教程大家可以看一下。這里看到我的Pi只能給出874.5M的內存,重要的事情再說一遍:在編譯前一定確認好有足夠的swap空間,為了穩妥起見用4G、4G、4G。這就是為什么開頭那里我建議用32G或以上的tf卡的原因。
- 安裝依賴的包:
sudo apt-get install libopenblas-dev cython3 libatlas-dev m4 libblas-dev cmake
- 1
其中安裝libblas-dev的時候,會報錯,你按照它的提示安裝libatlas-base-dev這個包就好了。網上有個人也問過這個問題,我是這么回答他的。
跟着下來,配置環境變量,樹莓派不支持GPU:
export NO_CUDA=1 export NO_DISTRIBUTED=1 export NO_MKLDNN=1 export NO_NNPACK=1 export NO_QNNPACK=1
- 1
- 2
- 3
- 4
也可以使用sudo USE_CUDA=0 USE_MKLDNN=0 USE_QNNPACK=0 USE_NNPACK=0 USE_DISTRIBUTED=0 python3 setup.py build
如果不進行環境變量設置 進行
- 所以准備工作做好之后,你可以選擇創建虛擬環境,用來隔離pytorch和其他python的包。這一步是可選的,所以我並沒有這么做。
具體並不麻煩,命令行:
python3 -m venv pytorch
source pytorch/bin/activate
- 1
- 2
- 下載pytorch的源碼:
切換到你喜歡的路徑下,比如新建一個~/pytorch_install的路徑。通過git命令下載:
git clone --recursive https://github.com/pytorch/pytorch
- 1
- 然后編譯pytorch
這一步是最耗費時間的了!!!!!!!也是我非常想吐槽的一個地方。首先cd pytorch
進入git下來的安裝路徑。然后通過命令
python3 setup.py build
- 1
編譯。先說一下編譯時間吧!網上的教程說大概2-4個小時,我呵呵了,我從昨天不到10點開始編譯,編譯到50%多的時候報了一次內存,然后繼續編譯,中間也就耽誤了十幾分鍾的時間吧,然后一直到我晚上六點下班才編譯到70%多。於是我就這么開着,當我今天早上一進辦公室准備開心開心的時候,發現樹莓派又卡死了,屏幕上的時間顯示在早上6點多,進程來到94%,好吧,我的Pi奮戰了一夜還是gg了。我嘗試了一下ssh和vnc(雖然我沒指望它有什么反應),最后還是斷電重啟了。直到現在他還是在編譯,reboot之后從80%多開始繼續編譯,但願不要再出錯了,上帝保佑!
另外在編譯過程中會見到一個報錯:
subprocess.CalledProcessError: Command '['cmake', '--build', '.', '--target', 'install', '--config', 'Release', '--', '-j', '4']' returned non-zero exit status 2.
- 1
這個報錯也是害得我花了好久才解決啊,在這里可以找打答案,原因是編譯caffe2的時候有問題,按照網頁底部說的
git submodule update --remote third_party/protobuf
- 1
就可以繼續正常編譯了。
好了,我就在這里繼續昨天沒完成的記錄了。經過兩天斷斷續續地編譯,終於見到了這樣的編譯結果:
我仿佛感受到了我的樹莓派cpu發着高燒使出吃奶的勁兒終於來到這一步!anyway,這里說no longer necessary to use ‘build’ or 'rebuild’意思就是成功啦,然后是最后一步,網上教程都是這樣的命令:
python3 setup.py install
- 1
這時候,又報了一個小錯,說我沒有權限把torch寫入site-packages文件夾內,這時候我建議你直接開啟根用戶,通過sudo su,如果你沒有特地設置,這一步樹莓派是不要求密碼的。重復上面的命令,這時又報了一個如下的錯誤:
Building wheel torch-1.4.0a0+d403410
-- Building version 1.4.0a0+d403410
Traceback (most recent call last): File "setup.py", line 365, in check_pydep importlib.import_module(importname) File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked ModuleNotFoundError: No module named 'yaml' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "setup.py", line 759, in <module> build_deps() File "setup.py", line 303, in build_deps check_pydep('yaml', 'pyyaml') File "setup.py", line 367, in check_pydep raise RuntimeError(missing_pydep.format(importname=importname, module=module)) RuntimeError: Missing build dependency: Unable to `import yaml`. Please install it via `conda install pyyaml` or `pip install pyyaml`
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
因為我不用conda,直接通過pip3安裝了,安裝完pyyaml這個包就沒再報錯了。
**
測試
**
這個環節就很簡單了,python3進入交互式環境:
>>> import torch >>> torch.__version__ '1.4.0a0+d403410' >>> z = torch.zeros(2,2) >>> z tensor([[0., 0.], [0., 0.]])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
可以看到我們的torch版本正是剛剛git下來編譯好的1.4的版本,賦值一個張量也完全不會報錯。好了,可以算是成功在樹莓派上安裝pytorch了。為了上面這幾行代碼的運行,小白我可是費了好幾天的時間啊!
關於torchvision
pi@raspberrypi:~$ pip3 search torchvision
torchvision-raspi (0.2.1.1) - Torchvision for Raspberry Pi 3B armv7l torchvision-enhance (0.1.3) - Enhance torchvision for multi-channel images, 16-bit image, segmentation... torchvision (0.4.1.post2) - image and video datasets and models for torch deep learning INSTALLED: 0.2.2.post3 LATEST: 0.4.1.post2 opencv-torchvision-transforms-yuzhiyang (0.0.1) - an opencv based rewriting of the "transforms" in torchvision package quadratum (0.1.5) - Additional torchvision image transforms for practical usage. invertransforms (0.2.1) - A library which turns torchvision transformations invertible and replayable.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
對於torchvision,樹莓派的版本也暫時只提供舊的0.2版本,這里就先不討論0.4版本的安裝了。
總結
上面詳細介紹了小白在樹莓派上安裝pytorch的過程,一個沒行通的方案和一個費時編譯的方案。同時介紹了幾個可能會遇到的困難和解決辦法。
對於小白來說,做項目真的就是不斷發現問題並不斷摸索解決問題的過程。正當要為成功感到高興的時候,它給你報錯來了。哈哈~做項目不要高興的太早。遇到問題要慢慢一個一個地解決。
關於本文,歡迎大家批評、建議、抬杠、糾正,如果喜歡你也可以點贊。謝謝大家!
遇到的問題和解決方法
https://github.com/pytorch/pytorch/issues/26455