与一组参数张量绑定的优化器状态集合。
ParameterSet
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| Add | 1 | 登记一个参数张量,并为它新建一份 AdamW 状态。 |
| Attach | 1 | 登记一个参数张量,并复用调用方已有的 AdamW 状态。 |
| Find | 1 | 按名称查找登记项;不存在时返回 Nothing。 |
| ZeroGradients | 1 | 清零全部参数的梯度累加器。 |
| ClipGradients | 1 | 对全部参数的梯度做全局 L2 范数裁剪。 |
| ApplyUpdate | 1 | 对全部参数执行一次 AdamW 更新。 |
| SyncFromDevice | 1 | 把全部被钉住的参数的设备内容回写到主机。 |
| Describe | 1 | 输出一份按参数名聚合的参数量统计,便于核对模型规模。 |
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| EnableDeviceResidency | 1 | 设备常驻训练的全局总开关。 |
| Entries | 1 | 登记的参数项(按登记顺序)。 |
| Gradients | 1 | 全部参数的梯度累加器,供全局范数裁剪使用。 |
| TotalParameters | 1 | 参数元素总数(即通常所说的"模型参数量")。 |
| TotalBytes | 1 | 参数本体占用的字节数。 |
| DeviceUpdatedCount | 1 | 最近一次 ParameterSet.ApplyUpdate()) 中真正走了设备路径的参数个数。 |
| PinnedBytes | 1 | 当前被钉在显存里的参数字节数。 |
04 Members
String, Tensor, Double, Boolean)登记一个参数张量,并为它新建一份 AdamW 状态。
| Name | Type | Description |
|---|---|---|
name | String | 参数名称(同一名称重复登记会抛异常,避免静默覆盖) |
value | Tensor | 参数张量 |
weightDecay | Double | 解耦权重衰减系数;γ / 偏置一类参数应传 0 |
deviceResident | Boolean | 是否允许把该参数钉到显存、走设备端 AdamW 更新 |
登记一个参数张量,并复用调用方已有的 AdamW 状态。
这一点至关重要:各层在构造时就为自己的权重建好了 AdamW(反向传播要往它的 梯度累加器里原地累加),如果这里再新建一份,就会出现"梯度写进了 A、更新却读 B" 的情况 —— 表现为 loss 完全不下降、全局梯度范数恒为 0,而且不报任何错。
| Name | Type | Description |
|---|---|---|
name | String | 参数名称 |
value | Tensor | 参数张量 |
optimizer | AdamW | 调用方持有的 AdamW 状态 |
weightDecay | Double | 解耦权重衰减系数 |
deviceResident | Boolean | 是否允许把该参数钉到显存、走设备端 AdamW 更新。 只有"主机侧不再直接读取该参数"的权重矩阵才应传 True —— 详见 AdamW.UseDeviceResidency 的说明。 |
String)按名称查找登记项;不存在时返回 Nothing。
清零全部参数的梯度累加器。
Double)对全部参数的梯度做全局 L2 范数裁剪。
| Name | Type | Description |
|---|---|---|
maxNorm | Double | 允许的最大全局范数;<= 0 表示不裁剪 |
裁剪前的全局 L2 范数(用于观测训练稳定性)
Double, Int32)对全部参数执行一次 AdamW 更新。
逐参数"先试设备路径、失败再走主机":这样一个参数上设备不可用 (未开启常驻、后端不支持、内核缺失)不会影响其余参数, 也不会因为局部失败而让整步训练中断。
| Name | Type | Description |
|---|---|---|
learningRate | Double | 学习率 |
step | Int32 | 训练步序号(从 1 开始,用于偏差校正) |
把全部被钉住的参数的设备内容回写到主机。
设备端 AdamW 会让主机副本变陈旧,因此在"读主机内容"的场合之前必须调用: 检查点落盘、CPU 推理、以及任何在主机循环里直接读权重的模块。
实际被回写的参数个数
输出一份按参数名聚合的参数量统计,便于核对模型规模。
设备常驻训练的全局总开关。
关掉之后所有参数都走主机 AdamW 循环,与改造前的行为完全一致。 保留这个开关有两个用处:
- 做"设备端 vs 主机端"的 A/B 耗时对比;
- 当设备路径出现数值问题时,可以一键回退以快速缩小排查范围。
登记的参数项(按登记顺序)。
全部参数的梯度累加器,供全局范数裁剪使用。
参数元素总数(即通常所说的"模型参数量")。
参数本体占用的字节数。
注意这只是"权重"的部分:AdamW 还为每个参数额外持有 m、v、g 三份同形缓冲, 因此训练时的实际内存需求约为本值的 4 倍。
最近一次 ParameterSet.ApplyUpdate() 中真正走了设备路径的参数个数。
这是"设备常驻训练到底生效了没有"的最直接证据: 如果恒为 0,说明所有参数都在走主机循环(未开启常驻、后端不支持、或内核缺失)。
当前被钉在显存里的参数字节数。