Dört kararlı tanı yolculuğu
Amaç, başarısız olan ilk katmanı bulmaktır; art arda birkaç kurulum denemek değil. Çalıştırılan komutu, ilk hata mesajını ve her kontrolün sonucunu saklayın. Python'u, PyTorch paketini ve parti boyutunu aynı anda değiştirirseniz, hangi değişikliğin sorunu çözdüğünü bilemezsiniz.
İndirilebilir betik bu ilerlemeyi uygular ve sınırlı bir teknik rapor üretir. Modelinizi başlatmaz ve kurulumunuzu değiştirmez. Projenizle aynı ortamda kullanın; aksi takdirde arızalı programınkinden başka bir yorumlayıcıyı denetlersiniz.
Tüm sütunları görmek için tabloyu kaydırın.| Kontrol | Kontrol başarısız olursa | Başarısının sağladığı |
|---|---|---|
| 1. Yorumlayıcı ve içe aktarma | Kullanılan Python'u veya PyTorch kurulumunu düzeltin. | Gerçekte içe aktarılan paketin sürümünü ve arka ucunu okuyun. |
| 2. Arka uç ve aygıt | Paketi, sürücüyü, GPU'nun sunulmasını ve izinleri inceleyin. | Hedeflenen GPU üzerinde kaynak talep edin. |
| 3. Küçük GPU hesaplaması | Kaynak ayırma, hesaplama veya eşitleme hatasını saklayın. | Uygulamanın küçültülmüş bir girdisine geçin. |
| 4. Temsili uygulama | Ağırlıkları, uzantıyı, biçimi, belleği veya hatalı çıktıyı yalıtın. | Gerçek iş yükünü kademeli olarak artırın. |
1. Gerçekte çalıştırılan Python'u belirleyin
Bir terminal, bir notebook ve bir servis farklı yorumlayıcılar kullanabilir. Projeyi başlatan bağlamda sys.executable çıktısını görüntüleyin, ardından sürümü kontrol edin. Yol, unutulmuş bir sanal ortamı veya başka bir çekirdekte kalmış bir notebook'u tespit etmeyi sağlar. Bunu kendi makinenizde inceleyin; kişisel dizin yapınızı bir raporda yayımlamanız gerekmez.
Ardından paketleri sorgulamak için aynı yorumlayıcıyı kullanın. python -m pip show torch komutu bu Python'a bağlı PyTorch bilgilerini verir. import torch başarısız olursa, sonraki adım bu kurulumu düzeltmektir: parti boyutunu düşürmek veya model ağırlıklarını değiştirmek eksik bir modülü çözmez.
python -c "import sys; print(sys.executable); print(sys.version)"
python -m pip show torch2. CUDA, ROCm ve GPU hızlandırmasız paketi ayırt edin
torch.__version__, torch.version.cuda ve torch.version.hip değerlerini ayrı ayrı kaydedin. Yalnızca torch.version.cuda değerinin None olmasından "CPU paketi" sonucuna varmayın: ROCm için PyTorch HIP kullanır, torch.cuda'yı yeniden kullanır ve yine cuda adlı bir aygıt bekler. Bu adı rocm veya hip ile değiştirmek uygulanacak düzeltme değildir.
Ardından torch.cuda.is_available() ve torch.cuda.device_count() komutlarını kontrol edin. Bu sonuçlar, bu Python ortamının o anda neleri kullanabileceğini açıklar. Minimal hesaplamanın yerini tutmazlar. Bir sistem aracı bir kartı görebilirken paket, sürecin erişebildiği sürücü veya ortamı PyTorch'un onu kullanmasını engelleyebilir.
python -c "import torch; print(torch.__version__); print(torch.version.cuda); print(torch.version.hip); print(torch.cuda.is_available()); print(torch.cuda.device_count())"3. Raporu Kernodeck betiğiyle üretme
Dosyayı indirdikten sonra bir çalışma klasörüne koyun ve projenin Python'uyla çalıştırın. Varsayılan olarak bir GPU gerektirir. CPU modu açıkça istenmelidir: başarısı tanılamanın CPU dalını doğrular ve kullanılamayan bir GPU'yu asla doğrulanmış GPU'ya dönüştürmez. Rapor terminale ve --output ile yeni bir JSON dosyasına yazılır. Var olan bir dosyanın üzerine asla yazılmaz: bir sonraki denemeniz için başka bir ad seçin.
Betik float32 türünde iki adet 2 × 2 matris ayırır, çarpımlarını ve ardından bir gradyanı doğrular ve GPU aygıtını senkronize eder. Bu sabit hesaplama için beklenen kayıp 196'dır. Bu çok kısa kontrol hiçbir model ağırlığı yüklemez ve hiçbir verim ölçmez. Basit bir aygıt algılamasının ötesinde, arka uçtan küçük bir gerçek hesaplama ister.
İsteğe bağlı sistem denetimi, mevcut olduğunda nvidia-smi kullanır. Yalnızca NVIDIA sürücü sürümünü ve bu aracın görebildiği toplam belleği bildirir; ROCm için eşdeğer bir sistem denetimi teşkil etmez. Hesaplama zaman aşımı varsayılan olarak 30 saniyedir ve 5 ile 120 saniye arasında olabilir. Sistem denetiminin kendi azami zaman aşımı 3 saniyedir.
python kernodeck-diagnostic-v1.py --device-index 0 --timeout 30 --output diagnostic-gpu.jsonpython kernodeck-diagnostic-v1.py --device cpu --output diagnostic-cpu.jsonpython kernodeck-diagnostic-v1.py --host-check --output diagnostic-gpu-systeme.json4. Raporu okuyun ve sonraki adımı seçin
status, code, exit_code ve stage ile başlayın. runtime bloğu Python sürümünü ve sistem ailesini tanımlar. pytorch bloğu içe aktarılan paketi, CUDA/HIP derleme sürümlerini, bildirilen backend'i ve görünen cihazları ayırt eder. execution bloğu hesaplamanın gerçekte nerede gerçekleştiğini ve hem ürünün hem de gradyanın doğrulanıp doğrulanmadığını belirtir.
CPU modunda gpu_available ve visible_device_count null olarak kalır: betik GPU sürücü durumunu sorgulamaz. Bu ne sıfır ne de arızadır. execution.device alanını da okuyun: CUDA için derlenmiş bir paket, açıkça istendiğinde bu kontrolü pekâlâ CPU üzerinde yürütebilir.
Rapor, seçilmiş teknik veriler içerir. Ortam değişkenlerini, yerel makine yollarını, oturum kimliklerini, tam paket listesini veya bir istisnanın ham izini içermez. Betik Kernodeck'e hiçbir rapor göndermez. Uygulamanızın ayrıntılı bir hatası için izini çalışma alanınızda saklayın ve paylaşmadan önce gizli bilgileri kaldırın.
Tüm sütunları görmek için tabloyu kaydırın.| Sonuç | Anlam | Sonraki adım |
|---|---|---|
| GPU_CHECK_PASSED · 0 | Ürün ve gradyan seçilen GPU üzerinde doğrulandı. | Uygulamanızın küçük bir girdisine geçin. |
| CPU_CHECK_PASSED · 0 | Ürün ve gradyan yalnızca CPU üzerinde doğrulandı. | CUDA veya ROCm hakkında sonuç çıkarmayın. |
| TORCH_MISSING · 3 / TORCH_IMPORT_FAILED · 4 | Bu Python'da PyTorch yok veya içe aktarma başarısız. | Yorumlayıcıyı, paketi ve bağımlılıklarını doğrulayın. |
| GPU_BACKEND_ABSENT · 5 | Paket ne CUDA ne de HIP bildiriyor. | Ortamınıza uygun paketi kurun. |
| GPU_UNAVAILABLE · 6 / DEVICE_INDEX_INVALID · 7 | GPU bu süreçte kullanılamıyor veya dizin görünür aygıtların dışında. | Kartların sunulmasını, sürücüyü ve istenen dizini doğrulayın. |
| CHECK_FAILED · 8 / OUT_OF_MEMORY veya RUNTIME_ERROR · 9 | Sabit hesaplama, tahsis veya bir arka uç işlemi başarısız oldu. | Tam modeli başlatmadan önce işaretlenen adımı okuyun. |
| TIMEOUT · 10 / WORKER_FAILED · 11 | Kontrol, zaman aşımı nedeniyle durduruldu veya kullanılabilir bir rapor yok. | Kontrolü başarısızlık olarak ele alın; ortamı inceleyin. |
| OUTPUT_WRITE_FAILED · 12 | Rapor istenen hedefe kaydedilmedi. | Erişilebilir yeni bir dosya adı kullanın. |
5. Küçük hesaplamadan uygulamanıza geçiş
Başlatmadan önce yinelenebilir bir komut, tanımlı bir model, küçük bir veri kümesi ve erişilebilir bir çıktı dizini hazırlayın. Nihai işin önemli özelliklerini koruyan bir girdi seçin: metin uzunluğu, görüntü boyutları, ses biçimi veya zorunlu alanlar. Yapay olarak kısa bir girdi, gözlemlemek istediğiniz sorunu gizleyebilir.
Somut bir başarı ölçütü yazın. Bir embeddings hesaplaması için her girdi kimliği beklenen boyutta ve sonlu değerlere sahip bir vektör bulmalıdır. Bir eğitim için bir adım kullanılabilir bir kayıp üretmeli, beklenen parametreleri güncellemeli ve bir kayıt oluşturulmasına olanak tanımalıdır. Sürecin çıkış kodu bu kontrolleri tamamlar; onların yerini almaz.
Parametrelerin okunması, kütüphanelerin içe aktarılması, ağırlıkların yüklenmesi, verilerin hazırlanması, aktarılması, hesaplama ve yazma işlemlerinden önce ve sonra işaretler ekleyin. Her denemeye bir kimlik verin ve ilgili parametreleri saklayın. Bir "model yüklendi" mesajı, yalnızca bir yükleme niyetine değil, tamamlanmış bir olaya karşılık gelmelidir.
Tüm veri kümesini kopyalamadan faydalı tensörlerin şekillerini, türlerini ve aygıtlarını günlüğe kaydedin. "girdi: 8 dizi, en fazla uzunluk 512, aygıt cuda:0" gibi bir özet iki denemeyi karşılaştırmaya yardımcı olur. Bu sayılar burada bir günlük örneğini tanımlar, genel bir yapılandırmayı değil. Bu mesajlara erişim belirteçleri veya hassas girdi içeriği koymaktan kaçının.
6. Hatayı doğru katmanda düzeltmek
Küçük hesaplama geçiyor ancak ağırlıklar bulunamıyorsa yollarını, biçimlerini ve erişim haklarını kontrol edin. Bir uzantı içe aktarılamıyorsa PyTorch paketiyle ve projenin arka ucuyla uyumluluğunu doğrulayın. Başarılı bir tanılama, uygulamanın tüm uzantılarını geçerli kılmaz. Aynı anda birkaç bağımlılığı değiştirmek yerine başarısız olan ilk adıma dönün.
Bir aygıt hatası, model GPU'dayken CPU'da kalan bir girdiden kaynaklanabilir. Bir tür hatası, kısmi bir dönüştürmeden veya seçilen hassasiyetle uyumsuz bir operatörden kaynaklanabilir. İlk tam mesajı ve izini koruyun. Aynı anda yalnızca bir varsayımı değiştirin, ardından nihai hacmi yeniden devreye almadan önce en küçük girdiyi çalıştırın.
7. Model başlıyor ama belleği aşıyorsa
Aşımın ağırlıkların yüklenmesinde mi, ilk hesaplamada mı yoksa birkaç yinelemeden sonra mı gerçekleştiğini belirleyin. Bu anlar farklı nedenlere işaret eder: çok büyük model, büyük aktivasyonlar veya üretim önbelleği, korunan tensörlerin birikmesi. Aynı adımlarda torch.cuda.memory_allocated() ve torch.cuda.memory_reserved() değerlerini kaydedin. İlki tensör tahsislerini izler; ikincisi ayırıcının yönettiği belleği kapsar.
torch.cuda.empty_cache() kullanılmayan önbelleği geri verebilir, ancak hâlâ başvurulan tensörleri silmez. Bu nedenle çıktı listelerini, kayıp geçmişlerini ve bir hesaplama grafiğini tutan nesneleri inceleyin. Ardından belirleyici faktörü yalıtmak için batch boyutunu veya girdi uzunluğunu azaltın. Kartı değiştirmek, hangi aşamanın aştığını ve gerçekte ne kadar marj gerektiğini bildiğinizde bilinçli bir karar haline gelir.
8. Asenkronizmi unutmadan hesaplamayı ölçmek
GPU işlemleri Python programına göre asenkron olabilir. Bu nedenle bir çağrının etrafına yerleştirilen bir kronometre çoğunlukla işin gönderilmesini ölçebilir. Bir tanılama ölçümü için GPU'yu gözlemlenen bölümün sınırlarında senkronize edin veya uygun olayları kullanın. Bu senkronizasyon akışı değiştirir: bu enstrümantasyonu uygulamanızın normal işleyişinden ayrı tutun.
Üç segmentten oluşan basit bir örnek oluşturun: girdinin hazırlanması, hesaplama, çıktının yazılması. GPU segmenti için torch.cuda.synchronize() çağırın, time.perf_counter() ile ölçün, hesaplamayı yürütün, tekrar senkronize edin ve ardından farkı hesaplayın. İlk geçişi ve sonrakileri ayrı ayrı tutun. Bir yükleme veya başlatma, toplam yanıt süresi olarak sunulan bir ortalamanın içinde kaybolmamalıdır.
9. Çıktıları kontrol edin ve yeniden kullanılabilir bir tanılama kaydı tutun
Klasik bir çıkarım için model.eval() ilgili modüllerin davranışını ayarlarken, torch.inference_mode() gradyanlar için gereken takibi devre dışı bırakır. Bu iki ayarın işlevleri farklıdır. Üretilen tensörlerin sonradan gradyanlı bir hesaplamaya katılmaması gerektiğinde ikincisini kullanın. Eğitim sırasında bir model değerlendirmesi, devam etmeden önce doğru modun açıkça yeniden ayarlanmasını gerektirir.
Şimdi çıktıları hazırlanan sözleşmeyle karşılaştırın: sonuç sayısı, kimliklerin eşleşmesi, boyutlar, sonlu değerler ve uygun iş metriği. Batch'i artırırsanız bu eşleşmeyi yine kontrol edin. GPU eklerseniz girdilerin dağıtımını ve çıktıların toplanmasını kontrol edin. Kiralama lotları sipariş edilen kartları belirtir; batch ise programınızın birlikte işlediği örnekleri belirtir.
Bu yöntemin sonucu küçük bir dosya kümesidir: komut, sürümler, parametreler, asgari girdi, başarılı son adım, ilk hata, bellek gözlemleri ve elde edilen çıktı. Çalıştırma başarılı olursa, yükü artırmadan önce bu dosya kümesini karşılaştırma noktası olarak saklayın. Çalıştırma başarısız olursa, tüm araştırmayı baştan yapmadan sorunu yeniden üretmeyi sağlar.
Uzun bir işleme başlamadan önce, bu küçük girdi kümesi üzerinde düzgün bir durdurma ve devam ettirme de yapın. Zaten yazılmış çıktıların ne kaybolduğunu ne de iki kez sayıldığını doğrulayın. Bu kontroller geçildikten sonra tek bir ekseni — batch, uzunluk, eşzamanlılık veya süreç sayısı — kademeli olarak artırın ve gözlemlenen sınırı kaydedin. Böylece GPU adına bağlı bir varsayım yerine uygulamanız için ölçülmüş bir çalışma aralığı elde edersiniz.
Sunulan kanıt ve sınırları
İndirilebilir örnekler, 24 Eylül 2026 tarihinde gerçekleştirilen gerçek kontrollerden gelmektedir. PyTorch ile yapılan iki çalıştırma Windows, Python 3.14.6 ve PyTorch 2.11.0+cu128 kullanır. GPU kontrolü, bir NVIDIA GeForce RTX 5070 üzerinde CUDA kullanır; CPU kontrolü ise açıkça CPU talep eder. Bu kontrol donanımı bir Kernodeck teklifi olarak sunulmamaktadır. Bu kanıt için hiçbir ROCm hesaplaması yürütülmemiştir.
Başarılı küçük bir hesaplama, seçilen cihaz üzerinde bir tahsis ve hesaplama yolunun çalıştığını gösterir. Ne modelinizin hızını, ne en büyük girdileri için gereken belleği, ne de belirli bir eklentiyle uyumluluğunu ölçer. Rapor ayrıca çok kartlı bir topolojiyi de belgelemez. Yükü veya kiralamayı artırmaya karar vermeden önce temsili denemeye geçin.
Bir CUDA uygulaması için bir NVIDIA kartını bellek ve kütüphane ihtiyaçlarınızla karşılaştırın; bir ROCm zinciri için MI300X koşullarını inceleyin. Bağlantılı kartlar, projeniz için nitelendirilecek seçeneklerdir; kanıtta kullanılan donanımın listesi değildir. İlk kontrol ve dışa aktarma süresini 3, 7 veya 30 günlük süreniz içinde tutun.
Tüm sütunları görmek için tabloyu kaydırın.| Gerçek kontrol | Gözlemlenen sonuç | Kapsam |
|---|---|---|
| Açık CPU · Python 3.14.6 / PyTorch 2.11.0+cu128 | CPU_CHECK_PASSED ; ürün ve gradyan tam ; kayıp 196. | Sabit hesaplama CPU'da çalışıyor. |
| CUDA · RTX 5070 / CUDA 12.8 paketi | GPU_CHECK_PASSED ; ürün ve gradyan tam ; kayıp 196. | Sabit hesaplama bu ortamda bu kartta çalışıyor. |
| PyTorch yok · Python 3.12.14 | TORCH_MISSING ; çıkış kodu 3. | Modülün yokluğu açık bir hatayla sonuçlanır. |
| GPU kontrol sürecine görünmez kılındı | GPU_UNAVAILABLE ; çıkış kodu 6. | Betik, GPU'yu sessizce CPU ile değiştirmez. |