COM_FinInd

138 downloads 0 likes on ModelScope updated

Model card

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
    
  • 基座大模型准备

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文件夹下