# IteraGPU Lab v1

Sumber daya asli, versi 24 September 2026, untuk mempersiapkan eksperimen GPU yang dapat direproduksi. Notebook memori dan pendampingnya menjalankan jaringan sintetis kecil `Linear → GELU → Linear`. Keduanya tidak mengunduh model maupun kumpulan data apa pun. Jaringan ini bukan LLM, bukan pelatihan, dan bukan tolok ukur yang representatif untuk GPU yang ditawarkan untuk disewa.

## Isi

- `mesure-memoire.ipynb` : notebook mandiri, kode disertakan, sel tanpa keluaran tersimpan.
- `mesure_memoire.py` : aritmetika dan protokol pengukuran yang sama, dapat digunakan dari baris perintah.
- `protocole-qualite.md` : protokol bisnis yang harus dilengkapi sebelum membandingkan waktu dan biaya.
- `resultats-bruts.csv` : kisi kosong, satu baris untuk diisi per eksekusi nyata.
- `calcul_forfaits.py` : perhitungan paket lengkap, tanpa dependensi eksternal.
- `tarifs-forfaits.csv` : 45 tarif IteraGPU, 15 model × 3 durasi, cuplikan 24 September 2026.
- `LICENSE.txt` : lisensi MIT untuk kode, notebook, dan dokumen asli.
- `MANIFEST.json` : daftar lengkap sembilan anggota arsip, ukuran dan SHA-256 dari delapan file konten. Manifes menyatakan dirinya sendiri tanpa sidik jari untuk menghindari sidik jari yang merujuk pada dirinya sendiri.

Arsip `iteragpu-lab-v1.zip` berisi sembilan file ini di dalam satu folder. Arsip ini tidak berisi hasil GPU, lingkungan Python, driver, maupun kredensial. Ekstrak file ke direktori baru. Notebook juga dapat diunduh sendiri: ia tidak mengimpor skrip pendamping.

## Prasyarat dan batasan

Perhitungan aritmetika dan paket hanya menggunakan Python 3.10 atau lebih baru dan pustaka standarnya. Notebook memerlukan alat yang dapat membuka notebook Python; tidak ada server Jupyter yang disediakan. Pengukuran juga memerlukan instalasi PyTorch yang sudah ada dan kompatibel dengan GPU, driver, serta runtime CUDA atau ROCm-nya. Tidak ada perintah dalam folder ini yang memasang komponen tersebut.

Pilih device yang eksplisit, misalnya `cuda:0`. Backend ROCm milik PyTorch juga menggunakan nama antarmuka ini; hal itu tidak membuktikan kompatibilitas instalasi AMD tertentu. Tanpa PyTorch yang dapat dimuat atau tanpa GPU yang dapat diakses, `measure` berhenti dengan kode 2 dan pesan yang jelas. Ia tidak menulis pengukuran palsu dan tidak beralih ke CPU. `environment` adalah diagnostik: keluaran yang valid dapat menyatakan GPU tidak tersedia.

## 1. Memperkirakan bobot, tanpa GPU

```console
python mesure_memoire.py estimate --parameters 7000000000 --bits 16 --reserve-gib 4
```

Perhitungan ini menerima jumlah parameter dan lebar penyimpanan. Ia membulatkan bit ke jumlah byte bulat ke atas, lalu mengonversi ke GiB (`2**30` byte). Satu GB desimal mewakili `10**9` byte. 4 GiB adalah asumsi yang dipilih dalam contoh ini, bukan cadangan yang diukur. Hasilnya tidak secara otomatis mencakup aktivasi, cache KV, metadata kuantisasi, gradien, status pengoptimal, atau pustaka. Ia tidak memprediksi apakah model nyata dapat muat di sebuah kartu.

## 2. Memeriksa lingkungan yang ada

```console
python mesure_memoire.py environment --device cuda:0
```

Simpan Python, versi PyTorch, versi build CUDA/HIP, GPU yang benar-benar terlihat, dan memori yang dilaporkan oleh runtime. Driver harus dicatat secara terpisah dengan alat dari penyedia. Skrip tidak mengumpulkan variabel lingkungan maupun data pribadi. Versi runtime yang terintegrasi dengan PyTorch bukan versi driver.

## 3. Melakukan pengukuran yang dibatasi secara eksplisit

Mulai dari yang kecil, dalam proses baru:

```console
python mesure_memoire.py measure --device cuda:0 --batch 1 --context 16 --width 64 --dtype float32 --warmup 1 --repeats 2 --output mesures-petit-essai.json
```

Untuk kemudian mengeksplorasi dimensi MLP, contoh perintah yang lebih besar adalah:

```console
python mesure_memoire.py measure --device cuda:0 --batch 2 --context 128 --width 1024 --dtype float32 --warmup 3 --repeats 5 --output mesures.json
```

Tingkatkan satu dimensi pada satu waktu dan pantau memori yang tersedia. Perintah kedua adalah konfigurasi yang diusulkan, bukan kapasitas yang dijamin maupun hasil yang dipublikasikan. `context` di sini berarti jumlah posisi dari input `[batch, context, width]`, tanpa mekanisme attention atau cache KV. Bobot dan input berbagi dtype yang diminta; tidak ada autocast, gradien, optimizer, kuantisasi, atau pembagian antar-GPU. `float16` dan `bfloat16` bergantung pada instalasi yang sebenarnya dan tidak tervalidasi hanya oleh uji float32.

JSON berisi `environment`, `configuration`, `synthetic_model`, dan `phases`. Berkas harus memiliki nama baru; skrip menolak menimpa hasil yang sudah ada.

