Membedakan kampanye, konfigurasi, dan eksekusi
Sebuah kampanye membawa satu pertanyaan, misalnya membandingkan suatu baseline dengan suatu adaptasi. Sebuah konfigurasi menjelaskan pilihan teknis. Sebuah run adalah percobaan eksekusi konfigurasi tersebut, dengan sebuah seed, awal, akhir, dan status. Dua percobaan yang identik tetap memiliki dua pengenal, meskipun yang kedua menggantikan percobaan yang terputus.
Tambahkan pengenal evaluasi ketika artefak yang sama dievaluasi pada beberapa set atau dengan metrik baru. Hal ini menghindari kekeliruan antara model baru dengan pembacaan baru atas model yang ada. Kaitkan percobaan pemulihan dengan percobaan sebelumnya dan dengan checkpoint yang dimuat.
MLflow juga mengatur pelacakan di sekitar run, parameter, metrik, dan artefak. Pembedaan ini berguna bahkan dalam folder berkas sederhana. Anda dapat menerapkannya dengan alat yang biasa Anda gunakan; tidak diperlukan platform pelacakan tertentu untuk memulai.
Sumber teknis: MLflow — run, parameter, metrik, dan artefak
Menuliskan manifes yang benar-benar dieksekusi
Simpan parameter yang telah diselesaikan setelah penerapan nilai default dan argumen peluncuran. Berkas konfigurasi asli dapat mengabaikan batch default atau opsi yang diubah saat eksekusi. Catat apa yang benar-benar digunakan, dengan salinan kode atau revisi yang tidak dapat diubah dan status perubahan yang belum disimpan.
Manifes juga menghubungkan versi model dan tokenizer, lingkungan perangkat lunak, GPU yang benar-benar digunakan, presisi, data, seed, dan definisi metrik. Manifes menjelaskan percobaan, tanpa menjadi tutorial instalasi. Cantumkan satuannya: detik, byte, token, poin, atau proporsi dari 0 hingga 1 sesuai pengukurannya.
Saat dimulai, statusnya sedang berjalan; pada akhirnya, statusnya menjadi selesai, gagal, atau terputus sesuai dengan apa yang Anda amati. Jangan melengkapi setelahnya versi yang terlupakan dengan versi yang saat ini terpasang. Tandai informasi yang tidak diketahui dan batasi kesimpulan yang bergantung padanya.
| Blok | Elemen yang harus disimpan | Pertanyaan yang terjawab |
|---|---|---|
| Identitas | campaign_id, config_id, run_id, parent_run_id jika ada | Percobaan mana yang menghasilkan hasil ini? |
| Kode dan model | Revisi tepat, perubahan lokal, model dasar, dan tokenizer | Komputasi apa yang benar-benar dijalankan? |
| Data | Versi, split, praproses, pengenal, dan urutan yang relevan | Pada masukan mana? |
| Parameter | Nilai efektif, seed, dan satuan | Dengan pengaturan apa? |
| Evaluasi | Artefak yang dievaluasi, metrik/versi, ambang batas, dan populasi | Apa arti skor tersebut? |
| Penutupan | Status, galat, berkas yang dihasilkan, dan keputusan | Apakah percobaan dapat digunakan? |
Mengidentifikasi data melampaui nama folder
Sebuah jalur seperti donnees/final bukanlah penanda versi yang stabil. Simpan inventaris berkas atau contoh, split, dan prosedur transformasi. Jika Anda memperbaiki label atau memfilter baris, buat versi baru dan pertahankan hubungannya dengan versi sebelumnya. Skor lama harus tetap menunjuk ke data lamanya.
Hugging Face Datasets mengaitkan fingerprint dengan keadaan suatu dataset dan transformasinya untuk mengelola cache. Mekanisme ini berguna, tetapi asal data dan praproses juga harus disimpan. Transformasi yang tidak dapat di-hash misalnya dapat menghasilkan fingerprint acak: pengenal cache saja tidak menggantikan folder asal-usul Anda.
Untuk artefak yang dibekukan, tambahkan ukuran dan fingerprint berkas. Digest SHA-256 yang dihitung sebelum dan sesudah penyalinan memungkinkan verifikasi bahwa byte-nya sesuai dengan referensi yang disimpan. Ini tidak membuktikan kualitas label, hak penggunaan, maupun tidak adanya kebocoran antar split.
Sumber teknis: Hugging Face Datasets — fingerprint dan transformasi · Python 3.14 — fingerprint berkas dengan hashlib
Menghubungkan metrik, prediksi, dan artefak
Satu baris metrik sebaiknya mengidentifikasi run, artefak yang dievaluasi, dataset evaluasi, versi metrik, dan cakupannya. Jelaskan apakah nilai tersebut merujuk pada checkpoint perantara, model final, atau subgrup. Kurva tidak cukup jika Anda tidak lagi tahu file mana yang sesuai dengan titik yang dipilih.
Simpan prediksi beserta ID input, status, dan informasi yang diperlukan untuk evaluasi. Referensi yang diharapkan dapat tetap berada di file terpisah yang diberi versi. Untuk keluaran terstruktur, bedakan hasil mentah, hasil terurai (parsed), dan vonis: memperbaiki parsing tidak boleh menimpa keluaran awal.
MLflow memungkinkan Anda menghubungkan metrik dengan model dan data. Dengan file, terapkan prinsip yang sama melalui pengenal eksplisit. Pertahankan inventaris artefak yang mudah dibaca: bobot atau adaptor, parameter generasi, keluaran, laporan evaluasi, dan catatan keputusan. Jangan menganggap tangkapan layar dapat menggantikan file-file ini.
Sumber teknis: MLflow — menghubungkan metrik, model, dan dataset
Contoh: enam run dan satu duplikat yang menyembunyikan kekurangan
Mari kita bahas contoh klasifikasi dengan dua konfigurasi dan tiga seed. Ini menghasilkan enam run yang direncanakan. Masing-masing harus memprediksi 300 ID evaluasi yang sama: folder lengkap karenanya mengharapkan 6 × 300 = 1.800 pasangan unik (run_id, input_id). Perhitungan ini menggambarkan inventaris yang diharapkan, bukan eksperimen yang benar-benar dijalankan.
Misalkan sebuah file berisi 300 baris, tetapi ID doc-042 muncul dua kali dan doc-117 tidak ada. Total baris terlihat benar; namun hanya ada 299 ID unik. Run ini gagal dalam pemeriksaan cakupan sampai anomali tersebut dijelaskan dan diperbaiki.
Jika setiap run kemudian dievaluasi pada korpus lengkap dan pada subgrup teks panjangnya, Anda mendapatkan dua belas baris metrik untuk metrik tertentu. Ini tetap enam run, bukan dua belas pelatihan independen. Kunci evaluasi harus mencakup cakupan untuk mempertahankan pembedaan ini.
| Pemeriksaan | Diharapkan | Anomali ilustratif |
|---|---|---|
| Run | 2 konfigurasi × 3 seed = 6 | Satu peluncuran ulang menerima ID baru |
| Prediksi per run | 300 ID unik diharapkan | 300 baris tetapi hanya 299 ID unik |
| Pasangan run/input | 6 × 300 = 1 800 | Hitungan global saja tidak mendeteksi semua duplikat |
| Evaluasi | 6 run × 2 cakupan = 12 | Dua belas skor tidak menciptakan dua belas run |
Menutup folder dengan keputusan yang mudah dibaca
Sebelum menyatakan sebuah run selesai, periksa keberadaan dan keterbukaan file, kesesuaian ID, metrik yang dapat dihitung ulang, dan status setiap error. Upaya yang secara teknis selesai dapat tetap ditolak karena kualitas tidak mencukupi. Pertahankan kedua status ini secara terpisah.
Catatan keputusan merangkum pertanyaan, varian yang dibandingkan, kriteria yang diumumkan, hasil yang dipilih, dan alasan pengecualian. Sebutkan run_id dan path artefak daripada «model terakhir». Tambahkan batasannya: sedikit pengulangan, subgrup tidak memadai, versi tidak ditemukan, atau perbandingan menjadi tidak mungkin.
Koreksi di kemudian hari harus meninggalkan jejak: evaluasi baru, laporan baru, dan alasan perubahan. Simpan kesimpulan lama sebagai versi historis yang teridentifikasi, tanpa membiarkannya muncul sebagai keputusan saat ini. Terakhir, periksa bahwa salinan yang diekspor dapat dibuka dari folder tujuannya.
Menghindari pengumpulan yang tidak perlu dan janji reproduksi
Kumpulkan kolom yang diperlukan untuk pembuktian, bukan semua variabel lingkungan atau riwayat terminal. Sebuah konfigurasi atau URL dapat berisi token; siapkan versi yang dapat dibagikan tanpa rahasia dan simpan data yang harus tetap privat di lokasi yang diizinkan. ID teknis percobaan tidak perlu menyertakan nama seseorang.
Folder yang lengkap meningkatkan kemungkinan untuk mengulang dan memahami suatu eksperimen. Ini tidak menjamin kesetaraan numerik antar platform atau versi: PyTorch mendokumentasikan batas-batas reproduktifitas ini. Bedakan antara menemukan kembali protokol, memuat ulang artefak, dan mereproduksi angka secara persis.
Carnet IteraGPU dapat menyimpan tujuan, parameter, dan keputusan Anda, beserta referensi yang berguna. Ini tidak menjalankan run atau mengumpulkan file atau telemetri secara otomatis. Gunakan sebagai indeks penalaran Anda dan simpan folder artefak dalam cadangan Anda sendiri.
Sumber teknis: PyTorch 2.14 — batas reprodusibilitas antar lingkungan
Pertanyaan praktis
Apakah satu commit Git cukup untuk menemukan kembali sebuah eksperimen?
Sebuah commit mengidentifikasi versi kode, tetapi tidak selalu data, bobot, parameter efektif, atau perubahan yang tidak tercatat. Kaitkan commit dengan sebuah manifes dan artefak yang dihasilkan. Tanpa kaitan tersebut, dua eksekusi dari commit yang sama bisa merujuk pada eksperimen yang berbeda.
Apakah semua prediksi harus disimpan?
Simpan keluaran yang diperlukan untuk memverifikasi kesimpulan dan menghitung ulang evaluasi, sejauh hak dan batasan penyimpanan Anda mengizinkan. Untuk korpus perbandingan yang terbatas, pengenal dan prediksi lengkap membuat kesalahan dapat diaudit. Skor agregat saja umumnya tidak memungkinkan menemukan kembali contoh yang hilang.
Apakah kelanjutan harus memakai run_id yang sama?
Skema yang diusulkan memberi pengenal baru untuk setiap percobaan dan mengaitkan kelanjutan dengan run sebelumnya serta checkpoint yang dimuat. Anda dapat mengelompokkan percobaan-percobaan ini di bawah satu eksperimen logis. Pemisahan ini membuat gangguan, biaya, dan berkas yang benar-benar dihasilkan pada setiap tahap menjadi terlihat.