手把手教你使用llama-factory部署大模型API
手把手教你使用llama-factory部署大模型API
本文将详细介绍如何使用llama-factory框架部署大模型API。通过本文,你将学会如何从模型下载到API部署的完整流程,并能够通过curl命令向API发送请求获取模型响应。
背景
最近想使用SFT(Supervised Fine-Tuning)微调大模型,llama-factory是使用非常广泛的大模型微调框架。本文将逐步介绍如何使用该框架部署大模型API。
简介
本系列教程的主要工作包括:
- 大模型API部署
- 增加自定义数据集
- 大模型LoRA微调
- 原始模型+微调后的LoRA插件API部署
使用llama_factory的API部署有vLLM加速推理。本文是系列教程的第一篇,主要介绍大模型API的部署与使用。
难点
可能遇到的一些难点:
- llama_factory默认从HuggingFace下载模型,需要改为从ModelScope下载模型权重
前置条件
首先需要安装llama_factory框架:
git clone https://github.com/hiyouga/LLaMA-Factory.git
# conda create -n llama_factory python=3.10
# conda activate llama_factory
cd LLaMA-Factory
pip install -e .[metrics]
如果遇到从HuggingFace下载模型和数据集的问题,可以使用ModelScope:
export USE_MODELSCOPE_HUB=1 # `set USE_MODELSCOPE_HUB=1` for Windows
在Linux系统中,可以在~/.bashrc
中添加export USE_MODELSCOPE_HUB=1
,并运行source .bashrc
使其永久生效。
1. 大模型API部署
虽然执行了export USE_MODELSCOPE_HUB=1
,但直接使用模型名称--model_name_or_path qwen/Qwen-7B
还是会从HuggingFace下载模型权重。因此,建议使用本地绝对路径的方式。
首先下载模型权重:
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen-7B')
print(model_dir)
输出模型的下载地址,例如:/mnt/workspace/.cache/modelscope/qwen/Qwen-7B
然后切换到从GitHub下载的llama-factory文件夹:
cd LLaMA-Factory
执行API部署脚本:
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python src/api_demo.py \
--model_name_or_path /mnt/workspace/.cache/modelscope/qwen/Qwen-7B \
--template qwen \
--infer_backend vllm \
--vllm_enforce_eager
不出意外的话,经过一段时间的模型权重加载,你会看到API部署成功的状态。
如何访问API接口文档
API部署成功后,可以通过以下URL访问接口文档:
http://localhost:8000/docs
即使是在没有公网IP的云端服务器上,也可以直接点击访问,该文档做了内网穿透。例如,访问链接可能类似于:
https://dsw-gateway-cn-beijing.data.aliyun.com/dsw-70173/proxy/8000/docs
API的文档页面如下图所示:
下述是官方给的请求体参数:
{
"model": "string",
"messages": [
{
"role": "user",
"content": "string",
"tool_calls": [
{
"id": "call_default",
"type": "function",
"function": {
"name": "string",
"arguments": "string"
}
}
]
}
],
"tools": [
{
"type": "function",
"function": {
"name": "string",
"description": "string",
"parameters": {}
}
}
],
"do_sample": true,
"temperature": 0,
"top_p": 0,
"n": 1,
"max_tokens": 0,
"stream": false
}
为了方便编辑,可以将请求保存在一个shell脚本文件中,例如1.sh
:
curl -X 'POST' \
'http://0.0.0.0:8000/v1/chat/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "string",
"messages": [
{
"role": "user",
"content": "你能帮我做一些什么事情?",
"tool_calls": [
{
"id": "call_default",
"type": "function",
"function": {
"name": "string",
"arguments": "string"
}
}
]
}
],
"tools": [
{
"type": "function",
"function": {
"name": "string",
"description": "string",
"parameters": {}
}
}
],
"do_sample": true,
"temperature": 0,
"top_p": 0,
"n": 1,
"max_tokens": 128,
"stream": false
}'
执行bash 1.sh
即可获得大模型生成的回答。在API文档中,还有其他的接口供读者自行探索。
下一步阅读
接下来的教程将介绍如何在自定义数据集上进行LoRA训练与部署,包括:
- 增加自定义数据集
- 大模型LoRA微调
- 原始模型+微调后的LoRA插件API部署