赞
踩
引子
由于工作上需要,一直在用Qwen做大模型推理,有个再训练的需求,特此琢磨下Qwen的训练。OK,我们开始吧。
一、安装环境
根据官网推荐
OK,docker在手,天下我有。
docker pull qwenllm/qwen:cu117
docker run -it --rm --gpus=all -v /mnt/code/LLM_Service/:/workspace qwenllm/qwen:cu117 bash
二、测试环境
1、数据集准备
2、下载代码
cd /workspace/qwen1.5_train/Qwen1.5/examples/sft
3、配置
修改脚本,/workspace/qwen1.5_train/Qwen1.5/examples/sft/finetune.sh
执行命令, bash finetune.sh,报错如下:
修改如下:
报错,显卡不支持bf16,改为fp16精度
本地训练,修改脚本
继续报错,transformer没更新
pip install transformer -i Simple Index
执行命令, bash finetune.sh
继续报错,accelerate版本不对
pip install accelerate==0.27.2
单机多卡,继续报错。
修改为单机单卡,重启容器,docker run -it --rm --gpus='"device=1"' -v /mnt/code/LLM_Service/:/workspace qwen:v1.0 bash
out of memory,修改为7B模型重新尝试,下载地址https://huggingface.co/Qwen/CodeQwen1.5-7B-Chat/tree/main
两条数据训练完成
4、显存占用
三、模型合并
- from peft import PeftModel
- from transformers import AutoModelForCausalLM, AutoTokenizer
- import torch
- """
- 使用该脚本,将lora的权重合并到base model中
- """
-
- def merge_lora_to_base_model():
- model_name_or_path = '/workspace/model/Qwen1.5-7B-Chat'
- adapter_name_or_path = '/workspace/qwen1.5_train/Qwen1.5/examples/sft/output_qwen'
- save_path = 'finetune-qwen1.5-7b'
-
- tokenizer = AutoTokenizer.from_pretrained(
- model_name_or_path,
- trust_remote_code=True
- )
- model = AutoModelForCausalLM.from_pretrained(
- model_name_or_path,
- trust_remote_code=True,
- low_cpu_mem_usage=True,
- torch_dtype=torch.float16,
- device_map='auto'
- )
- model = PeftModel.from_pretrained(model, adapter_name_or_path)
- model = model.merge_and_unload()
-
- tokenizer.save_pretrained(save_path)
- model.save_pretrained(save_path)
-
-
- if __name__ == '__main__':
- merge_lora_to_base_model()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。