| """ |
| 实验运行脚本 — Person E 负责 |
| |
| 自动化运行消融实验,比较不同配置的效果。 |
| |
| 使用方式: |
| python scripts/run_experiments.py |
| """ |
|
|
| import sys |
| from pathlib import Path |
|
|
| sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "src")) |
|
|
|
|
| |
| EXPERIMENTS = [ |
| { |
| "name": "exp1_baseline_transformer", |
| "description": "基线: 从头训练标准 Transformer (6层, d=512)", |
| "overrides": { |
| "model.type": "transformer_scratch", |
| "model.transformer.num_encoder_layers": 6, |
| "model.transformer.num_decoder_layers": 6, |
| "model.transformer.d_model": 512, |
| "model.transformer.use_flash_attention": False, |
| "model.transformer.use_rotary_embedding": False, |
| }, |
| }, |
| { |
| "name": "exp2_transformer_rope", |
| "description": "消融: Transformer + RoPE 位置编码", |
| "overrides": { |
| "model.type": "transformer_scratch", |
| "model.transformer.use_rotary_embedding": True, |
| }, |
| }, |
| { |
| "name": "exp3_transformer_flash_attn", |
| "description": "消融: Transformer + Flash Attention 2", |
| "overrides": { |
| "model.type": "transformer_scratch", |
| "model.transformer.use_flash_attention": True, |
| }, |
| }, |
| { |
| "name": "exp4_transformer_full", |
| "description": "完整: Transformer + RoPE + Flash Attention", |
| "overrides": { |
| "model.type": "transformer_scratch", |
| "model.transformer.use_flash_attention": True, |
| "model.transformer.use_rotary_embedding": True, |
| }, |
| }, |
| { |
| "name": "exp5_nllb_lora", |
| "description": "预训练微调: NLLB-600M + LoRA", |
| "overrides": { |
| "model.type": "finetune_nllb", |
| "model.pretrained.use_lora": True, |
| "model.pretrained.lora.r": 16, |
| }, |
| }, |
| { |
| "name": "exp6_nllb_full_finetune", |
| "description": "预训练全量微调: NLLB-600M", |
| "overrides": { |
| "model.type": "finetune_nllb", |
| "model.pretrained.use_lora": False, |
| }, |
| }, |
| ] |
|
|
|
|
| def run_single_experiment(exp_config: dict): |
| """ |
| 运行单个实验。 |
| |
| TODO [Person E]: |
| 1. 从 base config 创建实验配置 |
| 2. 应用 overrides |
| 3. 设置 experiment.name 和 output_dir |
| 4. 调用训练流程 |
| 5. 在测试集上评估 |
| 6. 保存实验结果 |
| """ |
| raise NotImplementedError("TODO: Person E 实现 run_single_experiment") |
|
|
|
|
| def main(): |
| """ |
| 运行所有实验。 |
| |
| TODO [Person E]: |
| 1. 遍历 EXPERIMENTS 列表 |
| 2. 对每个实验调用 run_single_experiment |
| 3. 收集所有实验结果 |
| 4. 生成对比表格 |
| 5. 保存汇总报告 |
| """ |
| print("=" * 60) |
| print(" EasyTranslate - Experiment Runner") |
| print("=" * 60) |
|
|
| for exp in EXPERIMENTS: |
| print(f"\n>>> Running: {exp['name']} - {exp['description']}") |
| |
|
|
| raise NotImplementedError("TODO: Person E 实现实验运行主流程") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|