28 天自制你的 AlphaGo (2) : 安裝 MXNet 搭建深度學習環境

知乎對於人機大戰的關注度很高,所以寫這個系列,希望能讓大家對於人工智慧和圍棋有更多的了解。如果有收穫,請記得點一下贊。

在上一篇介紹了圍棋 AI 的基本常識,這一篇開始搭建深度學習環境。

本系列已更新多篇,其它幾篇的傳送門:

  • (1) : 圍棋 AI 基礎 知乎專欄

  • (3) : 訓練策略網路,真正與之對弈 知乎專欄

  • (4) : 對於策略網路的深入分析(以及它的弱點所在) 知乎專欄

  • (4.5):後文預告(Or 為什麼你應該試試 Batch Normalization 和 ResNet)知乎專欄

一、在 Windows 下安裝 MXNet

目前的環境很多,最多人用的是 Google 的 TensorFlow;不過 MXNet 感覺也蠻不錯,比較省資源(當然,最好兩個都裝)。配圖是 MXNet 的例子裡面的 LeNet 訓練 MNIST 數據集,這是很經典的模型,可以看到準確率在隨著訓練不斷提高:

安裝之前先看個好玩的:github.com/dmlc/mxnet.j 是在瀏覽器直接運行 MXNet 的效果。TensorFlow 也有類似的東西: transcranial/keras-js。也就說,我們訓練好模型後,可以直接在網頁裡面可視化,這樣就可以輕鬆跨平台。

第一次裝深度學習環境經常會遇到一些坑,這裡看一個實際安裝 MXNet 的過程。先看 Windows 的安裝,比較簡單和快速,因為不需要編譯。

說句無關的,我個人是推薦 Windows 的,因為顯卡還可以用於娛樂(這幾年的新遊戲的圖像進步很大),有興趣還可以玩個 VR 啥的。

1. 首先裝了 VC2015,安裝時語言記得選上 C++。

2. 然後如果你有 nVidia 的 GPU,裝一下 CUDA:CUDA 8.0 Downloads 。選本地安裝版,建議用迅雷下比較快。如果沒有 nVidia 顯卡,買一塊吧,顯存盡量選大的,機器的電源也記得要跟上。實在沒錢就二手 750Ti 2G 顯存版吧,足夠玩玩簡單模型,因為 MXNet 省顯存。當然,用 CPU 也可以跑,就是慢。

3. 再下載 cuDNN,這個要註冊一個帳號。註冊一個吧: NVIDIA cuDNN 。解壓備用。把它先解壓一份到開始的 CUDA 目錄(你會看到剛好有一樣的目錄結構)。

4. 下載 MXNet 的編譯好的包:github.com/yajiedesign/ 先下載 vc14 base package,然後下載更新包(例如 20170114_mxnet_x64_vc14_gpu.7z 注意 GPU 包就是同時支持 CPU 和 GPU)解壓進去,然後把剛才下載的 cuDNN 也解壓進 third-party 目錄(具體見它的文檔)。執行 setupenv.cmd 。

5. 裝個 Python 吧,推薦 Anaconda,選 Python 2.7 的版本: Download Anaconda Now! 。建議用迅雷下比較快。裝完檢驗一下 python 命令可用。

6. 進開始的 MXNet 目錄的 python 子目錄,執行 python setup.py install 。會發現提示要裝一個 Microsoft Visual C++ Compiler for Python 2.7,去裝了。

7. 然後再執行 python setup.py install,可能會發現提示缺頭文件,把他們從你的 VC2015 的 include 目錄拷貝到 Microsoft Visual C++ Compiler for Python 2.7 的 include 目錄即可。要根據提示拷貝好幾個頭文件。然後就可以成功編譯了。

8. 運行 python,然後 import mxnet 然後 (mxnet.nd.ones((2,2), mxnet.cpu())*100).asnumpy()然後 (mxnet.nd.ones((2,2), mxnet.gpu())*100).asnumpy() 如果全部成功,恭喜你,裝好了。

9. 再下載 dmlc/mxnet,在 example 目錄的 image-classification 目錄,執行 python train_mnist.py --network lenet 。會先下載測試數據,等下它,比較慢。看看是否成功訓練。

