banner large

Cara Menjalankan Wadah Penulisan Docker Dengan Akses GPU

Comment
X
Share

logo buruh pelabuhan

Akses GPU di Docker memungkinkan Anda menampung beban kerja yang menuntut seperti aplikasi pembelajaran mesin. GPU tidak tersedia secara otomatis saat Anda memulai container baru, tetapi dapat diaktifkan dengan --gpus bendera untuk docker run atau dengan menambahkan bidang tambahan ke a docker-compose.yml mengajukan.

Pada artikel ini, kami akan menunjukkan cara mengaktifkan dukungan GPU di Docker Compose. Anda memerlukan Docker Compose versi v1.28 atau yang lebih baru untuk mengikuti panduan ini. GPU tidak didukung di Compose versi v1.18 dan yang lebih lama; rilis antara v1.19 dan v1.27 menggunakan struktur bidang warisan yang memberikan lebih sedikit kontrol.

Mempersiapkan Sistem Anda

Host Docker Anda perlu disiapkan sebelum dapat mengekspos perangkat keras GPU Anda. Meskipun container berbagi kernel host Anda, mereka tidak dapat melihat paket sistem yang telah Anda instal. Wadah biasa tidak akan memiliki driver perangkat yang berinteraksi dengan GPU Anda.

Anda dapat mengaktifkan dukungan untuk GPU NVIDIA dengan menginstal Docker Container Toolkit NVIDIA:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) 
   && curl -s -L  | sudo apt-key add - 
   && curl -s -L  | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt update
sudo apt install -y nvidia-docker2
sudo systemctl restart docker

Paket ini membungkus runtime container Docker dengan antarmuka ke driver NVIDIA host Anda. Memeriksa Anda /etc/docker/daemon.json file akan mengonfirmasi bahwa runtime container yang dikonfigurasi telah diubah. Toolkit NVIDIA akan menangani injeksi koneksi perangkat GPU saat container baru dimulai. Ini kemudian akan diserahkan ke runtime container reguler Anda.

