Sorunu bir sonuç ve bir pencereyle tanımlayın
"GPU çalışmıyor" yerine doğrulanabilir bir gözlem koyun: ilk sonuç geç geliyor, aşamalarda duraklamalar var veya kabul edilen çıktı sayısı azalıyor. Girdi kümesini, uygulama sürümünü, ayarları ve gözlemlenen dönemi belirtin. İlk başlatma, önceden hazırlanmış bir çalıştırmadan farklı aşamalar içerebilir; bunları belirtmeden karıştırmayın.
Yolculuğu dosya açma, CPU hazırlığı, aktarım, GPU hesaplaması, yazma ve doğrulama olarak bölümlere ayırın. Bu aşamalar üst üste gelebilir: çizim, izlerle karşılaştırılacak bir varsayım oluşturur. Sınırları aynı saat diliminde ve yeterli bir hassasiyetle not edin. Duraklamadan sonra alınan bir donanım grafiği, değeri olağan dışı görünse bile duraklamayı açıklamaya izin vermez.
Yüzdeleri ve bellekleri doğru okuma
NVIDIA SMI'da GPU kullanımı, örnekleme aralığının en az bir çekirdeğin yürütüldüğü kısmını belirtir. Bu, tüm bileşenlerin bir performans notu değildir. Bellek kullanımı, okuma veya yazma etkinliğini tanımlar; işgal edilen bellek miktarıyla karıştırılmamalıdır. Belgeler ayrıca, ortama bağlı olarak bazı alanların kullanılamayabileceğini de belirtir.
Bu nedenle metriğin tam adını ve birimini koruyun. Yüksek bir bellek miktarı, bekletilen verilere karşılık gelebilir; normal bir hazırlık aşamasında düşük etkinlik görülebilir. Tersine, yüksek etkinlik, programın faydalı bir iş yaptığını kanıtlamaz. Donanımla aynı anda çıktılara ve uygulama ilerlemesine bakmak gerekir.
İlişkilendirilmiş ve yeterince kısa bir ölçüm kaydı toplayın
Temsili bir sekans seçin ve toplamayı bu sekansla sınırlayın. Saatleri, GPU tanımlayıcısını, etkinliği, kullanılan belleği ve uygulama aşamalarını kaydedin. Aynı zamanda, CPU sürecini, bekleme sürelerini, okuma ve yazmalarını gözlemlemek için sisteminizde bulunan araçları kullanın. Tüm çekirdekler üzerinden alınan bir ortalama, tek bir dolu iş parçacığını gizleyebilir; ilgili süreçlere de bakın.
Aşağıdaki okuma komutu, hâlihazırda NVIDIA SMI bulunan yetkili bir NVIDIA hedefi için önerilmiştir. Bu kılavuz için çalıştırılmamıştır. Birimleri CSV içinde korur ve kesintiye uğratılana kadar saniyede bir gözlem gösterir. Sürümünüzün desteklediği alanları doğrulayın ve senaryonun sonunda toplamayı durdurun. Bir N/A alanı bilinmeyen olarak kalır: onu sıfıra dönüştürmeyin.
Asgari günlük; bir iş tanımlayıcısını, saat dilimli bir zamanı, geçerli aşamayı, tanımlanabilir bir girdiyi veya partiyi, ilerlemeyi ve varsa hatayı ilişkilendirir. Ne sır ne de teşhis için gereksiz iş içeriği barındırmalıdır. Telemetri eksikse, önce toplama düzeneğini ve uygulama ilerlemesini kontrol edin: boş bir eğri, bir sürecin durduğunu kanıtlamaz. Gözlem olmayan dönemi, belleğe dayanarak yeniden oluşturmak yerine işaretleyin.
nvidia-smi --version
nvidia-smi --query-gpu=timestamp,uuid,utilization.gpu,memory.used,memory.total --format=csv --loop=1Bir iz ile bir sonuç arasındaki farkı ayırt etmek
Uygulama girdilerini beklerken GPU etkinliği düşerse, dosya yolunu inceleyin. Uzun bir CPU hazırlığı sırasında düşerse, bu aşamayı ve gerçek paralelliğini inceleyin. Aygıtlar dağıtık bir işin diğer katılımcılarını bekliyorsa, yük dengesini ve iletişimleri kontrol edin. Birden fazla belirti aynı anda ortaya çıkabilir; bunların korelasyonu henüz nedensellik kanıtı değildir.
Kısa bir hipotez ve onu ayırt etmeye yarayacak bir değişiklik yazın. Örneğin, aynı önceden hazırlanmış girdileri olağan hazırlıklarıyla karşılaştırmak, sonuçlar aynı kaldığı sürece bir adımı yalıtabilir. Parti boyutunu, hassasiyeti, süreç sayısını ve dosya konumunu aynı anda değiştirmeyin: bir iyileşmeyi bir nedene atfetmek zorlaşır.
| İlişkilendirilmiş gözlem | Olası hipotez | Sonraki kontrol |
|---|---|---|
| GPU bekliyor ve girdi okuması uzun | Veri beslemesiyle sınırlı | Hazırlanmış bir alt küme ile olağan girdiyi karşılaştırın |
| Duraklamalar sırasında meşgul bir CPU iş parçacığı | Hazırlık veya başlatma bu iş parçacığıyla sınırlı | GPU'yu henüz değiştirmeden bu aşamayı profille |
| Bir katılımcı diğerlerini bekliyor | Dengesizlik veya iletişimler | Aşamaları süreç bazında karşılaştırın |
| Etkinlik yüksek, kabul edilen çıktı az | Maliyetli iş, yeniden denemeler veya reddedilen sonuç | Her dönemi ilerleme ve hatalarla ilişkilendirin |
Kurgusal örnek: yüz saniyelik bir döngüyü incelemek
Kurgusal «Revue des maquettes» ekibi, örtüşmeyen bir döngü tarif ediyor: altmış saniye CPU hazırlığı, yirmi saniye GPU hesaplaması, ardından yirmi saniye dışa aktarma. Toplam 100 saniyedir ve GPU hesaplamasına atfedilen zaman oranı 20/100, yani %20'dir. Bu pedagojik hesap, bir örnekleme aracının yüzdesini öngörmez ve katalogdaki herhangi bir GPU'nun ölçümüne karşılık gelmez.
Hazırlığın, hesaplama ve çıktılar değişmeden otuz saniyeye indirilebildiğini varsayalım. Döngü o zaman 30 + 20 + 20 = 70 saniye olurdu: otuz saniye daha az, GPU oranı 20/70 ile yaklaşık %28,6. Tersine, yalnızca GPU hesaplamasını varsayımsal olarak ikiye bölmek 60 + 10 + 20 = 90 saniye verirdi. Senaryo, en uzun beklemenin ele alınmasının neden kart değiştirmekten daha ağır basabileceğini açıklıyor.
| Senaryo | CPU hazırlığı | GPU hesaplaması | Dışa aktarma | Toplam |
|---|---|---|---|---|
| Başlangıç hipotezi | 60 sn | 20 sn | 20 sn | 100 sn |
| Varsayımsal olarak azaltılmış hazırlık | 30 sn | 20 sn | 20 sn | 70 sn |
| Yalnızca GPU hesaplaması varsayımsal olarak ikiye bölünmüş | 60 sn | 10 sn | 20 sn | 90 sn |
Bir aşamayı profil oluşturucuyla derinleştirmek
Genel gözlem, açıklamadan yavaş bir bölgeyi tespit ediyorsa, kısa bir pencerede uygulamaya uygun profiler'ı kullanın. PyTorch Profiler, CPU ve CUDA olaylarını toplayabilir ve toplama pencerelerini düzenleyebilir. Belgeler, şekil veya yığın kaydı etkinleştirildiğinde bir ek yük olduğunu belirtir. Ayrıntılı bir iz, bu nedenle bir tanılama aracıdır; toplam süresi, programın normal süresi olarak kayıtsız şartsız sunulmamalıdır.
Aşama adlarını, teknik bir işlemi çalışmanızla ilişkilendirecek kadar açık tutun: bir dosya grubunun hazırlanması, aktarım, uygulama adımı veya çıktı yayımlama. Varsayım için gereken ayrıntı düzeyiyle başlayın. Değişiklikten sonra, karşılaştırılabilir bir gözlem ve ardından ağır enstrümantasyon olmadan bir çalıştırma yapın. Bu ikinci kontrol, faydanın olağan koşullarda da mevcut olduğunu doğrulamayı sağlar.
Sorunu gizleyen düzeltmelerden kaçınmak
Eşzamanlılığı artırmak, GPU'yu doldururken diski, ana bellek veya çıkışları aşırı yükleyebilir. Yığın boyutunu büyütmek, gecikmeyi ve gereken belleği değiştirebilir. Hassasiyeti düşürmek, sonucu değiştirebilir. Bu kararlar yasak değildir, ancak görüntülenen yüzde arttığı için değil, aynı iş hedefi üzerinde yan etkileriyle birlikte değerlendirilmelidir.
Basit bir etkinlik düşüşünü teşhis etmek için bir aygıtı sıfırlamayın veya donanım parametrelerini değiştirmeyin. Önce okumayla başlayın, ardından açık hataları yetkili sorumluya inceletin. Ayrıca özel yollar, gizli parametreler veya giriş verileri içeren ham izleri yayımlamaktan kaçının. Tanılamaya yararlı bir kesit hazırlayın ve tam kanıtı ekibin izin verilen kapsamında saklayın.
Tanılamayı karara yararlı bir kanıtla kapatmak
Nihai dosya belirtiyi, benimsenen varsayımı, denenen değişikliği, koşullarını ve gözlenen sonucu belirtmelidir. Aynı giriş kümesi, aynı kalite ve aynı bitiş tanımı üzerinde en az bir önce/sonra karşılaştırması saklayın. Sonuç kesin değilse, neyin elendiğini ve bir sonraki gerekli gözlemi yazın. Belgelenmiş bir reddedilen olasılık, başka birinin rastgele yeniden başlamasını önler.
Düşük normal etkinlik her zaman bir düzeltme gerektirmez. Görev süresine, kalitesine ve bütçesine uyuyorsa, bir karmaşıklığı azaltmak kırılgan bir optimizasyondan daha iyi olabilir. Yeni bir yapılandırma düşünülüyorsa, kanıtlanmış kısıtları teslim alma dosyasına iletin. Tek bir ölçüm katalogu sınıflandırmaz ve bu örnekteki hiçbir değer vaat edilen bir performans oluşturmaz.
Karar vermek için sorular
Yüzde 100 kullanım her şeyin optimize edildiğini kanıtlar mı?
Hayır. Yüzde, aracın tanımına göre bir etkinliği tanımlar; sonucun kalitesini veya programın tam verimliliğini ölçmez. Kabul edilen çıktılara kadar geçen süreyi, hataları, beklemeleri ve ortak kaynakları da izleyin.
Etkinlik düşükken daha güçlü bir GPU mu seçmeliyim?
Sınırlayıcı aşamayı belirlemeden önce hayır. Veri beklemesi veya uzun bir CPU hazırlığı başka bir kartla değişmeden kalabilir. Bir varsayım oluşturun, hedefli bir değişikliği karşılaştırın ve tüm yolu inceleyin.
Bir metrik N/A ise ne yapmalıyım?
Onu kullanılamaz olarak saklayın ve aracın ortamınızda neleri desteklediğini doğrulayın. Bir değerin yokluğu, etkinliğin yokluğu anlamına gelmez. Kapsamını belirterek uygulama olayları veya izin verilen başka bir araçla tamamlayın.