173 lines
5.2 KiB
Markdown
173 lines
5.2 KiB
Markdown
|
|
# vLLM推理模型管理
|
|||
|
|
|
|||
|
|
`vLLM` `SGLang` `模型推理` `LLM` `推理服务器`
|
|||
|
|
|
|||
|
|
# vLLM Studio
|
|||
|
|
|
|||
|
|
面向 vLLM 和 SGLang 推理服务器的模型生命周期管理工具。
|
|||
|
|
|
|||
|
|
## 功能概述
|
|||
|
|
|
|||
|
|
- **启动/卸载模型** — 支持 vLLM 或 SGLang 后端
|
|||
|
|
- **保存配方** — 可复用的模型配置,支持完整参数设置
|
|||
|
|
- **推理支持** — 自动检测 GLM(`glm45`)、INTELLECT-3(`deepseek_r1`)和 MiniMax(`minimax_m2_append_think`)解析器
|
|||
|
|
- **工具调用** — 原生函数调用,支持自动工具选择(GLM 和 INTELLECT-3 模型自动检测)
|
|||
|
|
- **Web 界面** — 用于聊天、模型管理和使用分析
|
|||
|
|
- **LiteLLM 集成** — 提供 API 网关功能(可选)
|
|||
|
|
|
|||
|
|
## 架构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌──────────┐ ┌────────────┐ ┌─────────────┐
|
|||
|
|
│ 客户端 │─────▶│ 控制器 │─────▶│ vLLM/SGLang │
|
|||
|
|
│ │ │ :8080 │ │ :8000 │
|
|||
|
|
└──────────┘ └────────────┘ └─────────────┘
|
|||
|
|
│
|
|||
|
|
┌─────┴─────┐
|
|||
|
|
│ Web 界面 │
|
|||
|
|
│ :3000 │
|
|||
|
|
└───────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**可选:** 添加 LiteLLM 作为 API 网关,支持 OpenAI/Anthropic 格式转换、费用追踪和请求路由。
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装控制器
|
|||
|
|
pip install -e .
|
|||
|
|
|
|||
|
|
# 启动控制器
|
|||
|
|
vllm-studio
|
|||
|
|
|
|||
|
|
# (可选)启动前端
|
|||
|
|
cd frontend && npm install && npm run dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## API 参考
|
|||
|
|
|
|||
|
|
### 健康检查与状态
|
|||
|
|
|
|||
|
|
| 端点 | 方法 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `/health` | GET | 健康检查及后端状态 |
|
|||
|
|
| `/status` | GET | 运行中的进程详情 |
|
|||
|
|
| `/gpus` | GET | GPU 信息(显存、利用率) |
|
|||
|
|
|
|||
|
|
### 配方管理
|
|||
|
|
|
|||
|
|
| 端点 | 方法 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `/recipes` | GET | 列出所有配方 |
|
|||
|
|
| `/recipes` | POST | 创建配方 |
|
|||
|
|
| `/recipes/{id}` | GET | 获取配方 |
|
|||
|
|
| `/recipes/{id}` | PUT | 更新配方 |
|
|||
|
|
| `/recipes/{id}` | DELETE | 删除配方 |
|
|||
|
|
|
|||
|
|
### 模型生命周期
|
|||
|
|
|
|||
|
|
| 端点 | 方法 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `/launch/{recipe_id}` | POST | 从配方启动模型 |
|
|||
|
|
| `/evict` | POST | 停止运行中的模型 |
|
|||
|
|
| `/wait-ready` | GET | 等待后端就绪 |
|
|||
|
|
|
|||
|
|
### 聊天会话
|
|||
|
|
|
|||
|
|
| 端点 | 方法 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `/chats` | GET | 列出会话 |
|
|||
|
|
| `/chats` | POST | 创建会话 |
|
|||
|
|
| `/chats/{id}` | GET | 获取会话及消息 |
|
|||
|
|
| `/chats/{id}` | PUT | 更新会话 |
|
|||
|
|
| `/chats/{id}` | DELETE | 删除会话 |
|
|||
|
|
| `/chats/{id}/messages` | POST | 添加消息 |
|
|||
|
|
| `/chats/{id}/fork` | POST | 派生会话 |
|
|||
|
|
|
|||
|
|
### MCP(模型上下文协议)
|
|||
|
|
|
|||
|
|
| 端点 | 方法 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `/mcp/servers` | GET | 列出 MCP 服务器 |
|
|||
|
|
| `/mcp/servers` | POST | 添加服务器 |
|
|||
|
|
| `/mcp/tools` | GET | 列出可用工具 |
|
|||
|
|
| `/mcp/tools/{server}/{tool}` | POST | 调用工具 |
|
|||
|
|
|
|||
|
|
## 配置
|
|||
|
|
|
|||
|
|
### 环境变量
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
VLLM_STUDIO_PORT=8080 # 控制器端口
|
|||
|
|
VLLM_STUDIO_INFERENCE_PORT=8000 # vLLM/SGLang 端口
|
|||
|
|
VLLM_STUDIO_API_KEY=your-key # 可选认证密钥
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 配方示例
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "llama3-8b",
|
|||
|
|
"name": "Llama 3 8B",
|
|||
|
|
"model_path": "/models/Meta-Llama-3-8B-Instruct",
|
|||
|
|
"backend": "vllm",
|
|||
|
|
"tensor_parallel_size": 1,
|
|||
|
|
"max_model_len": 8192,
|
|||
|
|
"gpu_memory_utilization": 0.9,
|
|||
|
|
"trust_remote_code": true
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 配方字段说明
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `id` | string | 唯一标识符 |
|
|||
|
|
| `name` | string | 显示名称 |
|
|||
|
|
| `model_path` | string | 模型权重路径 |
|
|||
|
|
| `backend` | string | `vllm` 或 `sglang` |
|
|||
|
|
| `tensor_parallel_size` | int | GPU 张量并行数 |
|
|||
|
|
| `pipeline_parallel_size` | int | 流水线并行数 |
|
|||
|
|
| `max_model_len` | int | 最大上下文长度 |
|
|||
|
|
| `gpu_memory_utilization` | float | 显存占用率(0-1) |
|
|||
|
|
| `kv_cache_dtype` | string | KV 缓存类型 |
|
|||
|
|
| `quantization` | string | 量化方式 |
|
|||
|
|
| `dtype` | string | 模型数据类型 |
|
|||
|
|
| `served_model_name` | string | API 暴露的模型名称 |
|
|||
|
|
| `tool_call_parser` | string | 工具调用解析器 |
|
|||
|
|
| `reasoning_parser` | string | 推理/思考解析器(GLM、MiniMax 自动检测) |
|
|||
|
|
| `enable_auto_tool_choice` | bool | 启用自动工具选择 |
|
|||
|
|
| `trust_remote_code` | bool | 允许远程代码 |
|
|||
|
|
| `extra_args` | object | 额外 CLI 参数 |
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
vllm-studio/
|
|||
|
|
├── controller/
|
|||
|
|
│ ├── app.py # FastAPI 端点
|
|||
|
|
│ ├── process.py # 进程管理
|
|||
|
|
│ ├── backends.py # vLLM/SGLang 命令构建器
|
|||
|
|
│ ├── models.py # Pydantic 数据模型
|
|||
|
|
│ ├── store.py # SQLite 存储
|
|||
|
|
│ ├── config.py # 配置项
|
|||
|
|
│ └── cli.py # 入口点
|
|||
|
|
├── frontend/ # Next.js Web 界面
|
|||
|
|
├── config/
|
|||
|
|
│ └── litellm.yaml # LiteLLM 配置(可选)
|
|||
|
|
└── docker-compose.yml
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 与 LiteLLM 配合使用(可选)
|
|||
|
|
|
|||
|
|
如需兼容 OpenAI/Anthropic API 格式:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
docker compose up litellm
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
然后将 `http://localhost:4100` 作为 API 端点,可与任意 OpenAI 兼容客户端配合使用。
|
|||
|
|
|
|||
|
|
## 许可证
|
|||
|
|
|
|||
|
|
Apache 2.0
|