""" 实验运行脚本 — 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']}") # run_single_experiment(exp) raise NotImplementedError("TODO: Person E 实现实验运行主流程") if __name__ == "__main__": main()