Это небольшой пост в блоге об установке необходимой среды для использования внешнего графического процессора (eGPU) на более старых MacBook Pro с Thunderbolt 2, например для использования в исследованиях Deep Learning. В этом тесте использовалось следующее оборудование:

  • MacBook Pro Retina, модель середины 2015 года
  • NVIDIA Titan XP
  • Корпус Razer Core v2
  • Переходник с Thunderbolt 3 на Thunderbolt 2

Вам понадобится macOS High Sierra. Я провел те же тесты на последней версии macOS Mojave, но в данный момент она не работает.

Установите macOS-eGPU.sh

Благодаря огромной благодарности сообществу eGPU, существует простой в использовании сценарий bash, позволяющий получить eGPU, совместимый с более ранними версиями MacB o ok (до Thunderbolt 3). Репозиторий можно найти здесь.

  1. Отключить SIP в режиме восстановления: csrutil disable
  2. Скачайте и запустите скрипт: bash <(curl -s https://raw.githubusercontent.com/learex/macOS-eGPU/master/macOS-eGPU.sh)
  3. Следуй инструкциям.

Вы не сможете отключить внешний графический процессор в горячем режиме. Это вызовет фатальную ошибку ядра.

После установки и перезагрузки вы сможете увидеть внешний графический процессор в Системной информации на вкладке Графика / Дисплей:

Установка CUDA

Установите CUDA 9.2 с сайта разработчика NVIDIA (ссылка). Для компиляции нам потребуются Xcode 9.2 и Apple LVVM 9.0.0.

Тогда следуйте инструкциям здесь или следуйте моей:

  1. Установите Xcode 9.2 со страницы загрузки Apple Developer.
  2. sudo xcode-select -s /Applications/<Xcode_install_dir>/Contents/Developer
  3. xcode-select --install
  4. Убедитесь, что вы используете Apple LVVM 9.0.0: /usr/bin/cc --version
  5. Добавьте двоичные файлы в свой путь (vim ~ / .bash_profile) export PATH=/Developer/NVIDIA/CUDA-9.2/bin:$PATH

Убедитесь, что вы используете драйвер CUDA версии 396.xx, перейдя на панель CUDA в Системных настройках.

Установка cuDNN

Загрузите и установите cuDNN версии 7.2.1.38 для CUDA 9.2 здесь, следуйте инструкциям здесь или следуйте моей:

  1. Распаковать архив и запустить tar -xzvf cudnn-9.2-osx-x64-v7.tgz
  2. Выполните следующее:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include && cp cuda/lib/libcudnn* /usr/local/cuda/lib && chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib/libcudnn*

Установка Conda

Установите miniconda3 с: https://conda.io/miniconda.html

Обязательно запомните каталог установки, по умолчанию: /Users/<USERNAME>/miniconda3

Настройка среды conda

Теперь мы настроим новую среду conda под названием ptc для установки pytorch (скомпилированного из исходного кода) в.

conda create --name ptc python=3.6 pip
alias ptc='export CMAKE_PREFIX_PATH=~/miniconda3/envs/ptc ; source activate ptc'
alias coff='source deactivate; export CMAKE_PREFIX_PATH=~/miniconda3'
ptc
conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing

Скомпилируйте и установите PyTorch из исходников

PyTorch не поддерживает двоичные файлы, совместимые с CUDA, поэтому нам придется скомпилировать его из исходников. На это уйдет немало времени :)

git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
git checkout v1.0rc1
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install

Чтобы проверить, все ли работает, импортируйте torch и проверьте доступность CUDA (при этом все еще выполняется в среде ptc):

python
import torch
torch.cuda.is_available()
print(torch.cuda.get_device_name(0))
d = torch.device("cuda")
x = torch.tensor([1.0, 2.0]).to(d)

Скомпилируйте и установите torchvision

Установка torchvision с conda install torchvision -c pytorch может привести к перезаписи исходной установки двоичными файлами pytorch (которые несовместимы с CUDA). Мы легко можем установить torchvision из исходников:

source activate ptc
git clone https://github.com/pytorch/vision.git
cd vision
python setup.py install

Необязательно: производительность теста

git clone https://github.com/pytorch/examples
cd examples/mnist

Производительность с NVIDIA Titan XP:

time python main.py >/dev/null
real 1m38.430s
user 2m6.163s
sys 0m7.762s

Производительность без CUDA:

time python main.py --no-cuda >/dev/null
real 5m47.750s
user 37m22.609s
sys 1m23.813s

Необязательно: Создайте ядро ​​CUDA IPython Notebook

source activate ptc
conda install ipykernel
python -m ipykernel install --user --name ptc --display-name "Python 3.6 (ipc, cuda)"
source deactivate ptc
jupyter notebook

Теперь вы готовы погрузиться в увлекательный мир глубокого обучения :)