| Fase | Cakupan |
| --- | --- |
| `model_load` | Konstruksi dan inisialisasi model di CPU, transfer ke GPU yang dipilih. Waktu mencakup persiapan CPU ini; penghitung memori hanya mencakup GPU. |
| `inputs` | Pembuatan input sintetis pada GPU ini. |
| `cold_forward` | Pass pertama model setelah inisialisasi device, generator, dan input. Ini bukan cold start mesin atau driver. |
| `warmup` | Keseluruhan pass pemanasan; waktu ini tidak dicampur dengan repetisi berikutnya. |
| `warm_forward` | Satu baris per repetisi setelah pemanasan. |

Setiap fase menyinkronkan device sebelum dan sesudah operasi, mencatat baseline lalu mengatur ulang puncak. Output masih ada saat pencatatan akhir; output dibebaskan sebelum pass berikutnya. Bobot dan input bertahan antar-pass. Cache allocator dipertahankan. Waktu mencakup biaya Python dan sinkronisasi: ini bukan waktu kernel yang terisolasi.

`allocated` adalah bagian dari `reserved`, jadi keduanya tidak dijumlahkan. `peak_allocated_bytes` dan `peak_reserved_bytes` adalah dua nilai maksimum yang berbeda: keduanya tidak dikurangkan untuk menghitung cache. Bandingkan secara terpisah baseline, akhir, dan puncak absolut. Penghitung hanya mencakup allocator PyTorch dari proses ini pada GPU yang dipilih, bukan seluruh memori GPU, driver, atau proses lain. GPU lain yang mungkin ada tidak diukur. Nilai juga bergantung pada allocator dan perangkat lunak: simpan environment bersama hasilnya.

## 4. Menghubungkan kualitas dan biaya

Baca `protocole-qualite.md`, tetapkan pekerjaan berguna dan ambang batas sebelum pengujian, lalu isi `resultats-bruts.csv` dengan observasi sebenarnya. Dossier ini tidak menyediakan korpus klasifikasi maupun pengukuran kualitas.

```console
python calcul_forfaits.py --gpu b200 --days 7 --lots 2
```

Harga satu lot B200 sudah mencakup dua GPU. Dua lot menghasilkan empat GPU, tetapi harga lot hanya dikalikan dua. Tarif adalah tarif katalog IteraGPU pada hari snapshot ini: satuan bulat dalam sen USD, durasi 3, 7, atau 30 hari, tanpa konversi maupun prorata per jam. CSV tidak membuktikan ketersediaan saat ini maupun reservation. Periksa penawaran yang ditampilkan sebelum mengambil keputusan pembelian.

Opsi `--accepted-results` sengaja tidak memiliki nilai default. Tambahkan hanya dengan bilangan bulat positif jumlah unit berguna berbeda yang benar-benar diterima. Biaya unit menggunakan harga paket penuh. Repetisi benchmark yang sama bukan korpus berguna baru. Tanpa penyebut yang diisi, biaya unit tetap `null`; nol ditolak.

## Validasi versi ini

Aritmetika, tarif, dan tidak adanya output yang sudah terisi diverifikasi dengan Python 3.12.14 dan pustaka standarnya. Environment ini tidak berisi PyTorch: sehingga garda ketiadaan diuji secara nyata. Tidak ada instalasi yang dilakukan.

Uji fungsional terbatas juga dijalankan pada 24 September 2026 pada **GeForce RTX 5070 lokal**, driver 610.62, Python 3.14.6, PyTorch 2.11.0+cu128, CUDA 12.8: batch 1, context 16, width 64, float32, satu pemanasan dan dua repetisi. Uji ini memvalidasi eksekusi enam baris fase skrip hanya pada kasus ini. Uji ini tidak memvalidasi performa GPU dari katalog, mesin sewaan, LLM, ROCm, maupun presisi lainnya. Pengukuran dari uji ini tidak diisikan terlebih dahulu ke dalam berkas yang didistribusikan. Notebook mempertahankan semua outputnya kosong.

## Sumber teknis primer

Dokumentasi yang diakses pada 24 September 2026. Referensi ini menjelaskan API; versi PyTorch yang benar-benar dijalankan tercantum di atas, berbeda dari versi halaman dokumentasi.

- [PyTorch: manajemen memori CUDA](https://docs.pytorch.org/docs/2.14/notes/cuda.html#memory-management)
- [PyTorch: semantik HIP/ROCm](https://docs.pytorch.org/docs/2.14/notes/hip.html)
- [PyTorch: sinkronisasi device](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.synchronize.html)
- [PyTorch: reset puncak memori](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.reset_peak_memory_stats.html)
- [PyTorch: memori teralokasi](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.memory_allocated.html) dan [memori tercadangkan](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.memory_reserved.html)
- [PyTorch: maksimum teralokasi](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.max_memory_allocated.html) dan [maksimum tercadangkan](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.max_memory_reserved.html)
- [Python: aritmetika desimal](https://docs.python.org/3/library/decimal.html) dan [berkas CSV](https://docs.python.org/3/library/csv.html)

## Lisensi

Karya orisinal dalam paket ini didistribusikan di bawah lisensi MIT, yang direproduksi dalam `LICENSE.txt`. Pertahankan pemberitahuan ini saat mendistribusikan ulang. Python, PyTorch, dan alat lain yang disebutkan tidak didistribusikan bersama arsip ini dan tetap mempertahankan lisensinya masing-masing.
