# IteraGPU Lab v1

原始资源，2026 年 9 月 24 日版本，用于准备可复现的 GPU 实验。内存 notebook 及其配套脚本运行一个小型合成网络 `Linear → GELU → Linear`。它们不下载任何模型或数据集。该网络既不是 LLM，也不是训练，也不代表所出租 GPU 的基准测试。

## 内容

- `mesure-memoire.ipynb`：独立 notebook，代码内嵌，单元格未保存输出。
- `mesure_memoire.py`：相同的算术和相同的测量协议，可在命令行中使用。
- `protocole-qualite.md`：业务协议，在比较时间和成本之前需补充完整。
- `resultats-bruts.csv`：空白表格，每次实际运行填写一行。
- `calcul_forfaits.py`：完整套餐的计算，无外部依赖。
- `tarifs-forfaits.csv`：45 个 IteraGPU 价格，15 个模型 × 3 种时长，2026 年 9 月 24 日快照。
- `LICENSE.txt`：代码、notebook 和原始文档的 MIT 许可证。
- `MANIFEST.json`：归档中九个成员的完整列表，八个内容文件的大小和 SHA-256。清单本身不声明自身的指纹，以避免自引用指纹。

归档文件 `iteragpu-lab-v1.zip` 将这九个文件包含在一个单独的文件夹中。它不包含任何 GPU 结果、Python 环境、驱动程序或凭证。将文件解压到一个新目录中。notebook 也可以单独下载：它不导入配套脚本。

## 前提条件和限制

算术和套餐计算仅使用 Python 3.10 或更高版本及其标准库。notebook 需要一个能够打开 Python notebook 的工具；不提供任何 Jupyter 服务器。测量还需要一个现有的 PyTorch 安装，且与 GPU、驱动程序及其 CUDA 或 ROCm 运行时兼容。该文件夹中的任何命令都不会安装这些组件。

选择一个明确的 device，例如 `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` 字节）。一个十进制 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
```

一次只增加一个维度，并监控可用内存。第二条命令是建议配置，不是保证容量，也不是已发布的结果。这里的 `context` 指输入 `[batch, context, width]` 的位置数量，不含注意力机制或 KV 缓存。权重和输入共享所请求的 dtype；没有 autocast、梯度、优化器、量化或跨 GPU 拆分。`float16` 和 `bfloat16` 取决于实际安装，仅靠 float32 试验无法验证。

JSON 包含 `environment`、`configuration`、`synthetic_model` 和 `phases`。文件必须使用新名称；脚本拒绝覆盖已有结果。

| 阶段 | 范围 |
| --- | --- |
| `model_load` | 在 CPU 上构建并初始化模型，传输到所选 GPU。该时间包含这一 CPU 准备过程；内存计数器仅针对 GPU。 |
| `inputs` | 在该 GPU 上创建合成输入。 |
| `cold_forward` | 在初始化 device、生成器和输入之后，模型的第一次前向传播。这不是机器或驱动的冷启动。 |
| `warmup` | 所有预热前向传播；该时间不与后续重复混合。 |
| `warm_forward` | 预热后每次重复一行。 |

每个阶段在操作前后同步 device，记录基线，然后重置峰值。输出在结束测量时仍然存在；它们在下一次前向传播前被释放。权重和输入在各次前向传播之间持续存在。分配器缓存被保留。时间包含 Python 开销和同步成本：这不是隔离的内核时间。

`allocated` 属于 `reserved`，因此不能把它们相加。`peak_allocated_bytes` 和 `peak_reserved_bytes` 是两个不同的最大值：不能相减来计算缓存。应分别比较基线、结束值和绝对峰值。计数器仅覆盖所选 GPU 上该进程的 PyTorch 分配器，不覆盖整个 GPU 内存、驱动或其他进程。可能存在的另一块 GPU 不被测量。数值还取决于分配器和软件：请将环境与结果一并保存。

## 4. 关联质量与成本

阅读 `protocole-qualite.md`，在试验前确定有效工作和阈值，然后用实际观察结果填写 `resultats-bruts.csv`。本目录不提供任何分类语料或质量测量。

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

一批 B200 的价格已经包含两块 GPU。两批得到四块 GPU，但批次价格只乘以二。价格采用该快照当日 IteraGPU 目录中的价格：以美分 USD 为单位的整数单位，时长为 3、7 或 30 天，不做转换，也不按小时折算。CSV 既不能证明当前可用性，也不能证明 reservation。在做出任何购买决定前，请核实页面上显示的可售情况。

`--accepted-results` 选项有意不设默认值。仅在填入实际接受的、互不相同的有效单位正整数数量时才添加它。单位成本使用整个套餐的价格。同一基准的重复不算新的有效语料。未填写分母时，单位成本保持为 `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，一次预热和两次重复。它验证了脚本在该单一用例上六个阶段行的执行。它不验证目录中 GPU 的性能，也不验证租用机器、LLM、ROCm 或其他精度。该试验的测量值未预填到分发文件中。Notebook 保持其所有输出为空。

## 主要技术来源

文档查阅于 2026 年 9 月 24 日。这些参考资料解释 API；实际执行的 PyTorch 版本如上所示，与文档页面的版本不同。

- [PyTorch：CUDA 内存管理](https://docs.pytorch.org/docs/2.14/notes/cuda.html#memory-management)
- [PyTorch：HIP/ROCm 语义](https://docs.pytorch.org/docs/2.14/notes/hip.html)
- [PyTorch：设备同步](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.synchronize.html)
- [PyTorch：重置峰值](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.reset_peak_memory_stats.html)
- [PyTorch：已分配内存](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.memory_allocated.html)和[已预留内存](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.memory_reserved.html)
- [PyTorch：最大已分配量](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.max_memory_allocated.html)和[最大已预留量](https://docs.pytorch.org/docs/2.14/generated/torch.cuda.memory.max_memory_reserved.html)
- [Python：十进制算术](https://docs.python.org/3/library/decimal.html)和[CSV 文件](https://docs.python.org/3/library/csv.html)

## 许可证

本目录中的原创作品依据 MIT 许可证分发，许可证副本收录于 `LICENSE.txt`。再分发时请保留该声明。Python、PyTorch 及文中提及的其他工具不随本归档一同分发，各自保留其原有许可证。
