DB-GPT 集群部署指南:使用 dbgpt CLI 搭建分布式模型服务

【免费下载链接】DB-GPT open-source agentic AI data assistant for the next generation of AI + Data products. 【免费下载链接】DB-GPT 项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT

本指南基于 docs/docs/installation/model_service/cluster.md 展开,完整讲解如何通过 dbgpt 命令行工具在 DB-GPT 中搭建「Model Controller + Model Worker」的模型服务集群,覆盖 LLM、Embedding、Reranker 三类模型的部署与验证,并深入 CLI 的源码实现,帮助读者掌握从单机模型部署到多模型水平扩展的完整实战路径。

部署架构:Controller 与 Worker 的分工

在动手执行命令之前,先理解 DB-GPT 模型集群的拓扑。从 packages/dbgpt-core/src/dbgpt/model/cluster/init.py 的导出可以看到,集群由三大核心组件构成:

  • Model Controller:模型的注册中心与调度中枢,默认监听 8000 端口,负责收集各 Worker 的心跳、维护模型实例的注册表(Registry),并向调用方暴露统一的服务发现能力;
  • Model Worker:真正加载并执行模型推理的进程,每个 Worker 以独立端口提供服务(文档示例中 LLM 用 8001/8002,Embedding 用 8003,Reranker 用 8004);
  • Model API Server(apiserver):可选的外部 API 网关层,默认监听 8100 端口,可附加 API Key 鉴权与 CORS 控制(见 ModelAPIServerParameters)。

启动时的默认端口、心跳参数可以在 ModelControllerParameters 与 ModelWorkerParameters 中直接确认:Controller 默认端口 8000,心跳检查间隔 20s、超时 60s;Worker 默认端口 8001、默认自动注册(register=True)、默认发送心跳(send_heartbeat=True)。

这种「Controller 集中管理 + Worker 分布式推理」的架构,让模型可以跨主机、跨 GPU 横向扩展,是实现 AI 原生数据应用多模型服务的基础。

第一步:安装命令行工具

所有后续操作都通过 dbgpt 命令完成,因此首先需要安装 DB-GPT 项目:

$ pip install -e ".[default]"

-e 表示以可编辑模式安装,便于开发调试;[default] 会附带默认运行所需依赖。

如果不希望安装到环境中,也可以直接以脚本方式运行 CLI 入口:

$ python pilot/scripts/cli_scripts.py

需要说明的是:在当前仓库中,CLI 的真实实现位于 packages/dbgpt-core/src/dbgpt/cli/cli_scripts.py,文件末尾通过 main() 调用 cli() 进入 Click 命令行框架。脚本模式下通过 python .../cli_scripts.py 执行,效果等价于 dbgpt 命令。

安装完成后可以验证命令是否可用:

$ dbgpt --help

Already connect 'dbgpt'
Usage: dbgpt [OPTIONS] COMMAND [ARGS]...

Options:
  --log-level TEXT  Log level
  --version         Show the version and exit.
  --help            Show this message and exit.

Commands:
  install    Install dependencies, plugins, etc.
  knowledge  Knowledge command line tool
  model      Clients that manage model serving
  start      Start specific server.
  stop       Start specific server.
  trace      Analyze and visualize trace spans.

第二步:启动 Model Controller

集群的起点是 Model Controller,它是所有模型实例的注册中枢:

$ dbgpt start controller

默认情况下 Model Controller 监听 8000 端口。从源码看,该命令最终会调用 run_model_controller(由 cli.py 中的 start_model_controller 转发),其端口与心跳策略由 ModelControllerParameters 定义。

提示:如果 DB-GPT 运行在 Docker 容器中,可以通过如下命令跟踪 Controller 的日志:

$ docker logs db-gpt-webserver-1 -f

第三步:启动 LLM Model Worker

Controller 就绪后,即可逐个拉起模型 Worker。每个 Worker 通过 --controller_addr 指向 Controller,并以独立端口对外提供服务。

启动 glm-4-9b-chat 模型:

dbgpt start worker --model_name glm-4-9b-chat \
--model_path /app/models/glm-4-9b-chat \
--port 8001 \
--controller_addr http://127.0.0.1:8000

启动 vicuna-13b-v1.5 模型:

dbgpt start worker --model_name vicuna-13b-v1.5 \
--model_path /app/models/vicuna-13b-v1.5 \
--port 8002 \
--controller_addr http://127.0.0.1:8000

