【LLM实战】如何把 LlamaFactory 接入统一网关?llm_AIO 项目实战保姆级教程
摘要:还在命令行里手动敲llamafactory-cli微调大模型吗?还在为多任务管理混乱、模型路径泄露、显存经常 OOM 而头疼吗?本文深入解析开源项目llm_AIO,手把手教你如何将 LlamaFactory 封装成标准的 HTTP 服务,实现异步训练、模型合并、OpenAI 兼容推理的全流程闭环。
关键词:LlamaFactory, LLM微调, FastAPI, LoRA, AI网关, 大模型部署
目录
一、 为什么需要把 LlamaFactory 接入网关?
二、 架构核心:网关怎么调用底层?
三、 环境配置速查(.env 设置)
四、 数据从哪里来?(两种方式)
方式1:通过上传接口(推荐)
方式2:直接指定服务器路径
五、 API 接口全攻略(实战流程)
1. 第一步:选模型和模板
2. 第二步:发起训练(异步任务)
3. 第三步:查进度
4. 第四步:模型合并(导出)
5. 第五步:启动推理服务(核心亮点)
六、 附加功能:任务管理
七、 总结:它比原生 LlamaFactory 强在哪?
一、 为什么需要把 LlamaFactory 接入网关?
原生 LlamaFactory 功能强大,但通常是通过命令行交互。在生产环境或多人协作场景下,直接暴露 CLI 存在几个痛点:
路径暴露风险:人人都需要知道服务器的绝对路径。
资源竞争:多人同时训练,显存直接爆炸,缺乏统一门禁。
管理混乱:训练任务(Job)状态难追踪,模型文件散落各处。
llm_AIO项目解决了这个问题。它在 LlamaFactory 外面包了一层FastAPI 网关,将其变成了一个标准的 Web 服务。
先统一一个概念(别叫错了):
在本文的架构中:
训练= CLI 子命令
train合并= CLI 子命令
export对话= 启动
api子进程,通过 HTTP 交互(不是终端里的chat命令)
二、 架构核心:网关怎么调用底层?
整个项目的调用链非常清晰:
text
[浏览器/前端] ↓ HTTP 请求 (POST /api/playground/llmfactory/train/lora) [llm_AIO FastAPI 主服务 (端口 8000)] ↓ 调用 app/services/llmfactory_service.py [底层 llmfactory 源码] ↓ 实际执行 llamafactory-cli train ... [GPU 服务器开始炼丹]关键点:它并不依赖pip install llamafactory,而是默认要求磁盘上有一个与llm_AIO同级的llmfactory源码目录。
预期目录结构:
text 你的工作区/ ├── llm_AIO/ # 网关代码 └── llmfactory/ # LlamaFactory 源码 + 虚拟环境三、 环境配置速查(.env 设置)
在启动项目前,务必配好.env文件,核心变量如下:
| 变量名 | 作用 | 示例 |
|---|---|---|
LLMFACTORY_COMMAND_PREFIX | 指向 LlamaFactory 的虚拟环境 bin 目录 | llmfactory/.venv/bin |
LLMFACTORY_MODELS_DIR | 存放所有基座模型的父目录 | /data/models/ |
LLMFACTORY_MIN_FREE_VRAM_MIB | 显存门禁,低于此值拒绝新任务 | 4096(4GB) |
四、 数据从哪里来?(两种方式)
开始训练前,你得告诉系统数据在哪。项目支持两种方式,dataset_id优先:
方式1:通过上传接口(推荐)
先用POST /api/playground/datasets/upload上传你的 JSON/CSV(Alpaca 或 ShareGPT 格式),系统会返回一个dataset_id。训练时传这个 ID 即可,服务端会自动处理格式转换。
方式2:直接指定服务器路径
如果你已经把数据放在了服务器上,直接传dataset和dataset_dir参数。
五、 API 接口全攻略(实战流程)
统一访问前缀:http://你的IP:8000/api/playground/llmfactory
1. 第一步:选模型和模板
bash
# 查看可用基座模型 curl http://localhost:8000/api/playground/llmfactory/models # 查看支持的对话模板(如 qwen, llama3) curl http://localhost:8000/api/playground/llmfactory/templates2. 第二步:发起训练(异步任务)
这里有三种模式:LoRA(低秩适配)、QLoRA(量化版)、Full(全量微调)。每种都分异步和同步接口。推荐用异步,防止 HTTP 超时。
bash
# 异步 LoRA 训练示例 curl -X POST http://localhost:8000/api/playground/llmfactory/train/lora \ -H "Content-Type: application/json" \ -d '{ "model_id": "Qwen2-7B", "dataset_id": "你的数据集ID", "template": "qwen", "learning_rate": 5e-5, "num_train_epochs": 3 }'返回:{"job_id": "xxxx-xxxx", "status": "running"}
3. 第三步:查进度
拿到job_id后,你可以轮询进度,服务端会解析训练日志返回当前 Loss。
bash
curl http://localhost:8000/api/playground/llmfactory/train/jobs/{job_id}/progress4. 第四步:模型合并(导出)
LoRA 训练完是“补丁”,需要合并进基座模型才能直接用。
bash
curl -X POST http://localhost:8000/api/playground/llmfactory/merge \ -H "Content-Type: application/json" \ -d '{"task_id": "刚才的job_id"}'5. 第五步:启动推理服务(核心亮点)
这是接口最强大的地方。系统会内部启动一个llamafactory-cli api子进程,然后通过网关反向代理给你,接口完全兼容 OpenAI 格式。
启动:
bash
curl -X POST http://localhost:8000/api/playground/llmfactory/api/start \ -H "Content-Type: application/json" \ -d '{"model_path": "merged/你的模型_merged", "template": "qwen"}'返回:
json
{ "api_url": "http://你的网关IP:8000/api/playground/llmfactory/v1", "status": "running" }使用(完全兼容 OpenAI SDK):
拿到api_url后,你可以直接在代码里像调用 ChatGPT 一样调用你的私有模型:
python
import openai client = openai.Client( base_url="http://你的网关IP:8000/api/playground/llmfactory/v1", api_key="not-needed" ) response = client.chat.completions.create( model="default", messages=[{"role": "user", "content": "你好"}] ) print(response.choices[0].message.content)停止:用完记得释放显存!
bash
curl -X POST http://localhost:8000/api/playground/llmfactory/api/stop
六、 附加功能:任务管理
系统会自动记录所有训练和合并任务,不怕丢。
bash
# 查看所有训练任务列表 curl http://localhost:8000/api/playground/llmfactory/train/jobs # 下载训练好的模型文件(打包成 zip) curl http://localhost:8000/api/playground/llmfactory/train/jobs/{job_id}/download -o my_model.zip七、 总结:它比原生 LlamaFactory 强在哪?
| 维度 | 原生 LlamaFactory (CLI) | llm_AIO 项目 (HTTP 网关) |
|---|---|---|
| 使用方式 | SSH 进服务器敲命令 | 前端页面 / curl / Python 脚本 |
| 模型管理 | 手动记录文件夹路径 | 模型 ID 化,不暴露服务器绝对路径 |
| 任务流 | 手动依次执行 | 链式调用:训练→合并→启动 API |
| 资源控制 | 容易多人冲突导致 OOM | 显存门禁,不足自动拦截 |
| 产物分发 | scp 拷来拷去 | 直接提供HTTP 下载链接 |
| 接口标准 | 无 | 完全兼容OpenAI SDK |
通过llm_AIO,你可以轻松把 LlamaFactory 的炼丹能力集成到自己的应用中,甚至做一个可视化的微调平台。赶紧去试试吧!
