¿Aprendizaje automático en GPU externa con CUDA y finales de MBP 2016?

Me gustaría saber cuáles son las opciones de GPU externa (eGPU) para macOS en 2017 con la MacBook Pro de finales de 2016.

Hice mi investigación, sin embargo, en Internet encuentro mucha información confusa. Algunos dicen que puede funcionar, pero requiere Windows (arranque dual). Otros dicen que solo puede funcionar con las tarjetas gráficas más antiguas, ya que CUDA no es compatible con las tarjetas gráficas más nuevas (GTX 1080). Idealmente, me gustaría ejecutar la 1080 GTX de NVIDIA. Mi único propósito es usar Keras y TensorFlow con él. Sin embargo, no sé todas las cosas que son importantes para que funcione. Por lo tanto, mi pregunta es, ¿es posible usar TensorFlow con CUDA y eGPU en la última MacBook Pro 2016 (15")? Quiero usar la tarjeta gráfica en macOS (con la última MacBook Pro 15") como una eGPU (sin dual- partición de arranque/Windows/Linux).

Nota al margen: he visto a usuarios hacer uso de eGPU en macbook antes (Razor Core, AKiTiO Node), pero nunca en combinación con CUDA y Machine Learning (o el 1080 GTX para el caso). La gente sugirió alquilar espacio en el servidor en su lugar, o usar Windows (mejor compatibilidad con tarjetas gráficas) o incluso construir una nueva PC por el mismo precio que le permite usar una eGPU en Mac. (No prefiero esa opción.)

CUDA en el 1080 definitivamente funciona. Estaba entrenando una red en un 1080 esta mañana usando Keras con backend TensorFlow (en Ubuntu, pero aún así).

Respuestas (5)

Finalmente pude instalar Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras

Escribí una esencia con el procedimiento, espero que ayude

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

Aquí esta lo que hice:

Esta configuración funcionó para mí, espero que ayude

Se basa en: https://becominghuman.ai/deep-learning-gaming-build-with-nvidia-titan-xp-and-macbook-pro-with-thunderbolt2-5ceee7167f8b

y en: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support

Hardware

Versiones de software

  • macOS Sierra Versión 10.12.6
  • Versión del controlador GPU: 10.18.5 (378.05.05.25f01)
  • Versión del controlador CUDA: 8.0.61
  • cuDNN v5.1 (20 de enero de 2017), para CUDA 8.0: es necesario registrarse y descargar
  • tensorflow-gpu 1.0.0
  • Keras 2.0.8

Procedimiento:

Instalar el controlador de la GPU

  1. Apague su sistema, enciéndalo nuevamente presionando las teclas (⌘ y R) hasta que vea , esto lo dejará en modo de recuperación.
  2. En la barra de menú, haga clic en Utilidades > Terminal y escriba 'csrutil disabled; reiniciar' presione enter para ejecutar este comando.
  3. Cuando su mac se reinicie, ejecute este comando en la Terminal:

    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. Desconecte su eGPU de su Mac y reinicie. Esto es importante si no desconectó su eGPU, puede terminar con una pantalla negra después de reiniciar.

  5. Cuando su Mac se reinicie, abra la Terminal y ejecute este comando:

    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
    
    1. Conecte su eGPU a su mac a través de TH2.
    2. Reinicia tu Mac.

Instale CUDA, cuDNN, Tensorflow y Keras

En este momento, Keras 2.08 necesita tensorflow 1.0.0. Tensorflow-gpu 1.0.0 necesita CUDA 8.0 y cuDNN v5.1 es el que funcionó para mí. Probé otras combinaciones pero no parece funcionar

  1. Descargue e instale CUDA 8.0 CUDA Toolkit 8.0 GA2 (febrero de 2017)
  2. Instálalo y sigue las instrucciones.
  3. Establecer variables de entorno

    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
    