⚠️ 请务必替换为你自己的模型名称与模型路径,--model_name 与 --model_path 均为必填参数。

从 start_model_worker 的实现可以看到,该命令最终调用 run_worker_manager 启动 Worker 管理器;多个 LLM Worker 可以并行启动、共享同一个 Controller,从而实现多模型共存。

第四步:启动 Embedding 模型 Worker

向量化是 RAG 知识库问答的基础能力。启动 Embedding 模型需要显式指定 --worker_type text2vec:

dbgpt start worker --model_name text2vec \
--model_path /app/models/text2vec-large-chinese \
--worker_type text2vec \
--port 8003 \
--controller_addr http://127.0.0.1:8000

⚠️ 请务必替换为你自己的模型名称与模型路径。

text2vec 属于 Embedding 专用 Worker 类型,它与 LLM Worker 在 WorkerType 枚举中区分(内部以 model_name@worker_type 的形式注册,如 text2vec@text2vec)。

第五步:启动 Reranker 模型 Worker

Reranker(重排序)模型用于对召回结果进行精细排序,提升 RAG 检索质量。通过 --rerank 标志开启重排序模式:

dbgpt start worker --worker_type text2vec \
--rerank \
--model_path /app/models/bge-reranker-base \
--model_name bge-reranker-base \
--port 8004 \
--controller_addr http://127.0.0.1:8000

⚠️ 请务必替换为你自己的模型名称与模型路径。

注意:文档示例中 Reranker 的 --worker_type 同样标注为 text2vec(与 Embedding 共用 Worker 类型),但通过 --rerank 标志区分用途。

第六步:查看已部署的模型

部署完成后,可以通过 dbgpt model list 检查所有模型实例的注册状态。该命令在 cli.py 中实现,内部通过 ModelRegistryClient 向 Controller 查询实例列表,并以表格输出每个实例的名称、类型、Host、Port、健康状态与最近心跳时间:

$ dbgpt model list

+-------------------+------------+------------+------+---------+---------+-----------------+----------------------------+
|    Model Name     | Model Type |    Host    | Port | Healthy | Enabled | Prompt Template |       Last Heartbeat       |
+-------------------+------------+------------+------+---------+---------+-----------------+----------------------------+
|   glm-4-9b-chat     |    llm     | 172.17.0.2 | 8001 |   True  |   True  |                 | 2023-09-12T23:04:31.287654 |
|  WorkerManager    |  service   | 172.17.0.2 | 8001 |   True  |   True  |                 | 2023-09-12T23:04:31.286668 |
|  WorkerManager    |  service   | 172.17.0.2 | 8003 |   True  |   True  |                 | 2023-09-12T23:04:29.845617 |
|  WorkerManager    |  service   | 172.17.0.2 | 8002 |   True  |   True  |                 | 2023-09-12T23:04:24.598439 |
|  WorkerManager    |  service   | 172.21.0.5 | 8004 |   True  |   True  |                 | 2023-09-12T23:04:24.598439 |
|     text2vec      |  text2vec  | 172.17.0.2 | 8003 |   True  |   True  |                 | 2023-09-12T23:04:29.844796 |
| vicuna-13b-v1.5   |    llm     | 172.17.0.2 | 8002 |   True  |   True  |                 | 2023-09-12T23:04:24.597775 |
| bge-reranker-base |  text2vec  | 172.21.0.5 | 8004 |   True  |   True  |                 | 2024-05-15T11:36:12.935012 |
+-------------------+------------+------------+------+---------+---------+-----------------+----------------------------+

解读这张表的关键信息:

  • Healthy = True 表示该实例在心跳超时窗口(默认 60s)内正常上报,若超过则会被 Controller 标记为不健康;
  • WorkerManager 行是每个 Worker 进程中自带的服务实例记录,属正常现象;
  • 同一 Controller 下可同时管理多个主机(如示例中的 172.17.0.2 与 172.21.0.5)上的模型,这正是集群部署的核心价值。

第七步:通过 WebServer 使用模型服务

上述部署好的模型服务可以通过 WebServer(dbgpt_server)对外使用。

修改环境变量

首先修改 .env 配置文件,指定默认模型与 Model Controller 地址:

LLM_MODEL=vicuna-13b-v1.5
# 当前默认的 MODEL_SERVER 地址就是 Model Controller 的地址
MODEL_SERVER=http://127.0.0.1:8000

