Học máy trên GPU ngoài với CUDA và cuối MBP 2016?


31

Tôi muốn biết các tùy chọn GPU ngoài (eGPU) là gì cho macOS năm 2017 với MacBook Pro cuối năm 2016.

Tôi đã thực hiện nghiên cứu của mình, tuy nhiên trên internet tôi tìm thấy rất nhiều thông tin khó hiểu. Một số người nói rằng nó có thể hoạt động, nhưng nó yêu cầu Windows (khởi động kép). Những người khác nói, nó chỉ có thể hoạt động cho các card đồ họa cũ vì CUDA không được hỗ trợ cho các card đồ họa mới hơn (GTX 1080). Lý tưởng nhất, tôi muốn chạy 1080 GTX của NVIDIA. Mục đích duy nhất của tôi là sử dụng Keras và TensorFlow với nó. Tuy nhiên, tôi không biết tất cả những điều quan trọng để làm cho nó hoạt động. Do đó, câu hỏi của tôi là, có thể sử dụng TensorFlow với CUDA và eGPU trên MacBook Pro 2016 (15 ") không? Tôi muốn sử dụng card đồ họa trong macOS (với MacBook Pro 15" muộn) như một eGPU (không có hai phân vùng khởi động / Windows / Linux).

Lưu ý bên lề: Tôi đã thấy người dùng sử dụng eGPU trên macbook trước đó (Dao cạo lõi, Nút AKiTiO), nhưng không bao giờ kết hợp với CUDA và Machine Learning (hoặc 1080 GTX cho vấn đề đó). Mọi người đề nghị thuê không gian máy chủ thay thế hoặc sử dụng Windows (hỗ trợ card đồ họa tốt hơn) hoặc thậm chí xây dựng một PC mới với cùng mức giá cho phép bạn sử dụng eGPU trên Mac. (Tôi không thích lựa chọn đó.)


CUDA trên 1080 chắc chắn không hoạt động. Tôi đã đào tạo một mạng trên 1080 vào sáng sớm hôm nay bằng cách sử dụng Keras với chương trình phụ trợ TensorFlow (trên Ubuntu, nhưng vẫn còn).
brendon-ai

Câu trả lời:


19

Cuối cùng tôi cũng có thể cài đặt Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras

Tôi đã viết một ý chính với thủ tục, hy vọng nó sẽ giúp

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

Đây là những gì tôi đã làm:

Cấu hình này làm việc cho tôi, hy vọng nó sẽ giúp

Nó dựa trên: https://becominghuman.ai/deep-learning-gaming-build-with-nvidia-titan-xp-and-macbook-pro-with-thunderbolt2-5ceee7167f8b

và trên: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support

Phần cứng

Phiên bản phần mềm

  • macOS Sierra Phiên bản 10.12.6
  • Phiên bản trình điều khiển GPU: 10.18.5 (378.05.05.25f01)
  • Phiên bản trình điều khiển CUDA: 8.0.61
  • cuDNN v5.1 (ngày 20 tháng 1 năm 2017), cho CUDA 8.0: Cần đăng ký và tải xuống
  • tenorflow-gpu 1.0.0
  • Máy ảnh 2.0.8

Thủ tục:

Cài đặt trình điều khiển GPU

  1. ShutDown hệ thống của bạn, cấp nguồn lại cho nó bằng cách nhấn các phím (⌘ và R) cho đến khi bạn thấy, điều này sẽ cho phép bạn ở Chế độ khôi phục.
  2. Từ Thanh Menu bấm vào Tiện ích> Thiết bị đầu cuối và viết 'csrutil vô hiệu hóa; khởi động lại 'nhấn enter để thực hiện lệnh này.
  3. Khi máy Mac của bạn khởi động lại, hãy chạy lệnh này trong 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. Rút phích cắm eGPU khỏi máy Mac của bạn và khởi động lại. Điều này rất quan trọng nếu bạn không rút eGPU, bạn có thể kết thúc với màn hình đen sau khi khởi động lại.

  5. Khi máy Mac của bạn khởi động lại, hãy mở Terminal và thực hiện lệnh này:

    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
    
    1. Cắm eGPU của bạn vào máy mac thông qua TH2.
    2. Khởi động lại máy Mac của bạn.

Cài đặt CUDA, cuDNN, Tensorflow và Keras

Tại thời điểm này, Keras 2.08 cần tenorflow 1.0.0. Tensorflow-gpu 1.0.0 cần CUDA 8.0 và cuDNN v5.1 là ứng dụng phù hợp với tôi. Tôi đã thử các kết hợp khác nhưng dường như không hoạt động

  1. Tải xuống và cài đặt CUDA 8.0 CUDA Toolkit 8.0 GA2 (Tháng 2 năm 2017)
  2. Cài đặt nó và làm theo hướng dẫn
  3. Đặt biến 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
    

