恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

FastChat Web 服务端生产部署指南:Controller、Worker 与多标签 Gradio Arena 服务搭建

  • 首页
  • 资讯中心
  • /
  • FastChat Web 服务端生产部署指南:Controller、Worker 与多标签 Gradio Arena 服务搭建

相关资讯

ESP-IDF 5.5 升级迁移指南:3 个系统组件变更,附完整操作清单 2026/9/9 13:59:01
github-rag:基于 GitIngest + LlamaIndex 的 100% 本地 GitHub 仓库问答 RAG 应用实战 2026/9/9 13:59:01
Folo(Follow)i18n 协作实战:新增语言、维护多语言资源与通过 ESLint 校验的完整指南 2026/9/9 13:59:01

最新资讯

KernelSU 全程 4 步:从解 BL 到开不了机怎么查,一条时间线讲完
用OpenCV实现围棋截屏图片自动识别与SGF生成
扩散模型采样加速三板斧:DDIM、CFG与DPM-Solver实战解析
CLIP详解:从对比学习到多模态视觉底座
AI能取代老板吗?拆解管理可替代性与打工人反杀指南
软件测试面试20题全解析:考点、思路与高分答案

今日推荐

基于MongoDB的图书管理系统:数据建模与Spring Boot+Vue实战
Claude Code安装配置全攻略:从零开始用上终端AI编程助手
tmux 会话管理与终端复用:AI 编程工作流的调度中枢实战

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

FastChat Web 服务端生产部署指南:Controller、Worker 与多标签 Gradio Arena 服务搭建