10. 再測試 VC++ 的環境。下載 github.com/dmlc/MXNet.c (不需要執行裡面的 setupenv.cmd),然後打開 windows 目錄下面的 vs 下面的 MxnetTestApp,運行試試。再試試裡面有句可以改成 Context ctx_dev(DeviceType::kGPU, 0); 會發現 GPU 確實比 CPU 快。

11. 可以用 CPU-z 和 GPU-z 看你的 CPU 和 GPU 有沒有偷懶,是否是在全心全意工作。

二、在 Mac 下安裝 MXNet

下面看 Mac 的安裝,我是 OSX 10.11。

這個安裝麻煩一些,因為首先下面有些下載過程可能要 exportALL_PROXY="代理地址"(否則很慢)。另外 pip 也要換國內源,git 也要加代理,homebrew 也可以改國內源。

然後有時會遇到許可權問題,請 chown 一下。有時可能也要 sudo。

1. 裝 XCode。最新 CUDA 已經兼容 XCode 8 了。

2. 裝 CUDA 和 cuDNN。

3. 裝 homebrew(百度搜索一下)。裝 python,建議 brew install pyenv 然後用它裝 anaconda2,防止破壞系統 python 版本:Mac OS X下安裝pyenv 。

3a. 如果發現 pyenv 下載文件奇慢無比,可以給 pyenv 加上 -v 看到找到下載路徑,然後手工下載,然後打開 /usr/local/bin/python-build 然後在 download_tarball() 函數裡面,直接把第一行改成 local package_url="127.0.0.1/Anaconda2-4.2" 然後你自己開一個 http 伺服器即可。

4. 裝 MXNet: Installing MXNet on OS X (Mac) 按照 Standard installation 走。不要執行它的 Quick Installation 自動腳本,因為還會去重新裝 homebrew,非常慢。第一步是:

git clone github.com/dmlc/mxnet.g ~/mxnet --recursive

5. 按它說的編譯。在 make 子目錄中的 config.mk 最後加:

USE_BLAS = openblas

ADD_CFLAGS += -I/usr/local/opt/openblas/include

ADD_LDFLAGS += -L/usr/local/opt/openblas/lib

ADD_LDFLAGS += -L/usr/local/lib/graphviz/

USE_CUDA = 1

USE_CUDA_PATH = /usr/local/cuda

USE_CUDNN = 1

USE_NVRTC = 1

USE_PROFILER = 1

USE_OPENMP = 0

另外可能要 ln -s /usr/local/cuda/lib /usr/local/cuda/lib64 。然後 make -j4 就代表用4核編譯。有問題就 make clean 一下再試試。

6. make 完後,進 python 子目錄 sudo python setup.py install,然後檢查是否裝好:

cd example/image-classification/

python train_mnist.py

python train_mnist.py --network lenet --gpus 0

祝安裝成功!在下一篇我們會看看從棋譜提取訓練特徵。

本系列已更新多篇,其它幾篇的傳送門:

  • (1) : 圍棋 AI 基礎 知乎專欄

  • (3) : 訓練策略網路,真正與之對弈 知乎專欄

  • (4) : 對於策略網路的深入分析(以及它的弱點所在) 知乎專欄

如需轉載本系列,請先與本人聯繫,謝謝。小廣告:晚上工作學習是否覺得光線不夠舒服,精神不夠集中,眼睛容易疲勞?不妨點擊看看我們的自然全光譜燈系列:Blink Sunshine護眼LED燈泡 高顯指97顯色指數無頻閃學習檯燈床頭 如果需要好用的耳機或錢包,我們也有 :-)

推薦閱讀:

AlphaGo有沒有缺點或弱點?
為什麼AlphaGo不願意和羅洗河下一盤?
如果AlphaGo走出第四局白78,大家會給出"這是神之一手,超越了人類的巔峰"這樣的評價嗎?
DeepZenGo和AlphaGo的差距主要體現在那些方面?
如何看待計算機博士、《人工智慧學家》主編劉鋒對谷歌AlphaGo的質疑?

TAG:AlphaGo | 深度学习DeepLearning | 人工智能 |