Machine Learning em GPU externa com CUDA e final do MBP 2016?

31

Gostaria de saber quais são as opções de GPU externa (eGPU) para o macOS em 2017 com o final do 2016 MacBook Pro.

Fiz minha pesquisa, mas na internet encontro muitas informações confusas. Alguns dizem que pode funcionar, mas requer o Windows (inicialização dupla). Outros dizem que ele só funciona para as placas gráficas mais antigas, pois o CUDA não é suportado pelas placas gráficas mais recentes (GTX 1080). Idealmente, eu gostaria de rodar o 1080 GTX da NVIDIA. Meu único objetivo é usar o Keras e o TensorFlow com ele. No entanto, não sei todas as coisas importantes para fazê-lo funcionar. Minha pergunta, portanto, é: é possível usar o TensorFlow com CUDA e eGPU no final do MacBook Pro 2016 (15 ")? Quero usar a placa gráfica no macOS (com o final do MacBook Pro 15") como uma eGPU (sem dual partição de inicialização / Windows / Linux).

Nota lateral: Já vi usuários usando eGPUs em macbooks antes (Razor Core, AKiTiO Node), mas nunca em combinação com CUDA e Machine Learning (ou o 1080 GTX). As pessoas sugeriram alugar espaço no servidor ou usar o Windows (melhor suporte à placa gráfica) ou até mesmo construir um novo PC pelo mesmo preço que permite o uso de uma eGPU no Mac. (Eu não prefiro essa opção.)

Joop
fonte
O CUDA no 1080 definitivamente funciona. Eu estava treinando uma rede em um 1080 nesta manhã usando o Keras com o back-end do TensorFlow (no Ubuntu, mas ainda assim).
Brendon-ai

Respostas:

19

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

Eu escrevi uma essência com o procedimento, espero que ajude

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

Aqui está o que eu fiz:

Essa configuração funcionou para mim, espero que ajude

É baseado em: https://becominghuman.ai/deep-learning-gaming-build-with-nvidia-titan-xp-and-macbook-pro-with-thunderbolt2-5ceee7167f8b

e assim por diante: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support

Hardware

Versões de software

  • macOS Sierra versão 10.12.6
  • Versão do driver GPU: 10.18.5 (378.05.05.25f01)
  • Versão do driver CUDA: 8.0.61
  • cuDNN v5.1 (20 de janeiro de 2017), para CUDA 8.0: é necessário se registrar e fazer o download
  • tensorflow-gpu 1.0.0
  • Keras 2.0.8

Procedimento:

Instale o driver da GPU

  1. Desligue o sistema, ligue-o novamente pressionando as teclas (⌘ e R) até ver , para que você possa entrar no modo de recuperação.
  2. Na barra de menus, clique em Utilitários> Terminal e escreva 'csrutil disable; reboot 'pressione enter para executar este comando.
  3. Quando o seu Mac for reiniciado, execute este comando no 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 sua eGPU do seu Mac e reinicie. Isso é importante se você não desconectou sua eGPU, pode aparecer uma tela preta após a reinicialização.

  5. Quando o seu Mac reiniciar, abra o Terminal e execute este comando:

    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
    
    1. Conecte sua eGPU ao seu Mac via TH2.
    2. Reinicie o seu Mac.

Instale CUDA, cuDNN, Tensorflow e Keras

Neste momento, o Keras 2.08 precisa do tensorflow 1.0.0. O Tensorflow-gpu 1.0.0 precisa do CUDA 8.0 e o cuDNN v5.1 é o que funcionou para mim. Eu tentei outras combinações, mas não parece funcionar

  1. Baixe e instale o CUDA 8.0 CUDA Toolkit 8.0 GA2 (fevereiro de 2017)
  2. Instale-o e siga as instruções
  3. Definir variáveis ​​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
    

