内置推理后端
GPUStack 支持以下推理后端:
开始部署模型时,UI 会根据以下条件自动预选后端:
- 如果模型是已知的
Text-to-Speech或Speech-to-Text模型,使用VoxBox。 - 如果模型是已知的
Image模型,使用SGLang。 - 其他情况使用
vLLM。
此预选仅用于填充部署表单中的默认值。实际部署使用的后端,以用户提交部署请求时明确选择的后端为准。用户可以从上方支持的后端列表中选择。
说明
对于所有支持的推理后端,我们都在 DockerHub 上提供预构建 Docker 镜像。用户部署模型时,系统会自动拉取并运行对应镜像。
vLLM
vLLM 是具有高吞吐量和高内存效率的 LLM 推理后端,是生产环境运行 LLM 的常见选择。
vLLM 无缝支持大多数先进开源模型,包括:
- 类 Transformer 的 LLM(例如
Qwen3) - 混合专家 LLM(例如
DeepSeek V3/R1) - 多模态 LLM(例如
Qwen3-VL) - Embedding 模型(例如
Qwen3-Embedding) - Reranker 模型(例如
Qwen3-Reranker)
默认情况下,GPUStack 根据模型元数据估算模型实例所需的 VRAM。
可以根据需要自定义参数。以下 vLLM 参数可能有用:
--gpu-memory-utilization(默认:0.9):供模型实例使用的 GPU 内存比例。--max-model-len:模型上下文长度。对于长上下文模型,GPUStack 会自动将此参数设为8192,以简化模型部署,尤其适用于资源受限环境。可以按需自定义。--tensor-parallel-size:张量并行副本数。默认情况下,GPUStack 根据可用 GPU 资源和模型内存需求估算设置此参数。可以按需自定义。
更多详情参见 vLLM CLI 参考。
支持的模型
支持的模型参见 vLLM 文档。
支持的功能
全模态支持
vLLM-Omni 是面向全模态推理的 vLLM 扩展,支持:
- 全模态模型:同时处理文本、音频、图像和视频(例如
Qwen3-Omni)。 - 图像任务:图像生成和编辑(例如
Z-Image-Turbo)。 - 视频任务:视频生成和编辑(例如
Wan2.2)。 - 音频任务:语音合成、声音克隆等(例如
Qwen3-TTS)。
GPUStack 集成 vLLM-Omni,为全模态模型的部署和管理提供流畅体验。通过 vLLM 后端部署模型时,GPUStack 会根据元数据自动判断是否为全模态模型,并为 vLLM-Omni 设置所需参数。
跨 Worker 分布式推理(实验性)
单个 Worker 的 VRAM 或计算资源不足以承载模型时,vLLM 可以将一个模型实例拆分到多个 Worker 上协同推理。GPUStack 将这些跨节点进程作为单个模型实例编排,对外仍只暴露一个兼容 OpenAI 的端点。
部署模型时勾选 Allow Distributed Inference Across Workers 即可启用。
GPUStack 为 vLLM 分布式推理提供两种执行路径,通过 vLLM 的 --distributed-executor-backend 参数选择。通常无需手动设置,GPUStack 会根据容器镜像和 vLLM 版本自动选择。
Ray 后端
- 使用场景:GPUStack 官方 runner 镜像上的默认路径,runner 镜像始终内置 Ray,不受 vLLM 版本影响。如果在后端参数中显式将
--distributed-executor-backend设置为ray或其他非mp值(例如external_launcher),也会使用此路径。 - 工作方式:GPUStack 在每个参与节点上启动 Ray sidecar 进程,组成集群。主节点运行 vLLM 主进程并暴露 API 服务,Ray 负责协调跨节点任务调度。
MultiProcessing 后端
- 使用场景:在后端参数中显式设置
--distributed-executor-backend=mp时;或在 vLLM ≥0.18.0上运行自定义镜像(后端版本带-custom后缀)时。vLLM 在0.18.0中移除了默认依赖里的 Ray,因此自定义镜像可能不包含 Ray,GPUStack 会回退到mp以避免启动失败。 - 工作方式:直接使用 vLLM 基于 multiprocessing 的多节点执行,无需 Ray sidecar。GPUStack 根据集群布局注入
--nnodes、--node-rank、--master-addr和--master-port等拓扑参数。 - 无头从节点:调度为从节点的实例会自动获得
--headless,仅参与分布式计算,不启动 OpenAI API 服务。只有主节点暴露 HTTP 端点;所有外部请求均经主节点进入,再分发到从节点。从节点实例日志中出现--headless属于预期行为,这也是从节点实例不占用 API 端口的原因。 - 拓扑形式:GPUStack 根据并行配置(TP / PP / DP),自动选择
dp_only、mp_only或nested参数布局。
已知限制
- 所有参与 Worker 必须能通过相同路径访问模型文件。请使用共享文件系统,或将模型文件下载到所有参与 Worker 的相同路径。
- Ray 模式下,每个 Worker 同一时间只能分配给一个分布式 vLLM 模型实例。
满足以下条件时支持自动调度:
- 参与 Worker 的 GPU 数量相同。
- Worker 内所有 GPU 均满足 gpu_memory_utilization(默认 0.9)要求。
- 使用张量并行时,根据注意力头数量划分 GPU。
- 总 VRAM 申领量大于估算的 VRAM 申领量。
不满足上述条件时,模型实例不会自动调度。但可以在模型配置中选择期望的 Worker/GPU 进行手动调度。
参数参考
vLLM 支持的完整参数列表参见此处。
SGLang
SGLang 是用于大语言模型和视觉语言模型的高性能服务框架。
它旨在从单 GPU 到大规模分布式集群的各种环境中,提供低延迟、高吞吐量的推理。
默认情况下,GPUStack 根据模型元数据估算模型实例所需的 VRAM。
需要时,GPUStack 还会为长上下文模型自动设置若干参数。常用 SGLang 参数包括:
--mem-fraction-static(默认:0.9):每个 GPU 可分配的 VRAM 比例。调度器使用此值进行资源匹配和候选选择。可通过模型的backend_parameters覆盖。--context-length:模型上下文长度。对于长上下文模型,如果自动估算的上下文长度超过设备能力,GPUStack 会将此参数设为8192,以简化资源受限环境中的部署。可按需自定义。--tp-size:张量并行大小。未显式提供时,GPUStack 根据所选 GPU 推导并设置此参数。--pp-size:流水线并行大小。多节点部署中,GPUStack 根据模型和集群配置确定--tp-size与--pp-size的组合。- 多节点参数:
--nnodes、--node-rank、--dist-init-addr。启用分布式推理时,GPUStack 注入这些参数以初始化多节点通信。
更多详情参见 SGLang 文档。
支持的模型
支持的模型参见 SGLang 文档。
SGLang 也支持图像模型。我们验证过的模型包括 Qwen-Image、Flux 1 Dev。更多信息参见 SGLang Diffusion 文档。
支持的功能
跨 Worker 分布式推理(实验性)
可以在 GPUStack 中启用跨多个 Worker 的 SGLang 分布式推理。
已知限制
- 所有参与节点必须运行 Linux,镜像/环境的 Python 版本和通信库(例如 NCCL)应兼容。
- 所有节点必须能通过相同路径访问模型文件。请使用共享文件系统,或将模型下载到各节点的相同路径。
自动调度的候选选择考虑以下条件:
- 参与 GPU 满足
--mem-fraction-static要求(默认 0.9)。 - 在单节点多 GPU 或多节点多 GPU 场景中,有效可分配 VRAM 总量必须满足模型需求。
- 必须满足模型并行要求(例如注意力头总数可被张量并行大小整除),否则候选会被拒绝。
不满足上述条件时,仍可通过在配置中选择 Worker/GPU 手动调度模型实例,但可能会提示资源超额分配风险。
扩散模型(实验性)
SGLang Diffusion 是专为扩散模型设计的高性能推理引擎,旨在加速图像和视频的生成过程。 通过 SGLang 的并行处理技术和优化内核,相比主流基线(例如 Hugging Face Diffusers)可实现最高 1.2 倍的生成速度。
更多详情参见 SGLang Diffusion。
其他高级功能
还提供以下高级功能:
使用说明参见官方文档。
参数参考
SGLang 支持的完整参数列表参见此处。
MindIE
支持的模型
MindIE 支持此处列出的多种模型。
在 GPUStack 中,支持大语言模型(LLM)和多模态语言模型(VLM)。
目前尚不支持 Embedding 模型 和 多模态生成模型。
支持的功能
MindIE 提供多种功能,参见此处。
目前,GPUStack 支持其中一部分能力,包括 量化、 扩展上下文长度、 分布式推理、 混合专家(MoE)、 Split Fuse、 推测解码、 多 token 预测、 前缀缓存、 函数调用、 多模态理解、 多头潜在注意力(MLA)、 张量并行、 上下文并行、 序列并行、 专家并行、 数据并行、 缓冲响应(自昇腾 MindIE 2.0.RC1 起)。 KV Pool(自昇腾 MindIE 2.2.RC1 起)。
说明
-
量化需要特定权重,并且必须调整模型的
config.json。请按参考指南准备正确权重。 -
某些功能互斥,使用时请注意。例如,启用前缀缓存后,无法使用扩展上下文长度功能。
参数参考
为避免直接配置 JSON,GPUStack 提供以下命令行参数。
| 参数 | 默认值 | 范围 | 作用域 | 描述 |
|---|---|---|---|---|
--log-level | Info | 日志配置 | MindIE 日志级别。可选值:Verbose、Info、Warning、Warn、Error、Debug。 | |
--max-link-num | 1000 | [1, 1000] | 服务器配置 | 最大并行请求数。 |
--token-timeout | 60 | [1, 3600] | 服务器配置 | 单个 token 生成的超时时间,单位为秒。 |
--e2e-timeout | 60 | [1, 3600] | 服务器配置 | 端到端(从接受请求到推理停止)的超时时间,单位为秒。 |
--openai-support | vllm | 服务器配置 | OpenAI API 兼容模式。 | |
--kv-pool-config | 后端配置 | JSON 格式的 KV pool 配置。例如:{"backend":"<KV pool backend name>", "configPath":"/path/to/your/config/file"}。 | ||
--max-seq-len | 8192 | (0, *) | 模型部署配置 | 模型上下文长度。未指定时,从模型配置推导。 |
--max-input-token-len | (0, --max-seq-len] | 模型部署配置 | 最大输入 token 长度。未指定时,从 min(--max-seq-len, --max-prefill-tokens) 推导。 | |
--truncation | 模型部署配置 | 输入 token 长度超过 --max-input-token-len 与 --max-seq-len - 1 中的较小值时,截断输入。 | ||
--cpu-mem-size | 0 | [0, *) | 模型配置 | CPU 交换空间大小,单位为 GiB。指定 --max-preempt-count 时生效。 |
--npu-memory-fraction (env: NPU_MEMORY_FRACTION) | 0.9 | (0, 1] | 模型配置 | 供模型执行器使用的 NPU 内存比例(0 到 1)。例如:0.5 表示 50% 内存利用率。 |
--trust-remote-code | 模型配置 | 信任远程代码(用于加载模型)。 | ||
--models | 模型配置 | JSON 格式的模型配置,用于某些特定配置,例如专家并行实现方式、张量并行 LM Header/Output Attention 拆分。 | ||
--async-scheduler-wait-time | 120 | [1, 3600] | 模型配置 | 等待异步调度器启动的时间,单位为秒。 |
--cache-block-size | 128 | 调度配置 | KV 缓存块大小,必须是 2 的幂。 | |
--max-prefill-batch-size | 50 | [1, --max-batch-size] | 调度配置 | 预填充阶段批处理的最大请求数,必须小于 --max-batch-size。 |
--max-prefill-tokens | [1, --max-seq-len] | 调度配置 | 每次预填充时,当前批次的全部输入 token 总数不能超过 --max-prefill-tokens。默认与 --max-seq-len 相同。 | |
--prefill-time-ms-per-req | 150 | [0, 1000] | 调度配置 | 预估每个请求的预填充时间(ms),用于在预填充阶段和解码阶段之间决策。 |
--prefill-policy-type | 0 | 调度配置 | 预填充阶段策略:0:FCFS(先到先服务)。1:STATE(与 FCFS 相同)。2:PRIORITY(优先级队列)。3:MLFQ(多级反馈队列)。 | |
--max-batch-size | 200 | [1, 5000] | 调度配置 | 解码阶段批处理的最大请求数。 |
--max-iter-times | [1, --max-seq-len] | 调度配置 | 解码阶段的最大迭代次数,默认与 --max-seq-len 相同。 | |
--decode-time-ms-per-req | 50 | [0, 1000] | 调度配置 | 预估每个请求的解码时间(ms),与 --prefill-time-ms-per-req 一起用于批次选择。 |
--decode-policy-type | 0 | 调度配置 | 解码阶段策略:0:FCFS 1:STATE(优先处理被抢占或换出的请求)2:PRIORITY 3:MLFQ | |
--max-preempt-count | 0 | [0, --max-batch-size] | 调度配置 | 解码期间允许被抢占的最大请求数,必须小于 --max-batch-size。 |
--support-select-batch | 调度配置 | 启用批次选择,根据 --prefill-time-ms-per-req 和 --decode-time-ms-per-req 确定执行优先级。使用 --no-support-select-batch 显式禁用。 | ||
--max-queue-delay-microseconds | 5000 | [500, 1000000] | 调度配置 | 队列最大等待时间,单位为微秒。 |
--max-first-token-wait-time | 2500 | [0, 3600000] | 调度配置 | 等待首个 token 生成的最大毫秒数。 |
--override-generation-config | 以 JSON 格式覆盖或设置生成配置,例如:{"temperature": 0.5}。它会合并到模型结构的 generation_config.json 中。 | |||
--enforce-eager | 以 eager 模式执行算子。 | |||
--no-metrics | 禁止通过 /metrics 端点暴露指标。 | |||
--dtype | auto | 模型权重和激活值的数据类型。auto:使用模型配置的默认数据类型。half/float16:用于 FP16。bfloat16:用于 BF16。float/float32:用于 FP32。 | ||
--rope-scaling | 扩展上下文长度 | JSON 格式的 RoPE 缩放配置,例如:{"type":"yarn","factor":4.0,"original_max_position_embeddings":32768}。它会合并到模型结构的 config.json 中。 | ||
--rope-theta | 扩展上下文长度 | RoPE theta 配置,会合并到模型结构的 config.json 中。 | ||
--enable-split | Split Fuse | 启用 Split Fuse,类似分块预填充。使用 --no-enable-split 显式禁用。 | ||
--policy-type | 0 | Split Fuse | Split Fuse 策略。0:FCFS,先到先服务。4:SJF,最短任务优先。5:LJF,最长任务优先。6:Skip-Join MLFQ,跳跃加入多级反馈队列。7:SJF-MLFQ,最短任务优先与多级反馈队列。 | |
--split-chunk-tokens | 512 | [1, 8192] | Split Fuse | Split Fuse 批处理的 token 大小,必须为 16 的倍数。 |
--split-start-batch-size | 16 | [0, --max-batch-size] | Split Fuse | Split Fuse 开始拆分的批次大小。 |
--enable-memory-decoding | 推测解码 / Memory Decoding | 启用 memory decoding 推测。使用 --no-enable-memory-decoding 显式禁用。 | ||
--memory-decoding-length | 16 | [1, 16] | 推测解码 / Memory Decoding | memory decoding 推测长度。 |
--memory-decoding-dynamic-algo | 推测解码 / Memory Decoding | 为 memory decoding 推测启用动态算法。 | ||
--enable-lookahead | 推测解码 / Lookahead | 启用 lookahead 推测。使用 --no-enable-lookahead 显式禁用。 | ||
--lookahead-level | 4 | [3, 16] | 推测解码 / Lookahead | lookahead 推测层级。 |
--lookahead-window | 5 | [1, 16] | 推测解码 / Lookahead | lookahead 推测窗口大小。 |
--lookahead-guess-set-size | 5 | [1, 16] | 推测解码 / Lookahead | lookahead 推测猜测集合大小。 |
--enable-multi-token-prediction | 多 token 预测 | 启用多 token 预测。使用 --no-enable-multi-token-prediction 显式禁用。 | ||
--multi-token-prediction-tokens | 1 | (0, *) | 多 token 预测 | 多 token 预测的 token 数量。仅在启用 --enable-multi-token-prediction 时生效。 |
--enable-prefix-caching | 前缀缓存 | 启用前缀缓存。使用 --no-enable-prefix-caching 显式禁用。 | ||
--pipeline-parallel-size, -pp | 1 | (0, *) | 并行 | 流水线并行组数量。 |
--data-parallel-size, -dp | -1 | 并行 | Attention 层的数据并行组数量。-1 表示禁用数据并行,否则必须是 2 的幂。 | |
--context-parallel-size, -cp | -1 | 并行 | Attention 层的上下文并行组数量。-1 表示禁用上下文并行,否则必须是 2 的幂。 | |
--tensor-parallel-size, -tp | -1 | 并行 | Attention 层的张量并行组数量。-1 表示使用 world size 作为张量并行大小,否则必须是 2 的幂。 | |
--sequence-parallel-size, -sp | -1 | --tensor-parallel-size | 并行 | MLP 层的序列并行组数量。-1 表示禁用序列并行,否则必须是 2 的幂。 |
--moe-expert-parallel-size, -moe-ep | -1 | 并行 | 专家并行组数量。-1 表示禁用 MoE 专家并行,否则必须是 2 的幂。 | |
--moe-tensor-parallel-size, -moe-tp | -1 | 并行 | MoE MLP 层的张量并行组数量。-1 表示使用 world size 作为 MoE 张量并行大小,否则必须是 2 的幂。 | |
--enable-buffer-response | 缓冲响应 | 启用缓冲响应。使用 --no-enable-buffer-response 显式禁用。 | ||
--prefill-expected-time-ms | 缓冲响应 | 首 token 时间(TTFT)的预期延迟(SLO),单位为毫秒。 | ||
--decode-expected-time-ms | 缓冲响应 | 每输出 token 时间(TPOT)的预期延迟(SLO),单位为毫秒。 |
说明
GPUStack 允许用户在模型部署时注入自定义环境变量,但某些变量可能与 GPUStack 的管理逻辑冲突。
因此,GPUStack 会覆盖或阻止这些变量。请对照模型实例日志输出,确认其符合预期。
VoxBox
VoxBox 是为部署文本转语音和语音转文本模型设计的推理引擎,还提供与 OpenAI 音频 API 完全兼容的 API。
支持的模型
| 模型 | 类型 | 链接 | 支持的平台 |
|---|---|---|---|
| Faster-whisper-large-v3 | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-whisper-large-v2 | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-whisper-large-v1 | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-whisper-medium | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-whisper-medium.en | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-whisper-small | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-whisper-small.en | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-distil-whisper-large-v3 | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-distil-whisper-large-v2 | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-distil-whisper-medium.en | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-whisper-tiny | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| Faster-whisper-tiny.en | 语音转文本 | Hugging Face, ModelScope | AMD64,ARM64 |
| CosyVoice-300M-Instruct | 文本转语音 | Hugging Face, ModelScope | AMD64 |
| CosyVoice-300M-SFT | 文本转语音 | Hugging Face, ModelScope | AMD64 |
| CosyVoice-300M | 文本转语音 | Hugging Face, ModelScope | AMD64 |
| CosyVoice-300M-25Hz | 文本转语音 | ModelScope | AMD64 |
| CosyVoice2-0.5B | 文本转语音 | Hugging Face, ModelScope | AMD64 |
| Dia-1.6B | 文本转语音 | Hugging Face, ModelScope | AMD64 |
支持的功能
允许 GPU/CPU 卸载
VoxBox 支持将模型部署到 NVIDIA GPU。如果 GPU 资源不足,会自动将模型部署到 CPU。
不支持流式输出
VoxBox 不支持文本转语音(/v1/audio/speech)或语音转文本(/v1/audio/transcriptions)的流式输出。要使用流式音频 API,请改为在 vLLM 后端上部署兼容 vLLM 的音频模型。