发布时间:2026/9/9 13:59:01
FastChat Web 服务端生产部署指南:Controller、Worker 与多标签 Gradio Arena 服务搭建 FastChat Web 服务端生产部署指南Controller、Worker 与多标签 Gradio Arena 服务搭建【免费下载链接】FastChatAn open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.项目地址: https://gitcode.com/GitHub_Trending/fa/FastChatFastChat 提供了一整套面向大规模语言模型对话服务的前后端组件。本文基于仓库内 docs/commands/webserver.md 这一份生产部署备忘结合 fastchat/serve/ 下的源码实现系统讲解如何安装环境、逐层启动 Controller 与各类 Worker、拉起带多标签Arena 对战、单模型直聊、Leaderboard 等的 Gradio Web 服务并完成端口监听检查、进程文件句柄上限调优与 Gradio 前端页面定制。读者完成后可独立复现一个面向内网或外网的 Chatbot Arena 式 Web 服务集群。1. 部署形态与角色分工在动手执行命令前先明确本文部署脚本背后的进程模型。从 docs/server_arch.md 与 fastchat/serve/ 目录可以确认 FastChat 服务端由三类角色构成Controller调度中枢维护所有 Worker 的注册表提供心跳检查、模型列表查询与请求分发。fastchat/serve/controller.py 中Controller类维护worker_infoWorker 名到WorkerInfo的映射并支持lottery与shortest_queue两种分发策略controller.py。Model Worker算力执行者真正持有模型权重或调用远程推理 API向 Controller 注册自身并通过 FastAPI 暴露worker_generate_stream等端点。同一模型可注册多个 Worker 以扩展吞吐。Web Server用户入口基于 Gradio 构建的浏览器界面向 Controller 拉取模型列表并转发用户请求。fastchat/serve/gradio_web_server_multi.py 实现了带多个 Tab 的 Arena 界面是本文部署的主角。原文档中的部署脚本把日志按进程拆到fastchat_logs/controller、fastchat_logs/server0…serverN等独立目录下便于逐个进程隔离排查这是一套典型的多机/多进程生产排布下面按安装、启动、验收的顺序展开。2. 环境安装与依赖准备原文档给出的安装流程面向 Ubuntu 系统核心步骤是安装系统工具、准备 conda 环境并执行 FastChat 的可编辑安装sudo apt update sudo apt install tmux htop wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh bash Anaconda3-2022.10-Linux-x86_64.sh conda create -n fastchat python3.9 conda activate fastchat git clone https://gitcode.com/GitHub_Trending/fa/FastChat.git cd FastChat pip3 install -e .补充说明几点便于你按实际情况调整python3.9是原脚本选定的解释器版本conda 环境名与 Python 版本都可按本机情况替换后续所有启动命令都依赖当前 conda 环境处于激活状态。使用pip3 install -e .可编辑安装而不是普通安装是因为后续要频繁改动、调试仓库代码可编辑模式保证改完即生效无需重装。进入虚拟环境后python3应指向~/anaconda3/envs/fastchat/bin/python可通过which python3验证。tmux、htop用于把每个服务放进独立会话并实时观察 CPU / 内存防止服务随 SSH 断开而终止也可以改用nohup ... 或 systemd 单元来托管进程。3. 启动 Controller 并注册首个 Worker3.1 启动 ControllerController 是集群的核心注册中心第一个启动cd fastchat_logs/controller python3 -m fastchat.serve.controller --host 0.0.0.0 --port 21001从源码看create_controller()定义的默认参数为--host localhost、--port 21001controller.py。部署到公网或跨机场景时必须显式指定--host 0.0.0.0让其他机器上的 Worker 与 Web Server 能访问--dispatch-method默认是shortest_queue选择queue_length / speed最小的 Worker也可切换为lottery按速度加权随机分发controller.py。心跳相关阈值由环境变量控制CONTROLLER_HEART_BEAT_EXPIRATION默认 90 秒、WORKER_HEART_BEAT_INTERVAL默认 45 秒constants.py即超过 90 秒未收到心跳的 Worker 会被自动清理controller.py。3.2 手动注册 Worker正常情况下 Worker 启动时会自动向 Controller 注册register_worker用于手动补注册一个尚未在 Controller 注册表中出现、或不走自动注册流程的 Worker 地址python3 -m fastchat.serve.register_worker --controller http://localhost:21001 --worker-name https://观察 fastchat/serve/register_worker.py 的调用逻辑可以推断该工具会把worker_name连同check_heart_beat、multimodal字段 POST 到 Controller 的/register_worker接口worker_status传None表示让 Controller 主动回查 Worker 的/worker_get_status获取模型列表register_worker.py。原文档示例中的--worker-name https://是内网部署时的示意占位地址实际应替换为可被 Controller 访问到的完整 Worker 地址例如http://worker-host:21002。3.3 发送测试消息验证通路注册完成后用test_message向 Controller 查询指定模型对应的 Worker 地址并真正发起一次流式推理验证整条链路可用python3 -m fastchat.serve.test_message --model vicuna-13b --controller http://localhost:21001从 fastchat/serve/test_message.py 的main()可以看到它做的事情非常典型依次 POST/refresh_all_workers触发 Controller 重新校验所有 Worker与/list_models打印当前已注册模型列表test_message.pyPOST/get_worker_address拿到承载该模型的 Worker 地址test_message.py使用get_conversation_template(model_name)构建对话模板向 Worker 的/worker_generate_stream发起流式请求并按\0分隔符逐块打印生成结果test_message.py。命令默认--temperature 0.0、--max-new-tokens 32若 Worker 就绪终端会看到逐字输出的回复若输出No available workers for xxx说明该模型尚未被任何 Worker 注册应优先排查 Worker 侧。4. 启动模型 WorkerHuggingFace 推理端点版原文档中启动的huggingface_api_worker属于“不本地加载权重、直接调用远程推理端点”的 Worker 形态适合把 Falcon、Zephyr 等托管在 HuggingFace Inference Endpoints 上的模型接入 Arenacd fastchat_logs/server0 python3 -m fastchat.serve.huggingface_api_worker --model-info-file ~/elo_results/register_hf_api_models.json4.1 模型信息文件格式--model-info-file指向一个 JSON 文件用于声明每个接入模型的端点与鉴权信息。仓库源码头部给出了完整字段说明huggingface_api_worker.py{ falcon-180b-chat: { model_name: falcon-180B-chat, api_base: https://api-inference.huggingface.co/models, model_path: tiiuae/falcon-180B-chat, token: hf_XXX, context_length: 2048 }, zephyr-7b-beta: { model_name: zephyr-7b-beta, model_path: , api_base: xxx, token: hf_XXX, context_length: 4096 } }其中必填字段为model_path、api_base、token、context_length其余字段可选。从create_huggingface_api_worker()的解析代码看huggingface_api_worker.py还支持可选字段model_names为一个或多个名字缺省取 key 的最后一段与conv_template自定义对话模板这些信息会被批量构建为HuggingfaceApiWorker实例并一次性注册到 Controller。若某个 key 的model_path为空字符串则直接以api_base作为推理 URL。4.2 关键启动参数该模块的完整参数可通过python3 -m fastchat.serve.huggingface_api_worker --help查看常用项及默认值如下huggingface_api_worker.py参数默认值说明--hostlocalhostWorker 监听地址--port21002Worker 监听端口--worker-addresshttp://localhost:21002注册给 Controller 的对外地址跨机时须改为可达地址--controller-addresshttp://localhost:21001Controller 地址--model-info-file必填上述模型注册 JSON 文件--limit-worker-concurrency5并发上限用于防止打爆远端推理端点OOM--no-register关闭开启后只启动服务、不向 Controller 注册便于先行联调--seedNone覆盖每次生成的随机种子Worker 内部通过huggingface_hub.InferenceClient以流式方式调用text_generation并把结果按 FastChat 约定逐条序列化后以\0结尾返回huggingface_api_worker.py。由于该 Worker 没有本地 tokenizercount_token直接返回 0huggingface_api_worker.pytoken 统计由调用方决定如何处理。若希望本地加载权重Vicuna、Llama 等而不是走远程 API应改用fastchat.serve.model_worker本地 GPU Worker或vllm_worker/sglang_worker等高性能后端可参考 docs/vllm_integration.md 与 docs/sglang 相关文档 了解接入方式。本部署脚本走的是托管端点路径不需要本地 GPU 常驻显存。5. 启动多标签 Gradio Web Server前端是整个部署的门面。原文档在配置好环境变量后启动gradio_web_server_multi从而获得带 “Arena对战”“side-by-side具名对比”“Direct Chat单模型直聊” 等标签的 Chatbot Arena 界面。5.1 配置第三方 API 密钥启动前需要为希望接入的闭源模型准备对应的服务密钥export OPENAI_API_KEY export ANTHROPIC_API_KEY export GCP_PROJECT_ID这三项分别对应 OpenAIChatGPT、AnthropicClaude与 GooglePaLM/Gemini三种 API 类模型来源。值得说明的是API 类模型本身并非由本地 Worker 承载而是由 Web Server 通过对应的 provider 客户端直接调用官方接口因而密钥只需在运行 Web Server 的进程环境中配置即可相关 provider 枚举可见 fastchat/serve/gradio_web_server.py 中对api_typeopenai/anthropic/gemini/mistral的说明。5.2 启动命令与参数对照原文档使用的生产启动命令为python3 -m fastchat.serve.gradio_web_server_multi \ --controller http://localhost:21001 \ --concurrency 50 \ --add-chatgpt --add-claude --add-palm \ --elo ~/elo_results/elo_results.pkl \ --leaderboard-table-file ~/elo_results/leaderboard_table.csv \ --register ~/elo_results/register_oai_models.json \ --show-terms需要向读者说明上述命令是原文档部署 Chatbot Arena 站点时的写法属于该命令的一个较早期版本。对照当前仓库 fastchat/serve/gradio_web_server_multi.py 的argparse定义CLI 已有较大演进——--add-chatgpt/--add-claude/--add-palm与--concurrency、--register等旧参数不再存在功能分别由新参数承接。在当前代码上等效的启动方式为python3 -m fastchat.serve.gradio_web_server_multi \ --host 0.0.0.0 --port 7860 \ --controller-url http://localhost:21001 \ --concurrency-count 50 \ --register-api-endpoint-file ~/elo_results/register_oai_models.json \ --elo-results-file ~/elo_results/elo_results.pkl \ --leaderboard-table-file ~/elo_results/leaderboard_table.csv \ --show-terms-of-use新参数与旧写法的映射关系及含义如下旧文档写法当前参数含义--concurrency 50--concurrency-count 50Gradio 队列默认并发上限默认10--register xxx.json--register-api-endpoint-file xxx.json从 JSON 注册 API 类模型端点--add-chatgpt/--add-claude/--add-palm由 register 文件声明决定接入哪些闭源模型--elo xxx.pkl--elo-results-file xxx.pkl加载 ELO 结果并渲染 Leaderboard 图--leaderboard-table-file--leaderboard-table-fileLeaderboard 表格数据文件--show-terms--show-terms-of-use进入页面前弹出使用条款确认其余在当前源码中仍可用的重要参数还包括--model-list-mode {once,reload}默认oncereload表示每次请求都向 Controller 重新拉取模型列表便于动态增删模型、--vision-arena显示多模态对战标签、--ga-idGoogle Analytics 统计 ID与下方前端定制相呼应、--gradio-auth-path/--password认证、--moderate开启输入内容审核与--share生成公网分享链接等gradio_web_server_multi.py。API 端点注册文件register_oai_models.json的格式在 gradio_web_server.py 中有明确注释形如{ gpt-3.5-turbo: { model_name: gpt-3.5-turbo, api_type: openai, api_base: https://api.openai.com/v1, api_key: sk-******, anony_only: false } }api_type可选openai、anthropic、gemini、mistralanony_only为true时该模型只出现在匿名对战模式中不进入具名列表。5.3 服务启动方式与 Leaderboard 数据来源从 gradio_web_server_multi.py 可以看到demo.queue(...).launch(...)最终以max_threads200、show_apiFalse的方式对外服务--elo-results-file与--leaderboard-table-file若非空则会在第三个 Tab 渲染build_leaderboard_tabmonitor.py。ELO 分数、排行榜 CSV 是对战数据离线计算的产物生成方法可参考 docs/commands/leaderboard.md若只是做单机验证可以不带这两个参数直接启动此时不会显示 Leaderboard Tab。5.4 多路并发部署时的日志管理原文档的生产脚本将每个 Web Server 放进独立目录并各自cd后启动。FastChat 的日志输出目录由LOGDIR环境变量控制默认是当前目录.constants.py因此“每个服务单独cd一个目录”的做法本质上是为了让各进程的gradio_web_server.log、model_worker_*.log、controller.log等日志文件落到互不干扰的独立目录便于按服务巡检。实际多副本部署时可把第 5.2 节的启动命令在fastchat_logs/server1、server2… 等多个目录分别以不同--port拉起对外由 Nginx 等反向代理做负载均衡参考 fastchat/serve/gateway/nginx.conf。6. 检查服务启动耗时与就绪状态多副本场景下逐个人眼看日志不现实原文档给出了一段循环检查命令遍历server0~server11的日志抓取每条 Gradio 服务“已监听本地 URL”的最后一行日志即可快速确认各副本是否全部就绪for i in $(seq 0 11); do cat fastchat_logs/server$i/gradio_web_server.log | grep Running on local URL | tail -n 1; donegradio_web_server.log由 fastchat/serve/gradio_web_server.py 中的build_logger(gradio_web_server, gradio_web_server.log)产生与 Web Server 在同一进程内随logger.info(fargs: {args})gradio_web_server_multi.py记录启动参数。若某一行输出为空说明对应副本尚未打出监听日志需要回到该目录查看进程是否存活或端口是否被占用seq 0 11中的区间应按实际启动的副本数调整。7. 提高最大打开文件数上限高并发的 Web 服务尤其同时维护大量浏览器长连接与上游 Worker HTTP 连接时很容易触达系统默认的进程文件句柄上限原文档给出了“单进程免重启”与“系统级持久化”两种处理方式。方式一单进程即时调整无需重启先用ps找到目标进程 PID再用prlimit把该进程的 nofile 上限调高到 1048576sudo prlimit --nofile1048576:1048576 --pid$id对 Gradio 类 Web 服务进程做批量调整for id in $(ps -ef | grep gradio_web_server | awk {print $2}); do echo $id; prlimit --nofile1048576:1048576 --pid$id; done--nofile软限:硬限语法分别设定 soft limit进程可自行调高与 hard limit权限上限。注意该方式只对本次启动的进程生效进程重启后需重新执行且对 root 属主之外的进程调整硬限通常需要 root 权限故示例保留sudo。方式二系统级配置需重启生效在/etc/security/limits.conf末尾追加如下两行对所有用户生效* hard nofile 65535 * soft nofile 65535该方式属于 PAMpam_limits机制作用于后续新登录会话与由其启动的全部进程修改后需重新登录或重启系统。实践上建议两者结合limits.conf 保证新进程默认高上限prlimit用于对存量进程热修复。8. 前端定制注入统计脚本与文案优化原文档针对当时固定版本的 Gradio3.35.2记录了若干“改前端文件”的运维技巧目的是在不改业务代码的情况下完成埋点、加载提示与告警抑制。由于这些修改发生在 Gradio 的 Python site-packages 安装目录内路径形如/home/vicuna/anaconda3/envs/fastchat/lib/python3.9/site-packages/gradio/...升级 Gradio 后会被覆盖请务必把定制项固化为可重复执行的补丁或记录。8.1 在 index.html 注入 gtag 与 html2canvas编辑 Gradio 前端模板入口.../site-packages/gradio/templates/frontend/index.html在head中追加 Google Analytics 标签与截图库 html2canvas!-- Google tag (gtag.js) -- script async srchttps://www.googletagmanager.com/gtag/js?idG-K6D24EE9ED/scriptscript window.dataLayer window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-K6D24EE9ED); window.__gradio_mode__ app; /script script srchttps://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js/script埋点用于统计页面访问html2canvas则支撑“把对局结果渲染成图片保存/分享”这类功能。值得一提的是在当前仓库版本中这两项能力已经原生内置到业务代码里不再需要手工改 Gradio 模板build_demo()会把html2canvas的script恒常注入页面头部并在传入--ga-id时自动拼接 gtag 脚本gradio_web_server_multi.py。也就是说新版本直接传--ga-id G-xxxx即可等价实现上述第 1 步的埋点效果。8.2 抑制弃用参数告警编辑.../site-packages/gradio/deprecation.py找到函数定义def check_deprecated_parameters(按需在其内部提前return或注释告警分支即可屏蔽 Gradio 对旧版调用方式的DeprecationWarning输出。这类告警本身不影响功能仅在日志里刷屏是否处理取决于对日志洁净度的要求。8.3 修改“Loading”提示文案Gradio 前端资源经打包后位于.../site-packages/gradio/templates/frontend/assets/index-188ef5e8.js该 hash 文件名会随版本变化。在 Vim 中用全局替换把默认的“Loading...”改为更友好的引导文案%s/Loading.../Loading...(Please refresh if it takes more than 30 seconds)/g当上游 Worker 冷启动较慢、浏览器长时间停留在加载态时这条提示能显著降低用户困惑。执行后需清空浏览器缓存并硬刷新CtrlShiftR才能看到新文案。9. 结语与排障速查本文围绕 docs/commands/webserver.md 还原了一条完整的 FastChat Arena Web 服务生产部署链路conda 环境与可编辑安装 → Controllercontroller.py→ Worker 注册register_worker.py与连通性验证test_message.py→ 远程端点型 Workerhuggingface_api_worker.py→ 多标签 Gradio 门户gradio_web_server_multi.py最后覆盖了启动验收、文件句柄上限调优与前端定制三块日常运维动作。当链路不通时可按下述顺序排查测试消息返回无 Worker确认模型名与 Worker 注册的model_names完全一致Controller 地址可达Worker 的--no-register未误开Web 页面模型列表为空检查 Web Server 的--controller-url并用model-list-mode reload重新拉取gradio_web_server_multi.py生成超时/报错查看对应目录下的controller.log与gradio_web_server.log并结合 constants.py 中FASTCHAT_WORKER_API_TIMEOUT默认 100 秒等环境变量确认超时窗口是否过短页面加载慢且句柄耗尽按第 7 节调高prlimit并检查反向代理的 keep-alive 配置。对于需要本地 GPU 加载权重的模型请另行参考 docs/commands/local_cluster.md多机 Worker 集群与 fastchat/serve/model_worker.py它们在 Controller/Web Server 层的接入方式与本文一致可以无缝混布在同一集群中。【免费下载链接】FastChatAn open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.项目地址: https://gitcode.com/GitHub_Trending/fa/FastChat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号