Uczenie maszynowe na zewnętrznym GPU z CUDA i późnym MBP 2016?

31

Chciałbym wiedzieć, jakie są opcje zewnętrznego GPU (eGPU) dla systemu macOS w 2017 r. W MacBooku Pro z końca 2016 r.

Przeprowadziłem badania, jednak w Internecie znajduję wiele mylących informacji. Niektórzy twierdzą, że może działać, ale wymaga systemu Windows (podwójny rozruch). Inni twierdzą, że może działać tylko na starszych kartach graficznych, ponieważ CUDA nie jest obsługiwany przez nowsze karty graficzne (GTX 1080). Idealnie chciałbym uruchomić 1080 GTX NVIDIA. Moim jedynym celem jest używanie z nim Keras i TensorFlow. Jednak nie znam wszystkich rzeczy, które są ważne, aby to zadziałało. Moje pytanie brzmi zatem: czy można używać TensorFlow z CUDA i eGPU na późnym MacBooku Pro 2016 (15 ")? Chcę używać karty graficznej w macOS (z późnym MacBookiem Pro 15") jako eGPU (bez podwójnego partycja rozruchowa / Windows / Linux).

Uwaga dodatkowa: wcześniej widziałem użytkowników korzystających z eGPU na komputerach Macbook (Razor Core, AKiTiO Node), ale nigdy w połączeniu z CUDA i Machine Learning (lub 1080 GTX w tym przypadku). Ludzie sugerowali, aby zamiast tego wynająć miejsce na serwerze lub skorzystać z systemu Windows (lepsza obsługa kart graficznych), a nawet zbudować nowy komputer w tej samej cenie, co pozwala na korzystanie z eGPU na komputerze Mac. (Nie wolę tej opcji).

Joop
źródło
CUDA na 1080 zdecydowanie działa. Trenowałem sieć na 1080 wcześniej tego ranka, używając Keras z backendem TensorFlow (na Ubuntu, ale nadal).
brendon-ai

Odpowiedzi:

19

W końcu mogłem zainstalować Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras

Napisałem streszczenie procedury, mam nadzieję, że to pomoże

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

Oto co zrobiłem:

Ta konfiguracja działała dla mnie, mam nadzieję, że pomoże

Opiera się na: https://becominghuman.ai/deep-learning-gaming-build-with-nvidia-titan-xp-and-macbook-pro-with-thunderbolt2-5ceee7167f8b

i na: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support

Sprzęt komputerowy

Wersje oprogramowania

  • macOS Sierra Wersja 10.12.6
  • Wersja sterownika GPU: 10.18.5 (378.05.05.25f01)
  • Wersja sterownika CUDA: 8.0.61
  • cuDNN v5.1 (20 stycznia 2017 r.), dla CUDA 8.0: Konieczna rejestracja i pobranie
  • tensorflow-gpu 1.0.0
  • Keras 2.0.8

Procedura:

Zainstaluj sterownik GPU

  1. Zamknij system, włącz go ponownie, naciskając klawisze (⌘ i R), aż zobaczysz , to pozwoli ci w trybie odzyskiwania.
  2. Na pasku menu kliknij Narzędzia> Terminal i napisz „csrutil disable”; restart ”naciśnij klawisz Enter, aby wykonać to polecenie.
  3. Po ponownym uruchomieniu komputera Mac uruchom to polecenie w terminalu:

    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. Odłącz eGPU od komputera Mac i uruchom ponownie. Jest to ważne, jeśli nie odłączyłeś eGPU, po uruchomieniu może pojawić się czarny ekran.

  5. Po ponownym uruchomieniu komputera Mac otwórz terminal i wykonaj następujące polecenie:

    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
    
    1. Podłącz swój eGPU do komputera Mac przez TH2.
    2. Uruchom ponownie komputer Mac.

Zainstaluj CUDA, cuDNN, Tensorflow i Keras

W tej chwili Keras 2.08 potrzebuje tensorflow 1.0.0. Tensorflow-gpu 1.0.0 potrzebuje CUDA 8.0, a cuDNN v5.1 jest tym, który działał dla mnie. Próbowałem innych kombinacji, ale wydaje się, że nie działa

  1. Pobierz i zainstaluj CUDA 8.0 CUDA Toolkit 8.0 GA2 (luty 2017)
  2. Zainstaluj i postępuj zgodnie z instrukcjami
  3. Ustaw zmienne 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
    

