问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

手把手教你使用llama-factory部署大模型API

创作时间:
作者:
@小白创作中心

手把手教你使用llama-factory部署大模型API

引用
CSDN
1.
https://blog.csdn.net/sjxgghg/article/details/137654018

本文将详细介绍如何使用llama-factory框架部署大模型API。通过本文,你将学会如何从模型下载到API部署的完整流程,并能够通过curl命令向API发送请求获取模型响应。

背景

最近想使用SFT(Supervised Fine-Tuning)微调大模型,llama-factory是使用非常广泛的大模型微调框架。本文将逐步介绍如何使用该框架部署大模型API。

简介

本系列教程的主要工作包括:

  1. 大模型API部署
  2. 增加自定义数据集
  3. 大模型LoRA微调
  4. 原始模型+微调后的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训练与部署,包括:

  1. 增加自定义数据集
  2. 大模型LoRA微调
  3. 原始模型+微调后的LoRA插件API部署
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号