本博文以Qwen模型为例,分别使用魔搭社区和LlamaFactory 两种方式实现微调。
⭐️ 魔搭社区
登录个人主页👉我的Notebook👉使用实例GPU环境
1. 根据如下方法准备环境:
## 准备环境
```
# 下载qwen和模型
git clone https://github.com/QwenLM/Qwen.git
git clone https://www.modelscope.cn/qwen/Qwen-1_8B-Chat.git
# 安装依赖
pip install -r requirements.txt
# 安装torch
下载地址:http://download.pytorch.org/whl/torch_stable.html
wget http://download.pytorch.org/whl/cu121/torch-2.1.1%2Bcu121-cp310-cp310-linux_x86_64.whl # 云服务上输入该行代码,下载,完成后运行下一行代码
pip install torch-2.1.1+cu121-cp310-cp310-linux_x86_64.whl
# 安装deepspeed
pip install "peft<0.8.0" deepspeed
```
2. 上传数据集,配置微调参数:
## 微调
# 准备训练数据:trans_data.json
```
cd Qwen
# 移动finetune_lora_single_gpu.sh到Qwen目录下,授予权限
cp finetune/finetune_lora_single_gpu.sh ./
chmod +x finetune_lora_single_gpu.sh
# 修改微调配置
vim finetune_lora_single_gpu.sh
# 微调,根据需要修改文件路径
./finetune_lora_single_gpu.sh -m /mnt/workspace/Qwen/Qwen-1_8B-Chat -d /mnt/workspace/data/trans_data.json
# 合并模型,模型合并文件qwen_lora_merge.py上传到Qwen文件夹里,然后修改微调模型路径
lora_model_path="/mnt/workspace/Qwen/output_qwen/checkpoint-30"
# 合并模型
python qwen_lora_merge.py
```
在finetune_lora_single_gpu.sh文件中修改微调配置:例如训练轮次num_train_epochs,
批大小per_device_train_batch_size,保存间隔save_steps等。如下是各个参数释义:
-model_name_or_path $MODEL:指定要进行微调的预训练模型的名称或路径。
--data_path $DATA:指定用于微调的数据集的路径。
--bf16 False:表示不使用 bfloat16 数据类型。
--output_dir output_qwen:指定微调后模型的输出目录。
--num_train_epochs 5:设置训练的轮数为 5。
--per_device_train_batch_size 2:每个设备上的训练批次大小为 2。
--per_device_eval_batch_size 1:每个设备上的评估批次大小为 1。
--gradient_accumulation_steps 8:梯度累积的步数,有助于在内存有限的情况下使用较大的批次大小。
--evaluation_strategy "no":不进行评估策略。
--save_strategy "steps":按照步数进行模型保存策略。
--save_steps 20:每 20 步保存一次模型。
--save_total_limit 10:保存的模型总数限制为 10。
--learning_rate 3e-4:设置学习率为 3e-4。
--weight_decay 0.1:设置权重衰减为 0.1。
--adam_beta2 0.95:Adam 优化器的 beta2 参数设置为 0.95。
--warmup_ratio 0.01:学习率 warmup 的比例为 0.01。
--lr_scheduler_type "cosine":学习率调度器类型为余弦退火(cosine)。
--logging_steps 1:每一步都进行日志记录。
--report_to "none":不向任何地方报告。
--model_max_length 512:模型的最大长度为 512。
--lazy_preprocess True:使用懒加载预处理。
--gradient_checkpointing:启用梯度检查点,以减少内存使用。
--use_lora:使用低秩适应(LoRA)技术进行微调。
3. 测试
💥 交互式Demo
```
cd Qwen
python cli_demo.py -c Qwen-1_8B-Chat_merge
```
## 退出
:exit
💥Web Demo
```
pip install gradio
pip install mdtex2html
# 启动服务
python web_demo.py --cpu-only -c=Qwen-1_8B-Chat
# 查看web界面
http://127.0.0.1:8000/
```
4. 常见问题解决
1、ImportError: cannot import name 'packaging' from 'pkg_resources'
```
解决方案:
pip uninstall setuptools
pip install setuptools==69.5.1 --no-cache-dir
```
2、ValueError: Your setup doesn't support bf16/gpu. You need torch>=1.10, using Ampere GPU with cuda>=11.0
```
解决方案:
需要修改finetune_lora_single_gpu.sh文件,最下面有说明
--bf16 True 修改为 --bf16 False
或者
--bf16 True 修改为 --fp16 True
```
3、TypeError: isin() received an invalid combination of arguments - got
```
解决方案:
pip install coqui-tts
```
若出现如下报错执行下方代码:
sed -i 's/\r$//' ./finetune_lora_single_gpu.sh
⭐️ LlamaFactory
使用阿里云PAI平台👉交互式建模(DSW)👉创建实例
1. 准备环境,下载模型:
## 下载模型 和 LlamaFactory
git clone https://www.modelscope.cn/qwen/Qwen-1_8B-Chat.git
git clone https://github.com/hiyouga/LLaMA-Factory.git
## 安装
wget http://download.pytorch.org/whl/cu121/torch-2.1.1%2Bcu121-cp310-cp310-linux_x86_64.whl
pip install torch-2.1.1+cu121-cp310-cp310-linux_x86_64.whl
pip uninstall -y vllm
pip install llamafactory[metrics]==0.7.1
pip install accelerate==0.30.1
cd LLaMA-Factory
pip install -e.[torch,metrics]
pip install -r requirements.txt
pip install --no-deps -e .
2. 上传数据集,配置微调参数:
## 上传数据集 到LLaMA-Factory/data/目录,并修改同目录下的dataset_info.json,参照如下格式修改:
```
"mydata": {
"file_name": "trans_data.json",
"formatting":"sharegpt",
"columns": {
"messages": "conversations",
"tools":"id"
},
"tags": {
"role_tag": "from",
"content_tag": "value",
"user_tag": "user",
"assistant_tag": "assistant"
}
},
```
## 启动微调-web
pip install tf-keras
export GRADIO_SERVER_PORT=7860 GRADIO_ROOT_PATH=/${JUPYTER_NAME}/proxy/7860/
CUDA_VISIBLE_DEVICES=0 USE_MODELSCOPE_HUB=1 python src/webui.py
## 也可访问如下地址
# dsw-###### # 换成自己的
https://dsw-gateway-cn-shanghai.data.aliyun.com/dsw-######/proxy/7860/
访问网址即可展示如下微调界面:
修改相应参数,训练模型