Dodanie obsługi GPU firmy NVIDIA do Docker Model Runner

Włącz przyspieszenie GPU dla Docker Model Runner z obsługą NVIDIA CUDA

Docker Model Runner to oficjalne narzędzie firmy Docker do uruchamiania modeli AI lokalnie, ale włączanie przyspieszenia GPU od firmy NVidia w Docker Model Runner wymaga konkretnej konfiguracji.

W przeciwieństwie do standardowych poleceń docker run, docker model run nie obsługuje flag --gpus ani -e, więc obsługę GPU należy skonfigurować na poziomie demona Docker i podczas instalacji runnera.

Jeśli szukasz alternatywnego rozwiązania do hostowania LLM z łatwiejszą konfiguracją GPU, rozważ Ollama, który ma wbudowaną obsługę GPU i prostsze ustawienie. Jednak Docker Model Runner oferuje lepszą integrację z ekosystemem Docker i dystrybucją artefaktów OCI. Aby uzyskać szersze porównanie Docker Model Runner z Ollama, vLLM, LocalAI i dostawcami chmurowych – w tym analizę kosztów i infrastruktury – zobacz Hostowanie LLM: lokalne, samodzielne i infrastruktura w chmurze – porównanie.

Docker Model Runner z obsługą GPU od firmy NVIDIA To piękne zdjęcie zostało wygenerowane przez model AI Flux 1 dev.

Wymagania wstępne

Przed skonfigurowaniem obsługi GPU upewnij się, że masz:

Sprawdź, czy GPU jest dostępne:

nvidia-smi

Testuj dostęp do GPU przez Docker:

docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubi8 nvidia-smi

Aby uzyskać więcej poleceń Docker i opcji konfiguracji, zobacz nasz Docker Cheatsheet.

Krok 1: Skonfiguruj demona Docker dla środowiska uruchomieniowego NVIDIA

Docker Model Runner wymaga, aby środowisko uruchomieniowe NVIDIA było ustawione jako domyślne w konfiguracji demona Docker.

Znajdź ścieżkę do środowiska uruchomieniowego NVIDIA Container Runtime

Najpierw znajdź miejsce, gdzie został zainstalowany nvidia-container-runtime:

which nvidia-container-runtime

Typowo wynik będzie /usr/bin/nvidia-container-runtime. Zanotuj tę ścieżkę dla kolejnego kroku.

Skonfiguruj demona Docker

Utwórz lub zaktualizuj /etc/docker/daemon.json, aby ustawić NVIDIA jako domyślne środowisko uruchomieniowe:

sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "path": "/usr/bin/nvidia-container-runtime",
      "runtimeArgs": []
    }
  }
}
EOF

Ważne: Jeśli which nvidia-container-runtime zwróci inną ścieżkę, aktualizuj wartość "path" w konfiguracji JSON odpowiednio.

Uruchom ponownie usługę Docker

Zastosuj konfigurację, uruchamiając ponownie usługę Docker:

sudo systemctl restart docker

Potwierdź konfigurację

Upewnij się, że środowisko uruchomieniowe NVIDIA zostało skonfigurowane:

docker info | grep -i runtime

W wyniku powinien się pojawić Default Runtime: nvidia.

Krok 2: Zainstaluj Docker Model Runner z obsługą GPU

Docker Model Runner musi zostać zainstalowany lub ponownie zainstalowany z jawną obsługą GPU. Kontener runnera sam w sobie musi być wersją z obsługą CUDA.

Zatrzymaj bieżącego runnera (jeśli działa)

Jeśli Docker Model Runner jest już zainstalowany, zatrzymaj go najpierw:

docker model stop-runner

Zainstaluj/ponownie zainstaluj z obsługą CUDA

Zainstaluj lub ponownie zainstaluj Docker Model Runner z obsługą GPU CUDA:

docker model reinstall-runner --gpu cuda

To polecenie:

  • Pobiera wersję z obsługą CUDA (docker/model-runner:latest-cuda) zamiast wersji tylko dla CPU
  • Konfiguruje kontener runnera do użycia środowiska uruchomieniowego NVIDIA
  • Włącza przyspieszenie GPU dla wszystkich modeli

Uwaga: Jeśli już zainstalowałeś Docker Model Runner bez obsługi GPU, musisz go ponownie zainstalować z flagą --gpu cuda. Samej konfiguracji demona Docker nie wystarczy – sam kontener runnera musi być wersją z obsługą CUDA.

Dostępne backendy GPU

Docker Model Runner obsługuje wiele backendów GPU:

  • cuda - NVIDIA CUDA (najczęstszy dla GPU od firmy NVIDIA)
  • rocm - AMD ROCm (dla GPU od firmy AMD)
  • musa - Moore Threads MUSA
  • cann - Huawei CANN
  • auto - automatyczne wykrywanie (domyślne, może nie działać poprawnie)
  • none - tylko CPU

Dla GPU od firmy NVIDIA zawsze używaj jawnej flagi --gpu cuda.

Krok 3: Potwierdź dostęp do GPU

Po zainstalowaniu, potwierdź, że Docker Model Runner może uzyskać dostęp do GPU.

Sprawdź dostęp do GPU w kontenerze runnera

Przetestuj dostęp do GPU z wnętrza kontenera Docker Model Runner:

