Машинное обучение на внешнем графическом процессоре с CUDA и поздним MBP 2016?

Я хотел бы знать, какие параметры внешнего графического процессора (eGPU) доступны для macOS в 2017 году с MacBook Pro конца 2016 года.

Я провел свое исследование, однако в Интернете я нашел много запутанной информации. Некоторые говорят, что это может работать, но для этого требуется Windows (двойная загрузка). Другие говорят, что это может работать только для старых видеокарт, поскольку CUDA не поддерживается для новых видеокарт (GTX 1080). В идеале я хотел бы запустить 1080 GTX от NVIDIA. Моя единственная цель — использовать с ним Keras и TensorFlow. Тем не менее, я не знаю всех вещей, которые важны для того, чтобы заставить его работать. Поэтому мой вопрос: возможно ли использовать TensorFlow с CUDA и eGPU на позднем MacBook Pro 2016 (15 дюймов)? Я хочу использовать графическую карту в macOS (с поздним MacBook Pro 15 дюймов) в качестве eGPU (нет раздел boot/Windows/Linux).

Примечание: я видел, как пользователи раньше использовали eGPU на MacBook (Razor Core, AKiTiO Node), но никогда в сочетании с CUDA и машинным обучением (или 1080 GTX, если уж на то пошло). Вместо этого люди предлагали арендовать место на сервере или использовать Windows (улучшенная поддержка видеокарты) или даже собрать новый ПК по той же цене, которая позволяет использовать eGPU на Mac. (Я не предпочитаю этот вариант.)

CUDA на 1080 определенно работает. Сегодня утром я тренировал сеть на 1080, используя Keras с бэкэндом TensorFlow (на Ubuntu, но все же).

Ответы (5)

Наконец-то я смог установить Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras

Я написал суть процедуры, надеюсь, это поможет

https://gist.github.com/jganzabal/8e59e3b0f59642dd0b5f2e4de03c7687

Вот что я сделал:

Эта конфигурация работала для меня, надеюсь, что это поможет

Он основан на: https://becominghuman.ai/deep-learning-gaming-build-with-nvidia-titan-xp-and-macbook-pro-with-thunderbolt2-5ceee7167f8b

и далее: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support

Аппаратное обеспечение

Версии программного обеспечения

  • macOS Сьерра версии 10.12.6
  • Версия драйвера графического процессора: 10.18.5 (378.05.05.25f01)
  • Версия драйвера CUDA: 8.0.61
  • cuDNN v5.1 (20 января 2017 г.), для CUDA 8.0: необходимо зарегистрироваться и скачать
  • тензорный поток-GPU 1.0.0
  • Керас 2.0.8

Процедура:

Установить драйвер графического процессора

  1. Выключите вашу систему, снова включите ее, нажимая клавиши (⌘ и R), пока не увидите , это позволит вам войти в режим восстановления.
  2. В строке меню выберите «Утилиты» > «Терминал» и напишите «csrutil disable; reboot' нажмите Enter, чтобы выполнить эту команду.
  3. Когда ваш Mac перезагрузится, запустите эту команду в Терминале:

    cd ~/Desktop; git clone https://github.com/goalque/automate-eGPU.git
    chmod +x ~/Desktop/automate-eGPU/automate-eGPU.sh
    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh
    
  4. Отключите eGPU от Mac и перезапустите. Это важно, если вы не отключили eGPU, после перезапуска у вас может появиться черный экран.

  5. Когда ваш Mac перезагрузится, откройте терминал и выполните эту команду:

    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
    
    1. Подключите ваш eGPU к вашему Mac через TH2.
    2. Перезагрузите Mac.

Установите CUDA, cuDNN, Tensorflow и Keras.

На данный момент Keras 2.08 нуждается в tensorflow 1.0.0. Tensorflow-gpu 1.0.0 нуждается в CUDA 8.0, а cuDNN v5.1 — это то, что мне помогло. Я пробовал другие комбинации, но, похоже, они не работают

  1. Загрузите и установите CUDA 8.0 CUDA Toolkit 8.0 GA2 (февраль 2017 г.)
  2. Установите его и следуйте инструкциям
  3. Установить переменные окружения

    vim ~/.bash_profile
    export CUDA_HOME=/usr/local/cuda
    export DYLD_LIBRARY_PATH="$CUDA_HOME/lib:$CUDA_HOME:$CUDA_HOME/extras/CUPTI/lib"
    export LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
    