启动 WebServer

dbgpt start webserver --light

--light 表示不启动内置的模型服务,此时 WebServer 只作为前端与业务服务,通过 MODEL_SERVER 连接外部的 Model Controller,复用我们前面手动部署的模型实例。

从 dbgpt_app/_cli.py 的 start_webserver 实现可以看到,WebServer 启动时会打印 Profile、Config、Workspace 信息,支持 --daemon 后台运行,并将日志写入 LOGDIR/webserver_uvicorn.log。

指定模型直接启动

也可以直接在命令行指定模型启动(此时 Embedding 也使用远程服务):

LLM_MODEL=glm-4-9b-chat dbgpt start webserver --light --remote_embedding

--remote_embedding 表示 Embedding 模型同样使用集群中已部署的远程服务,而非本地加载。

深入 CLI:关键命令帮助与参数全解

DB-GPT 的 CLI 基于 Click 实现(入口见 packages/dbgpt-core/src/dbgpt/cli/cli_scripts.py),所有命令都支持 --help 查看详细用法。

dbgpt start --help

dbgpt start --help

Already connect 'dbgpt'
Usage: dbgpt start [OPTIONS] COMMAND [ARGS]...

  Start specific server.

Options:
  --help  Show this message and exit.

Commands:
  apiserver   Start apiserver
  controller  Start model controller
  webserver   Start webserver(dbgpt_server.py)
  worker      Start model worker
(dbgpt_env) magic@B-4TMH9N3X-2120 ~ %

dbgpt start worker --help

Worker 参数是最丰富的,逐一说明如下:

dbgpt start worker --help

Already connect 'dbgpt'
Usage: dbgpt start worker [OPTIONS]

  Start model worker

Options:
  --model_name TEXT               Model name  [required]
  --model_path TEXT               Model path  [required]
  --worker_type TEXT              Worker type
  --worker_class TEXT             Model worker class,
                                  pilot.model.cluster.DefaultModelWorker
  --model_type TEXT               Model type: huggingface, llama.cpp, proxy
                                  and vllm  [default: huggingface]
  --host TEXT                     Model worker deploy host  [default: 0.0.0.0]
  --port INTEGER                  Model worker deploy port  [default: 8001]
  --daemon                        Run Model Worker in background
  --limit_model_concurrency INTEGER
                                  Model concurrency limit  [default: 5]
  --standalone                    Standalone mode. If True, embedded Run
                                  ModelController
  --register                      Register current worker to model controller
                                  [default: True]
  --worker_register_host TEXT     The ip address of current worker to register
                                  to ModelController. If None, the address is
                                  automatically determined
  --controller_addr TEXT          The Model controller address to register
  --send_heartbeat                Send heartbeat to model controller
                                  [default: True]
  --heartbeat_interval INTEGER    The interval for sending heartbeats
                                  (seconds)  [default: 20]
  --log_level TEXT                Logging level
  --log_file TEXT                 The filename to store log  [default:
                                  dbgpt_model_worker_manager.log]
  --tracer_file TEXT              The filename to store tracer span records
                                  [default:
                                  dbgpt_model_worker_manager_tracer.jsonl]
  --tracer_storage_cls TEXT       The storage class to storage tracer span
                                  records
  --device TEXT                   Device to run model. If None, the device is
                                  automatically determined
  --prompt_template TEXT          Prompt template. If None, the prompt
                                  template is automatically determined from
                                  model path, supported template: zero_shot,vi
                                  cuna_v1.1,llama-2,codellama,alpaca,baichuan-
                                  chat,internlm-chat
  --max_context_size INTEGER      Maximum context size  [default: 4096]
  --num_gpus INTEGER              The number of gpus you expect to use, if it
                                  is empty, use all of them as much as
                                  possible
  --max_gpu_memory TEXT           The maximum memory limit of each GPU, only
                                  valid in multi-GPU configuration
  --cpu_offloading                CPU offloading
  --load_8bit                     8-bit quantization
  --load_4bit                     4-bit quantization
  --quant_type TEXT               Quantization datatypes, `fp4` (four bit
                                  float) and `nf4` (normal four bit float),
                                  only valid when load_4bit=True  [default:
                                  nf4]
  --use_double_quant              Nested quantization, only valid when
                                  load_4bit=True  [default: True]
  --compute_dtype TEXT            Model compute type
  --trust_remote_code             Trust remote code  [default: True]
  --verbose                       Show verbose output.
  --help                          Show this message and exit.

