English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

tamu
1 / ?
kembali ke pelajaran

Enam Belas Hari Komputasi pada Satu GPU

Satu Eksekusi Panjang

ANDREA-120M memakan waktu ~23 hari pada RTX 4090 (FP16, 6 langkah/menit, 200K langkah). Daya listrik, kernel panic, crash proxy, & perubahan konfigurasi disengaja semuanya terjadi selama jendela tersebut. Tanpa checkpoint, satu gangguan membuang seluruh eksekusi.


v1 kehilangan 27K langkah karena satu kesalahan (lr=0.001 terlalu agresif) karena tidak ada checkpoint yang lebih dekat dari titik peluncuran. v2 menyerap pelajaran itu: cadence checkpoint turun menjadi setiap 100 langkah, & penanganan sinyal CUDA menjamin penulisan checkpoint pada SIGTERM.


Tiga Peran

Sebuah checkpoint melayani tiga pekerjaan sekaligus:


1. Titik pemulihan. Proses mati, mesin restart, kernel panic: lanjutkan dari step_NNNNNN.bin terbaru.

2. Pivot poles. Langkah 112,619: ubah kurikulum tanpa melatih ulang. SIGUSR1 memaksa checkpoint bersih, proxy berhenti, caps & floors baru dikirimkan, CUDA melanjutkan dari titik tersimpan di bawah kebijakan baru.

3. Fork audit. Bandingkan dua konfigurasi pada bobot awal yang sama: salin checkpoint, jalankan dua cabang yang berbeda ke depan, amati mana yang konvergen.


Setiap 100 langkah memberikan ~17 menit pelatihan antara penulisan pada 6 langkah/menit. 100 langkah juga cocok dengan sample_every: setiap checkpoint sesuai dengan satu audit sampel segar, & setiap audit sampel sesuai dengan titik pemulihan.

Tiga Peran untuk Satu File

Sebutkan dua pekerjaan berbeda yang dilakukan file checkpoint selain pemulihan dari crash. Berikan alasan satu kalimat untuk masing-masing.

Lima Wilayah dalam Satu File

Format

Setiap step_NNNNNN.bin mengemas lima wilayah kontigu:


[int32 step] [int32 n_params] [n_params x float32 weights] [n_params x float32 m] [n_params x float32 v]

Format Biner Checkpoint ANDREA


Wilayah demi Wilayah


Header (total 8 byte). Nomor langkah 32-bit memberi tahu kita di mana snapshot ini berada dalam pelatihan; jumlah parameter 32-bit memberi tahu kita seberapa besar tiga array berikutnya masing-masing.


Bobot (n_params x 4 byte). Setiap parameter yang dipelajari, rata. Urutan sesuai dengan iterator parameter model: embedding token & posisi, kemudian bobot per-lapisan attention & MLP, kemudian kepala output.


Momen pertama Adam m (n_params x 4 byte). EMA dari gradien masa lalu (beta1 = 0.9). Bentuk sama seperti bobot. Diperlukan untuk kelanjutan AdamW.


Momen kedua Adam v (n_params x 4 bytes). EMA dari gradien kuadrat masa lalu (beta2 = 0.999). Bentuk sama seperti bobot. Diperlukan untuk resumsi AdamW.


Ukuran Total

Total byte = 8 + 12 x n_params. ANDREA-12M (12.8M params): 154 MB di disk (147 MB dibulatkan). ANDREA-120M (~120M params) FP32: ~1.44 GB. Tiga array dengan bentuk identik, disusun berurutan, dengan header kecil.


Mengapa Menyimpan m & v

Adam vanilla melacak laju pembelajaran per-parameter melalui m & v. Jika dibuang saat menulis checkpoint & run yang dilanjutkan dimulai dengan momentum nol & estimasi varians nol, setara dengan laju pembelajaran 0 untuk satu langkah kemudian lonjakan mendadak. Loss melonjak; model bisa keluar dari basin saat ini. Menyimpan m & v membuat resume setara bit (modulo keacakan dataloader) dengan baseline yang tidak pernah berhenti.

Menentukan Ukuran Satu Checkpoint

