LLama Factory微调模型全流程,与peft库调用训练的adapter

LLama Factory微调模型全流程,与peft库调用训练的adapter

    正在检查是否收录...

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

LLama Factory微调流程 一、准备微调的数据集和模型 二、读取模型和数据进行训练 1.使用web ui 2.修改官方脚本(推荐) 第三,加载与推理

LLama Factory微调流程

官方GitHub链接
官方数据集说明
官方微调命令
安装LLama factory

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e ".[torch,metrics]" 

总体上你可以把整个流程分为下面几个步骤:
1.准备微调的数据集和模型
2.读取模型和数据进行训练
3.使用命令或者脚本进行微调训练
4.加载微调的训练模型

一、准备微调的数据集和模型

1.下载模型
这里可以使用HuggingFace或者ModelScope提供的方法进行模型下载,这里给出ModelScope的下载方式, 如果要使用Qwen2请看3:

from modelscope import AutoModelForCausalLM, AutoTokenizer, snapshot_download from modelscope import GenerationConfig ##cache_dir表示模型存储的目录 models_dir = "app/models" model_dir = snapshot_download('qwen/Qwen-7B-Chat',cache_dir="app/models") tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True, cache_dir=models_dir) model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="cuda:0",trust_remote_code=True, cache_dir=models_dir).eval() model.generation_config = GenerationConfig.from_pretrained(model_dir, trust_remote_code=True, cache_dir=models_dir) response, history = model.chat(tokenizer, "你好!可以介绍一下大语言模型吗",history=None) print(response) 

2.读取本地模型
如果已经下载好模型也可以通过下面的代码测试一下是否正确读入

from modelscope import AutoModelForCausalLM, AutoTokenizer, snapshot_download from modelscope import GenerationConfig ##model_dir表示模型存储的目录,是linux系统记得~/开头 model_dir = "绝对路径" tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True, cache_dir=models_dir) model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="cuda:0",trust_remote_code=True, cache_dir=models_dir).eval() model.generation_config = GenerationConfig.from_pretrained(model_dir, trust_remote_code=True, cache_dir=models_dir) response, history = model.chat(tokenizer, "你好!可以介绍一下大语言模型吗",history=None) print(response) 

3. Qwen2的模型下载和调用

from modelscope import AutoModelForCausalLM, AutoTokenizer, snapshot_download from modelscope import GenerationConfig from peft import PeftModel ##本地路径,也可以使用modelscope的模型id,自动下载 model_name = "app/models/Qwen/Qwen2-7B-Instruct" device = "cuda" # the device to load the model onto model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype="auto", device_map="auto" ) lora_adapter_path = "LLaMA-Factory/saves/qwen2/lora/sft" model = PeftModel.from_pretrained(model, lora_adapter_path) tokenizer = AutoTokenizer.from_pretrained(model_name) prompt = "你好!" messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) model_inputs = tokenizer([text], return_tensors="pt").to(device) generated_ids = model.generate( **model_inputs, max_new_tokens=512 ) generated_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) ] response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] print(response) 

3.准备数据集
详细见官方数据集说明这里有你需要准备的数据集格式,准备好后将文件复制到LLaMA-Factory/data目录下,并且修改data_info.json加入你的数据集描述

"数据集名称": { "file_name": "data.json", "columns": { "prompt": "text" } } 

二、读取模型和数据进行训练

1.使用web ui

在LLama Factory目录下打开终端输入

llamafactory-cli webui 

进入可视化微调界面:
注意:如果是本地模型此处一定是绝对路径
设置参数完成之后,可以通过预览命令获取训练命令输入到命令行执行,也可以在线执行

2.修改官方脚本(推荐)

在examples/train_qlora目录下,官方提供了许多的.yaml文件用于微调,我们只需要修改其中参数就可以使用。
我修改的一个版本

### model ###模型相对LLama-Factory的路径或者模型的Hub Id model_name_or_path: ../app/models/Qwen/Qwen2-7B-Instruct quantization_bit: 4 quantization_method: bitsandbytes # choices: [bitsandbytes (4/8), hqq (2/3/4/5/6/8), eetq (8)] ### method stage: sft do_train: true finetuning_type: lora lora_target: all ### dataset ### 你在data_info中给你数据集起的名字 dataset: sql_sft template: qwen cutoff_len: 1024 max_samples: 1000 overwrite_cache: true preprocessing_num_workers: 16 ### output ### 训练完成之后的adaptor存储路径 output_dir: saves/qwen2/lora/sft logging_steps: 10 save_steps: 500 plot_loss: true overwrite_output_dir: true ### train per_device_train_batch_size: 1 gradient_accumulation_steps: 8 learning_rate: 1.0e-4 num_train_epochs: 10.0 lr_scheduler_type: cosine warmup_ratio: 0.1 bf16: true ddp_timeout: 180000000 ### eval val_size: 0.1 per_device_eval_batch_size: 1 eval_strategy: steps eval_steps: 500 