(Если ваш bash_profile не существует, создайте его. Это выполняется каждый раз, когда вы открываете окно терминала)

  1. Загрузка и установка cuDNN (cudnn-8.0-osx-x64-v5.1) Перед загрузкой необходимо зарегистрироваться
  2. Скопируйте файлы cuDNN в CUDA

    cd ~/Downloads/cuda
    sudo cp include/* /usr/local/cuda/include/
    sudo cp lib/* /usr/local/cuda/lib/
    
  3. Создайте среду и установите тензорный поток

    conda create -n egpu python=3
    source activate egpu
    pip install tensorflow-gpu==1.0.0
    
  4. Убедитесь, что это работает

Запустите следующий скрипт:

import tensorflow as tf
with tf.device('/gpu:0'):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
    c = tf.matmul(a, b)

with tf.Session() as sess:
    print (sess.run(c))
  1. Установите Keras в среду и установите тензорный поток в качестве бэкэнда:

    pip install --upgrade --no-deps keras # Need no-deps flag to prevent from installing tensorflow dependency
    KERAS_BACKEND=tensorflow python -c "from keras import backend"
    

    Вывод:

    Using TensorFlow backend.
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.8.0.dylib locally
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.5.dylib locally
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.8.0.dylib locally
    I tensorflow/stream_executor/dso_loader.cc:126] Couldn't open CUDA library libcuda.1.dylib. LD_LIBRARY_PATH: /usr/local/cuda/lib:/usr/local/cuda:/usr/local/cuda/extras/CUPTI/lib
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.dylib locally
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.8.0.dylib locally
    
нужен ли для этого внешний монитор? Или нет?
@AbhimanyuAryan, внешний монитор не нужен. Это просто для использования eGPU с tensorlfow и/или keras.
Это также работает с Mac OS 10.13. Я вижу, что они обновили только CUDA 9 до 10.13, а Cuda 8 только до 10.12. Я пытаюсь понять, смогу ли я запустить TuriCreate на графическом процессоре.
Вы сравнивали производительность с ПК?
Кто-нибудь пробовал это с BlackMagic eGPU?
@PratikKhadloya BlackMagic eGPU - это AMD, поэтому он не поддерживает CUDA.

Мне удалось заставить NVIDIA GTX 1080 Ti работать с Akitio Node на моем iMac (конец 2013 г.). Я использую адаптер Thunderbolt 2> 3, хотя на новых компьютерах Mac вы можете напрямую использовать более быстрый TB3.

Существуют различные настройки eGPU, описанные на eGPU.io, и вы можете найти ту, которая точно описывает ваш компьютер/корпус/карту. Эти учебные пособия в основном предназначены для ускорения отображения с помощью eGPU, хотя для обучения NN вам, очевидно, не нужно выполнять все шаги.

Вот примерно что я сделал:

  • Установите CUDA согласно официальной документации.
  • Отключите SIP (Google для учебника). Это необходимо для сценария eGPU.sh, а затем и для TensorFlow.
  • Запустите сценарийAutomate - eGPU.sh (с помощью sudo), на который, похоже, полагаются все в eGPU.io.
  • Установите cuDNN. Файлы с веб-сайта NVIDIA должны быть /usr/local/cudaвключены вместе с остальными вашими библиотеками CUDA.
  • Удалите TensorFlow только для процессора и установите его с поддержкой графического процессора. При установке с помощью pip install tensorflow-gpu, у меня не было ошибок установки, но я получил segfault при запросе TensorFlow в Python. Оказывается, есть некоторые переменные среды, которые необходимо установить (немного иначе, чем предлагает установщик CUDA), которые были описаны в комментарии к проблеме GitHub .
  • Я также попытался скомпилировать TensorFlow из исходного кода, но это не сработало, пока я не установил переменные окружения, как описано на предыдущем шаге.

Из меню iStat я могу убедиться, что мой внешний графический процессор действительно используется во время обучения. Однако эта установка TensorFlow не работала с Jupyter, но, надеюсь, для этого есть обходной путь.

Я мало использовал эту настройку, поэтому не уверен в повышении производительности (или ограничениях пропускной способности), но eGPU + TensorFlow/CUDA, безусловно, теперь возможны, поскольку NVIDIA начала выпускать соответствующие драйверы для macOS.

Предупреждение: начиная с TensorFlow 1.2, они не предоставляют официальные пакеты pip для tensorflow-gpu. Это означает, что нам нужно собрать его из исходников, что, по моему опыту, никогда не работает сразу. Надеюсь, будут сторонние руководства по компиляции основных выпусков, но пока я не могу, например, обновиться до 1.2 или 1.3, если я все еще хочу использовать свой графический процессор.
Удалось собрать tensorfow 1.2 из исходников. Написал небольшой туториал по этому поводу: medium.com/@mattias.arro/…

Поддержка eGPU в macOS — сложная тема, но я сделаю все возможное, чтобы ответить на ваш вопрос.

Начнем с видеокарт! Ради экономии времени и поскольку мы говорим о CUDA, мы остановимся на картах Nvidia. Любая видеокарта будет работать с соответствующими драйверами в Windows. Однако Apple официально поддерживает только несколько видеокарт Nvidia, в основном очень старые. Однако графические драйверы Nvidia на самом деле работают почти со всеми картами Nvidia GeForce и Quadro, за одним большим исключением. Карты GTX 10xx НЕ РАБОТАЮТ. В любой операционной системе Mac. Период. Драйверы Nvidia не поддерживают эту карту. Если вам нужна мощность, обратите внимание на GTX 980Ti или Titan X (многие хорошие карты Quadro также подойдут).

Теперь, когда мы это рассмотрели, давайте перейдем к корпусам eGPU. Я собираюсь предположить, поскольку вы упомянули конкретно eGPU, что вы заложили в бюджет фактический корпус eGPU (давайте использовать узел AKiTiO в качестве примера) вместо шасси расширения PCIe с внешним источником питания, поскольку это не так. отличная идея.

Итак, теперь у нас есть видеокарта (GTX 980Ti) в корпусе eGPU (узел AKiTiO), и мы хотим заставить ее работать. Что ж, это легче сказать, чем сделать. К концу 2016 года я немного изучил eGPU, и полученная информация была относительно запутанной, поэтому, если у кого-то есть какие-либо комментарии или исправления, пожалуйста, дайте мне знать. Насколько я понимаю, чтобы использовать мощность eGPU, вам нужно подключить внешний монитор к eGPU. Я не верю, что вы можете запустить eGPU без внешнего монитора в macOS. Вы также не увидите загрузочный экран Apple на мониторе, подключенном к eGPU (если только вы не купите флэш-карту у MacVidCards), но тогда вы сможете использовать eGPU для управления графикой.

Предполагая, что вы сделаете все это успешно, у вас должна быть очень мощная графическая система с поддержкой CUDA.

Спасибо за информацию. Комбинация 980 Ti с корпусом eGPU кажется приемлемым вариантом. Единственное, выпуск Akitio Node (3) кажется прекращенным, а Razor Core не поставляется. Какой корпус eGPU действительно можно купить? Акитио Узел 2?
Ну, Bizon Box предназначен для этого, но это около 500 долларов. Позвольте мне немного поискать...
Эта ссылка тоже может быть полезной для чтения: appleinsider.com/articles/17/01/17/…
Действительно ли серия «10XX» не работает на Mac? Я слышал, что другие (включая другой ответ здесь) использовали 1080ti на Mac...
Что касается этого ответа, абсолютно. Драйверы Mac серии 10xx были выпущены только через год после выпуска карт (где-то в конце 2017 или начале 2018 года, если я правильно помню)

Недавно я сделал это с OSX 10.13.6 для pytorch и fastai. Смотрите мою суть здесь: https://gist.github.com/dandanwei/18708e7bd5fd2b227f86bca668343093

Если вы используете macOS 10.13.3, перейдите по этой ссылке . Он охватывает все, от настройки eGPU до компиляции TensorFlow.

  • макОС: 10.13.3
  • Веб-драйвер: 387.10.10.10.25.156
  • Инструментарий CUDA: 9.1.128
  • cuDNN: 7
  • NVDAEGPПоддержка: 6
  • X-код: 8.2
  • Базель: 0.9.0
  • OpenMP: последний
  • Питон: 3.6
  • ТензорФлоу: 1.5.0