COM团队解决方案
整体方案流程

整体思路:将官方提供的SFT数据划分为中文和英文,再利用rw_score>0筛选出高质量数据,随机将中文数据和英文数据都各自分为三份,分别训练三个中文Lora模型和三个英文Lora模型,最后通过模型融合得出最终结果。模型融合的具体说明:对于主观题,利用原始的qwen2.5-7B-Instruct模型对三个Lora模型的推理结果进行汇总,对于客观题,则直接对三个Lora模型的推理结果进行投票。
一、 文件结构说明
COM_FinInd/
├── COM_FinInd_1208175914.jsonl # 最优成绩模型推理结果文件
├── train_loss_img # 训练损失曲线
├── COM_FinInd_report.pdf # 报告
├── code # 方案代码,包括数据处理、训练代码、推理代码
│ ├── ds_zero2_no_offload.json # deepspeed配置文件
│ ├── en_qwen_all.sh # 三个英文Lora模型训练启动脚本
│ ├── en_rw_p1_sft_zero2_qlora_qwen.sh # 第一个英文Lora模型训练启动脚本
│ ├── en_rw_p2_sft_zero2_qlora_qwen.sh # 第二个英文Lora模型训练启动脚本
│ ├── en_rw_p3_sft_zero2_qlora_qwen.sh # 第三个英文Lora模型训练启动脚本
│ ├── eval # 测试文件,将原始测试文件分为中文和英文
│ │ ├── eval_en.jsonl
│ │ ├── eval_id.jsonl
│ │ └── eval_zh.jsonl
│ ├── eval_only_query.jsonl # 原始测试文件
│ ├── infer # 推理代码
│ │ ├── en_qwen_infer.sh # 英文题目推理脚本
│ │ ├── infer_en_汇总.ipynb # 英文题目模型融合
│ │ ├── infer_logs # 推理结果文件和日志文件
│ │ │ ├── model_logits_all.jsonl
│ │ │ ├── model_logits_en.jsonl
│ │ │ ├── model_logits_zh.jsonl
│ │ │ ├── run_log_en.jsonl
│ │ │ └── run_log_zh.jsonl
│ │ ├── infer_zh_汇总.ipynb # 中文题目模型融合
│ │ ├── zh_infer.sh # 中文题目推理脚本
│ │ └── 中英文题目合并.ipynb # 中英文推理结果合并,生成最终提交结果jsonl文件
│ ├── infer_en # 英文题目推理代码
│ │ ├── en_qwen_infer_rw_p1.py
│ │ ├── en_qwen_infer_rw_p2.py
│ │ ├── en_qwen_infer_rw_p3.py
│ │ └── infer_logs # 推理结果文件和日志文件
│ │ ├── rw_p1
│ │ │ ├── model_logits.jsonl
│ │ │ └── run_log.jsonl
│ │ ├── rw_p2
│ │ │ ├── model_logits.jsonl
│ │ │ └── run_log.jsonl
│ │ └── rw_p3
│ │ ├── model_logits.jsonl
│ │ └── run_log.jsonl
│ ├── infer_zh # 中文题目推理代码
│ │ ├── infer_logs # 推理结果文件和日志文件
│ │ │ ├── rw_p1
│ │ │ │ ├── model_logits.jsonl
│ │ │ │ └── run_log.jsonl
│ │ │ ├── rw_p2
│ │ │ │ ├── model_logits.jsonl
│ │ │ │ └── run_log.jsonl
│ │ │ └── rw_p3
│ │ │ ├── model_logits.jsonl
│ │ │ └── run_log.jsonl
│ │ ├── infer_rw_p1.py
│ │ ├── infer_rw_p2.py
│ │ └── infer_rw_p3.py
│ ├── qwen_qlora.py # qwen模型sft代码
│ ├── requirements.txt # 训练和推理过程使用的python包
│ ├── zh_all.sh # 三个中文文Lora模型训练启动脚本
│ ├── zh_en_qwen.sh # 中文+英文模型微调启动脚本
│ ├── zh_rw_p1_sft_zero2_qlora_qwen.sh # 第一个中文Lora模型训练启动脚本
│ ├── zh_rw_p2_sft_zero2_qlora_qwen.sh # 第二个中文Lora模型训练启动脚本
│ ├── zh_rw_p3_sft_zero2_qlora_qwen.sh # 第三个中文Lora模型训练启动脚本
│ ├── 测试数据中英文划分.ipynb # 将原始测试文件进行中英文划分
│ └── 训练数据处理.ipynb # 训练数据处理代码
├── data # 官方提供的原始SFT数据
├── log # 训练过程的日志文件
├── lora_models # Lora模型存放处
│ ├── en_qwen_qlora_1205_1 # 英文Lora模型
│ │ ├── rw_p1
│ │ ├── rw_p2
│ │ └── rw_p3
│ └── qwen_qlora_1205_1 # 中文Lora模型
│ ├── rw_p1
│ ├── rw_p2
│ └── rw_p3
├── model # 基座模型存放处
│ ├── Qwen
│ └── 模型下载.ipynb # 基座模型下载
├── submit # 最终提交文件
│ └── model_logits_all.jsonl # 初赛最优结果文件
├── tmp_data # 中间数据存放
│ ├── en
│ └── zh
└── train_data # 训练数据
├── en
│ ├── rw_p1
│ │ └── en_rw_0_p1.json
│ ├── rw_p2
│ │ └── en_rw_0_p2.json
│ └── rw_p3
│ └── en_rw_0_p3.json
└── zh
├── rw_p1
│ └── zh_rw_0_p1.json
├── rw_p2
│ └── zh_rw_0_p2.json
└── rw_p3
└── zh_rw_0_p3.json
二、复现流程
2.1 复现准备工作
-
运行环境说明
python版本: python3.12.3 cuda版本: 12.1 训练环境:1台 NVIDIA 3090 24GB 推理环境:1台 NVIDIA L20 48GB
-
python包环境安装
代码所使用的python包以及版本都已放到code/requirements.txt中
cd code pip install -r requirements.txt
-
基座大模型准备
-
本方案使用的基座模型是qwen2.5-7B-instruct。模型下载地址为:https://www.modelscope.cn/models/Qwen/Qwen2.5-7B-Instruct
复现时将qwen2.5-7B-instruct下载到model/Qwen下
-
2.2 训练流程复现
训练流程通过运行code/zh_en_qwen.sh即可复现6个Lora模型的训练过程:
cd code
bash zh_en_qwen.sh
运行后,代码将读取data/train_data目录下相应的json文件并加载model目录下的基座模型,运行过程中的日志保存在log文件夹下,运行后训练好的lora模型将保存到lora_models目录下。
2.3 推理流程复现
-
三个中文Lora模型推理
cd code/infer zh_infer.sh
-
三个英文Lora模型推理
cd code/infer en_qwen_infer.sh
-
中文推理结果融合
需要进入infer文件夹,手动运行infer_zh_汇总.ipynb
-
英文推理结果融合
需要进入infer文件夹,手动运行infer_en_汇总.ipynb
-
中英文结果合并
需要进入infer文件夹,手动运行中英文题目合并.ipynb
运行后,最终的model_logits_all.jsonl结果文件会保存到code/infer/infer_logs文件夹下