ANDREA-120M memiliki ~120.000.000 parameter yang dilatih dalam FP32 (4 byte per float). Hitung: (a) byte yang digunakan oleh header saja; (b) byte yang digunakan oleh tiga array float32 gabungan (weights + m + v); (c) total ukuran checkpoint dalam MB. Tunjukkan perhitungan Anda.

SIGTERM & SIGUSR1

Mengapa CUDA Menangani Sinyal

Pelatihan berjalan sebagai proses foreground yang panjang. Ketika proxy atau operator ingin GPU berhenti, sebuah sinyal dikirim ke engine CUDA. Tanpa handler, SIGTERM default langsung membunuh proses: komputasi gradien yang sedang berlangsung dibuang, bobot terbaru sejak checkpoint terakhir hilang. Dengan handler, engine menulis checkpoint terlebih dahulu lalu keluar dengan bersih.


SIGTERM: tulis & keluar

Dikirim oleh tombol stop, systemctl stop, atau kill dari proxy induk. CUDA menyelesaikan langkah saat ini, menulis step_NNNNNN.bin ke disk, lalu keluar. Pemulihan dari kondisi ini hanya membutuhkan .bin terbaru: nol pekerjaan hilang selain langkah parsial yang sedang berlangsung.


SIGUSR1: tulis & lanjutkan

Dikirim atas permintaan oleh operator atau skrip proxy. CUDA menyelesaikan langkah saat ini, menulis step_NNNNNN.bin, lalu melanjutkan pelatihan seolah tidak ada apa-apa. Berguna untuk: memicu titik audit tepat sebelum perubahan konfigurasi; menangkap bobot pada momen yang diketahui baik; menyelaraskan checkpoint dengan run penilaian kualitas sampel eksternal.


Urutan Pivot Polandia (langkah 112,619)

1. Operator mengirim SIGUSR1 ke CUDA. Checkpoint ditulis pada batas 100-langkah berikutnya (langkah 112,700).

2. Operator menghentikan proxy.

3. .samples.json & .state.json diarsipkan (log sampel & status bandit disimpan sebagai catatan historis).

4. .loss.json tetap di tempat. Riwayat pelatihan kumulatif; tidak pernah diarsipkan.

5. Proxy dimulai ulang dengan caps & floors baru.

6. CUDA dilanjutkan dari step_112700.bin dengan bandit baru tetapi bobot lengkap, m, & v.


Riwayat loss berlanjut tanpa putus melintasi pivot. Log sampel reset dengan bersih. Bandit mendapat awal baru di bawah kebijakan baru.

Memilih Sinyal

Dua skenario. (a) Skrip proxy ingin menangkap snapshot TEPAT SEBELUM beralih dari v3-base ke v3-polish caps, tanpa menghentikan pelatihan. Sinyal mana? Mengapa? (b) Perintah `systemctl stop unhomeschool-train` host dijalankan selama reboot terencana. Sinyal mana yang dikirim systemd secara default? Apa yang dilakukan handler CUDA?

Riwayat Pelatihan Kumulatif

Tiga File Sidecar

Di samping setiap checkpoint, proxy mempertahankan tiga sidecar JSON di direktori run:


- .loss.json -- satu entri per langkah, selamanya. ~200.000 entri pada akhir run. Riwayat pelatihan kumulatif.

- .samples.json -- sampel yang dihasilkan baru-baru ini untuk audit. Direset pada polish pivots.

- .state.json -- bandit arm pulls, hadiah EMA, penghitung fase. Direset pada polish pivots.


Apa yang Direset, Apa yang Bertahan

Pivot poles adalah perubahan kebijakan, bukan reset run. Bobot model, m, v, & riwayat loss semuanya berlanjut tanpa putus. Hadiah akumulasi bandit TIDAK berlanjut: topi & lantai baru mendefinisikan kebijakan yang berbeda, & bandit harus belajar ulang di bawah kebijakan baru dari keadaan bersih.


Mengapa .loss.json Tetap

