Windows環(huán)境下老顯卡跑PyTorch GPU版本方示例分析,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),十多年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都上千客戶提供網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營(yíng)銷型網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),同時(shí)也為不同行業(yè)的客戶提供成都做網(wǎng)站、成都網(wǎng)站制作的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)。
從pytorch 1.3開始 不再支持GPU的算力在3.5及其以下的顯卡。這時(shí),你只能安裝1.2版本的官方Pytorch。如果夠用就安裝它吧,省心省力。但是如果你要用其它包需要更高版本的torch支持,比如:torch geometric需要至少1.4版本。你只能使用官方的CPU版本,因?yàn)楣俜降陌姹静辉僦苯又С諫PU算力3.5以下版本,簡(jiǎn)化版本的分發(fā)(Torch已經(jīng)很大了)。到了Torch 1.7時(shí),GPU算力至少要達(dá)到5.2。 這時(shí),我們需要在Windows上重新編譯Pytorch 源碼,得到適合自己顯卡的Torch。在編譯時(shí),系統(tǒng)會(huì)自動(dòng)把GPU算力下限設(shè)為當(dāng)前機(jī)器顯卡的算力,比如GT 730M 1G 顯卡算力為3.5。
下面以Torch 1.7為例來說明整個(gè)操作過程。
原帖子上說最新的VS 2019有點(diǎn)問題,我并沒有去證實(shí)。但是個(gè)人認(rèn)為,原理上應(yīng)該不會(huì)這樣的,或者說不是關(guān)鍵問題。但是我還是按帖子上的說法,安裝了16.6.5版本Professional版本。
https://docs.microsoft.com/en-us/visualstudio/releases/2019/history 里面的16.6.5版本。
只需要安裝 C++桌面開發(fā)即可。
去Nvidia官網(wǎng)下 https://developer.nvidia.com/cuda-toolkit
下載的版本選擇cuda 10.1,cuda_10.1.105_418.96_win10.exe
需要安裝NVCC,與Visual Studio相關(guān)的插件部分。
這個(gè)的安裝可以參考windows_cudnn_install. ( https://github.com/pytorch/pytorch/blob/master/.circleci/scripts/windows_cudnn_install.sh)
可以看到對(duì)應(yīng)cuda10.1為v7.6.4.38,即cudnn-10.1-windows10-x64-v7.6.4.38.zip(不斷地更新中)
https://developer.nvidia.com/compute/machine-learning/cudnn/secure/7.6.4.38/Production/10.1_20190923/cudnn-10.1-windows10-x64-v7.6.4.38.zip
將文件解壓出來后,移動(dòng)到Cuda toolkit安裝路徑中。(只是為了簡(jiǎn)化配置過程中的目錄的設(shè)定)
這個(gè)的安裝可以參考install_mkl
https://github.com/pytorch/pytorch/blob/master/.jenkins/pytorch/win-test-helpers/installation-helpers/install_mkl.bat
根據(jù)目前的官方文檔下載:
https://s3.amazonaws.com/ossci-windows/mkl_2020.0.166.7z
參考install_magma
https://github.com/pytorch/pytorch/blob/master/.jenkins/pytorch/win-test-helpers/installation-helpers/install_magma.bat
需要注意的是,要注意區(qū)別release和debug版本,如果你想下載cuda110的release版本,就xxx_cuda110_release,否則就是xxx_cuda110_debug。編譯的時(shí)候release就用release版本,debug就用debug版本
根據(jù)目前的官方文檔下載:
https://s3.amazonaws.com/ossci-windows/magma_2.5.4_cuda101_release.7z
參考install_sccache
https://github.com/pytorch/pytorch/blob/master/.jenkins/pytorch/win-test-helpers/installation-helpers/install_sccache.bat
根據(jù)官方文檔下載:
https://s3.amazonaws.com/ossci-windows/sccache.exe
https://s3.amazonaws.com/ossci-windows/sccache-cl.exe
下載:ninja-win.zip
https://github.com/ninja-build/ninja/releases
mkl, magma, sccache 和ninja下載解壓后最好放在同一個(gè)目錄下。
Nvcc和randomtemp.exe先不管它們,后面再說。
Torch官方文檔推薦使用conda環(huán)境。這里我還是使用pip。實(shí)踐證明沒有問題。
Pip install numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses
生成一個(gè)批處理文件進(jìn)行環(huán)境變量的設(shè)置。
set -x set BUILD_TYPE=release set USE_CUDA=1 set DEBUG= rem set DEBUG=1 for debug version set USE_DISTRIBUTED=0 set CMAKE_VERBOSE_MAKEFILE=1 set TMP_DIR_WIN=D:\pytorch\needed\ set CMAKE_INCLUDE_PATH=%TMP_DIR_WIN%\mkl\include set LIB=%TMP_DIR_WIN%\mkl\lib;%LIB set MAGMA_HOME=%TMP_DIR_WIN%\magma rem version transformer, for example 10.1 to 10_1. set CUDA_SUFFIX=cuda10_1 set CUDA_PATH_V%VERSION_SUFFIX%=%CUDA_PATH% set CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 set CUDNN_LIB_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64 set CUDA_TOOLKIT_ROOT_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 set CUDNN_ROOT_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 set NVTOOLSEXT_PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt set CUDNN_INCLUDE_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include set NUMBAPRO_CUDALIB=%CUDA_PATH%\bin set NUMBAPRO_LIBDEVICE=%CUDA_PATH%\nvvm\libdevice set NUMBAPRO_NVVM=%CUDA_PATH%\nvvm\bin\nvvm64_33_0.dll set PATH=%CUDA_PATH%\bin;%CUDA_PATH%\libnvvp;%PATH% set DISTUTILS_USE_SDK=1 set TORCH_CUDA_ARCH_LIST=3.5 set TORCH_NVCC_FLAGS=-Xfatbin -compress-all set PATH=%TMP_DIR_WIN%\bin;%PATH% set SCCACHE_IDLE_TIMEOUT=0 sccache --stop-server sccache --start-server sccache --zero-stats set CC=sccache-cl set CXX=sccache-cl set CMAKE_GENERATOR=Ninja if "%USE_CUDA%"=="1" ( copy %TMP_DIR_WIN%\bin\sccache.exe %TMP_DIR_WIN%\bin\nvcc.exe :: randomtemp is used to resolve the intermittent build error related to CUDA. :: code: https://github.com/peterjc123/randomtemp :: issue: https://github.com/pytorch/pytorch/issues/25393 :: :: Previously, CMake uses CUDA_NVCC_EXECUTABLE for finding nvcc and then :: the calls are redirected to sccache. sccache looks for the actual nvcc :: in PATH, and then pass the arguments to it. :: Currently, randomtemp is placed before sccache (%TMP_DIR_WIN%\bin\nvcc) :: so we are actually pretending sccache instead of nvcc itself. :: curl -kL https://github.com/peterjc123/randomtemp/releases/download/v0.3/randomtemp.exe --output %TMP_DIR_WIN%\bin\randomtemp.exe set RANDOMTEMP_EXECUTABLE=%TMP_DIR_WIN%\bin\nvcc.exe set CUDA_NVCC_EXECUTABLE=%TMP_DIR_WIN%\bin\randomtemp.exe set RANDOMTEMP_BASEDIR=%TMP_DIR_WIN%\bin ) set CMAKE_GENERATOR_TOOLSET_VERSION=14.26 set CMAKE_GENERATOR=Visual Studio 16 2019 "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64 -vcvars_ver=14.26
注意幾點(diǎn):
1)如果編譯的是Cuda10的話,原帖上說:“set TORCH_CUDA_ARCH_LIST=3.7+PTX;5.0;6.0;6.1;7.0;7.5;8.”TORCH_CUDA_ARCH_LIST要去掉 8.0。
我這里直接設(shè)定為3.5。這里設(shè)定的就是算力下限。
2)編譯debug/release版本是,下載對(duì)應(yīng)的Magma debug/release版本包
3) 如果只編譯CPU版本的話,設(shè)置USE_CUDA=0
4)這里將randomtemp.exe直接下載到本地。
5)腳本會(huì)自動(dòng)復(fù)制nvcc.exe到設(shè)定目錄。它是編譯gpu代碼的工具。
6)關(guān)閉了分布式訓(xùn)練的功能。set USE_DISTRIBUTED=0
根據(jù)Torch官方文檔:
Get the PyTorch Source 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
這里—recursive是遞歸下載Torch依賴的第三方git庫(kù)。這里存在的問題是,在國(guó)內(nèi)連接github的速度并不穩(wěn)定,為了以免下載的源碼出問題,我選擇下載zip打包后的源碼。
注:直接在github上進(jìn)行下載是最方便的。 只是需要幾個(gè)小時(shí)的時(shí)間,下載的速度只有20~50k/s,下載整個(gè)項(xiàng)目需要數(shù)個(gè)小時(shí)時(shí)間。(項(xiàng)目有600M以上,我沒有堅(jiān)持下載完全。中途斷線了)
性子急的,才用下面的方法。快,但需要細(xì)心。
重要的地方是,這種打包下載是不能自動(dòng)下載Torch所依賴的第三方庫(kù)。只能自己手動(dòng)下載與Torch版本所對(duì)應(yīng)的第三方庫(kù)。(與當(dāng)前準(zhǔn)備編譯Torch版本所對(duì)應(yīng)的第三方庫(kù),這很重要,淚!)
通過Tag標(biāo)簽,找到自己準(zhǔn)備編譯的1.7版本。
下載打包后的源碼。
https://github.com/pytorch/pytorch/archive/v1.7.0.zip
這個(gè)也可以到國(guó)內(nèi)的Gitee鏡像站下載。可以直接在國(guó)內(nèi)Gitee上使用指令git clone –recursive(我沒有實(shí)驗(yàn)過,但是原理上是可行的。但是下載第三方庫(kù)時(shí),依然會(huì)訪問github上的庫(kù))
https://gitee.com/mirrors/pytorch?_from=gitee_search
然后,進(jìn)入Torch 1.7.0 分支的third_party。下載它所依賴的第三方庫(kù)。
https://github.com/pytorch/pytorch/tree/v1.7.0/third_party
一共36個(gè)庫(kù)文件。我全部下載的打包zip源碼。
其中fbgemm庫(kù)是一個(gè)關(guān)鍵庫(kù),它又依賴了三個(gè)其它的第三方庫(kù)。
請(qǐng)注意它們之間版本對(duì)應(yīng)關(guān)系(到github上看清楚上面的版本鏈接)。
對(duì)于Torch,F(xiàn)BGEMM不一定對(duì)應(yīng)是最新版本。不同版本函數(shù)接口不一樣,會(huì)導(dǎo)致編譯的失敗。
另外,ideep也依賴于自己的第三方庫(kù)mkl-dnn @ 5ef631a。這也是一個(gè)關(guān)鍵的庫(kù)。
最后,把全部源碼根據(jù)Git上的形式整合到一起。這時(shí)源碼全部準(zhǔn)備好了。
(注意:由于手動(dòng)整合源碼,主要問題是確保各個(gè)第三方庫(kù)版本與當(dāng)前的Torch版本是配合的。是配合的。是配合的。)如果直接在網(wǎng)上git下載源碼,就不會(huì)存在版本不對(duì)的問題,但是有可能下載不動(dòng),或者殘缺的風(fēng)險(xiǎn)。
自己動(dòng)手,豐衣足食!
請(qǐng)使用Powershell terminal, 而不要使用cmd。(在cmd中,中文的顯示有問題。萬(wàn)一編譯出錯(cuò),你都不知道它在說什么)。也不需要管理員權(quán)限。給它也行。
進(jìn)入Powershell terminal,首先運(yùn)行前面生成批處理文件./set_env.bat,進(jìn)行環(huán)境變量的設(shè)置。
然后,編譯libtorch。
python tools\build_libtorch.py
我只進(jìn)行了庫(kù)文件的編譯。在i5-4200M的機(jī)器上,整個(gè)編譯過程近6個(gè)小時(shí),生成12G左右的臨時(shí)文件和編譯文件。
(注意:不要嘗試在VS環(huán)境下直接cmake和編譯庫(kù),因?yàn)楣俜侥_本還做了其它事情)
到官方網(wǎng)站下載 1.7 GPU cu101版本。
安裝后,用自己編譯生成的兩個(gè)庫(kù)文件,替換掉官方提供的。下面官方的cuda有600M。
自己生成的只有它的八分之一。當(dāng)然,也沒有了分布式訓(xùn)練功能,因?yàn)榍懊鏇]有選擇它。
再進(jìn)行一下測(cè)試。
看完上述內(nèi)容,你們掌握Windows環(huán)境下老顯卡跑PyTorch GPU版本方示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
標(biāo)題名稱:Windows環(huán)境下老顯卡跑PyTorchGPU版本方示例分析
文章鏈接:http://www.chinadenli.net/article4/iigioe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、服務(wù)器托管、微信小程序、移動(dòng)網(wǎng)站建設(shè)、定制開發(fā)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)