File size: 3,150 Bytes
c1a46f7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | """
实验运行脚本 — 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()
|