Apa yang akan Anda jalankan
Proyek mini Kernodeck berisi kumpulan data sintetis kecil, jaringan dengan dropout, loop pelatihan, dan pemverifikasi. Protokol ini memaksa CPU untuk mengisolasi logika penyimpanan dan pemulihan. Ini bukan kualifikasi CUDA, ROCm, multi-GPU, atau pengukuran performa GPU sewaan.
Pemverifikasi membuka proses baru untuk jalur berkelanjutan, pemutusan, pemulihan penuh, dan kasus negatif yang tidak memulihkan generator acak. Tujuan kasus terakhir adalah memverifikasi bahwa pemeriksaan mampu mendeteksi pemulihan yang tidak lengkap, meskipun bobot dan nomor langkah tampak benar.
Geser tabel untuk membaca semua kolom.| Jalur | Eksekusi | Pertanyaan yang diverifikasi |
|---|---|---|
| Berkelanjutan | 10 pembaruan dari keadaan awal. | Keadaan apa yang dicapai tanpa gangguan? |
| Pemutusan | 5 pembaruan, lalu penyimpanan dan penghentian. | Apakah titik perantara berisi keadaan yang diharapkan? |
| Pemulihan penuh | Proses baru, memuat titik 5, lalu 5 pembaruan. | Apakah kita memperoleh urutan masukan, laju, dan parameter yang sama dalam toleransi yang dipilih? |
| Pemulihan tanpa RNG | Proses baru, titik pemulihan sama tetapi pemulihan acak dihilangkan. | Apakah tes mendeteksi penyimpangan yang akan lolos jika hanya memuat bobot? |
Prasyarat dan peluncuran protokol
Unduh arsip, ekstrak ke folder kerja, lalu masuk ke folder yang berisi train.py dan verify_resume.py. Gunakan lingkungan Python yang memiliki PyTorch dan NumPy. Arsip tersebut berisi kode dan data sintetis; ia tidak mengunduh model apa pun dan tidak memerlukan akun Kernodeck untuk menjalankan latihan.
Bukti yang disertakan dijalankan dengan Python 3.14.6, PyTorch 2.11.0+cu128, dan NumPy 2.4.4. Program memaksa CPU, presisi float64, dan satu thread PyTorch. Jadi, akhiran paket tersebut tidak berarti pemulihan menggunakan CUDA. Pada lingkungan lain, jalankan verifikasi Anda sendiri.
Pilih direktori keluaran yang belum ada. Setiap jalur menghasilkan checkpoint.pt, sidik jarinya checkpoint.pt.sha256, dan summary.json. Pemverifikasi mengumpulkan perbandingan dalam verification.json. Opsi --steps menghitung langkah tambahan: setelah pemutusan di langkah 5, perintah pemulihan menjalankan 5 langkah untuk mencapai 10. Opsi Python -B menghindari cache bytecode di folder latihan.
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/repriseEkspor bobot dan checkpoint pemulihan memiliki peran yang berbeda
Mulailah dengan memilih apa yang ingin Anda pulihkan. Ekspor untuk inferensi berfungsi menghasilkan prediksi dengan model yang sudah dilatih. Pemulihan pelatihan juga harus memulihkan keadaan yang menentukan pembaruan berikutnya. Pemrosesan inferensi per berkas memerlukan daftar andal elemen yang sudah selesai. Ketiga kebutuhan ini menghasilkan penyimpanan yang berbeda.
Jangan mencampur penyimpanan persisten ini dengan activation checkpointing. Teknik tersebut mengurangi sebagian aktivasi yang disimpan di memori dengan menghitungnya ulang selama propagasi balik; teknik itu sendiri tidak membuat berkas yang memungkinkan pemulihan setelah penghentian. Karena itu, tentukan dalam proyek Anda apakah kata checkpoint berarti optimasi memori atau titik pemulihan.
Status yang harus dijaga bersama
state_dict model berisi parameter dan buffer yang terdaftar; optimizer memiliki statusnya sendiri. Di sini, Adam, StepLR, dropout, dan tiga generator acak memengaruhi pembaruan berikutnya. Checkpoint harus mewakili momen yang sama untuk semua elemen tersebut.
Dokumentasikan juga versi kode, parameter eksperimen, dan identitas data. Di tengah epoch, hanya mengetahui nomornya tidak cukup: Anda harus dapat menemukan kembali urutan contoh dan kelompok berikutnya yang akan dikonsumsi. Kesalahan di titik ini dapat melewati entri atau memprosesnya dua kali.
Kumpulan 24 baris menggambarkan hubungan sintetis antara dua variabel dan satu target. Jaringan memiliki 33 parameter, dengan lapisan delapan neuron dan dropout 0,25. Batch berisi empat baris. Setelah lima pembaruan, kursor bernilai 20 dari 24: pemutusan terjadi di tengah epoch. Sepuluh pembaruan menghabiskan 40 observasi, yang memaksa pemeriksaan melewati permutasi data yang baru.
Geser tabel untuk membaca semua kolom.| Status | Peran | Pemeriksaan yang harus dilakukan |
|---|---|---|
| Model | Simpan bobot dan buffer. | Bandingkan parameter akhir dan keluaran evaluasi. |
| Optimizer | Simpan status yang digunakan oleh pembaruan berikutnya. | Periksa pemuatannya, bukan hanya hyperparameter-nya. |
| Scheduler | Lanjutkan urutan laju pembelajaran. | Bandingkan laju berikutnya yang diterapkan lalu laju-laju setelahnya. |
| RNG Python, NumPy, dan PyTorch | Lanjutkan pengambilan acak yang benar-benar digunakan. | Periksa bahwa latihan negatif tanpa pemulihan menjadi divergen. |
| Data | Lanjutkan permutasi dan kursor. | Bandingkan identitas entri setelah pemutusan. |
| Progres | Tafsirkan langkah dan epoch. | Sampai pada 10 pembaruan secara total, tanpa mengulang atau melewatkannya. |
| Konfigurasi | Bangun kembali eksperimen yang sama. | Simpan dimensi, presisi, pengaturan, dan versi. |
Pulihkan dalam urutan yang benar
Bangun kembali model, optimizer, dan scheduler sebelum memuat statusnya. Scheduler harus dibuat sebelum optimizer.load_state_dict(): konstruksinya jika tidak dapat menimpa laju pembelajaran yang dipulihkan. Muat kembali statusnya sendiri, lalu periksa laju yang benar-benar digunakan pada langkah berikutnya.
Pulihkan generator acak setelah pembuatan objek yang mengonsumsi pengambilan acak, tepat sebelum melanjutkan pekerjaan. Hanya mengembalikan seed awal akan memulai ulang urutan dari awal; itu bukan menemukan kembali status yang tercapai setelah pembaruan kelima. Dalam proyek Anda, kenali semua generator yang digunakan, termasuk yang ada pada transformasi dan pemuatan data.
Dalam latihan ini, Python mengatur gain ringan pada input, generator NumPy PCG64 menghasilkan noise dan permutasi, dan PyTorch menghasilkan dropout. Checkpoint menyimpan status mereka yang tercapai pada saat pemutusan. Pemeriksa juga mengamati pengambilan acak berikutnya, dengan segera memulihkan status agar tidak mengganggu kelanjutan komputasi.
optimizer = torch.optim.Adam(model.parameters(), lr=0.03)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.5)
# Dalam alur pemulihan, setelah pembuatan objek:
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()Pilih batas penyimpanan yang konsisten
Tetapkan batas yang eksplisit, misalnya setelah pembaruan optimizer yang lengkap. Jika Anda mengakumulasi beberapa microbatch sebelum pembaruan tersebut, menyimpan di tengah-tengah mengharuskan Anda juga mengelola status perantaranya. Implementasi pertama lebih mudah diverifikasi ketika menyimpan pada batas di mana gradien terakumulasi sudah dikonsumsi.
Simpan beberapa generasi cadangan. Tulis file baru dengan nama yang berbeda, tunggu hingga penulisan selesai, verifikasi bahwa file tersebut dapat dibaca, lalu tandai sebagai dapat digunakan. Jangan mengganti satu-satunya checkpoint valid Anda sebelum pemeriksaan ini. Frekuensinya bergantung pada pekerjaan yang bersedia Anda ulangi dan waktu penulisan yang Anda amati; frekuensi tidak dapat disimpulkan hanya dari durasi penyewaan.
Mini-project menyimpan cadangan setelah satu iterasi selesai, lalu mengekspor file dan sidik jarinya. Mini-project menggunakan folder baru untuk setiap alur dan tidak mengganti bukti sebelumnya. Jika pelatihan Anda menggunakan presisi campuran dengan GradScaler, statusnya juga termasuk bagian dari pemulihan. Varian ini tidak tercakup oleh latihan CPU.
Membaca perbandingan dan toleransinya
Protokol membandingkan kelanjutan setelah langkah 5: data yang dikonsumsi, laju pembelajaran, loss, dan parameter yang dicapai. Kesesuaian nomor langkah saja tidak cukup. Optimizer yang direset dapat melanjutkan loop namun menghasilkan pembaruan yang berbeda.
Toleransi yang dipilih untuk latihan ini bersifat absolut: 1e-12, dengan toleransi relatif 0. Ambang ini merupakan bagian dari protokol CPU yang disediakan; ambang ini bukan aturan universal untuk model Anda. Perbandingan harus menandai nilai yang tidak finit dan perbedaan struktur, alih-alih menerima output yang tidak dapat digunakan secara diam-diam.
PyTorch tidak menjamin identitas hasil antar versi, platform, CPU, dan GPU. Jika Anda memindahkan latihan ini, buat ulang buktinya pada target dan jelaskan toleransi yang dipilih. Jangan memperlebar ambang hanya untuk menghilangkan kegagalan yang asalnya tidak Anda pahami.
Dalam bukti yang disediakan, semua selisih pada alur lengkap bernilai nol: parameter, status optimizer, loss, laju, dan MSE. Urutan baris, progres, status scheduler, dan penarikan berikutnya juga sama. Laju pembelajaran berikutnya setelah langkah 10 bernilai 0,00375 pada kedua alur. Hasilnya tidak hanya bergantung pada satu metrik akhir yang dapat menyembunyikan perbedaan di antaranya.
Geser tabel untuk membaca semua kolom.| Perbandingan | Pemulihan penuh | Pemulihan tanpa pemulihan RNG |
|---|---|---|
| Selisih maksimum bobot | 0 | 0,011669328447718508 |
| MSE akhir | 0,09538858591775097 | 0,0936034144665111 |
| Selisih MSE terhadap alur kontinu | 0 | 0,001785171451239867 |
| Verdikt sub-uji kesesuaian | Sesuai dalam toleransi 1e-12 | Divergensi terdeteksi |
Mengapa mempertahankan kasus negatif tanpa pemulihan acak
Sebuah pemeriksaan lebih berguna ketika Anda mengetahui kesalahan apa yang dideteksinya. Varian negatif memuat ulang bobot, status optimizer, scheduler, dan progres yang sama, tetapi sengaja melewatkan pemulihan RNG. Proses dapat selesai tanpa pengecualian Python sambil menempuh lintasan yang berbeda.
Dalam bukti yang disediakan, kelalaian ini menghasilkan selisih maksimum bobot lebih dari 0,011 dan selisih MSE lebih dari 0,0017. MSE negatif di sini lebih rendah daripada alur kontinu: hal ini tidak membuat pemulihannya benar. Tujuannya adalah memperoleh kembali pengalaman yang sama, bukan mengurutkan dua model berdasarkan error akhirnya.
Verifier berhasil hanya ketika alur lengkap sesuai dan kasus negatif divergen. Verifier kemudian menampilkan all_checks_passed: true, positive: true, dan negative_divergence_detected: true. Kode keluarnya bernilai 0 jika protokol berhasil, 1 jika perbandingan gagal, dan 2 jika verifikasi tidak dapat diselesaikan.
python -B train.py --steps 5 --resume runs/coupure/checkpoint.pt --omit-rng-restore --output runs/reprise-incompleteMemuat file latihan tanpa melonggarkan perlindungan
Project hanya memuat checkpoint yang Anda buat dengan latihan ini dan simpan di bawah kendali Anda. Project secara eksplisit menggunakan torch.load(..., map_location="cpu", weights_only=True). Status Python berisi primitif, status generator NumPy PCG64 berisi bilangan bulat dan string, serta status PyTorch CPU berisi tensor byte. Tidak ada array NumPy sembarangan yang ditempatkan dalam status RNG yang disimpan.
Pemuat memeriksa checksum terkait, ukuran, skema, kemajuan, versi, serta identitas kode dan data. Pemuat menolak status yang tidak konsisten alih-alih secara diam-diam menginisialisasi ulang elemen yang hilang. Checksum mendeteksi perubahan; checksum tidak mengautentikasi pengirim suatu berkas.
Jangan tambahkan weights_only=False hanya untuk membungkam galat pemuatan. Format yang disimpan dan rekonstruksinya harus konsisten. Pemuatan terbatas mengurangi kemungkinan deserialisasi, tetapi tidak membuat berkas yang tidak dikenal menjadi tepercaya.
Apa yang berubah untuk pelatihan terdistribusi
Dengan beberapa proses atau status yang terbagi antar-GPU, periksa siapa menulis apa. Berkas yang dihasilkan oleh satu proses belum tentu merupakan cadangan lengkap dari pekerjaan terdistribusi. Gunakan prosedur pencadangan yang disediakan oleh strategi Anda dan tunggu penyelesaiannya pada peserta terkait. Identifikasi dengan jelas fragmen yang termasuk dalam titik pemulihan yang sama.
Perubahan jumlah GPU dapat memerlukan redistribusi status dan mengubah pembagian data. Mekanisme checkpoint terdistribusi dapat menangani sebagian perubahan, tetapi kemungkinan ini harus diverifikasi untuk format dan konfigurasi Anda. Lakukan uji pemuatan pada target yang dituju. Menambahkan batch ke pesanan tidak secara otomatis mengubah cadangan satu kartu menjadi program terdistribusi.
Akhiri dengan ekspor yang benar-benar dapat dipulihkan
Sebelum tenggat waktu, ekspor checkpoint yang berguna beserta konfigurasi, metrik, instruksi pemuatan, dan pengidentifikasi datanya. Periksa ukuran dan checksum berkas yang disalin, lalu muat setidaknya satu cadangan dari tujuannya. Checksum yang identik memeriksa salinan; pemuatan ulang memverifikasi bahwa isinya benar-benar cukup untuk merekonstruksi pekerjaan.
Muat hanya berkas yang Anda ketahui asalnya dan pilih format serta opsi deserialisasi yang sesuai. Simpan titik pemulihan terakhir yang tervalidasi sampai titik baru lolos pemeriksaan Anda. keluaran yang diharapkan adalah folder yang dapat dipulihkan dan bukti pemulihan singkat: perintah yang dijalankan, langkah yang ditemukan kembali, pemeriksaan yang berhasil, dan hasil yang diekspor. Sediakan waktu ini dalam 3, 7, atau 30 hari Anda.
Cakupan bukti dan pilihan penyewaan
Bukti 24 September 2026 membandingkan empat proses baru di CPU, dengan toleransi absolut 1e-12 dan tanpa toleransi relatif. Bukti ini tidak mencakup CUDA, ROCm, AMP, pelatihan terdistribusi, maupun worker pemuatan data. Bukti ini memvalidasi logika pemulihan versi yang disediakan, dalam lingkungan yang dijelaskan, dan tidak mengukur kemampuan GPU yang disewa.
Setelah latihan kecil ini, terapkan protokol yang sama pada model, data, dan backend Anda. Kartu 80 GB atau kartu 192 GB tidak memperbaiki checkpoint yang tidak lengkap: pilih dulu rantai yang kompatibel, lalu sesuaikan memori untuk satu langkah nyata. Penawaran yang ditautkan di bawah ini tidak disajikan sebagai perangkat keras yang diuji untuk bukti ini.
Sediakan dalam periode 3, 7, atau 30 hari Anda satu siklus pertama pencadangan–penghentian–pemulihan dan waktu untuk ekspor akhir. Keluaran yang berguna adalah folder yang versi, titik pemulihan, pemeriksaan komparatif, dan batasannya dapat Anda jelaskan; keberadaan berkas .pt saja tidak memberikan jaminan itu.