# IteraGPU Lab v1

2026年9月24日版のオリジナルリソースです。再現可能なGPU実験を準備するためのものです。メモリノートブックとそのコンパニオンは、小さな合成ネットワーク `Linear → GELU → Linear` を実行します。モデルやデータセットは一切ダウンロードしません。このネットワークはLLMでも、学習でも、レンタル提供されているGPUを代表するベンチマークでもありません。

## 内容

- `mesure-memoire.ipynb` : 自己完結型ノートブック、コード同梱、出力が保存されていないセル。
- `mesure_memoire.py` : 同じ演算と同じ測定プロトコル、コマンドラインから使用可能。
- `protocole-qualite.md` : 時間とコストを比較する前に補完すべき業務プロトコル。
- `resultats-bruts.csv` : 空のグリッド、実際の実行ごとに1行記入。
- `calcul_forfaits.py` : 定額プラン全体の計算、外部依存なし。
- `tarifs-forfaits.csv` : IteraGPUの45料金、15モデル × 3期間、2026年9月24日のスナップショット。
- `LICENSE.txt` : コード、ノートブック、オリジナル文書のMITライセンス。
- `MANIFEST.json` : アーカイブの9メンバーの完全なリスト、8つのコンテンツファイルのサイズとSHA-256。マニフェストは自己参照ハッシュを避けるため、自身のハッシュを含めないと宣言しています。

アーカイブ `iteragpu-lab-v1.zip` はこれらの9ファイルを単一フォルダに格納しています。GPUの結果、Python環境、ドライバー、認証情報は含まれていません。ファイルは新規ディレクトリに展開してください。ノートブックは単独でもダウンロード可能です。コンパニオンスクリプトをインポートしません。

## 前提条件と制限

算術計算と定額プラン計算はPython 3.10以降とその標準ライブラリのみを使用します。ノートブックにはPythonノートブックを開けるツールが必要です。Jupyterサーバーは提供されません。測定にはさらに、GPU、ドライバー、およびそのCUDAまたはROCmランタイムと互換性のある既存のPyTorchインストールが必要です。フォルダ内のいかなるコマンドもこれらのコンポーネントをインストールしません。

明示的なデバイスを選択してください。例えば `cuda:0` です。PyTorchのROCmバックエンドもこのインターフェース名を再利用しますが、特定のAMDインストールの互換性を証明するものではありません。PyTorchがロードできない場合やGPUにアクセスできない場合、`measure` はコード2と明確なメッセージで終了します。偽の測定値を書き込むことも、CPUにフォールバックすることもありません。`environment` は診断です。有効な出力でもGPUが利用不可であることを示す場合があります。

## 1. GPUなしで重みを見積もる

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

この計算はパラメータ数とストレージ幅を受け取ります。ビットを切り上げて次の整数バイト数にし、Gio（`2**30` バイト）に変換します。10進数のGBは `10**9` バイトを表します。4 Gioはこの例で選択した仮定であり、測定された予備量ではありません。結果にはアクティベーション、KVキャッシュ、量子化メタデータ、勾配、オプティマイザ状態、ライブラリは自動的に含まれません。実際のモデルがカードに収まるかどうかを予測するものではありません。

## 2. 既存の環境を確認する

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

Python、PyTorchのバージョン、CUDA/HIPビルドバージョン、実際に認識されたGPU、ランタイムが報告するメモリを保存してください。ドライバーはベンダーのツールで別途確認する必要があります。スクリプトは環境変数も個人データも収集しません。PyTorchに組み込まれたランタイムのバージョンはドライバーのバージョンではありません。

## 3. 明示的に制限された測定を実行する

新規プロセスで小さく始めてください。

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

その後MLPの次元を探索する場合、より大きなコマンドの例は次のとおりです。

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

一度に1つの次元を増やし、利用可能なメモリを監視します。2番目のコマンドは提案された構成であり、保証された容量や公開された結果ではありません。ここで `context` は、アテンション機構や KV キャッシュなしの入力 `[batch, context, width]` の位置数を指します。重みと入力は要求された dtype を共有します。autocast、勾配、オプティマイザ、量子化、GPU 間の分散はありません。`float16` と `bfloat16` は実際のインストールに依存し、float32 の試行だけでは検証されません。

JSON には `environment`、`configuration`、`synthetic_model`、`phases` が含まれます。ファイルには新しい名前を付ける必要があります。スクリプトは既存の結果の上書きを拒否します。