关键参数解读(与 ModelWorkerParameters 定义一一对应):

参数默认值作用
--model_typehuggingface模型加载引擎,可选 huggingface、llama.cpp、proxy、vllm
--port8001Worker 对外服务端口,多模型部署时需各不相同
--limit_model_concurrency5单模型并发上限,超过后请求排队
--standaloneFalse独立模式,开启后 Worker 内嵌运行 Model Controller,适合单机单进程场景
--registerTrue是否自动向 Controller 注册
--send_heartbeat / --heartbeat_intervalTrue / 20心跳上报开关与间隔(秒)
--max_context_size4096最大上下文长度
--num_gpus / --max_gpu_memory空多 GPU 场景下指定使用 GPU 数量与单卡显存上限
--load_8bit / --load_4bit / --quant_type— / — / nf4量化加载,4bit 时可选 fp4 与 nf4,--use_double_quant 默认开启嵌套量化
--prompt_template自动推断可从模型路径自动识别,也可手动指定(zero_shot、vicuna_v1.1、llama-2、codellama、alpaca、baichuan-chat、internlm-chat 等)
--trust_remote_codeTrue允许加载依赖远程代码的模型(如 ChatGLM 系)

dbgpt model --help

dbgpt model 是模型服务的管理客户端,连接地址可通过 --address 参数或环境变量 CONTROLLER_ADDRESS 指定:

dbgpt model --help


Already connect 'dbgpt'
Usage: dbgpt model [OPTIONS] COMMAND [ARGS]...

  Clients that manage model serving

Options:
  --address TEXT  Address of the Model Controller to connect to. Just support
                  light deploy model, If the environment variable
                  CONTROLLER_ADDRESS is configured, read from the environment
                  variable
  --help          Show this message and exit.

Commands:
  chat     Interact with your bot from the command line
  list     List model instances
  restart  Restart model instances
  start    Start model instances
  stop     Stop model instances

其中 dbgpt model chat 支持直接在终端与已部署模型进行流式对话(内部通过 RemoteWorkerManager.generate_stream 实现,见 cli.py),支持 /exit、/clear、/reset 等会话命令,可用于快速验证模型服务是否正常;dbgpt model start/stop/restart 则用于远程管理已注册的模型实例。

综合实战:一次完整的集群部署流程

将以上步骤串联,一个可用的最小集群部署流程如下:

  1. 安装 CLI:pip install -e ".[default]"(或脚本模式运行);
  2. 启动 Controller:dbgpt start controller(默认 :8000);
  3. 启动 LLM Worker:分别以不同端口启动多个 LLM(如 glm-4-9b-chat 在 8001、vicuna-13b-v1.5 在 8002),均指向 --controller_addr http://127.0.0.1:8000;
  4. 启动 Embedding Worker:text2vec 类型在 8003;
  5. 启动 Reranker Worker:加 --rerank 标志在 8004;
  6. 验证注册:dbgpt model list 检查所有实例 Healthy/Enabled 状态;
  7. 接入业务:设置 .env 中 LLM_MODEL 与 MODEL_SERVER,执行 dbgpt start webserver --light(或 --light --remote_embedding)使 Web 服务使用集群模型;
  8. 运维管理:使用 dbgpt model chat/list/restart/start/stop 完成日常管理与快速验证;如需后台运行可使用 --daemon 参数,并通过 dbgpt stop controller/worker/webserver 停止相应服务(停止逻辑见 cli.py 与 _stop_service 工具)。

总结

通过 dbgpt CLI 的 controller、worker、model、webserver 系列命令,DB-GPT 将模型服务的部署、注册、调度与消费链路完整打通:Controller 负责集中注册与心跳健康检查,Worker 负责分布式模型推理,dbgpt model 提供统一的管理与交互入口。本文覆盖的命令与参数均可在当前仓库的 cli.py、parameter.py 与 cluster 目录中找到对应实现,读者可结合实际模型路径直接上手,从单模型部署平滑演进到多模型、多主机的集群化模型服务。

【免费下载链接】DB-GPT open-source agentic AI data assistant for the next generation of AI + Data products. 【免费下载链接】DB-GPT 项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT

更多推荐