# Kernodeck Reprise v1 — checkpoint yang benar-benar dilanjutkan

Latihan orisinal ini mempelajari relasi numerik kecil pada 24 baris sintetis. Tujuannya adalah **memverifikasi kelanjutan sebuah pelatihan**, bukan memperoleh model terbaik atau mengukur GPU. Komputasi secara eksplisit dipaksa pada **CPU**, dalam `float64`, dengan satu thread PyTorch.

Kontrol membandingkan 10 langkah kontinu dengan 5 langkah, sebuah checkpoint, lalu 5 langkah baru di **proses Python lain**. Proses keempat sengaja melewatkan pemulihan generator acak: penyimpangannya harus terdeteksi. Tidak ada sumber daya jarak jauh, data klien, atau bobot terlatih yang diunduh.

## Prasyarat

- Lingkungan Python dengan PyTorch dan NumPy yang sudah terpasang. Bukti yang disediakan dijalankan dengan **Python 3.14.6, PyTorch 2.11.0+cu128, dan NumPy 2.4.4**.
- Sekitar 1 MB tersedia untuk empat folder keluaran kecil. Dependensi Python menempati ruangnya sendiri.
- Jalankan perintah dari folder hasil ekstraksi `kernodeck-reprise-v1`.

Sufiks `+cu128` menjelaskan paket yang ada saat pengujian; itu tidak berarti latihan ini menggunakan CUDA. **Tidak ada komputasi CUDA, ROCm, AMP, multi-GPU, atau terdistribusi yang divalidasi oleh sumber daya ini.** Sumber daya ini tidak menggunakan worker DataLoader. Lingkungan lain harus menghasilkan buktinya sendiri; kesetaraan tidak dijanjikan antar versi atau platform.

## Perintah verifikasi

```console
python -B verify_resume.py --output runs/preuve-cpu
```

`-B` mencegah cache bytecode di folder proyek. Direktori keluaran harus baru: tidak ada percobaan yang sudah ada yang ditimpa. Untuk memulai ulang, gunakan misalnya `runs/preuve-cpu-2`.

Program menjalankan empat perintah dengan interpreter Python yang sama, lalu menulis `runs/preuve-cpu/verification.json`. Eksekusi lengkap menghasilkan:

```json
{"device":"cpu","all_checks_passed":true,"positive":true,"negative_divergence_detected":true,"report":"verification.json"}
```

Kode keluar bernilai **0** jika protokol berhasil, **1** jika perbandingan gagal, **2** jika verifikasi tidak dapat diselesaikan. Keberhasilan menuntut sekaligus kelanjutan positif dan kegagalan yang teramati pada kontrol negatif. File checkpoint yang sekadar ada tidak cukup.

## Melakukan ketiga langkah secara manual

```console
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
```

Setiap baris menjalankan proses terpisah. `--steps` berarti **langkah tambahan**, jadi perintah ketiga berakhir pada langkah 10. Setiap folder berisi `checkpoint.pt`, sidik jarinya `checkpoint.pt.sha256`, dan ringkasan yang dapat dibaca `summary.json`. Checkpoint dibuat oleh latihan saat dijalankan; checkpoint tidak didistribusikan dalam arsip.

Untuk mengamati kasus yang tidak lengkap, gunakan folder baru:

```console
python -B train.py --steps 5 --resume runs/coupure/checkpoint.pt --omit-rng-restore --output runs/reprise-incomplete
```

Perintah terakhir ini dapat selesai tanpa error Python. **Ini tidak membuktikan kelanjutan yang benar.** Perintah `verify_resume.py` membandingkan hasil dan menemukan perbedaannya.

## Apa yang sebenarnya dilakukan model

`data.csv` berisi grid dua variabel dan target sintetis: `target = 0.7*x1 - 0.4*x2 + 0.15*x1*x2 + 0.1`. Ini tidak meniru catatan klien mana pun. Jaringan terdiri dari dua input, satu lapisan delapan neuron, `Tanh`, dropout 0,25, dan satu keluaran, yaitu 33 parameter.

Pelatihan menggunakan Adam dengan laju awal 0,03. StepLR membagi dua laju ini setiap tiga langkah. Setiap batch terdiri dari empat baris: 10 langkah menghabiskan 40 observasi, dengan melintasi kembali beberapa baris setelah epoch pertama. Permutasi, epoch, kursor, dan jumlah observasi yang dikonsumsi dipertahankan. Pada pemotongan setelah lima langkah, kursor bernilai 20 dari 24: kelanjutan terjadi **di dalam penelusuran data**.

Tiga sumber acak memengaruhi pekerjaan: Python mengatur gain ringan pada input, generator NumPy PCG64 menghasilkan noise dan permutasi, PyTorch menghasilkan dropout. Menetapkan kembali seed awal tidak merekonstruksi status yang tercapai pada pemotongan.

## Apa yang disimpan checkpoint dan dalam urutan apa dibaca kembali

Kamus berisi bobot, status Adam, status StepLR, kemajuan data, ketiga RNG, riwayat loss dan laju, serta sidik jari kode dan CSV. Mode `train()` dipulihkan untuk melanjutkan; pengukuran MSE akhir menggunakan `eval()` dan tidak mengonsumsi dropout.

