当前位置:   article > 正文

llama-factory SFT 系列教程 (四),lora sft 微调后,使用vllm加速推理_vllm lora

vllm lora

文章列表:

  1. llama-factory SFT系列教程 (一),大模型 API 部署与使用
  2. llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署
  3. llama-factory SFT系列教程 (三),chatglm3-6B 命名实体识别实战
  4. llama-factory SFT 系列教程 (四),lora sft 微调后,使用vllm加速推理

背景

llama-factory 提供了 vllm API 部署,但笔者在测试时,发现部署的 vllm API 没有直接用vllm推理的速度快。

简介

首先使用 llama-factory 微调,得到微调后的 lora 权重;由于 vllm 并没有支持所有的模型;
故通用的方式是 将 lora 权重和大模型融合成新的大模型,再由 vllm 推理;

在使用 alpaca 样式的数据集微调时,llama-factory 框架在训练时,会自动在prompt 添加 template 。
所以,在微调大模型后,使用vllm推理时,也要给 vllm 传入 封装好的template 。

llama-factory vllm API 部署

融合 lora 模型权重 vllm API 部署

#!/bin/bash
# DO NOT use quantized model or quantization_bit when merging lora weights

CUDA_VISIBLE_DEVICES=0 python ../../src/export_model.py \
    --model_name_or_path ZhipuAI/chatglm3-6b \
    --adapter_name_or_path output \
    --template chatglm3 \
    --finetuning_type lora \
    --export_dir new_model \
    --export_size 2 \
    --export_legacy_format False
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python ../../src/api_demo.py \
    --model_name_or_path new_model \
    --template chatglm3 \
    --finetuning_type lora \
    --infer_backend vllm
  • 1
  • 2
  • 3
  • 4
  • 5

首先要融合 lora 权重变成新的大模型保存到 new_model 文件夹下,vllm 推理时显存占用达到了20G 左右;

HuggingFace API 部署推理

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python ../../src/api_demo.py \
    --model_name_or_path ZhipuAI/chatglm3-6b \
    --adapter_name_or_path output/output_train/checkpoint-2250 \
    --template chatglm3 \
    --finetuning_type lora
  • 1
  • 2
  • 3
  • 4
  • 5

如果不使用 vllm 推理,使用huggingface部署,显存占用只有 13G。

API 部署总结

笔者在测试时,发现使用 vllm API 部署 和 HuggingFace API 部署的推理速度都差不多,大概每秒处理 3.15 条数据;

vllm 不使用 API 部署,直接推理

如果上述 llama-factory API 部署,已经能够满足你的需求,无需继续往下阅读;
因为笔者有大量的文本需要大模型进行处理,故期望大模型能推理的更快一点;

笔者使用 vllm 直接推理的速度可以达到 每秒处理 15.96 条,相比之前 API 部署快了 5 倍,推理时间可以大幅缩短;

如下所示:推理40万条数据,耗时6小时57分钟。

Processed prompts: 100%|███████████████████████████████| 399997/399997 
[6:57:49<00:00, 15.96it/s]
  • 1
  • 2

llama-factory 只提供了 API 形式的 vllm 推理,里面提供了vllm 推理的代码;

点击查看 LLaMA-Factory vllm_engine.py TODO: 读者可修改此处的代码

类似如下文章的实现:vllm 本地大模型加速推理

数据集 tenplate

lora 微调的数据集形式如下:

{
	"instruction": 
	"你是专门进行企业分类的专家。请根据提供的企业相关信息:'{'企业名称(全称)': '自动化工程有限公司', '经营范围': '(省略...)'}',将企业划分到以下类别中,企业可能属于多个类别:['文化旅游', '人工智能', '深地深海深空', '空天信息', '电磁能']。请按照列表的格式回答。 ", 
	"input": "", 
	"output": "[\"人工智能\", \"高端装备和先进基础材料\"]"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用 alpaca 数据集格式微调大模型时,会根据填入的模型和template,对数据集文本添加一些特殊字符,不同的大模型还都不一样。如果后续要使用大模型进行推理,也需要将文本调整成训练的时候一样。如果直接使用 LLaMA-Factory API 部署,无需考虑prompt里面的这些特殊字符, LLaMA-Factory 会自动封装完成。

既然咱们要自己使用 vllm 推理,prompt template 的封装就得咱们自己写;

有一个简便方法,看到 LLaMA-Factory 给数据集封装的 template prompt 的样例。

如下图所示,修改该py文件的代码 https://github.com/hiyouga/LLaMA-Factory/blob/main/src/llmtuner/data/loader.py
把 dataset 的样子打印出来看看声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】

推荐阅读
相关标签