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.)
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
y en: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support
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
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.
Cuando su Mac se reinicie, abra la Terminal y ejecute este comando:
sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
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
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)
Copie archivos cuDNN a CUDA
cd ~/Downloads/cuda
sudo cp include/* /usr/local/cuda/include/
sudo cp lib/* /usr/local/cuda/lib/
Crear entorno e instalar tensorflow
conda create -n egpu python=3
source activate egpu
pip install tensorflow-gpu==1.0.0
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))
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
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:
/usr/local/cuda
con el resto de sus bibliotecas CUDA e incluye.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 .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.
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.
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.
brendon-ai