前言
对于llama3,我们之前已经做了针对llama3 早7数据微调后的测评
- 去pk llama2的早7数据微调后,推理测试集中的早期paper:出来7方面review
- 去pk gpt4推理测试集中的早期paper:7方面review
- ground truth是早期paper的7方面人工review
后来,llama3.1出来后,考虑到性能高于llama3,所以项目组同事青睐、文弱上周做了llama3.1通过早7数据微调后的测评
- 去pk llama3的早7数据微调后,推理测试集中的早期paper,出来7方面review
- 去pk gpt4推理测试集中的早期paper:7方面review
- ground truth是早期paper的7方面人工review
随后,青睐、文弱又分别做了
- llama3 早4测评
去pk llama2的早4数据微调后,推理测试集中的早期paper,出来4方面review
去pk gpt4推理测试集中的早期paper:4方面review
ground truth是测试集早期paper的4方面人工review - llama3.1 早4测评
去pk llama3的早4数据微调后,推理测试集中的早期paper,出来4方面review
去pk gpt4推理测试集中的早期paper:4方面review
ground truth是早期paper的4方面人工review
最终,早7数据下,超gpt4 超的不容易;但早4数据下,超gpt4 则很轻松..
个人心得是,首先,llama3.1确实是比llama3 更强悍,其次,现在微调一下超过GPT4,已经不是啥新闻了..
第一部分 通过早期paper-7方面review微调llama3.1以超GPT4
基本前提
- llama3.1使用Qlora + flash atten v2微调情况4 15k样本(长度中位数9k,最长不超过12k)
- llama3.1与旧版的llama3模型结构基本一致,只是新增了更多语言支持、更大预训练数据、新提示模版、函数调用、更长上下文(新的RoPE扩展方式)等功能或性能上的优化(具体,详见此文:一文速览Llama 3.1——对其92页paper的全面细致解读:涵盖语言、视觉、语音的架构、原理)
因此微调的代码与旧版llama3基本一致
1.1 llama3.1微调环境配置
1.1.1 事先准备
- Linux系统
- 支持cuda12.1
- 单张/多张 48G显卡
- 可访问HuggingFace/Python官方源的网络代理
1.1.2 模型下载
# 安装 git-lfs
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
git lfs install
# 下载模型
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct
cd Meta-Llama-3.1-8B-Instruct
git lfs pull --include="*.safetensors"
# 可以再检查一下文件夹里的文件大小是否与Huggingface文件大小一致,重点检查超过1M的文件,如果存在某些文件文件不一致需要重新使用 git lfs pull 拉取一下该文件,将 --include= 改成该文件
cd ..
1.1.3 环境安装
要想使用llama3.1模型,transformers的版本需要 >= 4.43.3
accelerate
peft
trl==0.8.6
transformers==4.43.3
# flash-attn 单独安装
# pip install flash-attn==2.6.3 --no-build-isolation # 需要等待一段时间,最好有代理
deepspeed==0.14.0
torch==2.3.1
ray
numpy==1.26.4
PyGithub
huggingface-hub
evaluate
datasets
bitsandbytes
einops
wandb
tensorboard
tiktoken
pandas
scipy
matplotlib
sentencepiece
nltk
xformers
hf_transfer
loguru
tqdm
transformers_stream_generator
openpyxl
httpx
joblib
scikit_learn
1.1.4 代码地址
微调代码,详见七月官网首页的:大模型项目开发线上营 第二期
1.2 微调过程
llama3.1 使用Qlora + flash attention v2 微调显存的占用与llama3 微调差不多,使用12k以下的文本长度用单张或多张A40/A6000(48G)即可,具体占用情况见下文
1.2.1 微调参数(主要参数)
为了保证与llama3情况4更公平的性能对比,选择与前者相同的迭代次数,情况4推理选择的checkpoint迭代次数为1800,大约1.95个epoch
参数 | 说明 |
batch size=16 | 梯度累计总batch size=16 |
lr=1e-4 | 学习率的大小 |
max_prompt_length=11138 | paper 最长的大小,超过将被截取 |
max_response_length=1150 | review 最长的大小,超过将被截取 |
save_steps=100 | 迭代100次保存一次模型 |
num_train_epoch=3 | 迭代3个epoch |
1.2.2 微调system prompt
llama3.1 微调的system prompt与llama3情况4的prompt一致
SYSTEM_PROMPT = """Below is an "Instruction" that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
Instruction:
You are a professional machine learning conference reviewer who reviews a given paper and considers 7 criteria:
** How to evaluate the idea of the paper **
** Compared to previous similar works, what are the essential differences, such as any fundamental differences, improvements, innovations **
** How to evaluate the experimental results in the paper **
** Potential reasons for acceptance **
** Potential reasons for rejection **
** Other suggestions for further improving the quality of the paper **
** Other important review comments **
The given paper is as follows."""
1.2.3 模型迭代过程
- 显存占用
显存占用与微调llama3 相差不多 - loss 迭代
最终,由于微调参数与llama3相差无几,故均选择与llama3迭代次数相同的1800为最终的checkpoint
1.2.3 微调过程中遇到的问题
- llama3.1 模版冗余后缀
描述:截止2024年7月26日,llama3.1 tokenizer的模版生成输入时 add_generation_prompt= False无效,会生成一个<|start_header_id|>assistant<|end_header_id|>的冗余后缀,详情见:
BUG Chat template doesn't respect `add_generation_prompt`flag from transformers tokenizer
解决方式:微调时使用llama3旧模版替换即可
后来,Huggingface 现已经修复此问题 - 存在一些后三项为空项的推理结果
描述:llama3.1 推理时存在一些空项聚集出现的情况,即当“拒绝理由”为空时,“建议”与“其他提升”的大项不小的概率也为空
试图用人的角度去思考:如果论文没有“拒绝的理由”,那也就不需要“建议”和“其他的提升”了 ...
解决方式:推理时加入序列抑制适当降低“空项”出现的概率,详情见下文 - 模型推理格式问题
描述:论文推理未严格遵循7大项的格式 (仅特定的论文, 出现概率极低) 猜测:llama3.1 可能在论文审稿场景有专门的sft微调,summary weak strengths suggestion 等是顶级期刊reviewer常用的review格式,可能是本次微调数据较少,没有完全改变原审稿的格式
1.3 推理结果
1.3.1 直接推理
直接推理之下
- 左图:情况4 7review 微调llama-3.1-8B-Instruct
- 右图:情况4 7review 微调llama3-8b-instruct-8k
可以看出来,同样为情况4 7review数据下,llama3.1的效果较llama3存在较大提升
接下来,对比下和GPT4的结果呢?如下图所示
- 左图:情况4 7review 微调llama-3.1-8B-Instruct
- 右图:情况4 paper使用7大项提示工程gpt4-1106的结果
结论:由上文2.4节可知,未加空项序列抑制的情况下,llama3.1推理结果存在一定比例后三项为空项的情况,这在与gpt4-1106 pk是处于劣势的,下文加入适当序列抑制后,将反超gpt4
1.3.2 加入序列抑制之后的推理
// 待更