$ cat /etc/docker/daemon.json
{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

Mempersiapkan Gambar Anda

Akses GPU di Docker juga bergantung pada image container Anda yang dikonfigurasi dengan benar. Biasanya paling sederhana untuk mendasarkan gambar Anda pada varian nvidia/cuda. Titik awal yang disediakan NVIDIA ini telah dikonfigurasi sebelumnya dengan dukungan CUDA. Instal bahasa pemrograman apa pun yang Anda butuhkan, lalu salin kode yang bergantung pada GPU Anda:

FROM nvidia/cuda:11.4.0-base-ubuntu20.04
RUN apt update &&\ 
  apt-get install -y python3 python3-pip &&\
  pip install tensorflow-gpu

COPY tensor.py .
ENTRYPONT ["python3", "tensor.py"]

Anda harus menggunakan versi CUDA yang sama dengan yang Anda instal di host Anda. Anda dapat memeriksa ini dengan menjalankan nvidia-smi:

$ nvidia-smi
Tue May 10 19:15:00 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.103.01   Driver Version: 470.103.01   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
...

Sekarang Anda dapat menulis file Docker Compose untuk memulai container Anda dengan lampiran GPU.

Mengakses GPU di Docker Compose

GPU direferensikan dalam a docker-compose.yml berkas melalui deploy.resources.reservations.devices bidang dalam layanan Anda yang membutuhkannya. Mekanisme ini memungkinkan Anda mengidentifikasi GPU yang ingin Anda lampirkan. Setiap perangkat yang dipilih akan diberikan ke wadah Anda.

Berikut adalah contoh sederhana yang memulai wadah menggunakan nvidia/cuda gambar. Ini akan memancarkan informasi tentang GPU Anda saat penampung dimulai.

services:
  app:
    image: nvidia/cuda:11.4.0-base-ubuntu20.04
    command: nvidia-smi
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: [gpu]

Itu deploy.resources.reservations.devices bidang menentukan perangkat yang dapat digunakan wadah Anda. Mengatur driver ke nvidia dan menambahkan gpu kemampuan mendefinisikan perangkat GPU.

Lari docker-compose up (atau docker compose up untuk Compose v2) untuk memulai penampung Anda:

$ docker compose up
Creating network "scratch_default" with the default driver
Creating scratch_app_1 ... done
Attaching to scratch_app_1
app_1  | Tue May 10 14:21:14 2022       
app_1  | +-----------------------------------------------------------------------------+
app_1  | | NVIDIA-SMI 470.103.01   Driver Version: 470.103.01   CUDA Version: 11.4     |
app_1  | |-------------------------------+----------------------+----------------------+

Wadah harus berhasil mendapatkan akses ke GPU Anda. Versi driver dan CUDA akan cocok dengan yang diinstal pada host Anda.

Menggunakan Beberapa GPU

Wadah Anda menerima akses ke semua GPU di sistem Anda kecuali jika konfigurasi lebih lanjut diberikan. Ada dua cara berbeda untuk mengakses subset perangkat GPU Anda.

Mengakses Sejumlah Perangkat

Itu count lapangan cadangan sejumlah perangkat tertentu. Dalam contoh ini, sistem dengan dua GPU akan menyediakan salah satunya ke container. Sewenang-wenang mana yang akan dipilih.

services:
  app:
    image: nvidia/cuda:11.4.0-base-ubuntu20.04
    command: nvidia-smi
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

Mengakses Perangkat Tertentu

Anda dapat mengidentifikasi perangkat individual di sistem Anda menggunakan device_ids bidang. Ini menerima larik ID perangkat yang diindeks 0 untuk diberikan ke penampung. Anda dapat menemukan ID ini dengan mencantumkan GPU Anda dengan nvidia-smi:

$ nvidia-smi --list-gpus
GPU 0: NVIDIA GeForce GTX 1080 Ti (UUID: GPU-5ba4538b-234f-2c18-6a7a-458d0a7fb348)
GPU 1: NVIDIA GeForce GTX 1080 Ti (UUID: GPU-d5ce9af3-710c-4222-95f8-271db933d438)
GPU 2: NVIDIA GeForce GTX 1080 Ti (UUID: GPU-50d4eb4f-7b08-4f8f-8d20-27d797fb7f19)
GPU 3: NVIDIA GeForce GTX 1080 Ti (UUID: GPU-bed2d40a-c6e7-4547-8d7d-a1576c5247b2)

Untuk mengakses dua perangkat terakhir dalam daftar dengan andal, sertakan ID perangkat mereka dalam konfigurasi layanan Anda:

services:
  app:
    image: nvidia/cuda:11.4.0-base-ubuntu20.04
    command: nvidia-smi
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ["2", "3"]
              capabilities: [gpu]

Kamu dapat memakai count atau device_ids di setiap definisi layanan Anda. Anda akan mendapatkan kesalahan saat menjalankan docker-compose up jika Anda mencoba menggabungkan keduanya, tentukan ID perangkat yang tidak valid, atau gunakan nilai count itu lebih tinggi dari jumlah GPU di sistem Anda.

Ringkasan

Rilis Docker Compose modern mendukung akses GPU melalui deploy.resources fitur reservasi perangkat. Anda masih bertanggung jawab untuk menyiapkan lingkungan host dan menggunakan image container yang mendukung GPU. Setelah itu diurus, lari docker-compose up -d lebih sederhana daripada mengingat untuk memasukkan --gpus all tandai setiap kali Anda menggunakan docker run.

Anda dapat berkomitmen docker-compose.yml file ke kontrol sumber sehingga semua orang mendapatkan akses GPU otomatis. Anda harus memastikan bahwa Anda melakukan standarisasi pada versi driver NVIDIA yang konsisten, karena rilis yang digunakan oleh gambar Anda harus cocok dengan yang diinstal pada host Anda. Di masa depan, dukungan GPU Docker dapat bekerja dengan perangkat Intel dan AMD juga, tetapi mencoba menggunakannya hari ini akan menghasilkan kesalahan. NVIDIA adalah satu-satunya vendor GPU yang saat ini didukung oleh proyek Moby.

Leave a Reply

Your email address will not be published. Required fields are marked *