(Si su bash_profile no existe, créelo. Esto se ejecuta cada vez que abre una ventana de terminal)

  1. Descarga e instalación de cuDNN (cudnn-8.0-osx-x64-v5.1) Debe registrarse antes de descargarlo
  2. Copie archivos cuDNN a CUDA

    cd ~/Downloads/cuda
    sudo cp include/* /usr/local/cuda/include/
    sudo cp lib/* /usr/local/cuda/lib/
    
  3. Crear entorno e instalar tensorflow

    conda create -n egpu python=3
    source activate egpu
    pip install tensorflow-gpu==1.0.0
    
  4. Verifica que funcione

Ejecute el siguiente script:

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. Instale Keras en el entorno y configure tensorflow como backend:

    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"
    

    Producción:

    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
    
¿Necesitas un monitor externo para esto? ¿O no?
@AbhimanyuAryan, no hay necesidad de un monitor externo. Esto es solo para usar la eGPU con tensorlfow y/o keras
¿Esto también funciona con Mac OS 10.13. Veo que solo tienen CUDA 9 actualizado para 10.13, y Cuda 8 solo para 10.12. Estoy tratando de ver si puedo hacer que esto ejecute TuriCreate en GPU.
¿Has comparado el rendimiento contra PC?
¿Alguien ha probado esto con BlackMagic eGPU?
@PratikKhadloya BlackMagic eGPU es AMD y, por lo tanto, no es compatible con CUDA

Pude hacer funcionar una NVIDIA GTX 1080 Ti en Akitio Node en mi iMac (finales de 2013). Estoy usando un adaptador Thunderbolt 2> 3, aunque en las Mac más nuevas puedes usar el TB3 más rápido directamente.

Hay varias configuraciones de eGPU descritas en eGPU.io, y es posible que encuentre una que describa su computadora/gabinete/tarjeta con precisión. Estos tutoriales son principalmente para acelerar una pantalla con una eGPU, aunque para entrenar NN obviamente no necesita seguir todos los pasos.

Esto es más o menos lo que hice:

  • Instale CUDA de acuerdo con la documentación oficial.
  • Deshabilite SIP (Google para un tutorial). Lo necesita el script eGPU.sh y más tarde también TensorFlow.
  • Ejecute el script automate-eGPU.sh (con sudo) en el que parece confiar todo el mundo en eGPU.io.
  • Instale cuDNN. Los archivos del sitio web de NVIDIA deben incluirse /usr/local/cudacon el resto de sus bibliotecas CUDA e incluye.
  • Desinstale TensorFlow solo para CPU e instale uno compatible con GPU. Al instalar con pip install tensorflow-gpu, no tuve errores de instalación, pero obtuve un error de segmento al requerir TensorFlow en Python. Resulta que hay algunas variables de entorno que deben configurarse (un poco diferente a lo que sugiere el instalador de CUDA), que se describieron en un comentario de problema de GitHub .
  • También intenté compilar TensorFlow desde la fuente, lo que no funcionó antes de configurar las variables env como se describe en el paso anterior.

Desde iStat Menus puedo verificar que mi GPU externa se usa durante el entrenamiento. Sin embargo, esta instalación de TensorFlow no funcionó con Jupyter, pero es de esperar que haya una solución para eso.

No he usado mucho esta configuración, así que no estoy seguro del aumento de rendimiento (o las limitaciones de ancho de banda), pero eGPU + TensorFlow/CUDA ciertamente es posible ahora, ya que NVIDIA comenzó a lanzar controladores adecuados para macOS.

Una palabra de advertencia: desde TensorFlow 1.2 en adelante, no están proporcionando paquetes pip oficiales de tensorflow-gpu. Esto significa que debemos construirlo a partir de las fuentes, lo que, según mi experiencia, nunca funciona de inmediato. Con suerte, habrá tutoriales de terceros sobre cómo compilar versiones importantes, pero por ahora no puedo, por ejemplo, actualizar a 1.2 o 1.3 si todavía quiero usar mi GPU.
Logró compilar tensorfow 1.2 desde la fuente. Escribí un pequeño tutorial al respecto: medium.com/@mattias.arro/…

La compatibilidad con eGPU en macOS es un tema difícil, pero haré todo lo posible para responder a su pregunta.

¡Comencemos con las tarjetas gráficas! Por cuestiones de tiempo, y porque estamos hablando de CUDA, nos quedaremos con las tarjetas Nvidia. Cualquier tarjeta gráfica funcionará con los controladores adecuados en Windows. Sin embargo, Apple solo admite oficialmente algunas tarjetas gráficas Nvidia, principalmente las muy antiguas. Sin embargo, los controladores de gráficos de Nvidia funcionan en casi todas las tarjetas GeForce y Quadro de Nvidia, con una gran excepción. Las tarjetas GTX 10xx NO FUNCIONARÁN. En cualquier sistema operativo Mac. Período. Los controladores de Nvidia no son compatibles con esta tarjeta. Si está buscando potencia, querrá mirar la GTX 980Ti o Titan X (muchas buenas tarjetas Quadro también funcionarían bien).

Ahora que lo tenemos cubierto, pasemos a los gabinetes eGPU. Voy a suponer, debido a que mencionó específicamente las eGPU, que ha presupuestado una carcasa de eGPU real (utilicemos el Nodo AKiTiO como ejemplo), en lugar de un chasis de expansión PCIe con una fuente de alimentación externa, ya que esto no es Una gran idea.

Así que ahora tenemos una tarjeta gráfica (GTX 980Ti) en un gabinete eGPU (Nodo AKiTiO) y queremos que funcione. Bueno, es más fácil decirlo que hacerlo. Investigué un poco sobre eGPU a fines de 2016 y la información que obtuve fue relativamente confusa, así que si alguien tiene algún comentario o corrección, házmelo saber. Por lo que entiendo, para utilizar la potencia de la eGPU, debe conectar un monitor externo a la eGPU. No creo que pueda ejecutar la eGPU sin un monitor externo en macOS. Tampoco verá la pantalla de inicio de Apple en el monitor conectado a eGPU (a menos que compre una tarjeta flash de MacVidCards), pero entonces debería poder usar la eGPU para controlar sus gráficos.

Suponiendo que haga todo esto con éxito, debería tener una potencia de gráficos habilitada para CUDA de muy alta potencia.

Gracias por la información. La combinación de 980 Ti con una carcasa eGPU parece una opción viable. Lo único es que Akitio Node (3) parece descontinuado y Razor Core no se envía. ¿Qué gabinete de eGPU se puede comprar realmente? ¿Akitio Nodo 2?
Bueno, Bizon Box está diseñado para eso, pero cuesta como $500. Déjame mirar un poco...
Este enlace también puede ser una buena lectura: appleinsider.com/articles/17/01/17/…
¿La serie "10XX" realmente no funciona en Mac? Escuché que otros (incluida otra respuesta aquí) usaron 1080ti en mac ...
A partir de esta respuesta, absolutamente. Los controladores de Mac de la serie 10xx no se lanzaron hasta un año completo después de que se lanzaron las tarjetas (en algún momento a fines de 2017 o principios de 2018, si no recuerdo mal)

Recientemente lo hice con OSX 10.13.6 para pytorch y fastai. Vea mi esencia aquí: https://gist.github.com/dandanwei/18708e7bd5fd2b227f86bca668343093

Si está utilizando macOS 10.13.3, consulte este enlace . Cubre todo, desde la configuración de eGPU hasta la compilación de TensorFlow.

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • Juego de herramientas CUDA: 9.1.128
  • cuDNN: 7
  • Soporte NVDAEGPU: 6
  • CódigoX: 8.2
  • Basilio: 0.9.0
  • OpenMP: último
  • Pitón: 3.6
  • TensorFlow: 1.5.0