Riwayat loss berfungsi sebagai jejak audit run. Setiap klaim yang dipublikasikan tentang ANDREA-120M (EMA loss pada langkah 110K, pemulihan pivot-poles, konvergensi pada langkah 112K) dapat ditelusuri kembali ke entri dalam file ini. Mengarsipkan .loss.json antar fase akan memaksa pembaca menyusun potongan-potongan untuk merekonstruksi run; menjaganya append-only & tidak tersentuh melestarikan asal-usul.


Pelajaran Lengan Zombie

Langkah 112,619 menemukan lengan repo-docstrings di .state.json yang membawa bobot 1.546 dari run sebelumnya. Keadaan bandit telah dilestarikan melintasi restart sebelumnya tetapi sumber data tidak lagi tersedia, menghasilkan tarikan zombie yang mendistorsi akuntansi eksplorasi. Pelajaran: keadaan bandit DIIZINKAN berubah melintasi restart dengan cara yang mengejutkan. Riwayat loss adalah satu-satunya file yang harus tetap tidak tersentuh selama masa pakai run penuh.


Satu Aturan untuk Mengatur Semuanya

Arsipkan .samples.json & .state.json secara bebas antar fase. Jangan pernah arsipkan .loss.json. .loss.json terbaru selalu merupakan riwayat pelatihan kanonik.

Menerapkan Aturan

Tiga tindakan selama pivot poles pada langkah 112.619. Untuk masing-masing, nyatakan ARCHIVE, KEEP IN PLACE, atau RESET, & berikan alasan satu kalimat: (a) `.samples.json`; (b) `.loss.json`; (c) `.state.json` (memori bandit).

Apa yang Dibangun & Mengapa

Lima Keputusan

1. Cadence: setiap 100 langkah. Granularitas titik pemulihan ~17 menit. Selaras dengan sample_every sehingga setiap checkpoint sesuai dengan satu audit sampel segar.

2. Format: header + 3 array. Minimal: header 8-byte memberi tahu seberapa besar setiap array berikutnya. Tidak ada pembengkakan metadata. Resume bit-equivalent saat m & v disimpan.

3. Sinyal: SIGTERM & SIGUSR1. Dua peran, dua sinyal. Penutupan systemd default mendapatkan checkpoint bersih melalui SIGTERM; titik audit on-demand mendapatkan checkpoint bersih melalui SIGUSR1 tanpa berhenti.

4. Kontinuitas loss: tidak pernah diarsipkan. Riwayat pelatihan kumulatif bertahan melintasi pivot poles, restart, & perubahan kebijakan. Satu jejak audit untuk seluruh jalannya.

5. Status Bandit: reset diizinkan. Kebijakan Bandit hidup di bawah satu konfigurasi pada satu waktu. Pivot poles mereset; riwayat loss berlanjut. Dua masa pakai berbeda berbagi direktori jalannya yang sama.


Apa yang Terhubung dengan Pelajaran Ini


- Aktivitas 23 (grow_a_language_model_sample_audit). cadence sample_every cocok dengan cadence checkpoint; keduanya berjalan setiap 100 langkah.

- Aktivitas 24 (grow_a_language_model_microgpt_to_andrea). v1 collapse, v2.5 patch, v3 polish pivot semuanya memerlukan checkpoint bersih untuk beroperasi.

- Aktivitas 10 (grow_a_language_model_adamw). Menyimpan m & v di checkpoint penting karena aturan pembaruan AdamW bergantung pada keduanya. Jika dihapus & dilanjutkan, akan menyimpang.


Satu Kebenaran Teknik Lagi

Kode bertahan lebih lama daripada penulisnya. Infrastruktur bertahan lebih lama daripada pembuatnya. Format checkpoint sederhana bertahan lebih lama daripada setiap skema resume mewah yang menjanjikan untuk melewatkan penyimpanan status optimizer. Hemat byte; hemat pelatihan.

Apa yang Akan Anda Bangun?

Jika Anda melatih model kecil sendiri, dari lima keputusan ini, mana yang akan Anda adopsi tanpa perubahan & mana yang akan Anda sesuaikan? Pilih satu untuk dibahas dalam 2-3 kalimat. Tidak ada jawaban salah; pertanyaannya adalah apakah Anda bisa memikirkan tradeoff-nya.