# Protokol: korpus yang diterima sebelum membandingkan biaya

Versi 1 — 24 September 2026. Lembar ini menyajikan protokol yang harus diisi; lembar ini tidak memuat hasil terukur maupun kumpulan data apa pun. Notebook terkait menggunakan MLP sintetis kecil untuk belajar menangani memori. Notebook tersebut tidak menjalankan protokol bisnis di bawah ini.

## 1. Menentukan pekerjaan yang berguna sebelum pengujian

Contoh pekerjaan: mengklasifikasikan korpus berisi **1.000 teks**. Susun sendiri kumpulan data yang diizinkan, representatif untuk penggunaan Anda, dengan pengenal unik dan referensi yang telah diverifikasi untuk setiap teks. Tetapkan revisi korpus, model, tokenizer, kode, dan seed. Simpan secara terpisah daftar ID yang diharapkan dan keluaran individual untuk memungkinkan audit.

Tentukan sebelum pengukuran apa pun: kelas, format keluaran, metrik utama (misalnya macro-F1), ambang penerimaannya, dan degradasi maksimum yang diizinkan terhadap referensi. Pilih toleransi yang relevan untuk aplikasi Anda; tidak ada nilai universal yang disediakan di sini. Data pelatihan, penyetelan, dan evaluasi harus tetap terpisah.

Sebuah korpus diterima hanya jika 1.000 ID yang diharapkan hadir tepat satu kali, tidak ada jawaban tambahan dalam keluaran, formatnya valid, dan aturan kualitas yang telah ditetapkan sebelumnya terpenuhi. Dua berkas yang masing-masing berisi 1.000 baris tidak dengan sendirinya membuktikan kesamaan ID. Arsipkan pemeriksaan himpunan dan duplikat.

## 2. Hanya mengubah varian yang diumumkan

Untuk mempelajari batch, siapkan misalnya varian 1, 4, dan 8. Pertahankan korpus, urutan masukan, model, tokenizer, presisi, dan batas konteks yang sama. Jika Anda kemudian mempelajari presisi, buat eksperimen terpisah dan ulangi kontrol kualitas. Jelaskan pemotongan: memperpendek teks mengubah pekerjaan yang diselesaikan.

Catat GPU sebenarnya, jumlah GPU yang benar-benar digunakan, device, driver, Python, PyTorch, dan runtime CUDA atau ROCm. Tuliskan juga versi kode Anda, opsi generasi yang mungkin ada, dan segala konkurensi pada mesin di `notes`. Paket komersial berisi dua GPU tidak berarti program menggunakan keduanya.

## 3. Mengukur lintasan yang sebanding

Umumkan apa yang dicakup oleh pengukur waktu: pemrosesan saja atau rantai lengkap dengan pembacaan, tokenisasi, dan penulisan. Pisahkan pemuatan, lintasan pertama, dan lintasan yang sudah dipanaskan. Skrip memori hanya mengukur MLP-nya dan tidak mengukur waktu rantai klasifikasi lengkap.

Lakukan pemanasan yang diumumkan, lalu lima lintasan terukur per varian dalam urutan bergantian atau yang diundi terlebih dahulu. Simpan setiap durasi mentah. Melaporkan median dan rentang min–maks memungkinkan kita melihat dispersi; lima observasi tidak cukup untuk estimasi p95 yang kokoh. Jangan diam-diam menyingkirkan kesalahan atau lintasan lambat: simpan barisnya dan jelaskan insidennya. Jalankan ulang dalam proses baru jika Anda ingin membandingkan lintasan pertama dalam kondisi yang serupa.

Untuk pengukuran GPU PyTorch, sinkronkan device yang dipilih sebelum pencatatan awal dan setelah operasi. Catat baseline `allocated` dan `reserved`, setel ulang statistik puncak, lalu simpan puncak absolut fase tersebut. `allocated` termasuk dalam `reserved`: menjumlahkannya akan menghitung sebagian memori dua kali. Kedua nilai maksimum dapat tercapai pada waktu yang berbeda: selisihnya bukan pengukuran cache pada satu waktu tertentu. Alokasi dari proses lain dan alokasi di luar allocator PyTorch tidak tercakup.