(Nếu bash_profile của bạn không tồn tại, hãy tạo nó. Điều này được thực hiện mỗi khi bạn mở một cửa sổ đầu cuối)

  1. Tải xuống và cài đặt cuDNN (cudnn-8.0-osx-x64-v5.1) Cần đăng ký trước khi tải xuống
  2. Sao chép tập tin cuDNN vào CUDA

    cd ~/Downloads/cuda
    sudo cp include/* /usr/local/cuda/include/
    sudo cp lib/* /usr/local/cuda/lib/
    
  3. Tạo môi trường và cài đặt tenorflow

    conda create -n egpu python=3
    source activate egpu
    pip install tensorflow-gpu==1.0.0
    
  4. Xác nhận nó hoạt động

Chạy đoạn script sau:

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. Cài đặt máy ảnh trong môi trường và đặt dòng chảy dưới dạng phụ trợ:

    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"
    

    Đầu ra:

    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
    

Bạn có cần một màn hình bên ngoài cho việc này? Hay bạn không?
Abhimanyu Aryan

@AbhimanyuAryan, không cần màn hình ngoài. Đây chỉ là để sử dụng eGPU với tenorlfow và / hoặc máy ảnh
Julian

Điều này cũng hoạt động với Mac OS 10.13. Tôi thấy họ chỉ có CUDA 9 được cập nhật cho 10.13 và Cuda 8 chỉ dành cho 10.12. Tôi đang cố gắng để xem thời tiết tôi có thể có được điều này để chạy TuriCreate trên GPU.
Niklas

Bạn đã so sánh hiệu suất với PC chưa?
Angus Tay

Bất cứ ai cũng đã thử điều này với BlackMagic eGPU?
Pratik Khadloya

9

Tôi đã có thể để NVIDIA GTX 1080 Ti hoạt động trên Akitio Node trên iMac của tôi (cuối năm 2013). Tôi đang sử dụng bộ chuyển đổi Thunderbolt 2> 3, mặc dù trên các máy Mac mới hơn, bạn có thể sử dụng TB3 nhanh hơn trực tiếp.

Có nhiều thiết lập eGPU khác nhau được mô tả tại eGPU.io và bạn có thể tìm thấy một mô tả chính xác về máy tính / bao vây / thẻ của bạn. Các hướng dẫn này chủ yếu để tăng tốc hiển thị với eGPU, mặc dù để đào tạo NN, rõ ràng bạn không cần phải làm theo tất cả các bước.

Đây là những gì tôi đã làm:

  • Cài đặt CUDA theo tài liệu chính thức.
  • Vô hiệu hóa SIP (Google cho một hướng dẫn). Nó cần cho kịch bản eGPU.sh và sau đó là bởi TensorFlow.
  • Chạy tập lệnh automate-eGPU.sh (với sudo) mà mọi người trong eGPU.io dường như đều dựa vào.
  • Cài đặt cuDNN. Các tệp từ trang web của NVIDIA phải đi /usr/local/cudacùng với các thư viện CUDA còn lại của bạn và bao gồm.
  • Gỡ cài đặt TensorFlow chỉ dành cho CPU và cài đặt một hỗ trợ GPU. Khi cài đặt với pip install tensorflow-gpu, tôi không có lỗi cài đặt, nhưng đã có một segfault khi yêu cầu TensorFlow trong Python. Hóa ra có một số biến môi trường phải được đặt (khác một chút so với trình cài đặt CUDA gợi ý), được mô tả trong một nhận xét về vấn đề GitHub .
  • Tôi cũng đã thử biên dịch TensorFlow từ nguồn, nó không hoạt động trước khi tôi đặt các env vars như được mô tả trong bước trước.

Từ Menu iStat tôi có thể xác minh rằng GPU bên ngoài của tôi thực sự được sử dụng trong quá trình đào tạo. Mặc dù vậy, bản cài đặt TensorFlow này không hoạt động với Jupyter, nhưng hy vọng có một cách giải quyết cho điều đó.

Tôi chưa sử dụng thiết lập này nhiều nên không chắc chắn về việc tăng hiệu suất (hoặc giới hạn băng thông), nhưng eGPU + TensorFlow / CUDA chắc chắn là có thể ngay bây giờ, vì NVIDIA đã bắt đầu phát hành trình điều khiển thích hợp cho macOS.


Một lời cảnh báo: từ TensorFlow 1.2 trở đi, họ không cung cấp các gói pip tenorflow-gpu chính thức. Điều này có nghĩa là chúng ta cần xây dựng nó từ các nguồn, theo kinh nghiệm của tôi không bao giờ hoạt động ngay lập tức. Hy vọng sẽ có hướng dẫn của bên thứ 3 về cách biên dịch các bản phát hành chính, nhưng hiện tại tôi không thể nâng cấp lên 1.2 hoặc 1.3 nếu tôi vẫn muốn sử dụng GPU của mình.
Mattias Arro

3
Quản lý để biên dịch hàng chục 1.2 từ nguồn. Đã viết một hướng dẫn nhỏ về nó: Medium.com/@mattias.arro/ Kẻ
Mattias Arro

3

Hỗ trợ eGPU trên macOS là một chủ đề khó, nhưng tôi sẽ cố hết sức để trả lời câu hỏi của bạn.

Hãy bắt đầu với card đồ họa! Vì lợi ích của thời gian và vì chúng ta đang nói về CUDA, chúng tôi sẽ gắn bó với thẻ Nvidia. Bất kỳ card đồ họa nào cũng sẽ hoạt động với trình điều khiển thích hợp trên Windows. Tuy nhiên, Apple chỉ chính thức hỗ trợ một vài card đồ họa Nvidia, chủ yếu là những card rất cũ. Tuy nhiên, trình điều khiển đồ họa Nvidia thực sự hoạt động trên hầu hết các thẻ GeForce và Quadro của Nvidia, với một ngoại lệ lớn. Thẻ GTX 10xx S NOT KHÔNG LÀM VIỆC. Trên bất kỳ hệ điều hành Mac nào. Giai đoạn. Trình điều khiển của Nvidia không hỗ trợ thẻ này. Nếu bạn đang tìm kiếm sức mạnh, bạn sẽ muốn xem GTX 980Ti hoặc Titan X (nhiều thẻ Quadro tốt cũng sẽ hoạt động tốt).

Bây giờ chúng ta đã có điều đó, hãy chuyển sang các bao vây eGPU. Tôi sẽ giả sử, bởi vì bạn đã đề cập cụ thể đến eGPU, rằng bạn đã dự trù ngân sách cho một bao vây eGPU thực tế (hãy sử dụng AKiTiO Node làm ví dụ), thay vì khung mở rộng PCIe với nguồn điện bên ngoài, vì đây không phải là một ý tưởng tuyệt vời

Vì vậy, bây giờ chúng tôi có một card đồ họa (GTX 980Ti) trong một bao vây eGPU (AKiTiO Node) và chúng tôi muốn làm cho nó hoạt động. Chà, nói thì dễ hơn làm. Tôi đã thực hiện một chút nghiên cứu về eGPU vào cuối năm 2016 và thông tin tôi nhận được tương đối khó hiểu, vì vậy nếu có ai có bất kỳ nhận xét hoặc chỉnh sửa nào, vui lòng cho tôi biết. Theo những gì tôi hiểu, để tận dụng sức mạnh của eGPU, bạn cần cắm một màn hình ngoài vào eGPU. Tôi không tin rằng bạn có thể chạy eGPU mà không cần màn hình ngoài trong macOS. Bạn cũng sẽ không thấy màn hình khởi động của Apple trên màn hình được kết nối với eGPU (trừ khi bạn mua thẻ flash từ MacVidCards), nhưng sau đó bạn có thể sử dụng eGPU để điều khiển đồ họa của mình.

Giả sử bạn thực hiện tất cả những điều này thành công, bạn sẽ có một sức mạnh đồ họa hỗ trợ CUDA rất cao.


Cảm ơn bạn đã thông tin. Sự kết hợp của 980 Ti với vỏ bọc eGPU có vẻ như là một lựa chọn khả thi. Điều duy nhất là, Akitio Node (3) dường như đã ngừng hoạt động và Core Core không xuất xưởng. Những bao vây eGPU thực sự có thể được mua? Akitio Nút 2?
Joop

2
Vâng Bizon Box được thiết kế cho nó, nhưng nó có giá 500 đô la. Hãy để tôi làm một số tìm kiếm ...
NoahL

1
Liên kết này cũng có thể giúp bạn đọc tốt: appleinsider.com/articles/17/01/17/17

Sê-ri "10XX" có thực sự không hoạt động trên mac không? Tôi đã nghe những người khác (bao gồm một câu trả lời khác ở đây) đã sử dụng 1080ti trên mac ...
Blaszard

Như câu trả lời này, hoàn toàn. Trình điều khiển máy Mac 10xx không được phát hành cho đến một năm sau khi thẻ được sử dụng (đôi khi vào cuối năm 2017 hoặc đầu năm 2018, nếu tôi nhớ chính xác)
NoahL


1

Nếu bạn đang sử dụng macOS 10.13.3, hãy kiểm tra liên kết này . Nó bao gồm mọi thứ, từ thiết lập eGPU đến biên dịch TensorFlow.

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • Bộ công cụ CUDA: 9.1.128
  • cuDNN: 7
  • Hỗ trợ NVDAEGPUS: 6
  • Mã số: 8.2
  • Bazel: 0,9,0
  • OpenMP: mới nhất
  • Con trăn: 3.6
  • Độ căng: 1.5.0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.