(Jeśli Twój profil bash nie istnieje, utwórz go. Jest to wykonywane za każdym razem, gdy otwierasz okno terminalu)

  1. Pobieranie i instalowanie cuDNN (cudnn-8.0-osx-x64-v5.1) Musisz się zarejestrować przed pobraniem
  2. Skopiuj pliki cuDNN do CUDA

    cd ~/Downloads/cuda
    sudo cp include/* /usr/local/cuda/include/
    sudo cp lib/* /usr/local/cuda/lib/
    
  3. Utwórz środowisko i zainstaluj tensorflow

    conda create -n egpu python=3
    source activate egpu
    pip install tensorflow-gpu==1.0.0
    
  4. Sprawdź, czy to działa

Uruchom następujący skrypt:

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. Zainstaluj Keras w środowisku i ustaw tensorflow jako 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"
    

    Wydajność:

    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
    
juliański
źródło
czy potrzebujesz do tego zewnętrznego monitora? Czy ty nie?
Abhimanyu Aryan
@AbhimanyuAryan, nie ma potrzeby zewnętrznego monitora. Jest to po prostu użycie eGPU z tensorlfow i / lub keras
Julian
Czy działa to również w systemie Mac OS 10.13. Widzę, że mają tylko CUDA 9 zaktualizowaną do wersji 10.13, a Cuda 8 jest tylko do wersji 10.12. Próbuję sprawdzić, czy mogę uruchomić TuriCreate na GPU.
Niklas
Czy porównałeś wydajność do komputera?
Angus Tay
Ktoś próbował tego z BlackMagic eGPU?
Pratik Khadloya,
9

Udało mi się zdobyć NVIDIA GTX 1080 Ti działającą na węźle Akitio na moim komputerze iMac (pod koniec 2013 r.). Używam adaptera Thunderbolt 2> 3, chociaż na nowszych komputerach Mac możesz bezpośrednio korzystać z szybszej TB3.

Istnieją różne konfiguracje eGPU opisane na eGPU.io i możesz znaleźć takie, które dokładnie opisują Twój komputer / obudowę / kartę. Te samouczki mają głównie na celu przyspieszenie wyświetlania za pomocą eGPU, chociaż do szkolenia NN nie trzeba oczywiście wykonywać wszystkich kroków.

Oto mniej więcej to, co zrobiłem:

  • Zainstaluj CUDA zgodnie z oficjalną dokumentacją.
  • Wyłącz SIP (Google dla samouczka). Jest potrzebny w skrypcie eGPU.sh, a później także przez TensorFlow.
  • Uruchom skrypt automate-eGPU.sh (z sudo), na którym wszyscy użytkownicy eGPU.io wydają się polegać.
  • Zainstaluj cuDNN. Pliki ze strony internetowej NVIDIA powinny iść /usr/local/cudaz resztą bibliotek CUDA i zawiera.
  • Odinstaluj TensorFlow tylko do procesora i zainstaluj go z obsługą GPU. Podczas instalacji z pip install tensorflow-gpunie miałem żadnych błędów instalacyjnych, ale dostałem segfault, gdy wymagałem TensorFlow w Pythonie. Okazuje się, że są pewne zmienne środowiskowe, które należy ustawić (nieco inaczej niż sugeruje instalator CUDA), które zostały opisane w komentarzu do wydania GitHub .
  • Próbowałem także skompilować TensorFlow ze źródła, który nie działał, zanim ustawiłem zmienne env zgodnie z opisem w poprzednim kroku.

Z menu iStat mogę sprawdzić, czy mój zewnętrzny procesor GPU jest rzeczywiście używany podczas szkolenia. Ta instalacja TensorFlow nie działała z Jupyter, ale mam nadzieję, że istnieje obejście tego problemu.

Nie korzystałem z tej konfiguracji zbyt wiele, więc nie jestem pewien wzrostu wydajności (lub ograniczeń przepustowości), ale eGPU + TensorFlow / CUDA jest z pewnością możliwe teraz, ponieważ NVIDIA zaczęła wypuszczać odpowiednie sterowniki dla macOS.

Mattias Arro
źródło
Słowo ostrzeżenia: od wersji TensorFlow 1.2 nie dostarczają oficjalnych pakietów pip tensorflow-gpu. Oznacza to, że musimy zbudować go ze źródeł, które z mojego doświadczenia nigdy nie działają od razu. Mam nadzieję, że będą dostępne tutoriale innych firm dotyczące kompilacji głównych wydań, ale na razie nie mogę na przykład zaktualizować wersji 1.2 lub 1.3, jeśli nadal chcę korzystać z mojego GPU.
Mattias Arro,
3
Udało się skompilować tensorfow 1.2 ze źródła. Napisałem na ten temat mały poradnik: medium.com/@mattias.arro/…
Mattias Arro
3

Obsługa eGPU na macOS jest trudnym tematem, ale dołożę wszelkich starań, aby odpowiedzieć na twoje pytanie.

Zacznijmy od kart graficznych! Ze względu na czas, a ponieważ mówimy o CUDA, będziemy trzymać się kart Nvidii. Każda karta graficzna będzie działać z odpowiednimi sterownikami w systemie Windows. Apple oficjalnie obsługuje jednak tylko kilka kart graficznych Nvidia, głównie bardzo starych. Jednak sterowniki graficzne Nvidia faktycznie działają na prawie wszystkich kartach GeForce i Quadro Nvidii, z jednym dużym wyjątkiem. Karty GTX 10xx NIE BĘDĄ DZIAŁAĆ. Na dowolnym systemie operacyjnym Mac. Kropka. Sterowniki Nvidii nie obsługują tej karty. Jeśli szukasz mocy, powinieneś spojrzeć na GTX 980Ti lub Titan X (wiele dobrych kart Quadro również by działało).

Teraz, gdy już to omówiliśmy, przejdźmy do obudów eGPU. Zakładam, ponieważ wspomniałeś konkretnie o eGPU, że budżetowałeś na rzeczywistą obudowę eGPU (użyjmy na przykład węzła AKiTiO), zamiast obudowy rozszerzającej PCIe z zewnętrznym zasilaczem, ponieważ to nie jest świetny pomysł.

Mamy teraz kartę graficzną (GTX 980Ti) w obudowie eGPU (węzeł AKiTiO) i chcemy, aby działała. Łatwiej powiedzieć niż zrobić. Pod koniec 2016 roku przeprowadziłem trochę badań nad eGPU, a informacje, które otrzymałem, były dość mylące, więc jeśli ktoś ma jakieś uwagi lub poprawki, daj mi znać. Z tego co rozumiem, aby wykorzystać moc eGPU, musisz podłączyć zewnętrzny monitor do eGPU. Nie sądzę, że możesz uruchomić eGPU bez zewnętrznego monitora w macOS. Nie zobaczysz również ekranu rozruchowego Apple'a na monitorze podłączonym do eGPU (chyba że kupisz kartę flashowaną od MacVidCards), ale powinieneś być w stanie użyć eGPU do sterowania grafiką.

Zakładając, że wykonasz to wszystko z powodzeniem, powinieneś mieć bardzo wydajny silnik graficzny obsługujący CUDA.

NoahL
źródło
Dziękuję za informację. Połączenie 980 Ti z obudową eGPU wydaje się realną opcją. Jedyne jest to, że Węzeł Akitio (3) wydaje się wycofany, a Rdzeń Żyletki nie jest wysyłany. Jaką obudowę eGPU można faktycznie kupić? Akitio Node 2?
Joop
2
Cóż, Bizon Box jest do tego zaprojektowany, ale kosztuje to 500 $. Pozwól mi trochę
popatrzeć
1
Ten link może też być dobrym odczytem: appleinsider.com/articles/17/01/17/…
NoahL
Czy seria „10XX” naprawdę nie działa na komputerze Mac? Słyszałem, że inni (w tym inna odpowiedź tutaj) używali 1080ti na komputerze Mac ...
Blaszard
Od tej odpowiedzi, absolutnie. Sterowniki dla komputerów Mac z serii 10xx zostały wydane dopiero po upływie roku od wydania karty (pod koniec 2017 r. Lub na początku 2018 r., Jeśli dobrze pamiętam)
NoahL
1

Jeśli używasz systemu macOS 10.13.3, sprawdź ten link . Obejmuje wszystko - od konfiguracji eGPU po kompilację TensorFlow.

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • CUDA Toolkit: 9.1.128
  • cuDNN: 7
  • Obsługa NVDAEGPUS: 6
  • Kod X: 8.2
  • Bazel: 0.9.0
  • OpenMP: najnowszy
  • Python: 3.6
  • TensorFlow: 1.5.0
GeekCui
źródło