## 4. Mengisi resultats-bruts.csv

CSV yang disediakan hanya berisi header. Tulis satu baris per lintasan, dengan titik desimal dan satuan detik untuk waktu, byte untuk memori, dan sen USD untuk paket. Sel kosong berarti «tidak dicatat»; nol berarti benar-benar nol. Koma yang ada dalam catatan harus dilindungi dengan aturan CSV yang biasa.

| Bidang | Arti dan pengisian |
| --- | --- |
| `experiment_id`, `variant_id` | Pengidentifikasi tetap untuk eksperimen dan varian. |
| `corpus_revision`, `model_revision`, `tokenizer_revision`, `seed` | Versi atau sidik jari yang tidak berubah, dan seed yang diumumkan. |
| `gpu_model`, `gpu_count`, `device`, `driver_version`, `python_version`, `torch_version`, `runtime_version` | Perangkat keras yang benar-benar digunakan dan lingkungan yang teramati; jangan menyalin janji penawaran. |
| `precision`, `batch`, `context` | Konfigurasi yang benar-benar diterapkan. |
| `phase`, `run_index`, `warmup_iterations` | Fase terpisah (`cold` atau `warm`, misalnya), nomor lintasan, jumlah pemanasan. Jangan mencampur durasinya. |
| `expected_ids`, `observed_ids` | Jumlah ID yang diharapkan dan yang teramati; daftar rincinya disimpan bersama keluaran. |
| `ids_match`, `format_valid` | `true`/`false` setelah verifikasi nyata, termasuk duplikat dan jawaban tambahan. |
| `quality_metric`, `quality_threshold`, `quality_tolerance`, `quality_value` | Nama, ambang, dan toleransi yang telah ditetapkan sebelumnya, lalu nilai yang diukur. Jelaskan arah toleransi dan acuannya di `notes`. |
| `corpus_accepted` | `true` hanya jika semua syarat validasi terpenuhi; jika tidak, `false`. |
| `elapsed_seconds` | Durasi mentah dari cakupan yang diumumkan, bukan nilai yang diharapkan. |
| `baseline_allocated_bytes`, `baseline_reserved_bytes`, `peak_allocated_bytes`, `peak_reserved_bytes` | Pengukuran terpisah untuk device yang diukur saja. Biarkan kosong jika tidak diukur. |
| `duration_days`, `lots`, `package_total_usd_minor` | Paket lengkap yang dipilih, lot yang ditagih, dan harga total dalam sen USD; satu pengeluaran tidak boleh dijumlahkan lima kali. |
| `accepted_unique_corpora` | Jumlah korpus berguna yang berbeda yang diterima untuk analisis ekonomi; bidang ini tidak boleh dijumlahkan antar pengulangan. |
| `notes` | Cakupan, insiden, keputusan kualitas, revisi kode, dan rujukan berkas yang disimpan. |

## 5. Menghitung tanpa mengarang produksi

Harga yang dibandingkan adalah paket utuh 3, 7, atau 30 hari dikalikan dengan lot. Untuk B200, satu lot berisi dua GPU dan tarifnya sudah mencakup lot tersebut. `calcul_forfaits.py` menerapkan aturan ini pada tarif yang disediakan.

Jika pekerjaan berguna yang dipilih adalah korpus lengkap yang diterima, `--accepted-results` harus menerima jumlah korpus berbeda yang benar-benar tervalidasi selama periode tersebut. Lima pengulangan korpus yang sama berfungsi mengukur variabilitas: kelimanya tidak menciptakan lima hasil berguna. Tetapkan satuannya sebelum perbandingan dan pertahankan untuk semua varian. Tanpa jumlah yang terukur dan diterima, biarkan parameter ini kosong: hanya biaya paket yang akan dihitung. Jangan memproyeksikan laju secara otomatis ke 3, 7, atau 30 hari.

Simpan bersama protokol yang telah diisi, keluaran individual, kontrol kualitas, CSV mentah, dan perhitungan ekonomi. Konfigurasi yang lebih cepat tetapi tidak diterima tidak memenuhi tujuan yang sama. Konfigurasi yang melebihi memori tetap merupakan catatan kegagalan, bukan waktu yang boleh diganti dengan nol.
