¿Aprendizaje automático en GPU externa con CUDA y MBP tardío 2016?

27

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, pero 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 el 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 si 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 doble partición de arranque / Windows / Linux).

Nota al margen: he visto usuarios que usan eGPU en macbook's antes (Razor Core, AKiTiO Node), pero nunca en combinación con CUDA y Machine Learning (o el 1080 GTX). La gente sugirió alquilar un espacio de servidor, 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.)

    
pregunta Joop 24.03.2017 - 17:03

5 respuestas

18

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

Escribí una idea general del procedimiento, espero que ayude

enlace

Esto es lo que hice:

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

Se basa en: enlace

y en: enlace

Hardware

Versiones de software

  • macOS Sierra versión 10.12.6
  • Versión de 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 GPU

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

  5. Cuando tu Mac se reinicie, abre Terminal y ejecuta 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.

Instala 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 la 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 las 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 perfil bash no existe, créelo. Esto se ejecuta cada vez que abre una ventana de terminal)

  1. Descargando e instalando cuDNN (cudnn-8.0-osx-x64-v5.1) Es necesario 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

Ejecuta 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 establezca 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"
    

    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
    
respondido por el Julian 03.10.2017 - 21:41
9

Pude obtener una NVIDIA GTX 1080 Ti funcionando en el Nodo Akitio en mi iMac (a finales de 2013). Estoy usando un Thunderbolt 2 > Adaptador 3, aunque en las Mac más nuevas puede usar el TB3 más rápido directamente.

Hay varias configuraciones de eGPU descritas en eGPU.io, y es posible que encuentre uno que describa su computadora / caja / tarjeta con precisión. Estos tutoriales son principalmente para acelerar una pantalla con un eGPU, aunque para capacitar a NNs, obviamente no es necesario que sigas todos los pasos.

Esto es más o menos lo que hice:

  • Instale CUDA de acuerdo con la documentación oficial.
  • Deshabilitar SIP (Google para un tutorial). Es necesario para el script eGPU.sh y más tarde también para TensorFlow.
  • Ejecute el automate-eGPU.sh script (con sudo) que Todo el mundo en eGPU.io parece confiar.
  • instalar cuDNN. Los archivos del sitio web de NVIDIA deben ir bajo /usr/local/cuda con el resto de sus bibliotecas de CUDA e incluyen.
  • Desinstale TensorFlow solo para CPU e instale uno con soporte de GPU. Cuando instalé con pip install tensorflow-gpu , no tuve errores de instalación, pero obtuve un error de seguridad 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 GitHub .
  • También intenté compilar TensorFlow desde la fuente, lo cual no funcionó antes de configurar las variables env 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 para eso.

No he usado esta configuración por lo 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 liberar los controladores adecuados para macOS.

    
respondido por el Mattias Arro 17.05.2017 - 12:47
4

El soporte de eGPU en macOS es un tema difícil, pero haré mi mejor esfuerzo para responder tu pregunta.

¡Empecemos con las tarjetas gráficas! Por el tiempo, y porque estamos hablando de CUDA, nos quedaremos con las tarjetas Nvidia. Cualquier tarjeta gráfica funcionará con los controladores adecuados en Windows. Apple, sin embargo, solo admite oficialmente algunas tarjetas gráficas Nvidia, principalmente las muy antiguas. Sin embargo, los controladores de gráficos Nvidia realmente funcionan en casi todas las tarjetas GeForce y Quadro de Nvidia, con una gran excepción. Las tarjetas GTX 10xx NO FUNCIONAN. 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 la Titan X (muchas buenas tarjetas Quadro también funcionan bien).

Ahora que lo hemos cubierto, pasemos a los gabinetes de eGPU. Asumiré, porque mencionó específicamente eGPUs, que ha presupuestado un gabinete 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. Hice un poco de investigación de eGPU hacia fines de 2016, y la información que obtuve fue relativamente confusa, por lo que si alguien tiene algún comentario o corrección, hágamelo saber. Por lo que entiendo, para utilizar el poder de la eGPU, necesita 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 luego debería poder usar la eGPU para manejar sus gráficos.

Suponiendo que haces todo esto con éxito, deberías tener una potencia de gráficos habilitada con CUDA de gran potencia.

    
respondido por el NoahL 25.03.2017 - 07:46
1

Si está usando macOS 10.13.3, verifique 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 CUDA: 9.1.128
  • cuDNN: 7
  • NVDAEGPUSupport: 6
  • XCode: 8.2
  • Bazel: 0.9.0
  • OpenMP: más reciente
  • Python: 3.6
  • TensorFlow: 1.5.0
respondido por el GeekCui 11.02.2018 - 08:52
1

Recientemente lo hice con OSX 10.13.6 para pytorch y fastai. Vea mi información aquí: enlace

    
respondido por el Dandan Wei 11.10.2018 - 22:36

Lea otras preguntas en las etiquetas