之后通过

llamafactory-cli train examples\train_qlora\**.yaml 

即可训练,具体见官方微调命令

第三,加载与推理

类似训练过程,我们可以修改examples\inferance\中的examples进行推理

#模型相对LLama-Factory的路径 model_name_or_path: ../app/models/Qwen/Qwen2-7B-Instruct #训练的输出 adapter_name_or_path: saves/qwen2/lora/sft #模型系列 template: qwen finetuning_type: lora 

修改完成之后类似的运行
llamafactory-cli chat examples\inferance*.yaml
成功读取adapter

之后可以与模型进行对话了

Peft库应该可以直接读取在python中读取训练的adapter数据,但是暂时还没弄
下面给个简单的加载案例

from modelscope import AutoModelForCausalLM, AutoTokenizer, snapshot_download from modelscope import GenerationConfig from peft import PeftModel model_name = "app/models/Qwen/Qwen2-7B-Instruct" device = "cuda" # the device to load the model onto model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype="auto", device_map="auto" ) lora_adapter_path = "LLaMA-Factory/saves/qwen2/lora/sft" model = PeftModel.from_pretrained(model, lora_adapter_path) tokenizer = AutoTokenizer.from_pretrained(model_name) prompt = "你好!" messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) model_inputs = tokenizer([text], return_tensors="pt").to(device) generated_ids = model.generate( **model_inputs, max_new_tokens=512 ) generated_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) ] response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] print(response) 

总结

# LLama Factory微调流程总结
LLama Factory是一个用于大语言模型微调的工具库,允许用户根据特定数据集和场景对大型预训练模型进行微调。以下是使用LLama Factory进行微调的整体流程和关键步骤的总结。
## 整体流程
1. **安装与预备**
- 克隆LLama Factory GitHub仓库并安装依赖。
- 准备微调所需的环境与工具,如合适的GPU和Python环境。
2. **准备数据集和模型**
- 下载所需的预训练模型或利用已经存在的模型。
- 准备微调数据集,并按照LLama Factory的数据集格式要求进行数据处理。
3. **数据加载与训练**
- 利用Web UI界面或修改官方提供的微调脚本进行训练参数设置。
- 启动训练过程,利用指定的数据集对模型进行微调。
4. **模型加载与推理**
- 加载微调后的模型,并利用加载的模型进行推理,如文本生成对话。
## 具体步骤
### 1. 准备微调的数据集和模型
- **下载模型**:利用如HuggingFace或ModelScope等平台提供的工具进行模型下载,或使用指定模型的存储路径。
- **读取本地模型**:确认模型正确下载后,读取模型和使用模型进行基础测试。
- **准备数据集**:准备与微调任务相关的数据集,并按照规定的格式进行数据存储和处理。
### 2. 读取模型和数据进行训练
- **使用Web UI**:运行`llamafactory-cli webui`命令以启动Web界面,在界面上设置参数并启动训练过程。
- **修改官方脚本**(推荐):直接修改LLama Factory提供的训练脚本(如`.yaml`文件),定义相关训练参数和执行训练命令。
### 3. 加载与推理
- **修改推理示例**:修改LLama Factory提供的推理示例脚本,以加载调整后的模型和进行推理。
- **执行推理**:运行修改后的脚本或命令,以加载模型并根据用户提供的输入进行推理和响应。
## 建议和注意事项
- **确保环境兼容**:安装LLama Factory前确保Python和其他依赖库是最新版本且兼容。
- **调整训练参数**:根据模型和数据集特性,调整训练脚本中的参数以获得最优性能。
- **测试与验证**:在微调完成后,使用验证集或测试集测试模型的性能和效果,以便进行进一步优化。
- **文档和资源**:参考官方文档和社区资源,获取详细的使用示例和解答疑问。 tokenctollama数据集codeappllmpromptwebtpuchatgitsnapamlclipython大语言模型语言模型githubhuggingface
  • 本文作者:李琛
  • 本文链接: https://wapzz.net/post-18104.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.3W+
5
0
1
WAP站长官方

零代码教你安装部署Stable Diffusion 3,一键生成高质量图像

上一篇

深度解读昇腾CANN模型下沉技术,提升模型调度性能

下一篇
  • 复制图片
按住ctrl可打开默认菜单