關於PyTorch在Windows下的CI和whl包

前兩天給大家分享了PyTorch master分支在Windows下的編譯過程,當然這個編譯過程比較繁瑣,如果能有直接能安裝使用的包就能方便不少。現在比較流行的方式是使用CI(循環構建)來完成這個任務。

可能大家對CI不太了解,我稍微介紹一下。在Github瀏覽項目時,大家很可能會碰到一些徽章,比如像下面這張。它說明上一次在主分支下的構建過程成功了。這類徽章清楚的顯示了CI在後台執行的結果。其實對於那些需要快速迭代的大型項目,用CI可以在對每次代碼的改動之後檢驗代碼的有效性,大大改善項目開發的速度。CI為我們進行編譯、測試、打包或者分發都提供了相當的便利。提供Linux環境的CI中最著名的就是Travis CI了,而在Windows下的CI我覺得首推AppVeyor。AppVeyor的功能基本是比較全的,你可以自由的對環境進行一些配置,當然他也內置了不少工具,可用於使用各種編程語言,軟體框架的編譯。此外,AppVeyor的機器還包括Nvidia的顯卡(貌似獨此一家),也就是說可以用於PyTorch CUDA版本的編譯,甚至也可以跑一些小模型。(算力並不強)當然,免費的午餐也是有條件的,每次build不能超過1個小時,CPU核心只有2個,不能並行跑多個項目等等。所以有錢的朋友們可以自己買VPS來跑CI。

CI 徽章

用CI來完成編譯、測試、打包和發布這個過程是非常容易的,為什麼這麼說呢?可以看到下面那張AppVeyor的設置圖,直接就對應了每個過程有相應的配置,再每個配置項中你可以自行設定相應的腳本。什麼意思呢?就是當你提交代碼之後,他會遵循編譯、測試、打包和發布這個流程,輪流的執行你設定的代碼。有個很酷的功能是它可以列印build時的該主機的地址和埠,然後你可以用遠程桌面直接去訪問該主機。我沒有嘗試過,各位有興趣的話可以自己試試看。

CI 的設置項

關於具體的搭建過程就不再贅述了,下面說正題,首先是使用CPU和GPU版本的運行要求。

CPU版本:

  1. Windows 64位系統
  2. 64位 Python 3.5 或者 3.6
  3. MKL、Numpy、PyYAML
  4. VC++ 2017 Redist

GPU版本還需要:

  1. CUDA 8
  2. cuDNN 6
  3. NVTX(在 CUDA 中為VS的插件,若安裝失敗,可以解壓CUDA安裝包,在CUDAVisualStudioIntegration中找到,可以通過檢驗環境變數NVTOOLSEXT_PATH是否存在來判斷其是否已經安裝)

如果同時安裝了CUDA 8和9的可以通過在使用前臨時修改環境變數的方式使用。

set PATH=%CUDA_PATH_V8_0%bin;%PATH%

如果是包含多個版本cuDNN的,就需要把cuDNN 6的動態鏈接庫拷貝至torch包的lib目錄下。

當然你也可以把CUDA 8和cuDNN 6的動態鏈接庫全部拷進torch包的lib目錄下使用,主要依賴項包括CUDA8.0in目錄下的各種dll和nvToolsExt64_1.dll。

如果你覺得這些方法都不能接受,那還請遵循上次的教程自己進行編譯。

關於搭建好的PyTorch的Windows CI。首先是CPU版本的,主頁面在此。在主頁面會有分別對應Python 3.5和3.6的build,選定相應的版本,然後會跳轉至相應build的主頁面,那怎麼下載build好的whl包呢?在頁面中部,會有一個菜單,如下圖所示:

點擊Artifacts,就可以發現下面出現了生成好的whl包,點擊即可下載。

而GPU版本的就複雜的多,因為AppVeyor的1小時build時間限制,我們不得不將使用不同架構的顯卡的build拆開來,所以大家先去了解下自己的顯卡架構。我們主要對三種架構的顯卡做了編譯,Pascal、Kepler和Maxwell。GPU版本的CI主頁面在這裡。進去可以發現,總共包含了12種build。主要是以下三個環境變數的區別:APPVEYOR_BUILD_WORKER_IMAGE、PYTHON_VERSION和TORCH_CUDA_ARCH_LIST。

APPVEYOR_BUILD_WORKER_IMAGE 主要分為 VS 2017 和 2015。這個並不是使用的編譯器,而是主要用於系統的區分。也就是說Windows 10和Windows Server 2016使用VS 2017的包,Windows 7 及其他用 VS 2015的包。

PYTHON_VERSION 這個就是Python版本的區別,不多說了。

TORCH_CUDA_ARCH_LIST 這主要是上面說的顯卡架構區別,大家自己關注自己的顯卡架構。

當這三個變數都確定之後,你就可以下載相應的包了,過程與上面相似。

當然這個還是我自己搭的第三方CI,但是既然Windows PRs都已經併入主分支了,那官方的Windows CI和包還會遠嗎?讓我們拭目以待吧。

更新:官方Windows CI已經列入計劃

以上,就是文章的全部內容啦,如果感覺還意猶未盡的話,可以給我的Github 主頁或者項目加個watch或者star之類的(滑稽),以後說不定還會再分享一些相關的經驗。


推薦閱讀:

【筆記】Finding Tiny Faces
PyTorch中如何使用tensorboard可視化
深度學習入門該用PyTorch還是Keras?熱門公開課換框架背後的學問
python3.6.1及TensorFlow和PyTorch
知乎「看山杯」 奪冠記

TAG:深度学习DeepLearning | PyTorch | MicrosoftWindows |