| """
|
| 实验运行脚本 — 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()
|
|
|