Saat melanjutkan, kode terlebih dahulu membangun model, optimizer, dan **scheduler**, lalu memuat bobot, status scheduler, dan status optimizer. RNG dipulihkan terakhir, setelah pembangunan yang mengonsumsi keacakan. Pilihan ini mengikuti peringatan dokumentasi [Optimizer.load_state_dict](https://docs.pytorch.org/docs/2.11/generated/torch.optim.Optimizer.load_state_dict.html).

Status Python adalah struktur primitif. PCG64 menyediakan kamus berisi integer dan string; tidak ada objek `ndarray` NumPy yang diserialisasi sebagai status RNG. Status PyTorch CPU adalah tensor byte. Pengundian berikutnya dikendalikan tanpa mengubah status yang disimpan.

## Pembacaan bukti dan toleransi

`verification-cpu.json` adalah bukti publik dari eksekusi nyata versi ini. `source` berisi SHA-256 skrip dan CSV. `protocol` menjelaskan keempat proses, presisi, dan toleransi. `resume_boundary` memverifikasi pengundian berikutnya dari setiap RNG dan laju berikutnya yang digunakan setelah pemutusan.

Perbandingan menuntut urutan baris yang sama, kemajuan yang sama, dan status scheduler yang sama. Selisih absolut maksimum yang diterima untuk bobot, status optimizer, loss, MSE, dan laju adalah **1e-12**, tanpa toleransi relatif (`rtol=0`). Laporan mempertahankan selisih yang terukur, bahkan ketika nilainya nol. Laporan juga memverifikasi pengundian RNG berikutnya di akhir kedua lintasan.

Kontrol negatif harus menunjukkan bahwa melupakan RNG mengubah hasil. MSE-nya bisa lebih rendah atau lebih tinggi: pengujian ini memverifikasi lintasan pemulihan, bukan peringkat kualitas. Jadi divergensi yang diharapkan menghasilkan `passed: false` pada sub-tes ini dan `divergence_detected: true`; protokol keseluruhan kemudian dapat berhasil.

## Hanya memuat checkpoint milik sendiri

Loader secara eksplisit menggunakan `torch.load(..., map_location="cpu", weights_only=True)` dan tidak menawarkan fallback apa pun ke `weights_only=False`. Loader terlebih dahulu memverifikasi sidik jari terkait, membatasi ukuran, dan memeriksa skema, versi, kode, serta data. Loader menolak status yang tidak lengkap alih-alih secara diam-diam menginisialisasi ulang sebagian pelatihan.

Gunakan hanya checkpoint yang **Anda buat dengan latihan ini dan simpan di bawah kendali Anda**. Sidik jari berfungsi mendeteksi perubahan; sidik jari tidak mengautentikasi pengirim. Pemuatan yang dibatasi tidak membuat berkas yang tidak dikenal menjadi tepercaya. Lihat [torch.load](https://docs.pytorch.org/docs/2.11/generated/torch.load.html) dan [serialisasi PyTorch](https://docs.pytorch.org/docs/2.11/notes/serialization.html).

## Menyesuaikan latihan dengan proyek Anda

Identifikasi status yang benar-benar dikonsumsi oleh pelatihan Anda sendiri: sampler, augmentasi, optimizer, scheduler, dan generator khusus. Jika Anda menggunakan AMP, tambahkan status scaler pada batas yang konsisten; latihan ini tidak melakukannya. Pelatihan terdistribusi juga menuntut penanganan prosesnya dan pembagian datanya.

Jangan menyimpulkan dari bukti kecil ini durasi sewa, throughput, jejak VRAM, atau jaminan pemulihan untuk model yang berbeda. Lanjutkan metodenya: himpunan singkat yang representatif, pemutusan di tengah pekerjaan, proses lain, perbandingan eksplisit, dan kontrol negatif.

## Konten dan lisensi

- `train.py`, `verify_resume.py`, dokumentasi ini, dan manifes: lisensi MIT, lihat `LICENSE-MIT.txt`.
- `data.csv`: data sintetis orisinal yang ditawarkan di bawah CC0 1.0, lihat `DATA-LICENSE-CC0.txt`.
- `verification-cpu.json`: pengukuran latihan ini, tanpa data pribadi, lingkungan lengkap, jalur mesin, token, atau pengenal sesi.
- `manifest.json`: daftar persis berkas yang didistribusikan dan SHA-256-nya. Manifes tidak merujuk dirinya sendiri.
- `SOURCES.md`: tautan resmi dan batasan dokumentasi.

Dependensi PyTorch, NumPy, dan Python mempertahankan lisensinya masing-masing. Dependensi tersebut tidak didistribusikan ulang dalam ZIP.


## Presentasi Kernodeck dan kompatibilitas proyek

Penerbitan ulang tanggal 25 September 2026 ini memperbarui nama arsip, dokumentasi, dan merek. Skrip `train.py` dan `verify_resume.py`, CSV, dan `verification-cpu.json` tetap identik dengan pengiriman yang dijalankan pada 24 September 2026. Kolom teknis `project` mempertahankan pengidentifikasinya untuk pembaca laporan yang sudah ada. Tidak ada perhitungan maupun pemeriksaan CPU/GPU yang dijalankan ulang untuk penerbitan ulang ini.
