Çalıştıracağınız şeyler
Kernodeck mini projesi küçük bir sentetik veri kümesi, dropout içeren bir ağ, bir eğitim döngüsü ve bir doğrulayıcı içerir. Protokol, kaydetme ve devam ettirme mantığını yalıtmak için CPU'yu zorlar. Bu, bir CUDA, ROCm, çok kartlı nitelendirme veya kiralanan bir GPU'nun performans ölçümü değildir.
Doğrulayıcı; kesintisiz akış, kesinti, tam devam ettirme ve rastgele üreteçleri geri yüklemeyen olumsuz bir durum için yepyeni süreçler açar. Sonuncunun amacı, ağırlıklar ve adım numarası doğru görünse bile kontrolün eksik bir devam ettirmeyi saptayabildiğini doğrulamaktır.
Tüm sütunları görmek için tabloyu kaydırın.| Akış | Çalıştırma | Doğrulanan soru |
|---|---|---|
| Kesintisiz | Başlangıç durumundan itibaren 10 güncelleme. | Kesintisiz olarak hangi duruma ulaşılır? |
| Kesinti | 5 güncelleme, ardından kaydetme ve durdurma. | Ara nokta beklenen durumları içeriyor mu? |
| Tam devam ettirme | Yeni süreç, 5. noktanın yüklenmesi, ardından 5 güncelleme. | Seçilen tolerans içinde aynı girdi, oran ve parametre dizisi elde ediliyor mu? |
| RNG olmadan devam ettirme | Yeni süreç, aynı devam noktası ama rastgeleliğin geri yüklenmesi atlanmış. | Test, yalnızca ağırlıkların yüklenmesinin gözden kaçıracağı bir sapmayı saptıyor mu? |
Ön koşullar ve protokolün başlatılması
Arşivi indirin, bir çalışma klasörüne çıkarın ve ardından train.py ile verify_resume.py dosyalarını içeren klasöre geçin. PyTorch ve NumPy bulunan bir Python ortamı kullanın. Arşiv kodu ve sentetik verileri içerir; hiçbir model indirmez ve alıştırmayı çalıştırmak için Kernodeck hesabı gerektirmez.
Sağlanan kanıt Python 3.14.6, PyTorch 2.11.0+cu128 ve NumPy 2.4.4 ile çalıştırılmıştır. Program CPU'yu, float64 hassasiyetini ve tek bir PyTorch thread'ini zorlar. Bu nedenle paket son eki, devam ettirmenin CUDA kullandığı anlamına gelmez. Başka bir ortamda kendi doğrulamanızı çalıştırın.
Henüz var olmayan bir çıktı dizini seçin. Her akış checkpoint.pt, bunun özeti checkpoint.pt.sha256 ve summary.json üretir. Doğrulayıcı, karşılaştırmayı verification.json içinde toplar. --steps seçeneği ek adımları sayar: 5'te kesildikten sonra, devam ettirme komutu 10'a ulaşmak için 5 adım çalıştırır. Python -B seçeneği, alıştırma klasöründeki bytecode önbelleklerini önler.
python -B verify_resume.py --output runs/preuve-cpupython -B train.py --steps 10 --output runs/continu
python -B train.py --steps 5 --output runs/coupure
python -B train.py --steps 5 --resume runs/coupure/checkpoint.pt --output runs/repriseAğırlık dışa aktarımı ile devam ettirme checkpoint'i aynı role sahip değildir
Önce neyi geri getirmek istediğinizi seçin. Çıkarım için bir dışa aktarım, eğitilmiş bir modelle tahminler üretmeye yarar. Bir eğitim devam ettirmesi, sonraki güncellemeleri belirleyen durumu da geri getirmelidir. Dosya bazlı bir çıkarım işlemesi ise güvenilir bir tamamlanmış öğeler listesi gerektirir. Bu üç ihtiyaç farklı yedekler üretir.
Bu kalıcı yedeği activation checkpointing ile karıştırmayın. Bu teknik, bellekte tutulan bazı aktivasyonları geri yayılım sırasında yeniden hesaplayarak azaltır; tek başına, bir durdurmadan sonra devam etmeyi sağlayan bir dosya oluşturmaz. Bu nedenle projenizde checkpoint kelimesinin bir bellek optimizasyonunu mu yoksa bir devam noktasını mı belirttiğini açıkça belirtin.
Birlikte tutulması gereken durumlar
Modelin state_dict'i kayıtlı parametreleri ve buffer'ları içerir; optimizer'ın kendi durumu vardır. Burada Adam, StepLR, dropout ve üç rastgele üretici sonraki güncellemeleri etkiler. Checkpoint tüm bu öğeler için aynı anı temsil etmelidir.
Kod sürümünü, deney parametrelerini ve verilerin kimliğini de belgeleyin. Bir epoch'un ortasında, yalnızca numarasını bilmek yetmez: örneklerin sırasını ve tüketilecek sonraki grubu bulabilmek gerekir. Buradaki bir hata girişleri atlayabilir veya iki kez işleyebilir.
24 satırlık veri kümesi, iki değişken ile bir hedef arasındaki sentetik bir ilişkiyi tanımlar. Ağ 33 parametreye sahiptir; sekiz nöronlu bir katman ve 0,25 dropout içerir. Batch dört satır içerir. Beş güncellemeden sonra imleç 24 üzerinden 20'dedir: kesinti bir epoch'un ortasına denk gelir. On güncelleme 40 gözlem tüketir; bu da denetimin verilerin yeni bir permütasyonundan geçmesini gerektirir.
Tüm sütunları görmek için tabloyu kaydırın.| Durum | Rol | Yapılacak kontrol |
|---|---|---|
| Model | Ağırlıkları ve buffer'ları koruyun. | Nihai parametreleri ve bir değerlendirme çıktısını karşılaştırın. |
| Optimizer | Sonraki güncellemenin kullandığı durumları koruyun. | Yalnızca hiperparametrelerini değil, yeniden yüklenmesini doğrulayın. |
| Scheduler | Öğrenme oranlarının dizisini sürdürün. | Uygulanacak sonraki oranı, ardından sonraki oranları karşılaştırın. |
| Python, NumPy ve PyTorch RNG | Fiilen kullanılan çekilişleri sürdürün. | Geri yükleme olmadan yapılan olumsuz alıştırmanın ıraksadığını doğrulayın. |
| Veriler | Permütasyonu ve imleci devam ettirin. | Kesintiden sonraki giriş kimliklerini karşılaştırın. |
| İlerleme | Adımları ve epoch'ları yorumlayın. | Yeniden yapmadan veya atlamadan toplamda 10 güncellemeye ulaşın. |
| Yapılandırma | Aynı deneyi yeniden oluşturun. | Boyutları, hassasiyeti, ayarları ve sürümleri koruyun. |
Doğru sırayla geri yükleyin
Durumlarını yüklemeden önce modeli, optimizer'ı ve scheduler'ı yeniden oluşturun. Scheduler, optimizer.load_state_dict() çağrısından önce oluşturulmalıdır: aksi halde kurulumu, geri yüklenen öğrenme oranlarını geçersiz kılabilir. Kendi durumunu da yeniden yükleyin, ardından sonraki adımda fiilen kullanılan oranı doğrulayın.
Rastgele üreticileri, çekiliş tüketen nesnelerin oluşturulmasından sonra ve çalışmaya devam etmeden hemen önce geri yükleyin. Yalnızca başlangıç tohumunu geri koymak diziyi baştan başlatır; bu, beşinci güncellemeden sonra ulaşılan durumu bulmak değildir. Projenizde, dönüşümlerin ve veri yüklemenin kullandıkları dahil, kullanılan tüm üreticileri belirleyin.
Bu alıştırmada Python, girişler üzerinde hafif bir kazanç ayarlar; bir NumPy PCG64 üreticisi gürültü ve permütasyonlar üretir; PyTorch ise dropout'u üretir. Checkpoint, kesinti anında ulaşılan durumlarını korur. Doğrulayıcı ayrıca sonraki çekilişlerini gözlemler ve hesaplamanın geri kalanını bozmamak için durumu hemen geri yükler.
optimizer = torch.optim.Adam(model.parameters(), lr=0.03)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.5)
# Devam ettirme akışında, nesneler oluşturulduktan sonra:
state = load_checkpoint(resume)
model.load_state_dict(state["model"])
scheduler.load_state_dict(state["scheduler"])
optimizer.load_state_dict(state["optimizer"])
progress = state["progress"]
history = state["history"]
restore_rng(state["rng"], generator)
model.train()Tutarlı bir kayıt sınırı seçin
Açık bir sınır belirleyin; örneğin optimizer'ın tam bir güncellemesinden sonra. Bu güncellemeden önce birden fazla microbatch biriktiriyorsanız, ortada kaydetmek ara durumu da yönetmeyi gerektirir. İlk bir uygulama, biriken gradyanların zaten tüketildiği bir sınırda kaydettiğinde doğrulaması daha kolaydır.
Birden fazla yedek nesli saklayın. Yeni dosyayı farklı bir adla yazın, yazmanın bitmesini bekleyin, okunabilir olduğunu doğrulayın ve ardından kullanılabilir olarak işaretleyin. Bu kontrolü yapmadan geçerli tek checkpoint'inizi değiştirmeyin. Sıklık, yeniden yapmayı kabul ettiğiniz işe ve gözlemlediğiniz yazma süresine bağlıdır; yalnızca kiralama süresinden çıkarılamaz.
Mini proje, tamamlanan bir yinelemeden sonra kaydeder, ardından dosyayı ve parmak izini dışa aktarır. Her geçiş için yeni bir klasör kullanır ve önceki bir kanıtı değiştirmez. Eğitimiz GradScaler ile karışık hassasiyet kullanıyorsa, onun durumu da devam ettirmenin bir parçasıdır. Bu varyant CPU alıştırması kapsamında değildir.
Karşılaştırmayı ve toleransını okuma
Protokol, 5. noktadan sonraki devamı karşılaştırır: tüketilen veri, öğrenme oranı, kayıplar ve ulaşılan parametreler. Yalnızca adım numarasının örtüşmesi yeterli değildir. Sıfırlanmış bir optimize edici, döngüyü sürdürürken farklı güncellemeler üretebilir.
Bu alıştırma için seçilen tolerans mutlaktır: 1e-12, bağıl tolerans 0'dır. Bu eşik sağlanan CPU protokolünün bir parçasıdır; modelleriniz için evrensel bir kural değildir. Karşılaştırma, kullanılamaz bir çıktıyı sessizce kabul etmek yerine sonlu olmayan değerleri ve yapı farklılıklarını bildirmelidir.
PyTorch, sürümler, platformlar, CPU ve GPU arasında sonuçların aynı olmasını garanti etmez. Alıştırmayı taşırsanız, kanıtı hedef üzerinde yeniden yapın ve seçtiğiniz toleransı açıklayın. Kaynağını anlamadığınız bir başarısızlığı ortadan kaldırmak için eşiği genişletmeyin.
Sağlanan kanıtta, tam geçişin tüm farkları sıfırdır: parametreler, optimize edici durumu, kayıplar, oran ve MSE. Satır sırası, ilerleme, scheduler durumu ve sonraki çekilişler de örtüşür. 10. adımdan sonraki sonraki öğrenme oranı her iki geçişte de 0,00375'tir. Sonuç, bu nedenle yalnızca ara farklılıkları maskeleyebilecek bir nihai metriğe bağlı değildir.
Tüm sütunları görmek için tabloyu kaydırın.| Karşılaştırma | Tam devam ettirme | RNG geri yüklemesi olmadan devam ettirme |
|---|---|---|
| Ağırlıkların maksimum farkı | 0 | 0,011669328447718508 |
| Nihai MSE | 0,09538858591775097 | 0,0936034144665111 |
| Kesintisiz geçişe göre MSE farkı | 0 | 0,001785171451239867 |
| Uyum alt testinin sonucu | 1e-12 toleransı içinde uyumlu | Sapma tespit edildi |
Rastgeleliği geri yüklenmemiş negatif durumu neden saklamalı
Bir kontrol, hangi hatayı tespit ettiğini bildiğinizde daha faydalıdır. Negatif varyant aynı ağırlıkları, optimize edici ve scheduler durumlarını ve ilerlemeyi yeniden yükler, ancak RNG geri yüklemesini kasten atlar. Süreç, Python istisnası olmadan tamamlanırken farklı bir yörüngeyi sürdürebilir.
Sağlanan kanıtta bu atlama, 0,011'den büyük bir maksimum ağırlık farkı ve 0,0017'den büyük bir MSE farkı üretir. Negatif MSE burada kesintisiz geçişinkinden daha düşüktür: bu, devam ettirmeyi doğru yapmaz. Amaç aynı deneyimi yeniden elde etmektir, iki modeli nihai hatalarına göre sıralamak değil.
Doğrulayıcı yalnızca tam geçiş uyumlu olduğunda ve negatif durum saptığında başarılı olur. Ardından all_checks_passed: true, positive: true ve negative_divergence_detected: true gösterir. Çıkış kodu, protokol başarılıysa 0, karşılaştırma başarısızsa 1 ve doğrulama tamamlanamadıysa 2'dir.
python -B train.py --steps 5 --resume runs/coupure/checkpoint.pt --omit-rng-restore --output runs/reprise-incompleteAlıştırma dosyasını korumaları gevşetmeden yükleme
Proje yalnızca bu alıştırmayla oluşturduğunuz ve kontrolünüzde sakladığınız checkpoint'i yükler. Açıkça torch.load(..., map_location="cpu", weights_only=True) kullanır. Python durumu ilkel türler, NumPy PCG64 üreteci durumu tamsayılar ve dizeler, PyTorch CPU durumu ise bir bayt tensörü içerir. Kaydedilen RNG durumuna keyfi bir NumPy dizisi yerleştirilmez.
Yükleyici ilişkili özeti, boyutu, şemayı, ilerlemeyi, sürümleri ve kod ile verilerin kimliğini doğrular. Tutarsız bir durumu, eksik bir öğeyi sessizce sıfırlamak yerine reddeder. Özet bir değişikliği tespit eder; bir dosyanın göndericisini doğrulamaz.
Sırf bir yükleme hatasını susturmak için weights_only=False eklemeyin. Kaydedilen format ile yeniden oluşturulması tutarlı olmalıdır. Kısıtlı yükleme, serileştirme çözme olanaklarını azaltır ancak bilinmeyen bir dosyayı güvenilir kılmaz.
Dağıtık eğitim için neler değişiyor
Birden fazla süreç veya GPU'lar arasında dağıtılmış durumlarla çalışırken kimin neyi yazdığını doğrulayın. Tek bir süreç tarafından üretilen bir dosya, dağıtık işin tam bir yedeği olmak zorunda değildir. Stratejinizin öngördüğü yedekleme prosedürünü kullanın ve ilgili katılımcılarda tamamlanmasını bekleyin. Aynı devam noktasına ait parçaları açıkça belirleyin.
GPU sayısındaki bir değişiklik, durumların yeniden dağıtılmasını gerektirebilir ve veri dağılımını değiştirebilir. Dağıtık checkpoint mekanizmaları bazı değişiklikleri yönetebilir ancak bu olasılık, sizin formatınız ve yapılandırmanız için doğrulanmalıdır. Hedeflenen ortamda bir yükleme denemesi yapın. Siparişe parti eklemek, tek kartlık bir yedeği otomatik olarak dağıtık bir programa dönüştürmez.
Gerçekten kurtarılabilir bir dışa aktarımla bitirin
Son tarihten önce faydalı checkpoint'leri yapılandırmaları, metrikleri, yükleme talimatları ve veri tanımlayıcılarıyla birlikte dışa aktarın. Kopyalanan dosyaların boyutunu ve bir özetini doğrulayın, ardından en az bir yedeği hedefinden yükleyin. Aynı özet kopyayı kontrol eder; yeniden yükleme ise içeriğin işi gerçekten yeniden oluşturmaya yeterli olduğunu doğrular.
Yalnızca kaynağını bildiğiniz dosyaları yükleyin ve durumunuza uygun bir format ile serileştirme çözme seçenekleri seçin. Yenisi kontrollerinizi geçene kadar son doğrulanmış devam noktasını saklayın. Beklenen çıktı, kurtarılabilir bir klasör ve kısa bir devam kanıtıdır: çalıştırılan komut, geri bulunan adım, başarılı kontrol ve dışa aktarılan sonuç. Bu süreyi 3, 7 veya 30 gününüzde planlayın.
Kanıtın kapsamı ve kiralama seçimi
24 Eylül 2026 tarihli kanıt, CPU üzerinde dört yeni süreci karşılaştırır; mutlak tolerans 1e-12, bağıl tolerans yoktur. CUDA, ROCm, AMP, dağıtık eğitim veya veri yükleme worker'larını kapsamaz. Sağlanan sürümün devam mantığını, tanımlanan ortamda doğrular ve kiralanan bir GPU'nun yeteneklerini ölçmez.
Bu küçük alıştırmadan sonra aynı protokolü kendi modelinize, verilerinize ve backend'inize uyarlayın. 80 GB'lık veya 192 GB'lık bir kart, eksik bir checkpoint'i düzeltmez: önce uyumlu zinciri seçin, ardından belleği gerçek bir adıma göre boyutlandırın. Aşağıda bağlantısı verilen teklifler, bu kanıt için test edilmiş donanım olarak sunulmamaktadır.
3, 7 veya 30 günlük sürenizde ilk kaydetme–durdurma–devam etme döngüsünü ve son dışa aktarma süresini planlayın. Faydalı çıktı, sürümlerini, devam noktasını, karşılaştırmalı kontrolü ve sınırlarını açıklayabildiğiniz bir klasördür; yalnızca bir .pt dosyasının varlığı bu güvenceyi vermez.