Teknik
Docker'da GPU Kullanımı: --gpus all, Compose, İmaj Seçimi ve MIG
Docker'da GPU kullanmak için sunucuda NVIDIA sürücüsü ve NVIDIA Container Toolkit kurulu olmalı; ardından docker run --gpus all yeterlidir, Compose'da gpus: all ya da deploy.resources.reservations.devices kullanılır. Belirli GPU seçimi, shm-size, imaj seçimi, MIG, izleme ve Windows'ta WSL2 bu rehberde.
gpukiralama.com.tr ekibi Güncelleme: 9 dk okuma
İçindekiler
- Kısa cevap
- Docker'da --gpus all ne işe yarar, belirli GPU nasıl seçilir?
- Sürücü yetenekleri (capabilities) neyi değiştirir?
- Docker Compose'da GPU nasıl tanımlanır?
- Hangi temel imajı seçmelisiniz?
- İmajı nasıl küçük ve tekrarlanabilir tutarsınız?
- PyTorch konteynerinde --ipc=host mı, --shm-size mı?
- Birden fazla GPU konteynerlere nasıl paylaştırılır?
- MIG bölümleri konteynerde nasıl kullanılır?
- GPU kullanımı nasıl izlenir?
- Windows'ta Docker konteynerine GPU verilebilir mi (WSL2)?
- Bu iş için hangi GPU?
- Özet
- Kaynaklar
Kısa cevap
Docker'da GPU kullanmak için sunucuda yalnızca NVIDIA sürücüsü ve NVIDIA Container Toolkit kurulu olmalıdır; sunucuya CUDA Toolkit kurmanız gerekmez, CUDA kütüphaneleri imajdan gelir. Sonrası tek bayraktır: tüm GPU'lar için docker run --gpus all, belirli kartlar için --gpus '"device=0,1"'. Docker Compose'da aynı işi deploy.resources.reservations.devices bloğu, Compose 2.30.0 ve sonrasında kısaca gpus: all satırı yapar. Toolkit henüz kurulu değilse önce kurulum rehberimizi izleyin.
- PyTorch konteynerlerine
--shm-size=16gya da--ipc=hostekleyin; Docker'ın varsayılan/dev/shmalanı 64 MiB'tır ve veri yükleyici işçilerine çoğu zaman yetmez. - pip ile kurulan PyTorch kendi CUDA kütüphanelerini getirir;
python:3.12-slimgibi sade bir temel imaj yeterlidir. - Hazır bir ortam istiyorsanız NVIDIA'nın düzenli olarak güncellediği NGC PyTorch imajı (Ekim 2026'da 26.09 sürümü, sıkıştırılmış haliyle yaklaşık 11,7 GB) iyi bir seçenektir.
Docker'da --gpus all ne işe yarar, belirli GPU nasıl seçilir?
docker run --gpus all, sunucudaki tüm NVIDIA GPU'larını konteynere verir: NVIDIA Container Toolkit kartların aygıt dosyalarını ve sürücü kütüphanelerini konteynere bağlar, böylece içerideki CUDA uygulamaları ve nvidia-smi kartları görür. --gpus bayrağı konteynerde hangi kartların görüneceğini belirler; numaralar sunucudaki nvidia-smi çıktısındaki sıradır.
| Amaç | Komut |
|---|---|
| Tüm GPU'lar | docker run --rm --gpus all IMAJ |
| İki GPU (seçimi Docker yapar) | docker run --rm --gpus 2 IMAJ |
| 0 ve 2 numaralı GPU'lar | docker run --rm --gpus '"device=0,2"' IMAJ |
| UUID ile tek GPU | docker run --rm --gpus device=GPU-xxxx IMAJ |
| CDI adıyla | docker run --rm --device nvidia.com/gpu=1 IMAJ |
| Ortam değişkeniyle | docker run --rm --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=1 IMAJ |
Birden fazla kart yazarken tek tırnağın içindeki çift tırnak zorunludur, çünkü değer virgül içerir. UUID'leri nvidia-smi -L listeler; NVIDIA, kart numaralarının sunucu yeniden başladığında aynı kalacağını garanti etmediği için betiklerde UUID kullanmanızı önerir. Konteynerin içinde kartlar sıfırdan numaralanır: --gpus '"device=2"' ile başlatılan bir konteynerde PyTorch o kartı cuda:0 olarak görür.
NVIDIA_VISIBLE_DEVICES konteynere hangi kartların verileceğini, CUDA_VISIBLE_DEVICES ise konteynerin içindeki bir sürecin bu kartlardan hangilerini kullanacağını belirler. Bir tuzağa dikkat edin: NVIDIA'nın CUDA imajlarında NVIDIA_VISIBLE_DEVICES=all önceden tanımlıdır. NVIDIA çalışma zamanını Docker'ın varsayılanı yaptıysanız bu imajlardan başlatılan her konteyner, siz belirtmeseniz de tüm GPU'ları görür.
Sürücü yetenekleri (capabilities) neyi değiştirir?
NVIDIA_DRIVER_CAPABILITIES, sürücünün hangi parçalarının konteynere bağlanacağını belirler; varsayılan değer compute,utility, yani CUDA ve nvidia-smi'dir.
| Yetenek | Ne için gerekir |
|---|---|
compute |
CUDA ve OpenCL uygulamaları |
utility |
nvidia-smi ve NVML |
video |
Video Codec SDK (NVENC/NVDEC ile donanımsal video kodlama ve çözme) |
graphics |
OpenGL, EGL ve Vulkan |
display |
X11 veya Wayland pencereleri (graphics'i de içerir) |
compat32 |
32 bit uygulamalar |
Bu değer varsayılanlara eklenmez, onların yerine geçer; ihtiyacınız olan yeteneklerin hepsini yazın. Örneğin FFmpeg ile NVENC kullanacak bir konteyner şöyle başlatılır:
docker run --rm --gpus 'all,"capabilities=compute,utility,video"' IMAJ
Docker Compose'da GPU nasıl tanımlanır?
Compose'da GPU, servis tanımındaki deploy.resources.reservations.devices bloğuyla istenir; bu blokta capabilities alanı zorunludur.
services:
egitim:
image: nvcr.io/nvidia/pytorch:26.09-py3
command: python train.py
working_dir: /workspace
volumes:
- ./:/workspace
shm_size: "16gb"
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["0"]
capabilities: [gpu]
- Belirli sayıda kart için
device_idsyerinecount: 2, tüm kartlar içincount: allyazın;countiledevice_idsaynı anda kullanılamaz. - Compose 2.30.0 ve sonrasında aynı işi servis altına yazılan
gpus: allsatırı da yapar. - CDI kullanıyorsanız servisin
deviceslistesine"nvidia.com/gpu=0"gibi CDI adları da yazılabilir.
Hangi temel imajı seçmelisiniz?
İmaj seçimi, PyTorch'u nasıl kurduğunuza bağlıdır. Tablodaki boyutlar Ekim 2026'da Docker Hub ve NGC'deki amd64 imajlarının sıkıştırılmış indirme boyutlarıdır:
| İmaj | İçerik | Boyut | Ne zaman |
|---|---|---|---|
python:3.12-slim + pip install torch |
Python; CUDA kütüphaneleri pip paketleriyle gelir | İmaj ~43 MB, PyTorch paketleri birkaç GB | Çoğu PyTorch projesi |
nvidia/cuda:13.4.3-base-ubuntu24.04 |
Yalnızca CUDA çalışma zamanı (cudart) | ~0,2 GB | Kendi derlediğiniz küçük CUDA uygulamaları |
nvidia/cuda:13.4.3-runtime-ubuntu24.04 |
Ek olarak CUDA matematik kütüphaneleri ve NCCL (cuDNN'li sürümü ayrı) | ~2 GB | Derlenmiş CUDA uygulamalarını çalıştırmak |
nvidia/cuda:13.4.3-devel-ubuntu24.04 |
Ek olarak başlık dosyaları ve derleme araçları | ~4,6 GB | CUDA eklentisi derlemek |
nvcr.io/nvidia/pytorch:26.09-py3 |
PyTorch 2.14 tabanlı, CUDA 13.4.1, Python 3.12, JupyterLab, Transformer Engine | ~11,7 GB | NVIDIA'nın hazırladığı, kurulum gerektirmeyen ortam |
pip ile kurulan PyTorch, cuDNN ve cuBLAS gibi kütüphaneleri kendi paketleriyle getirir; Ekim 2026 itibarıyla torch paketi tek başına 555 MB, cuDNN paketi 553 MB tutar. Bu yüzden PyTorch'u nvidia/cuda runtime imajının üzerine pip ile kurarsanız aynı kütüphaneler iki kez yer kaplar. Sürücü ise her durumda sunucudan gelir; imaja konmaz.
İmajı nasıl küçük ve tekrarlanabilir tutarsınız?
Nadiren değişen bağımlılıkları Dockerfile'ın başına, sık değişen kodu sonuna koyun; Docker'ın katman önbelleği sayesinde kod değiştikçe paketler yeniden indirilmez.
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "train.py"]
requirements.txtiçinde sürümleri sabitleyin (ör.torch==2.14.1).--no-cache-dir, pip önbelleğinin imaja girmesini önler..dockerignoreile veri setlerini, checkpoint'leri ve.gitklasörünü derleme bağlamının dışında tutun; veriyi ve modelleri imaja gömmek yerine-vile bağlayın.- CUDA eklentisi derlemeniz gerekiyorsa çok aşamalı derleme (multi-stage build) kullanın: derlemeyi
develimajında yapın, yalnızca çıktıyıCOPY --fromile daha küçük bir imaja kopyalayın.
PyTorch konteynerinde --ipc=host mı, --shm-size mı?
İkisi de çalışır: --shm-size konteyneri yalıtılmış tutar, --ipc=host ise sunucunun IPC ad alanını, dolayısıyla paylaşımlı belleğini kullanır. PyTorch, veri yükleyici işçileri (num_workers > 0) arasında veriyi paylaşımlı bellekle taşır. Varsayılan 64 MiB dolduğunda eğitim Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm) hatasıyla durur.
docker run --rm --gpus all --shm-size=16g -v "$PWD":/workspace -w /workspace \
nvcr.io/nvidia/pytorch:26.09-py3 python train.py
16 GB bir örnektir; değeri sunucunun belleğine göre seçin. Birden fazla GPU'yu aynı konteynerde NCCL ile kullanacaksanız NVIDIA'nın NCCL belgeleri paylaşımlı belleği büyütmenin yanında --ulimit memlock=-1 eklemenizi de önerir.
Birden fazla GPU konteynerlere nasıl paylaştırılır?
En sade düzen her GPU'ya bir konteyner vermektir; deneyler birbirinin belleğine ve hızına karışmaz.
docker run -d --name deney-0 --gpus '"device=0"' --shm-size=16g -v "$PWD":/app -w /app egitim:v1 python train.py --lr 3e-4
docker run -d --name deney-1 --gpus '"device=1"' --shm-size=16g -v "$PWD":/app -w /app egitim:v1 python train.py --lr 1e-4
docker logs -f deney-0
Aynı GPU'yu iki konteynere verirseniz bellek ve işlem gücü yalıtımsız paylaşılır; biri belleği doldurursa öteki "CUDA out of memory" hatası alır. Toolkit 1.20.1, R615 ve üzeri sürücülerde NVIDIA_GPU_MEMORY_LIMIT (MiB cinsinden) ortam değişkeniyle konteynerin her GPU'da kullanabileceği CUDA belleğine sınır koymayı da getirdi; yeni bir özellik olduğu için önce test edin. Tüm kartları tek bir eğitimde kullanmak için çok GPU'lu eğitim rehberimize bakın.
MIG bölümleri konteynerde nasıl kullanılır?
MIG (Multi-Instance GPU) destekleyen bir kartı donanım düzeyinde yalıtılmış bölümlere ayırdıysanız her bölümü ayrı bir GPU gibi konteynere verebilirsiniz. H100 ve H200 en fazla 7 bölüm destekler; RTX PRO 6000 en fazla 4, RTX PRO 5000 en fazla 2 bölüme (24'er GB) ayrılır; L40S ve RTX 5090'da MIG yoktur. Böylece örneğin bir veri bilimi ekibinde her analiste ayrı MIG bölümü verilebilir.
nvidia-smi -L # MIG cihazlarını ve MIG-... UUID'lerini listeler
docker run --rm --gpus '"device=0:0"' nvidia/cuda:13.4.3-base-ubuntu24.04 nvidia-smi -L
docker run --rm --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=MIG-xxxx nvidia/cuda:13.4.3-base-ubuntu24.04 nvidia-smi -L
0:0, 0 numaralı GPU'nun ilk MIG cihazıdır; CDI'daki karşılığı nvidia.com/gpu=0:0 adıdır. MIG düzenini değiştirdikten sonra CDI tanımını sudo systemctl restart nvidia-cdi-refresh.service ile yenileyin. Bölümleri oluşturmak ise sunucu yöneticisinin nvidia-smi mig komutlarıyla yaptığı ayrı bir iştir.
GPU kullanımı nasıl izlenir?
docker stats işlemci, bellek, ağ ve disk kullanımını gösterir ama GPU'yu göstermez; GPU için sunucuda nvidia-smi kullanın.
nvidia-smi # tüm konteynerlerdeki süreçler
nvidia-smi --query-compute-apps=pid,used_memory --format=csv # süreç başına GPU belleği
nvidia-smi dmon -s u # saniyelik kullanım yüzdeleri
docker exec deney-0 nvidia-smi # tek bir konteynerin içinden
MIG açık kartlarda nvidia-smi GPU kullanım yüzdesini raporlamaz. Uzun süreli izleme için NVIDIA'nın DCGM Exporter aracı metrikleri Prometheus biçiminde sunar; varsayılan ayarında MIG'siz kartları bütün olarak, MIG'li kartları bölüm bölüm izler.
Windows'ta Docker konteynerine GPU verilebilir mi (WSL2)?
Evet. Docker Desktop, Windows 10 ve Windows 11'de WSL 2 arka ucuyla NVIDIA GPU'ları konteynerlere verebilir; Docker bu özelliği GPU paravirtualization (GPU-PV) olarak adlandırır. Gerekenler WSL 2 desteği olan güncel bir NVIDIA Windows sürücüsü, wsl --update ile güncellenmiş WSL 2 çekirdeği ve Docker Desktop ayarlarında açık WSL 2 arka ucudur. Komutlar Linux'takiyle aynıdır; Docker'ın test örneği:
docker run --rm -it --gpus=all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
- WSL 2'nin içine Linux için NVIDIA sürücüsü kurmayın: NVIDIA'ya göre Windows'taki sürücü WSL 2'de
libcuda.soolarak hazır gelir. - Docker'ın belgelerine göre Docker Desktop'ta GPU desteği şimdilik yalnızca Windows'ta, WSL 2 arka ucuyla çalışır.
Windows'taki Docker, kodu ve imajı yerelde denemek için uygundur; aynı imajı daha sonra Linux'taki bir GPU sunucusunda çalıştırabilirsiniz.
Bu iş için hangi GPU?
Konteynerleri GPU başına ayırmak istiyorsanız çok GPU'lu bir sunucu (tek siparişte en fazla 8 GPU) ya da MIG destekleyen bir kart işinizi görür: RTX PRO 6000 Blackwell 96 GB belleğiyle 24 GB'lık 4 bölüme, RTX PRO 5000 48 GB belleğiyle 24 GB'lık 2 bölüme, H100 7 bölüme kadar ayrılabilir. Aylık fiyatları sırasıyla $1.600, $800 ve $2.500; fiyatlar GPU başına ve KDV hariçtir. Video kodlayan (NVENC) konteynerler için L40S, RTX PRO 6000, RTX PRO 5000 ve RTX 5090 uygundur (RTX 5090'da GeForce kartlara özgü bir eşzamanlı kodlama oturumu sınırı vardır); H100 ve H200'de NVENC yoktur. Konteynerde bir LLM servisi çalıştıracaksanız motor seçimi ve bellek hesabı için LLM inference hizmet sayfamıza bakın.
Kiralama aylıktır; yalnızca birkaç saatlik bir deneme yapacaksanız saatlik bir bulut daha ucuz olabilir. Sunucu paylaşımsızdır: kartlar ve sunucu kaynakları yalnızca size ayrılır; sunucular İstanbul Bağcılar'daki tesisimizde çalışır ve verileriniz Türkiye'de kalır. Sunucu kaynakları GPU belleğine göre baştan bellidir: Her 4 GB GPU belleği için 1 CPU çekirdeği ve GPU belleğinin 1,5 katı RAM verilir; 1 TB SSD ve size özel bir IP adresi her siparişe dahildir. NGC gibi büyük imajlar ve veri setleri için disk ihtiyacınızı sipariş formundaki mesaj alanına yazın.
Özet
- GPU'yu
--gpus all,--gpus '"device=0,1"'ya da CDI adıyla (--device nvidia.com/gpu=0) verin; betiklerde kart numarası yerine UUID kullanın. - Compose'da
deploy.resources.reservations.devicesbloğu (capabilitieszorunlu) ya da Compose 2.30.0 ve sonrasındagpus: allkullanılır. - Çok işçili veri yükleyici kullanan PyTorch konteynerlerinde
--shm-sizeveya--ipc=hostgerekir; varsayılan 64 MiB çoğu zaman yetmez. - pip ile PyTorch için sade bir python imajı, derleme için
devel, hazır ortam için NGC PyTorch imajı (26.09, yaklaşık 11,7 GB) seçin. - GPU başına bir konteyner en temiz düzendir; MIG'li kartlarda her bölüm ayrı bir GPU gibi verilebilir.
- Windows'ta Docker Desktop, WSL 2 arka ucuyla
--gpus=alldestekler; WSL 2'nin içine ayrıca Linux NVIDIA sürücüsü kurulmaz.
Kaynaklar
- NVIDIA: Specialized Configurations with Docker
- Docker: GPU access
- Docker: Run Docker Compose services with GPU access
- Docker: Compose file reference, services
- Docker Hub: nvidia/cuda
- NVIDIA: PyTorch Release 26.09
- NVIDIA NCCL: Runtime and MPI issues
- NVIDIA: MIG User Guide, Getting Started
- NVIDIA RTX PRO 5000 Blackwell veri sayfası (PDF)
- NVIDIA Container Toolkit: Installation Guide
- NVIDIA Container Toolkit: Architecture Overview
- Docker: GPU support in Docker Desktop for Windows
- NVIDIA: CUDA on WSL User Guide
Sık sorulan sorular
Konteynerde nvidia-smi çalışıyor ama PyTorch GPU'yu görmüyor; neden?
İki yaygın neden vardır: imaja yalnızca işlemci (CPU) için derlenmiş PyTorch kurulmuştur ve torch.version.cuda None döner ya da konteynere verilen sürücü yetenekleri arasında compute yoktur (ör. yalnızca utility verilmiştir). CUDA'lı paketi kurun ve yetenekleri compute,utility içerecek şekilde ayarlayın.
Docker Compose'da runtime: nvidia yazmam gerekir mi?
Gerekmez. Docker'ın belgelediği yöntem, deploy.resources.reservations.devices altında driver: nvidia ve capabilities: [gpu] tanımlamaktır; Compose 2.30.0 ve sonrasında servis altına gpus: all yazmak da yeterlidir.
İki konteyner aynı GPU'yu kullanabilir mi?
Evet, ama bellek ve işlem gücü yalıtımsız paylaşılır; biri belleği doldurursa öteki bellek hatası alır. Yalıtım gerekiyorsa MIG destekleyen bir kartta her konteynere ayrı bir MIG bölümü verin.
Konteynerde çalışan Jupyter'in portunu nasıl açmalıyım?
Portu -p 127.0.0.1:8888:8888 biçiminde yalnızca yerel adrese yayımlayın ve SSH tüneliyle bağlanın. Docker belgelerine göre -p 8888:8888 portu tüm ağ arayüzlerinde açar ve UFW kuralları bunu engellemez.
nvidia/cuda imajının hangi etiketini seçmeliyim?
İhtiyacınıza göre base, runtime ya da devel türünü seçin ve CUDA sürümünün sürücünüzle uyumlu olduğundan emin olun; CUDA 13.x imajları 580 ve üzeri sürücü ister. latest etiketi olmadığı için sürümü her zaman açıkça yazın.
Docker'da GPU passthrough nasıl yapılır?
Linux'ta konteynerler için sanal makinelerdeki gibi PCIe passthrough gerekmez: konteyner sunucunun çekirdeğini ve NVIDIA sürücüsünü paylaşır, NVIDIA Container Toolkit de --gpus ile seçtiğiniz kartları konteynere bağlar. Konteynerlerin birbirinin belleğine ve hızına karışmasını istemiyorsanız her birine ayrı bir GPU ya da MIG destekleyen kartlarda ayrı bir MIG bölümü verin.
Bu iş için GPU sunucu mu arıyorsunuz?
Tüm modellerin aylık fiyatı sitede yazar; yıllık kiralamada %20 indirim uygulanır. Siparişinizden sonra 1 iş günü içinde proforma fatura gönderiyoruz.
İlgili yazılar
Teknik
PyTorch GPU Kurulumu: Sürücü, CUDA 13 ve GPU Kontrolü Adım Adım
PyTorch GPU kurulumu üç adımdır: NVIDIA sürücüsünü 580 veya üzerine getirin, sanal ortamda pip install torch torchvision çalıştırın ve torch.cuda.is_available() çağrısının True döndüğünü kontrol edin. CUDA Toolkit'i ayrıca kurmanız gerekmez; PyTorch kendi CUDA kütüphanelerini getirir. Windows, Mac, Docker ve sık hataların çözümleri de rehberde.
Teknik
Docker NVIDIA Container Toolkit Kurulumu: Ubuntu 22.04, 24.04 ve 26.04
NVIDIA Container Toolkit kurulumu dört adımdır: sürücüyü doğrulayın, NVIDIA'nın apt deposundan nvidia-container-toolkit paketini kurun, nvidia-ctk ile Docker'ı yapılandırıp yeniden başlatın ve docker run --rm --gpus all ubuntu nvidia-smi ile test edin. Sunucuya CUDA Toolkit kurmanız gerekmez. CDI, rootless Docker, Podman ve sık hataların çözümleri de rehberde.
Teknik
Multi-GPU Eğitim Rehberi: DDP, FSDP2, DeepSpeed ve torchrun (2026)
Multi-GPU (çoklu GPU) eğitimde model tek GPU'ya sığıyorsa DDP ve torchrun, sığmıyorsa FSDP2 ya da DeepSpeed ZeRO-3 kullanın. Çalışır kod iskeleti, LLM fine-tuning için Accelerate komutları, efektif batch ve öğrenme oranı ayarı, NCCL hata ayıklama ve ölçekleme verimi ölçümüyle adım adım rehber.