FastChat部署
--- title: "FastChat部署" description: "FastChat完整部署指南,包括控制器搭建、模型工作节点配置、WebUI界面与OpenAI兼容API" tags: ["FastChat", "控制器", "Web UI", "OpenAI兼容API"] category: "llm" icon: "🧠"
FastChat部署
FastChat架构概述
FastChat(又称LMSYS ChatGLM / Vicuna)是一个开源的聊天机器人平台,由UC Berkeley的LMSYS团队开发。它采用分布式架构,包含三个核心组件:Controller(控制器)、Worker(模型工作节点)和WebUI(用户界面)。这种架构支持多模型同时服务和负载均衡。
环境准备
# 安装FastChat
pip install "fschat[model_worker,webui]"
# 或者从源码安装
git clone https://github.com/lm-sys/FastChat.git
cd FastChat
pip install -e ".[model_worker,webui]"
# 安装额外依赖
pip install transformers>=4.31.0 accelerate tensorboard
启动控制器
控制器是整个系统的调度中心,负责管理模型工作节点和分配请求:
# 启动控制器
python -m fastchat.serve.controller \
--host 0.0.0.0 \
--port 21001
# 使用多进程启动
python -m fastchat.serve.controller \
--host 0.0.0.0 \
--port 21001 \
--dispatch-method shortest-job-first
控制器支持多种调度策略:轮询(round-robin)、最短作业优先(shortest-job-first)和负载均衡(load-based)。
启动模型工作节点
每个模型工作节点对应一个GPU或一组GPU上运行的模型实例:
# 单GPU启动Worker
python -m fastchat.serve.model_worker \
--model-path meta-llama/Meta-Llama-3-8B \
--model-name llama3-8b \
--controller-address http://localhost:21001 \
--worker-address http://localhost:21002 \
--port 21002
# 多GPU启动(张量并行)
python -m fastchat.serve.model_worker \
--model-path meta-llama/Meta-Llama-3-70B \
--model-name llama3-70b \
--controller-address http://localhost:21001 \
--worker-address http://localhost:21003 \
--port 21003 \
--num-gpus 4
# 使用vLLM后端加速(推荐)
python -m fastchat.serve.vllm_worker \
--model-path meta-llama/Meta-Llama-3-8B \
--model-name llama3-8b \
--controller-address http://localhost:21001 \
--worker-address http://localhost:21004 \
--port 21004 \
--tensor-parallel-size 2
启动API服务器
FastChat提供OpenAI兼容的API接口:
# 启动OpenAI兼容API
python -m fastchat.serve.openai_api_server \
--controller-address http://localhost:21001 \
--host 0.0.0.0 \
--port 8000
API调用示例:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed"
)
# 列出可用模型
models = client.models.list()
for model in models.data:
print(model.id)
# 聊天补全
response = client.chat.completions.create(
model="llama3-8b",
messages=[
{"role": "system", "content": "你是一个有帮助的助手"},
{"role": "user", "content": "解释什么是分布式系统"}
],
temperature=0.7,
max_tokens=512
)
print(response.choices[0].message.content)
启动WebUI
# 启动Gradio Web界面
python -m fastchat.serve.gradio_web_server \
--controller-url http://localhost:21001 \
--host 0.0.0.0 \
--port 7860
# 启动多模态Web界面
python -m fastchat.serve.gradio_web_server_multi \
--controller-url http://localhost:21001 \
--host 0.0.0.0 \
--port 7860
Docker Compose部署
使用Docker Compose一键部署完整环境:
version: '3.8'
services:
controller:
build: .
command: python -m fastchat.serve.controller --host 0.0.0.0 --port 21001
ports:
- "21001:21001"
worker-1:
build: .
command: python -m fastchat.serve.model_worker
--model-path meta-llama/Meta-Llama-3-8B
--controller-address http://controller:21001
--port 21002
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
api-server:
build: .
command: python -m fastchat.serve.openai_api_server
--controller-address http://controller:21001
--port 8000
ports:
- "8000:8000"
FastChat的分布式架构使其特别适合多模型、多用户的部署场景。通过控制器的统一调度,可以轻松实现模型的水平扩展和无缝更新。