CUDA, cuDNN ve Sürücü Matrisi: Ne Neyle Çalışır?
Uyumluluk sorunları GPU altyapısında zaman kaybının en büyük kaynağıdır. Bu rehber sizi saatlerce sürebilecek hata ayıklamadan kurtarmak için tasarlandı.
Neden Bu Kadar Karmaşık?
CUDA, cuDNN, sürücü ve framework sürümleri birbirinden bağımsız gelişir; ancak hepsi uyumlu olmak zorundadır. Tek bir yanlış kombinasyon tüm sistemi çalışmaz hale getirebilir.
NVIDIA'nın GPU yazılım yığını dört bağımsız bileşenden oluşur: Kernel Driver, CUDA Toolkit, cuDNN ve üst seviye framework (PyTorch, TensorFlow vb.). Her katman kendi sürüm döngüsüyle yayınlanır ve aralarındaki uyumluluk ilişkisi her yeni sürümde yeniden tanımlanır.
Bu bileşenlerin arasındaki ilişkiyi anlamak için şunu bilmek gerekir: nvidia-smi'nin gösterdiği CUDA sürümü ile gerçekte kullanılan CUDA Toolkit sürümü farklı şeylerdir. Bu tek yanlış anlama, her yıl binlerce mühendisi saatlerce hata ayıklamaya mahkûm eder.
nvidia-smi çıktısındaki "CUDA Version" değeri, o sürücünün
destekleyebildiği maksimum CUDA sürümünü gösterir; sisteminizde kurulu
olan CUDA Toolkit sürümünü değil. Gerçek Toolkit sürümü için: nvcc --version
"Sürücünüz CUDA 12.4'ü destekliyorsa, CUDA 12.4 veya altındaki herhangi bir Toolkit versiyonunu kullanabilirsiniz — ama kurulu olmayan bir şeyi kullanamazsınız."
— NVIDIA CUDA Compatibility DokümantasyonuSürücü → CUDA Uyumluluk Tablosu
NVIDIA sürücüsü minimum bir CUDA sürümünü gerektirir ve maksimum bir CUDA sürümünü destekler. Aşağıdaki tablo en yaygın kullanılan üretim sürücü aralıklarını kapsar.
| Sürücü Serisi | Min. Sürücü Ver. | Max. Desteklenen CUDA | Önerilen CUDA Toolkit | Durum |
|---|---|---|---|---|
| 570.x | 570.00 | CUDA 12.8 | 12.6 / 12.8 | Güncel |
| 560.x | 560.28 | CUDA 12.6 | 12.4 / 12.6 | Aktif |
| 550.x | 550.54 | CUDA 12.4 | 12.2 / 12.4 | Kararlı |
| 545.x | 545.23 | CUDA 12.3 | 12.2 / 12.3 | Eski |
| 535.x | 535.54 | CUDA 12.2 | 12.1 / 12.2 | Eski |
| 525.x | 525.60 | CUDA 12.0 | 12.0 | Eski |
| 520.x ve altı | — | CUDA 11.x | 11.8 | Yükseltilmeli |
| 470.x ve altı | — | CUDA 11.4 | — | EOL |
CUDA, geriye dönük uyumluluğu destekler: sürücünüz CUDA 12.6'yı destekliyorsa CUDA 11.8 ile derlenmiş uygulamalar çalışmaya devam eder. Bu özellik üretim ortamında kritik esneklik sağlar; ancak ileriye dönük uyumluluk (yani eski sürücüde daha yeni CUDA Toolkit) desteklenmez.
PyTorch, TensorFlow ve TensorRT Matrisi
Framework sürümleri belirli CUDA Toolkit sürümlerine karşı derlenir. Conda veya pip ile kurulum yapılırken CUDA sürümüne dikkat edilmemesi en yaygın uyumluluk hatasının kaynağıdır.
PyTorch ↔ CUDA Uyumu
| PyTorch Sürümü | Python | CUDA 11.8 | CUDA 12.1 | CUDA 12.4 | CUDA 12.6 |
|---|---|---|---|---|---|
| 2.5.x | 3.9–3.12 | Var | Var | Var | Var |
| 2.4.x | 3.8–3.12 | Var | Var | Var | Yok |
| 2.3.x | 3.8–3.11 | Var | Var | Yok | Yok |
| 2.2.x | 3.8–3.11 | Var | Var | Yok | Yok |
| 2.0.x | 3.8–3.11 | Var | Kısmi | Yok | Yok |
| 1.x | 3.7–3.10 | Kısmi | Yok | Yok | Yok |
TensorFlow ↔ CUDA Uyumu
| TensorFlow Sürümü | Python | CUDA | cuDNN | Notlar |
|---|---|---|---|---|
| 2.17.x | 3.9–3.12 | 12.3 | 8.9 | Güncel |
| 2.16.x | 3.9–3.12 | 12.3 | 8.9 | — |
| 2.15.x | 3.9–3.11 | 12.2 | 8.9 | — |
| 2.14.x | 3.9–3.11 | 11.8 | 8.7 | — |
| 2.12.x | 3.8–3.11 | 11.8 | 8.6 | LTS destek sonu yakın |
| 2.10.x ve altı | — | 11.2–11.7 | 8.1–8.4 | Kullanmayın |
TensorRT ↔ CUDA Uyumu
| TensorRT Sürümü | CUDA | cuDNN | Durum |
|---|---|---|---|
| 10.x | 12.0–12.6 | 8.9 / 9.x | Güncel |
| 8.6.x | 11.8 / 12.0 | 8.6 / 8.9 | Kararlı |
| 8.5.x | 11.8 | 8.6 | Eski |
| 8.4.x ve altı | 11.x | 8.x | EOL |
pip install torch komutu varsayılan olarak CPU sürümü veya
sisteme uymayan bir CUDA sürümünü indirebilir. Doğru kurulum için her zaman
PyTorch'un resmi get-started sayfasından üretilen komutu kullanın:
pip install torch --index-url https://download.pytorch.org/whl/cu124
cuDNN Sürüm Matrisi
cuDNN, derin öğrenme primitiflerini (konvolüsyon, pooling, normalizasyon vb.) GPU üzerinde hızlandıran kütüphanedir. Hem CUDA sürümüyle hem de framework'ün beklediği cuDNN sürümüyle uyumlu olması gerekir.
| cuDNN Sürümü | Desteklenen CUDA | Min. Sürücü | Flash Attention | Durum |
|---|---|---|---|---|
| 9.5.x | 12.x | 525.x | v2 + v3 | Güncel |
| 9.4.x | 12.x | 525.x | v2 + v3 | Aktif |
| 9.0.x | 12.x | 525.x | v2 | Kararlı |
| 8.9.x | 11.8 / 12.x | 520.x | v2 | Kararlı |
| 8.7.x | 11.8 | 520.x | v1 sınırlı | Eski |
| 8.6.x | 11.8 | 520.x | Yok | Yükseltilmeli |
| 8.4.x ve altı | 11.x | — | Yok | Kullanmayın |
cuDNN 9 ile birlikte API yapısı önemli ölçüde değiştirilmiştir. cuDNN 8 için yazılmış özel CUDA kernel'leri veya düşük seviye cuDNN API çağrıları cuDNN 9 ile derlenmez. Framework'lerin büyük çoğunluğu bu geçişi kendi içinde yönetir; ancak özel CUDA extension'ı olan PyTorch modülleri bu geçişte yeniden derleme gerektirebilir.
Sık Yapılan 7 Hata
Aşağıdaki hatalar NVIDIA ekosistemiyle çalışan mühendislerin tekrar tekrar düştüğü tuzaklardır. Her birinin neden yapıldığını ve nasıl düzeltileceğini net biçimde aktarıyoruz.
nvidia-smi çıktısında "CUDA Version: 12.4" gördükten sonra CUDA 12.4 kuruluymuş gibi davranmak. Framework kurulumu bu değere göre yapılır, çalışmaz.
Gerçek toolkit sürümü için nvcc --version çalıştırın. nvidia-smi'deki değer maksimum desteklenen sürümdür, kurulu olan değil.
Sadece pip install torch komutuyla kurulum yapmak. Bu komut sisteminizin CUDA sürümünü dikkate almaz; genellikle CPU-only veya farklı bir CUDA sürümüne karşı derlenmiş PyTorch indirir.
PyTorch resmi sitesinden kendi ortamınıza uygun komutu alın. Örnek: pip install torch --index-url https://download.pytorch.org/whl/cu124
CUDA 12.6 Toolkit kurulumu yapıp sürücüyü 520.x'te bırakmak. Toolkit çalışır görünür ancak bazı özellikler sessizce devre dışı kalır veya belirli API çağrılarında hata fırlatır.
Her zaman önce sürücüyü hedef CUDA Toolkit'i destekleyen sürüme güncelleyin. Kural: Sürücü önce, Toolkit sonra.
cuDNN dosyalarını manuel olarak kopyalayıp LD_LIBRARY_PATH ayarlanmamış bırakmak. Framework başlatıldığında cuDNN kütüphanesini bulamazsa sessizce CPU moduna geçebilir veya hata verebilir.
cuDNN'i paket yöneticisiyle (apt, conda) kurun. Manuel kurulumda /etc/ld.so.conf.d/'ye yol ekleyin ve ldconfig çalıştırın.
Conda ortamına cudatoolkit kuruluyken sistem PATH'inde ayrı bir CUDA kurulumu bulunduğunda ikisi çakışabilir. Hangi nvcc'nin kullanıldığı belirsizleşir.
which nvcc ve conda list | grep cuda ile aktif ortamı doğrulayın. Conda ortamlarında nvidia/label/cuda-12.x.x kanalından kurulum tercih edin.
nvidia/cuda:12.0-base tag'ını kullanıp cuDNN gerektiren framework çalıştırmak. -base image sadece runtime içerir; cuDNN ve geliştirme araçları yoktur.
Eğitim/geliştirme için nvidia/cuda:12.x.x-cudnn-devel-ubuntu22.04 tag'ını kullanın. Inference için -cudnn-runtime yeterlidir.
PyTorch 2.4 (CUDA 12.4) ile TensorRT 8.5 (CUDA 11.8) birlikte kullanmak. TensorRT motorları farklı CUDA sürümlerine karşı derlenmiş olduğunda çalışmaz veya beklenmedik hatalar üretir.
PyTorch ve TensorRT'nin aynı CUDA major/minor sürümüne karşı derlenmiş olduğundan emin olun. NVIDIA'nın TensorRT-PyTorch uyumluluk matrisini takip edin.
Kurulum Kontrol Listesi
Yeni bir ortam kurarken veya mevcut bir ortamı güncellerken bu listeyi sırayla geçin. Her madde bağımsız bir hata kaynağını temsil eder.
- GPU modeli ve sürücü sürümünü doğrulayın:
nvidia-smi - Sürücünün hedef CUDA sürümünü desteklediğini teyit edin (yukarıdaki tabloya bakın)
- IOMMU / ECC durumunu kontrol edin (sunucu GPU'ları için):
nvidia-smi --query-gpu=ecc.mode.current --format=csv - GPU sıcaklık ve güç durumunu kontrol edin:
nvidia-smi dmon
- Kurulu CUDA Toolkit sürümünü kontrol edin:
nvcc --version - CUDA örnek derleme testi yapın:
cd /usr/local/cuda/samples/1_Utilities/deviceQuery && make && ./deviceQuery - PATH ve LD_LIBRARY_PATH'in doğru ayarlandığını doğrulayın
- Birden fazla CUDA Toolkit kurulumu varsa
update-alternativesile aktif sürümü belirleyin
- cuDNN versiyonunu kontrol edin:
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 - cuDNN'in framework'ün beklediği sürümle eşleştiğini teyit edin
- cuDNN kütüphane dosyalarının erişilebilir olduğunu doğrulayın:
ldconfig -p | grep libcudnn
- PyTorch GPU erişimini doğrulayın:
python -c "import torch; print(torch.cuda.is_available(), torch.version.cuda)" - TensorFlow GPU erişimini doğrulayın:
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))" - Basit bir GPU tensör işlemi çalıştırarak performans testi yapın
- Docker ortamında
nvidia-container-toolkit'in kurulu olduğunu doğrulayın:docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi
- Kubernetes GPU device plugin'in aktif olduğunu doğrulayın:
kubectl describe node | grep nvidia.com/gpu - DCGM Exporter'ın GPU metriklerini doğru raporladığını kontrol edin
- Sürücü ve toolkit sürümlerini konfigürasyon yönetim sistemine (Ansible/Terraform) kaydedin
- Sürücü güncellemesi öncesinde snapshot / rollback planı hazırlayın
Hızlı Tanı Komutları
Sorun yaşadığınızda çalıştırmanız gereken komutları tek bir yerde topladık. Destek talebinde bu komutların çıktılarını her zaman ekleyin.
# ── Sürücü ve GPU ────────────────────────────────── nvidia-smi # Sürücü, CUDA max, GPU durumu nvidia-smi -q | grep "Driver Version\|CUDA Version" nvidia-smi topo --matrix # NVLink / PCIe topolojisi # ── CUDA Toolkit ─────────────────────────────────── nvcc --version # Gerçek kurulu CUDA sürümü ls /usr/local/ | grep cuda # Tüm kurulu CUDA versiyonları echo $PATH | tr ':' '\n' | grep cuda # PATH'teki CUDA konumu # ── cuDNN ────────────────────────────────────────── cat /usr/include/cudnn_version.h | grep "CUDNN_MAJOR\|CUDNN_MINOR\|CUDNN_PATCHLEVEL" ldconfig -p | grep libcudnn # cuDNN kütüphane yolları python3 -c "import ctypes; ctypes.cdll.LoadLibrary('libcudnn.so.9')" # ── PyTorch ──────────────────────────────────────── python3 -c "import torch; print( 'PyTorch:', torch.__version__, '| CUDA available:', torch.cuda.is_available(), '| CUDA version:', torch.version.cuda, '| cuDNN version:', torch.backends.cudnn.version(), '| GPU:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'N/A' )" # ── TensorFlow ───────────────────────────────────── python3 -c "import tensorflow as tf; print( 'TF:', tf.__version__, '| GPUs:', tf.config.list_physical_devices('GPU'), '| CUDA:', tf.sysconfig.get_build_info()['cuda_version'], '| cuDNN:', tf.sysconfig.get_build_info()['cudnn_version'] )" # ── Docker ───────────────────────────────────────── docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi
Anlık Başvuru Kartı
Sürücü → CUDA Toolkit → cuDNN → Framework sırasını takip edin ve her bileşeni bir sonrakinin gerektirdiği sürüme göre seçin. Tersten gitmeyin: framework'ün istediği CUDA sürümünü belirleyin, o CUDA sürümünü destekleyen sürücüyü seçin, ardından uyumlu cuDNN'i kurun. Yukarıdan aşağıya değil, aşağıdan yukarıya.