层1/T2: teacher.py 批量生成 + sha256 JSONL 缓存;teacher 改定 MiniMax-M3

- teacher.py: 通用 OpenAI 兼容客户端(配置驱动 base_url,替代 OpenRouter 专用);
  缓存即断点(逐条落盘+flush,重跑自动续传);单条失败先落盘其余、结束汇总显式报错;
  M3 思考段 <think>...</think> 入库前剥离(只剥开头一段)
- configs.py: 新增 TeacherGenConfig(采样参数显式化;连接三元组走 .env)
- scripts/generate_teacher_completions.py: 自包含生成脚本(本地跑,与训练侧
  同 seed 同子集约束已注明)
- teacher 决策变更同步:.env.example / docs/00 关键设定与存档点 / docs/02
- tests/test_teacher.py: 10 个单测(假客户端注入),含与 attach 的端到端契约闭环

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 07:52:53 -04:00
parent f5bb852fde
commit 20e6d97427
7 changed files with 414 additions and 7 deletions
+38
View File
@@ -0,0 +1,38 @@
"""层 1:为 DAPO 1k 子集生成 teacherMiniMax-M3)解答缓存。
自包含实验脚本:全部参数写死在此,零参数复现。在**本地**运行(纯 API 调用,
不需要 GPU;本机可直连自建网关):
conda activate ars-opd
python -u scripts/generate_teacher_completions.py
前置:
1. .env 已填 TEACHER_API_BASE / TEACHER_API_KEY / TEACHER_MODEL
2. DAPO parquet 已下载到 DATASET_PATH(见 docs/02 §4)。
中断安全:缓存逐条落盘,重跑本脚本自动跳过已完成条目(断点续传)。
"""
from ars_opd.configs import SFTConfig, TeacherGenConfig
from ars_opd.data import load_sft_dataset
from ars_opd.teacher import TeacherClient, generate_completions
# 非显然约束:这里的 dataset/subset_size/seed 必须与 T5 训练脚本完全一致——
# 两侧各自走"加载→归一→抽子集",seed 相同才是同一批题(data.py 有详注)
DATASET_PATH = "data/dapo-math-17k.parquet"
CACHE_PATH = "data/teacher_completions_dapo1k_minimax-m3.jsonl"
sft_cfg = SFTConfig(
dataset_path=DATASET_PATH,
output_dir="outputs/_unused", # 本脚本不训练,仅复用数据管线配置
subset_size=1000,
seed=42,
# teacher_completions_path 留空:此刻缓存尚不存在,取的就是 prompt-only 子集
)
dataset = load_sft_dataset(sft_cfg)
prompts = [row["messages"] for row in dataset]
teacher = TeacherClient(TeacherGenConfig()) # 采样参数全用 configs.py 的显式默认
generate_completions(prompts, CACHE_PATH, teacher)
print(f"完成。缓存文件:{CACHE_PATH}")