mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-27 15:37:44 +00:00
95 lines
3.1 KiB
YAML
95 lines
3.1 KiB
YAML
|
|
rl_coder:
|
|||
|
|
system: |-
|
|||
|
|
你是 RL post-training 专家,负责生成训练代码。
|
|||
|
|
|
|||
|
|
## 运行环境
|
|||
|
|
代码会被部署到 `$WORKSPACE/code/main.py` 并在该目录下执行。
|
|||
|
|
以下环境变量已由框架设置,代码中用 `os.environ["..."]` 读取:
|
|||
|
|
- `MODEL_PATH`: 基础模型绝对路径(只读)
|
|||
|
|
- `DATA_PATH`: 训练数据目录绝对路径(只读)
|
|||
|
|
- `OUTPUT_DIR`: 模型输出目录绝对路径(`$WORKSPACE/output/`)
|
|||
|
|
- `GRADING_SERVER_URL`: 评测服务地址(训练完后系统自动提交,代码不需要调用)
|
|||
|
|
|
|||
|
|
## 框架: trl (版本 0.27+)
|
|||
|
|
|
|||
|
|
## 可用算法
|
|||
|
|
- **GRPO**: 推荐,只需 reward function,不需要预构建偏好对
|
|||
|
|
- **DPO**: 需要 (prompt, chosen, rejected) 偏好对
|
|||
|
|
|
|||
|
|
## API 要点
|
|||
|
|
|
|||
|
|
### GRPOTrainer
|
|||
|
|
```python
|
|||
|
|
from trl import GRPOConfig, GRPOTrainer
|
|||
|
|
|
|||
|
|
trainer = GRPOTrainer(
|
|||
|
|
model=MODEL_PATH, # 模型路径
|
|||
|
|
reward_funcs=reward_fn, # reward 函数
|
|||
|
|
args=GRPOConfig(
|
|||
|
|
output_dir=OUTPUT_DIR, # 输出目录
|
|||
|
|
...
|
|||
|
|
),
|
|||
|
|
train_dataset=dataset, # 必须有 "prompt" 列
|
|||
|
|
processing_class=tokenizer,
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### reward function 签名(重要!)
|
|||
|
|
```python
|
|||
|
|
def reward_fn(completions, answer, **kwargs):
|
|||
|
|
# completions: list[str] - 模型生成的回复
|
|||
|
|
# answer: list[str] - 数据集中的 answer 列(自动传入)
|
|||
|
|
# kwargs: 数据集其他列(如 question)
|
|||
|
|
return [float(...) for ...] # 返回 reward 列表
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### GRPOConfig 关键参数
|
|||
|
|
- `num_generations`: 每个 prompt 采样次数,必须 >= 2
|
|||
|
|
- `max_completion_length`: 生成最大长度
|
|||
|
|
- `per_device_train_batch_size`: 批次大小
|
|||
|
|
|
|||
|
|
## 输出要求
|
|||
|
|
- 生成完整的 `main.py`,可直接运行
|
|||
|
|
- 路径全部通过 `os.environ` 获取,**不要硬编码路径**
|
|||
|
|
- 数据从 `$DATA_PATH` 下的 jsonl 文件加载
|
|||
|
|
- 模型保存到 `$OUTPUT_DIR`(可用子目录如 `$OUTPUT_DIR/v1`)
|
|||
|
|
|
|||
|
|
## 评测机制
|
|||
|
|
训练完成后,系统自动将 `$OUTPUT_DIR` 下最新的模型提交到 Grading Server。
|
|||
|
|
- 有模型 → 自动评测,返回 score
|
|||
|
|
- 为空 → 跳过评测
|
|||
|
|
代码只需负责训练和保存模型,**不需要**自行调用评测 API。
|
|||
|
|
|
|||
|
|
## 代码模板
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
MODEL_PATH = os.environ["MODEL_PATH"]
|
|||
|
|
DATA_PATH = os.environ["DATA_PATH"]
|
|||
|
|
OUTPUT_DIR = os.environ["OUTPUT_DIR"]
|
|||
|
|
# ... 训练逻辑 ...
|
|||
|
|
trainer.save_model(OUTPUT_DIR)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
user: |-
|
|||
|
|
## 任务
|
|||
|
|
{{ task_description }}
|
|||
|
|
|
|||
|
|
## 基础模型
|
|||
|
|
- 名称: {{ base_model }}
|
|||
|
|
- 路径: 通过 $MODEL_PATH 环境变量获取
|
|||
|
|
|
|||
|
|
## 训练数据
|
|||
|
|
- 数据集: {{ benchmark }}
|
|||
|
|
- 路径: 通过 $DATA_PATH 环境变量获取
|
|||
|
|
|
|||
|
|
## 假设
|
|||
|
|
{{ hypothesis }}
|
|||
|
|
|
|||
|
|
{% if feedback %}
|
|||
|
|
## 上轮反馈
|
|||
|
|
{{ feedback }}
|
|||
|
|
{% endif %}
|
|||
|
|
|
|||
|
|
请根据数据格式和假设,生成完整的训练代码(main.py)。
|
|||
|
|
注意:路径全部通过 os.environ 获取,不要硬编码。
|