雖然pytorch官方有一個mac下的編譯指南,但是還是不是很詳細,一路過來我也遇到了許多問題。
網上雖然有一些mac 下pytorch-gpu版,但是別人編譯的有的時候和自己機器不是很兼容。所以需要自己來編譯一下。
因爲我正好需要用gpu版的pytorch 0.3版,python 2.7,但是在網上找了半天都沒找到,所以只能自己動手了。
如果不需要gpu版的小夥伴安裝pytorch那是非常簡單的,可以看一下我寫的這個教程mac下安裝pytorch,幾條命令就ok。
1. Conda安裝python環境
假設已經安裝好了anconda,這裏我需要的是python2.7,所以直接conda一個環境就可以了。
conda create -n pytorch_gpu_0.3 python=2.7
環境創建好之後,激活一下環境,在這個環境下進行操作。
source activate pytorch_gpu_0.3
2. 下載pytorch源碼
是需要下載自己需要版本的pytorch源碼,這裏我需要的是0.3版的,所以把0.3版的clone下來。
git clone --branch v0.3.1 https://github.com/pytorch/pytorch.git
然後進入到文件夾裏,
cd <你自己的目錄>/pytorch
最開始clone的時候,submodule的內容並不會自動下載下來,如果不下載下來子模塊的文件的話,會缺少相應的文件。
此時,只需執行如下命令:
git submodule update --init
然後稍微等一會就下完了。
3. 檢查Clang版本
我的Clang版本是9.0,但是當前的CUDA與Clang版本中的CommandLineTools不兼容。我們需要使用XCODE 8.2的CommandLineTools。通過這條命令查看clang版本
clang --version
要是和上面這個圖顯示的不一樣的話,那麼就需要下載了。
步驟如下:
- 登錄 https://developer.apple.com/downloads/
- 下載Xcode CLT (Command Line Tools) 8.2 (不方便下載的同學,我下好了傳到了百度雲上,需要自取 https://pan.baidu.com/s/1troDTmqM8X_ibV0a7h7nNA 密碼: ucmd)
- 安裝 CLT
- 執行
sudo xcode-select --switch /Library/Developer/CommandLineTools
- 再次輸入命令行查看clang版本,按理說現在應該就是對的了
4. 編譯Pytorch
然後開始編譯GPU版的pytorch,這裏我假設你的CUDA之類的已經都安裝好了。
還有一個需要注意的是,需要安裝一下依賴包:
conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing
然後直接運行下面這些命令,
export CMAKE_PREFIX_PATH=<換成你的anconda根目錄 >,下面的命令是我的,那個CUDNN的目錄可能你也需要根據你自己的進行調整。
export CMAKE_PREFIX_PATH=/Users/ray/anaconda2
CUDNN_LIB_DIR="/Developer/cudnn/lib/"
CUDNN_INCLUDE_DIR="/Developer/cudnn/include/"
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install
然後等啊等啊等,編譯的時候cpu應該佔用率差不多要100%了,在我的電腦上面大概是花了1個小時的樣子。
安裝完成之後,然後就趕緊來測試一下吧。這裏有一個坑
熟練地python,import torch
,然後就會報錯,差不多都這種的
ModuleNotFoundError: No module named 'torch._C'
查了下pytorch repo的issues,果然很多人遇到
作者淡定說,不要在pytorch項目根目錄下導入torch,非常的神奇!!!所以cd ..一下在import torch,一般就可以了
需要注意的是,使用源碼安裝 pytorch
的時候,是沒有安裝 torchvision
的。所以也需要使用
pip install torchvision
,或者從源碼安裝。
5. 打包生成whl
cd 到pytorch項目中,然後和安裝的時候差不多的,
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py bdist_wheel
不過目前我生成的不好用,不知道爲什麼