| フェーズ | 範囲 |
| --- | --- |
| `model_load` | モデルの CPU 上での構築と初期化、選択した GPU への転送。この時間にはこの CPU での準備が含まれます。メモリカウンタは GPU のみを対象とします。 |
| `inputs` | この GPU 上での合成入力の作成。 |
| `cold_forward` | device、generator、入力の初期化後におけるモデルの最初のパス。これはマシンやドライバのコールドスタートではありません。 |
| `warmup` | ウォームアップパス全体。この時間は後続の繰り返しには混ぜられません。 |
| `warm_forward` | ウォームアップ後の繰り返しごとに1行。 |

各フェーズは操作の前後に device を同期し、ベースラインを取得してからピークをリセットします。出力は終了時の測定にもまだ存在しており、次のパスの前に解放されます。重みと入力はパス間で持続します。アロケータのキャッシュは保持されます。時間には Python のコストと同期が含まれます。これは分離されたカーネル時間ではありません。

`allocated` は `reserved` の一部であるため、これらを合計しません。`peak_allocated_bytes` と `peak_reserved_bytes` は2つの異なる最大値です。キャッシュを計算するためにこれらを差し引くことはしません。ベースライン、終了時、絶対ピークを別々に比較します。カウンタは選択した GPU 上のこのプロセスの PyTorch アロケータのみを対象とし、GPU 全体、ドライバ、他のプロセスのメモリは対象としません。別の GPU が存在しても測定されません。値はアロケータとソフトウェアにも依存するため、環境を結果とともに保存します。

## 4. 品質とコストを結び付ける

`protocole-qualite.md` を読み、試行前に有用な作業としきい値を定め、実際の観測結果を `resultats-bruts.csv` に入力します。このディレクトリには分類コーパスも品質測定も含まれていません。

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

B200 の1ロットの価格にはすでに2基の GPU が含まれています。2ロットで4基の GPU になりますが、ロットの価格は2倍にしかなりません。料金はこのスナップショット時点の IteraGPU カタログのものです。単位はセント USD の整数、期間は3日、7日、30日で、換算や時間単位の按分はありません。CSV は現在の可用性や予約を証明するものではありません。購入を決定する前に表示されている提供内容を確認してください。

`--accepted-results` オプションには意図的にデフォルト値がありません。実際に受理された有用な異なる単位の正の整数を指定する場合にのみ追加します。単価は1ロット全体の価格を使用します。同じベンチマークの繰り返しは新しい有用なコーパスではありません。分母が指定されていない場合、単価は `null` のままです。ゼロは拒否されます。

## このバージョンの検証

算術、料金、事前入力された出力がないことは Python 3.12.14 とその標準ライブラリで検証されています。この環境には PyTorch が含まれていないため、不在のガードは実際にテストされています。インストールは一切行われていません。

2026年9月24日に **ローカルの GeForce RTX 5070**、ドライバ 610.62、Python 3.14.6、PyTorch 2.11.0+cu128、CUDA 12.8 で限定的な機能試行も実行されました。batch 1、コンテキスト 16、幅 64、float32、ウォームアップ1回、繰り返し2回です。これはこの1つのケースでスクリプトの6つのフェーズ行の実行を検証します。カタログの GPU の性能、レンタルしたマシン、LLM、ROCm、その他の精度は検証しません。この試行の測定値は配布ファイルに事前入力されていません。ノートブックはすべての出力を空のまま保持しています。

## 主要な技術的ソース

2026年9月24日に参照したドキュメント。これらのリファレンスは API を説明しています。実際に実行された PyTorch のバージョンは上記のとおりで、ドキュメントページのものとは異なります。

- [PyTorch : gestion de mémoire CUDA](https://docs.pytorch.org/docs/2.14/notes/cuda.html#memory-management)
- [PyTorch : sémantique HIP/ROCm](https://docs.pytorch.org/docs/2.14/notes/hip.html)
- [PyTorch : synchronisation du device](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.synchronize.html)
- [PyTorch : remise à zéro des pics](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.reset_peak_memory_stats.html)
- [PyTorch : mémoire allouée](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.memory_allocated.html) et [mémoire réservée](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.memory_reserved.html)
- [PyTorch : maximum alloué](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.max_memory_allocated.html) et [maximum réservé](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.max_memory_reserved.html)
- [Python : arithmétique décimale](https://docs.python.org/3/library/decimal.html) et [fichiers CSV](https://docs.python.org/3/library/csv.html)

## Licence

Les créations originales du dossier sont distribuées sous licence MIT, reproduite dans `LICENSE.txt`. Conserver la notice lors d'une redistribution. Python, PyTorch et les autres outils cités ne sont pas distribués avec l'archive et conservent leurs licences respectives.