docker exec docker-model-runner nvidia-smi

To powinno wyświetlić informacje o GPU, potwierdzając, że kontener ma dostęp do GPU.

Sprawdź status runnera

Potwierdź, że Docker Model Runner działa:

docker model status

Powinieneś zobaczyć, że runner jest aktywny z obsługą llama.cpp.

Krok 4: Testuj model z użyciem GPU

Uruchom model i potwierdź, że korzysta z GPU.

Uruchom model

Uruchom wnioskowanie modelu:

docker model run ai/qwen3:14B-Q6_K "who are you?"

Potwierdź użycie GPU w logach

Sprawdź logi Docker Model Runner na potwierdzenie użycia GPU:

docker model logs | grep -i cuda

Powinieneś zobaczyć wiadomości wskazujące na użycie GPU:

  • using device CUDA0 (NVIDIA GeForce RTX 4080) - wykryto urządzenie GPU
  • offloaded 41/41 layers to GPU - warstwy modelu zostały załadowane na GPU
  • CUDA0 model buffer size = 10946.13 MiB - alokacja pamięci GPU
  • CUDA0 KV buffer size = 640.00 MiB - pamięć cache na GPU
  • CUDA0 compute buffer size = 306.75 MiB - pamięć obliczeniowa na GPU

Monitoruj użycie GPU

W innym terminalu monitoruj użycie GPU w czasie rzeczywistym:

nvidia-smi -l 1

Powinieneś zobaczyć wzrost użycia pamięci i wykorzystania GPU, gdy model działa.

Aby uzyskać bardziej zaawansowane opcje monitorowania GPU, zobacz nasz przewodnik dotyczący aplikacji do monitorowania GPU w systemie Linux / Ubuntu.

Rozwiązywanie problemów

Model nadal korzysta z CPU

Jeśli model nadal działa na CPU:

  1. Sprawdź konfigurację demona Docker:

    docker info | grep -i runtime
    

    Powinno to wyświetlić Default Runtime: nvidia

  2. Sprawdź środowisko uruchomieniowe kontenera runnera:

    docker inspect docker-model-runner | grep -A 2 '"Runtime"'
    

    Powinno to wyświetlić "Runtime": "nvidia"

  3. Ponownie zainstaluj runnera z obsługą GPU:

    docker model reinstall-runner --gpu cuda
    
  4. Sprawdź logi na błędy:

    docker model logs | tail -50
    

GPU nie jest wykrywane

Jeśli GPU nie jest wykrywane:

  1. Sprawdź, czy zainstalowano NVIDIA Container Toolkit:

    dpkg -l | grep nvidia-container-toolkit
    
  2. Przetestuj dostęp do GPU za pomocą standardowego Docker:

    docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubi8 nvidia-smi
    

    Aby rozwiązać problemy z Docker, odwiedź nasz Docker Cheatsheet.

  3. Sprawdź sterowniki NVIDIA:

    nvidia-smi
    

Problemy z wydajnością

Jeśli wydajność GPU jest niska:

  1. Sprawdź wykorzystanie GPU:

    nvidia-smi
    

    Szukaj wysokiego procentu wykorzystania GPU

  2. Potwierdź, że warstwy modelu są na GPU:

    docker model logs | grep "offloaded.*layers to GPU"
    

    Wszystkie warstwy powinny zostać załadowane na GPU

  3. Sprawdź problemy z pamięcią:

    nvidia-smi
    

    Upewnij się, że pamięć GPU nie jest wyczerpana

Najlepsze praktyki

  1. Zawsze jawnie wskazuj backend GPU: Dla GPU od firmy NVIDIA używaj --gpu cuda zamiast --gpu auto, aby zapewnić poprawną konfigurację.

  2. Potwierdzaj konfigurację po zmianach: Zawsze sprawdzaj docker info | grep -i runtime po modyfikowaniu ustawień demona Docker.

  3. Monitoruj użycie GPU: Używaj nvidia-smi, aby monitorować użycie pamięci i wykorzystanie GPU podczas wnioskowania modelu. Aby uzyskać bardziej zaawansowane narzędzia do monitorowania, zobacz nasz przewodnik dotyczący aplikacji do monitorowania GPU w systemie Linux / Ubuntu.

  4. Rutynowo sprawdzaj logi: Przeglądaj docker model logs, aby upewnić się, że modele korzystają z przyspieszenia GPU.

  5. Używaj odpowiednich rozmiarów modeli: Upewnij się, że Twoje GPU ma wystarczającą ilość pamięci dla modelu. Używaj modeli kwantyzowanych (Q4, Q5, Q6, Q8) dla lepszej efektywności pamięci GPU. Aby uzyskać pomoc w wyborze odpowiedniego GPU dla obciążeń AI, zobacz nasz przewodnik dotyczący porównania specyfikacji GPU od firmy NVIDIA odpowiednich dla AI.

Po włączeniu obsługi GPU, Docker Model Runner to jedno z kilku sposobów uruchamiania LLM lokalnie. Aby zobaczyć, jak się wdraża w porównaniu do Ollama, vLLM, API w chmurze i innych opcjach, sprawdź nasz przewodnik Hostowanie LLM: lokalne, samodzielne i infrastruktura w chmurze – porównanie.

Przydatne linki