← 返回首页
🧠

FastChat部署

📂 llm ⏱ 2 min 277 words

--- 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的分布式架构使其特别适合多模型、多用户的部署场景。通过控制器的统一调度,可以轻松实现模型的水平扩展和无缝更新。