GPU untuk proyek Anda · pembayaran kripto tanpa KYC Cara menyewa
Bahasa Indonesia
Buka konsol
Panduan praktis / KERNODECK

Apakah pelatihan Anda benar-benar berlanjut dari titik yang sama?

Untuk memverifikasi kelanjutan, bandingkan sepuluh pembaruan berkelanjutan dengan lima pembaruan, satu penyimpanan, lalu lima pembaruan lagi dalam proses baru. Muat ulang model, optimizer, scheduler, generator acak, dan posisi dalam data. Buktinya harus membandingkan kelanjutan pekerjaan, bukan sekadar memastikan bahwa sebuah berkas dapat dimuat.

10 menit baca · Panduan untuk developer

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.
Empat jalur pada latihan
JalurEksekusiPertanyaan yang diverifikasi
Berkelanjutan10 pembaruan dari keadaan awal.Keadaan apa yang dicapai tanpa gangguan?
Pemutusan5 pembaruan, lalu penyimpanan dan penghentian.Apakah titik perantara berisi keadaan yang diharapkan?
Pemulihan penuhProses baru, memuat titik 5, lalu 5 pembaruan.Apakah kita memperoleh urutan masukan, laju, dan parameter yang sama dalam toleransi yang dipilih?
Pemulihan tanpa RNGProses 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.

Jalankan pemeriksaan lengkap di CPU
python -B verify_resume.py --output runs/preuve-cpu
Jalankan ulang secara manual ketiga jalur utama
python -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/reprise

Ekspor 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.
Setiap status menjawab pertanyaan tentang pemulihan
StatusPeranPemeriksaan yang harus dilakukan
ModelSimpan bobot dan buffer.Bandingkan parameter akhir dan keluaran evaluasi.
OptimizerSimpan status yang digunakan oleh pembaruan berikutnya.Periksa pemuatannya, bukan hanya hyperparameter-nya.
SchedulerLanjutkan urutan laju pembelajaran.Bandingkan laju berikutnya yang diterapkan lalu laju-laju setelahnya.
RNG Python, NumPy, dan PyTorchLanjutkan pengambilan acak yang benar-benar digunakan.Periksa bahwa latihan negatif tanpa pemulihan menjadi divergen.
DataLanjutkan permutasi dan kursor.Bandingkan identitas entri setelah pemutusan.
ProgresTafsirkan langkah dan epoch.Sampai pada 10 pembaruan secara total, tanpa mengulang atau melewatkannya.
KonfigurasiBangun 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.

Urutan pemulihan dalam train.py — kutipan dari alur lengkap
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.
Pengukuran bukti CPU; selisihnya bersifat absolut.
PerbandinganPemulihan penuhPemulihan tanpa pemulihan RNG
Selisih maksimum bobot00,011669328447718508
MSE akhir0,095388585917750970,0936034144665111
Selisih MSE terhadap alur kontinu00,001785171451239867
Verdikt sub-uji kesesuaianSesuai dalam toleransi 1e-12Divergensi 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.

Menjalankan pemulihan yang sengaja tidak lengkap di folder baru
python -B train.py --steps 5 --resume runs/coupure/checkpoint.pt --omit-rng-restore --output runs/reprise-incomplete

Memuat 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.