(Se o seu bash_profile não existir, crie-o. Isso é executado toda vez que você abre uma janela do terminal)

  1. Download e instalação do cuDNN (cudnn-8.0-osx-x64-v5.1) É necessário registrar-se antes de fazer o download
  2. Copiar arquivos cuDNN para CUDA

    cd ~/Downloads/cuda
    sudo cp include/* /usr/local/cuda/include/
    sudo cp lib/* /usr/local/cuda/lib/
    
  3. Crie um ambiente e instale o tensorflow

    conda create -n egpu python=3
    source activate egpu
    pip install tensorflow-gpu==1.0.0
    
  4. Verifique se funciona

Execute o seguinte 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 o Keras no ambiente e defina o tensorflow como back-end:

    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"
    

    Saída:

    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
fonte
você precisa de um monitor externo para isso? Ou você não?
perfil completo de Abhimanyu Aryan
@AbhimanyuAryan, não há necessidade de monitor externo. Isto é apenas para usar a eGPU com tensorlfow e / ou keras #
Julian
Isso também funciona com o Mac OS 10.13. Vejo que eles só têm CUDA 9 atualizado para 10.13 e Cuda 8 é apenas para 10.12. Estou tentando ver se consegui executar o TuriCreate na GPU.
Niklas
Você comparou o desempenho com o PC?
Angus Tay
Alguém tentou isso com o BlackMagic eGPU?
Pratik Khadloya
9

Consegui obter uma NVIDIA GTX 1080 Ti trabalhando no Akitio Node no meu iMac (final de 2013). Estou usando um adaptador Thunderbolt 2> 3, embora em Macs mais novos você possa usar o TB3 mais rápido diretamente.

Existem várias configurações de eGPU descritas em eGPU.io, e você pode encontrar uma que descreva seu computador / gabinete / placa com precisão. Esses tutoriais são principalmente para acelerar uma exibição com uma eGPU, embora, para treinar NNs, você obviamente não precise seguir todas as etapas.

Aqui está aproximadamente o que eu fiz:

  • Instale o CUDA de acordo com a documentação oficial.
  • Desative o SIP (Google para obter um tutorial). É necessário pelo script eGPU.sh e, posteriormente, também pelo TensorFlow.
  • Execute o script automate-eGPU.sh (com sudo) no qual todo mundo no eGPU.io parece confiar.
  • Instale o cuDNN. Os arquivos do site da NVIDIA devem ficar abaixo /usr/local/cudado restante das bibliotecas e inclusões da CUDA.
  • Desinstale o TensorFlow somente da CPU e instale um com suporte à GPU. Ao instalar com pip install tensorflow-gpu, não tive erros de instalação, mas obtive um segfault ao exigir o TensorFlow em Python. Acontece que há algumas variáveis ​​de ambiente que precisam ser definidas (um pouco diferente do sugerido pelo instalador do CUDA), que foram descritas em um comentário de problema do GitHub .
  • Também tentei compilar o TensorFlow a partir do código-fonte, que não funcionou antes de definir os envios conforme descrito na etapa anterior.

Nos menus do iStat, posso verificar se minha GPU externa é realmente usada durante o treinamento. Porém, essa instalação do TensorFlow não funcionou com o Jupyter, mas espero que haja uma solução alternativa para isso.

Eu não usei muito essa configuração, por isso não tenho certeza sobre o aumento de desempenho (ou limitações de largura de banda), mas o eGPU + TensorFlow / CUDA certamente é possível agora, desde que a NVIDIA começou a lançar drivers adequados para o macOS.

Mattias Arro
fonte
Um aviso: a partir do TensorFlow 1.2, eles não fornecem pacotes oficiais de pip tensorflow-gpu. Isso significa que precisamos construí-lo a partir de fontes, o que, na minha experiência, nunca funciona imediatamente. Espero que haja tutoriais de terceiros sobre como compilar versões principais, mas, por enquanto, não posso, por exemplo, atualizar para 1.2 ou 1.3 se ainda quiser usar minha GPU.
Mattias Arro
3
Conseguiu compilar o tensorfow 1.2 a partir da fonte. Escreveu um pequeno tutorial sobre isso: medium.com/@mattias.arro/…
Mattias Arro
3

O suporte à eGPU no macOS é um tópico difícil, mas farei o possível para responder à sua pergunta.

Vamos começar com placas gráficas! Por uma questão de tempo, e porque estamos falando da CUDA, ficaremos com as placas da Nvidia. Qualquer placa de vídeo funcionará com os drivers adequados no Windows. A Apple, no entanto, suporta oficialmente apenas algumas placas gráficas da Nvidia, principalmente as muito antigas. No entanto, os drivers gráficos da Nvidia realmente funcionam em quase todas as placas GeForce e Quadro da Nvidia, com uma grande exceção. Os cartões GTX 10xx NÃO FUNCIONARÃO. Em qualquer sistema operacional Mac. Período. Os drivers da Nvidia não suportam este cartão. Se você está procurando energia, você deve olhar para a GTX 980Ti ou Titan X (muitas boas placas Quadro também funcionam bem).

Agora que resolvemos isso, vamos para os gabinetes de eGPU. Eu vou assumir, porque você mencionou especificamente eGPUs, que você fez um orçamento para um gabinete de eGPU real (vamos usar o AKiTiO Node como exemplo), em vez de um chassi de expansão PCIe com uma fonte de alimentação externa, pois isso não é necessário. uma ótima ideia.

Portanto, agora temos uma placa gráfica (GTX 980Ti) em um gabinete eGPU (AKiTiO Node) e queremos que ela funcione. Bem, é mais fácil falar do que fazer. Pesquisei um pouco a eGPU no final de 2016 e as informações que obtive foram relativamente confusas; portanto, se alguém tiver algum comentário ou correção, entre em contato. Pelo que entendi, para utilizar o poder da eGPU, você precisa conectar um monitor externo à eGPU. Não acredito que você possa executar a eGPU sem um monitor externo no macOS. Você também não verá a tela de inicialização da Apple no monitor conectado à eGPU (a menos que compre um cartão flash da MacVidCards), mas poderá usar o eGPU para direcionar seus gráficos.

Supondo que você faça tudo isso com êxito, você deve ter uma potência gráfica ativada por CUDA de alta potência.

NoahL
fonte
Obrigado pela informação. A combinação do 980 Ti com um gabinete de eGPU parece ser uma opção viável. A única coisa é que o Akitio Node (3) parece descontinuado e o Razor Core não é enviado. Qual gabinete de eGPU pode realmente ser comprado? Akitio Node 2?
Joop
2
Bem, a Bizon Box foi projetada para isso, mas custa US $ 500. Deixe-me dar uma olhada ...
NoahL 25/17/17
1
Este link também pode ser uma boa leitura: appleinsider.com/articles/17/01/17/…
NoahL 25/17
A série "10XX" realmente não está funcionando no mac? Tenho ouvido outros (incluindo outra resposta aqui) usado 1080ti no mac ...
Blaszard
A partir desta resposta, absolutamente. 10xx motoristas série de Mac não foram liberados até um ano depois que as cartas foram (em algum momento no final de 2017 ou início de 2018, se bem me lembro)
NoahL
1

Se você estiver usando o macOS 10.13.3, verifique este link . Abrange tudo, desde a configuração da eGPU até a compilação do TensorFlow.

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • Kit de ferramentas CUDA: 9.1.128
  • cuDNN: 7
  • NVDAEGPUSupport: 6
  • XCode: 8.2
  • Bazel: 0.9.0
  • OpenMP: mais recente
  • Python: 3.6
  • TensorFlow: 1.5.0
GeekCui
fonte