保存与加载
Weaver 提供两类保存能力:
- Sampler 权重导出:面向短期采样、评估和 RL rollout。
- Checkpoint:面向实验恢复、持久保存和 optimizer 状态恢复。
Sampler 权重导出
save_weights_for_sampler()
导出当前训练权重,返回可用于采样会话的模型路径:
python
model_path = training_client.save_weights_for_sampler(
name="step-100",
)
print(model_path)save_weights_and_get_sampling_client()
导出权重并直接返回 SamplingClient:
python
sampling_client = training_client.save_weights_and_get_sampling_client(
name="step-100",
)
result = sampling_client.sample(...)常用参数:
| 参数 | 说明 |
|---|---|
name | 导出权重的可读名称。 |
ttl_seconds | 权重生命周期;默认 3600 秒。传 None 表示永久保留。 |
wait | True 时等待完成;False 时返回 OperationHandle。 |
WARNING
sampler 权重默认 TTL 是 1 小时,因为它主要服务于频繁 rollout 和评估。如果你需要可长期恢复的训练状态,请使用 save_state()。
创建 SamplingClient
如果已经有导出的 model_path,可以手动创建采样客户端:
python
sampling_client = service_client.create_sampling_client(
model_path=model_path,
base_model="Qwen/Qwen3-8B",
model_id=training_client.model_id,
)也可以使用更语义化的别名:
python
sampling_client = service_client.get_sampling_client(
model_path,
base_model="Qwen/Qwen3-8B",
)Checkpoint 保存
save_state()
保存当前模型状态:
python
checkpoint = training_client.save_state(
name="step-100",
)
print(checkpoint.path)可选参数:
| 参数 | 说明 |
|---|---|
name | 人类可读的 checkpoint 名称。 |
checkpoint_type | weight、weight_and_optimizer 或 sampling。 |
ttl_seconds | 生命周期;不传时 weight checkpoint 默认永久保留,sampling checkpoint 默认 1 小时。 |
wait | True 时返回 types.Checkpoint;False 时返回 OperationHandle。 |
保存 optimizer 状态
如果希望完整恢复训练,包括 Adam momentum 和其他 optimizer 统计信息,保存时使用:
python
checkpoint = training_client.save_state(
name="step-100-full",
checkpoint_type="weight_and_optimizer",
)加载 Checkpoint
只加载权重
python
training_client.load_state(checkpoint, wait=True)或使用路径:
python
training_client.load_state(
"weaver://model-id/checkpoints/step-100",
wait=True,
)加载权重和 optimizer
python
training_client.load_state_with_optimizer(
checkpoint,
wait=True,
)这适合真正的 resume-from-checkpoint 训练。
列出和管理 Checkpoint
列出当前模型的 checkpoint:
python
checkpoints = training_client.list_checkpoints()
for ckpt in checkpoints:
print(ckpt.name, ckpt.path, ckpt.status, ckpt.expires_at)更新 TTL:
python
# 24 小时后过期
training_client.set_checkpoint_ttl(checkpoint, ttl_seconds=24 * 3600)
# 取消过期,永久保留
training_client.set_checkpoint_ttl(checkpoint, ttl_seconds=None)types.Checkpoint 常见字段:
| 字段 | 说明 |
|---|---|
id | 服务端生成的 checkpoint ID。 |
path | weaver://... 存储路径,可用于加载。 |
name | 保存时传入的名称。 |
checkpoint_type | checkpoint 类型。 |
status | 当前状态,例如 completed。 |
ttl_seconds | 生命周期;None 表示永久。 |
created_at / expires_at | 创建和过期时间。 |
推荐策略
- 频繁 rollout:使用
save_weights_and_get_sampling_client(),保留默认 1 小时 TTL。 - 阶段性评估:给 sampler 权重设置明确名称,并按需延长 TTL。
- 实验恢复:使用
save_state(checkpoint_type="weight_and_optimizer")。 - 最终模型:使用永久 checkpoint 或永久 sampler 权重,再接入后续部署流程。