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

31

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.

Investigué, 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 para 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 el 1080 GTX de NVIDIA. Mi único propósito es usar Keras y TensorFlow con él. Sin embargo, no sé todas las cosas 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 (no dual- partición de arranque / Windows / Linux).

Nota al margen: he visto a usuarios que utilizan eGPU en macbook's 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, o usar Windows (mejor soporte de tarjeta gráfica) o incluso construir una nueva PC por el mismo precio que le permite usar una eGPU en Mac. (No prefiero esa opción).

Joop
fuente
CUDA en el 1080 definitivamente funciona. Esta mañana estaba entrenando una red en un 1080 usando Keras con el backend TensorFlow (en Ubuntu, pero aún así).
brendon-ai

Respuestas:

19

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

Escribí una idea general del 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 de 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 controlador de GPU

  1. Apague su sistema, enciéndalo nuevamente presionando las teclas (⌘ y R) hasta que vea , esto le permitirá ingresar al modo de recuperación.
  2. Desde la barra de menú, haga clic en Utilidades> Terminal y escriba 'csrutil disable; reiniciar 'presione enter para ejecutar este comando.
  3. Cuando reinicie su Mac, 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. Desenchufe su eGPU de su Mac y reinicie. Esto es importante si no desconectó su eGPU, puede terminar con una pantalla en negro después de reiniciar.

  5. Cuando reinicie su Mac, 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 me funcionó. Intenté 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 env

    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) Necesita registrarse antes de descargarlo
  2. Copiar 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 funciona

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 el flujo de tensor 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"
    

    Salida:

    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
    
Julian
fuente
¿Necesitas un monitor externo para esto? O no?
Abhimanyu Aria
@AbhimanyuAryan, no hay necesidad de un monitor externo. Esto es solo para usar el eGPU con tensorlfow y / o keras
Julian
¿Esto también funciona con Mac OS 10.13? Veo que solo tienen CUDA 9 actualizado para 10.13, y Cuda 8 es solo para 10.12. Estoy tratando de ver si puedo hacer que esto ejecute TuriCreate en GPU.
Niklas
¿Has comparado el rendimiento con la PC?
Angus Tay
¿Alguien intentó esto con BlackMagic eGPU?
Pratik Khadloya
9

Pude obtener una NVIDIA GTX 1080 Ti trabajando en el Nodo Akitio en mi iMac (finales de 2013). Estoy usando un adaptador Thunderbolt 2> 3, aunque en Macs más nuevos puedes usar el TB3 más rápido directamente.

Hay varias configuraciones de eGPU descritas en eGPU.io, y puede encontrar una que describa su computadora / gabinete / tarjeta con precisión. Estos tutoriales son principalmente para acelerar una pantalla con una eGPU, aunque para entrenar NNs obviamente no necesitas 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). Es necesario para el script eGPU.sh y más tarde también para TensorFlow.
  • Ejecute el script automate-eGPU.sh (con sudo) en el que todos en eGPU.io parecen confiar.
  • Instalar cuDNN. Los archivos del sitio web de NVIDIA deben ir /usr/local/cudacon el resto de sus bibliotecas CUDA e incluirlos.
  • Desinstale TensorFlow solo para CPU e instale uno con soporte para GPU. Al instalar con pip install tensorflow-gpu, no tuve errores de instalación, pero obtuve un defecto cuando requiero TensorFlow en Python. Resulta que hay algunas variables de entorno que deben establecerse (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 los parámetros como se describe en el paso anterior.

Desde los menús de iStat puedo verificar que mi GPU externa se usa durante el entrenamiento. Sin embargo, esta instalación de TensorFlow no funcionó con Jupyter, pero espero que haya una solución alternativa para eso.

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

Mattias Arro
fuente
Una palabra de advertencia: desde TensorFlow 1.2 en adelante, no están proporcionando paquetes oficiales de pip tensorflow-gpu. Esto significa que necesitamos construirlo a partir de fuentes, que en mi experiencia nunca funcionan de inmediato. Esperemos que haya tutoriales de terceros sobre cómo compilar versiones principales, pero por ahora no puedo, por ejemplo, actualizar a 1.2 o 1.3 si todavía quiero usar mi GPU.
Mattias Arro
3
Gestionado para compilar tensorfow 1.2 desde la fuente. Escribió un pequeño tutorial sobre él: medium.com/@mattias.arro/…
Mattias Arro
3

El soporte de 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 el bien del tiempo, y porque estamos hablando de CUDA, nos quedaremos con las tarjetas de 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 gráficos de Nvidia realmente 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 buscas potencia, querrás mirar la GTX 980Ti o Titan X (muchas buenas tarjetas Quadro también funcionarían bien).

Ahora que tenemos eso cubierto, pasemos a los gabinetes de eGPU. Asumiré, porque mencionó específicamente eGPUs, que ha presupuestado para un gabinete de eGPU real (usemos 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, eso es más fácil decirlo que hacerlo. Investigué un poco sobre eGPU hacia fines de 2016, y la información que obtuve fue relativamente confusa, así que si alguien tiene algún comentario o corrección, por favor hágamelo 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 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 flasheada de MacVidCards), pero debería poder usar la eGPU para controlar sus gráficos.

Suponiendo que hace todo esto con éxito, debe tener una potencia de gráficos habilitada para CUDA de muy alta potencia.

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

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
  • Kit de herramientas de CUDA: 9.1.128
  • cuDNN: 7
  • NVDAEGPUSupport: 6
  • Código X: 8.2
  • Bazel: 0.9.0
  • OpenMP: último
  • Python: 3.6
  • TensorFlow: 1.5.0
GeekCui
fuente