当前位置: 首页 > news >正文

MiniCPM-V 4.6 部署实战:基于 GPUStack 与 SGLang 的端侧多模态模型部署

——如 vLLM、SGLang、TensorRT-LLM,甚至自定义引擎——以在 GPU 集群上实现最佳性能。核心功能包括多异构 GPU 集群池化调度可插拔推理引擎架构Day 0 模型支持性能优化配置(低延迟/高吞吐)、以及企业级运维能力,如故障恢复、负载均衡、监控与权限管理。

GPUStack 可以帮助我们高效地管理vLLM、SGLang等推理引擎,并推动模型从部署走向企业生产落地运营。在开始部署 MiniCPM-V 4.6 之前,首先完成 GPUStack 控制面的安装,并将节点纳入管理。

准备容器环境

GPUStack 以容器方式运行,因此需要提前准备好容器运行环境(如 Docker、Podman 或 Kubernetes)。本文以Docker为例进行说明。

在各节点上安装 Docker,确保服务已正常启动:

docker info

启动 GPUStack Server

GPUStack Server 无需依赖 GPU,可运行在普通 CPU 节点,也可直接部署在 GPU 节点上,同时支持 Server 与 Worker 单节点部署。本文以单机双卡 NVIDIA RTX 4090 48GB 为实验环境,在同一节点上部署 GPUStack Server 与 Worker。

双卡 NVIDIA RTX 4090 48GB仅作为实验环境,并不代表运行 MiniCPM-V 4.6 需要如此高的硬件配置。MiniCPM-V 4.6 模型本身体积较小,可在低显存 GPU 或纯 CPU 环境下运行。

启动 GPUStack Server 容器:

sudo docker run -d --name gpustack \ --restart unless-stopped \ -p 80:80 \ --volume gpustack-data:/var/lib/gpustack \ swr.cn-south-1.myhuaweicloud.com/gpustack/gpustack:v2.1.2 \ --bootstrap-password GPUStack@123

参数说明:

  • -p 80:80:docker run的参数,用于对外暴露 Web 控制台端口,如需修改为其他端口(例如 8080),可调整为 -p 8080:80。
  • --volume:docker run的参数,持久化平台数据(包括模型服务、计量数据、API Key 等)
  • --bootstrap-password:初始化 admin 用户密码

容器启动后,可以通过日志确认服务是否正常运行:

docker logs -f gpustack

访问控制台并初始化

打开浏览器访问:http://<Server 主机 IP>:80

使用默认账号登录:

  • 用户名:admin
  • 密码:GPUStack@123

登录后,首先创建一个 Docker 类型的集群,用于统一管理后续接入的节点。

添加 NVIDIA GPU 节点

集群创建完成后,可接入 Worker 节点,但需先完成基础环境检查。

(1)驱动版本检查

在目标节点上执行以下命令:

nvidia-smi

该命令会显示当前安装的 NVIDIA 驱动版本、支持 CUDA 最高版本,及 GPU 显存、功率等详细信息,如下图所示:

(2)Nvidia Container Toolkit 检查

执行以下命令检查 Docker 是否正确配置了Nvidia Container Toolkit

sudo docker info 2>/dev/null | grep -q "Runtime.*nvidia" && echo "Nvidia Container Toolkit OK" || (echo "Nvidia Container Toolkit not configured"; exit 1)
  • 该命令会从docker info输出中查找是否存在nvidia运行时配置。
  • 如果输出 "Nvidia Container Toolkit OK",说明 Docker 已正确配置,可在容器中访问 GPU。
  • 如果输出 "Nvidia Container Toolkit not configured",则说明未正确配置,需要安装并启用 Nvidia Container Toolkit,否则推理容器无法使用 GPU 资源。

(3)接入 Worker 节点

在 GPUStack 控制台中,选择添加节点(Worker),按照步骤提示填写信息,并复制系统生成的接入命令,在目标节点执行。

该命令本质是启动一个 Worker 容器,并自动注册到 Server。

(4)验证 Worker 状态

节点接入后,可以在节点上查看容器日志:

docker logs -f gpustack-worker

同时,在 GPUStack 控制台中也可以看到节点状态是否为Ready

至此,GPUStack 的控制面已成功部署,NVIDIA GPU 节点也顺利接入集群,并能够正常采集设备名称、索引、厂商信息、温度、利用率及显存使用等指标。接下来即可在该环境中部署具体的推理服务。

GPU 资源监控数据

添加自定义 SGLang 版本

GPUStack 支持可插拔的推理引擎架构,允许自定义推理后端及其版本,用于引入 GPUStack 未内置的vLLM/SGLang/MindIE版本,或接入其他自定义推理引擎镜像。

为了部署MiniCPM-V 4.6模型,这里以SGLang最新v0.5.12版本为例,将其作为 SGLang 的自定义版本添加 GPUStack 的推理后端中:

CUDA 版本官方镜像地址国内镜像地址
cu130lmsysorg/sglang:v0.5.12swr.cn-south-1.myhuaweicloud.com/gpustack/sglang:v0.5.12
cu129lmsysorg/sglang:v0.5.12-cu129swr.cn-south-1.myhuaweicloud.com/gpustack/sglang:v0.5.12-cu129

对于其他 GPU,可前往 https://hub.docker.com/r/lmsysorg/sglang/tags 查找 SGLang 官方打包的专用镜像。

推理后端菜单,编辑 SGLang,在版本配置中选择添加版本,添加一个新的 SGLang 版本,按实际情况填写镜像地址:

配置
版本0.5.12
镜像名称swr.cn-south-1.myhuaweicloud.com/gpustack/sglang:v0.5.12
框架CUDA

自定义添加 SGLang0.5.12镜像配置如图所示:

也可以切换到 YAML 模式,直接使用以下的 YAML 导入:

version_configs: 0.5.12-custom: image_name: swr.cn-south-1.myhuaweicloud.com/gpustack/sglang:v0.5.12 run_command: '' entrypoint: '' custom_framework: cuda env: {}

公众号复制可能存在特殊格式,可以发送给 AI 重新整理,或者直接下载下方文件使用:

https://gpustack-cn-blogs.oss-cn-shanghai.aliyuncs.com/assets/minicpm-v-4.6/sglang-0.5.12.yml

注意:如果当前已经有其它自定义版本,需要将其它自定义版本一同添加在 version_configs 中一起导入。

部署 MiniCPM-V 4.6

MiniCPM-V 4.6 与 v4.5 通过enable_thinking切换模式不同,v4.6 将instructthinking拆分为两个独立checkpoint,按需选择即可。

版本HuggingFace IDModelScope (魔搭) ID
Instructopenbmb/MiniCPM-V-4.6OpenBMB/MiniCPM-V-4.6
Thinking(思考)openbmb/MiniCPM-V-4.6-ThinkingOpenBMB/MiniCPM-V-4.6-Thinking

在线部署 MiniCPM-V 4.6

GPUStack 支持在线从Hugging FaceModelScope (魔搭)下载模型权重并部署,也可从本地路径进行部署(离线环境下可使用此方法)。

国内环境推荐从 ModelScope 下载部署模型,如下图所示:

在弹窗口中搜索OpenBMB/MiniCPM-V-4.6,并在右侧配置窗口选择 SGLang 推理后端和0.5.12自定义版本,如下图所示:

要部署思考版本则搜索OpenBMB/MiniCPM-V-4.6-Thinking

参考文档,获取模型部署参数:

文档来源文档地址
OpenBMBGitHub - MiniCPM-V-CookBook
SGLangSGLang Docs - MiniCPM-V-4.6
--trust-remote-code --dtype=bfloat16 --tool-call-parser=qwen3_coder --uvicorn-access-log-exclude-prefixes /health /metrics

若部署的是 Thinking 版本,则还需添加--reasoning-parser=qwen3参数。

注意:SGLang 使用--mem-fraction-static参数控制显存占用、使用--context-length控制上下文长度。大家按实际情况设置,这里作为演示,不作指定。

等待模型启动时,可以在操作中点击查看日志,实时观察启动过程:

当模型实例状态显示为Running时,说明模型已经成功启动,可以进行后续的测试:

模型测试与排障

GPUStack 提供了多种类型模型的试验场,可进行基础模型测试与推理速度观察。

要测试刚刚部署的 MiniCPM-V 4.6,可通过以下两种方式在试验场进行测试:

  1. 在模型部署操作菜单中,选择打开试验场

  2. 直接打开对话试验场,在右侧模型选择框中选择需要测试的模型:

在对话框输入内容,以进行模型测试:

如图所示,模型直接报错,返回top_k must be -1 (disable) or at least 1, got 0.

这是由于官方模型文件generation_config.json中存在"top_k": 0

这个问题有两个解决办法:

  1. 编辑文件,删除top_k字段:

    { "bos_token_id": 248045, "do_sample": true, "eos_token_id": [ 248044, 248046 ], "temperature": 0.7, - "top_k": 0, "top_p": 1.0, "repetition_penalty": 1.0, "transformers_version": "5.7.0" }
  2. (推荐)添加--sampling-defaults=openai后端参数:

修改配置后,删除重建现有示例,再重新测试:

Instruct & Thinking 对比

GPUStack 试验场支持多模型对比测试,进入对话试验场,点击顶部多模型对比按钮切换到多模型对比视图,支持同时测试六个模型。

测试MiniCPM-V 4.6思考和非思考模式:

如果发现测试效果不佳,可调整参数,尝试向官方默认值靠拢,如上文generation_config.json内容所示,我们将temperature对齐到0.7再次测试:

模型基准测试

GPUStack 内置基准测试功能,可针对模型实例进行多种类型的测试,例如吞吐、延迟、长上下文等场景,并支持根据实际需求灵活调整测试参数。

进阶:混合 4x/16x 视觉 token 压缩

MiniCPM-V 4.6 引入了创新的混合 4x/16x 视觉 token 压缩技术。在默认情况下,模型为了追求极致的推理速度和移动端效率,会自动采用高效的16x压缩模式(即高比例下采样)。

然而,在处理超高分辨率图像、密集型 OCR 文本识别或极其微小的视觉元素时,16x压缩可能会因为过度合并视觉 Token 而丢失部分细节。此时,我们可以将其调整为4x压缩模式,以保留多达 4 倍的视觉特征碎片的精细度。

切换为 4x 精细压缩模式

SGLang API 暂不支持downsample_mode参数传递,要想切换到4x模式,需调整部署参数。

在 GPUStack 的模型配置或启动参数中,添加--json-model-override-args参数来强制覆盖默认配置:

--json-model-override-args '{"downsample_mode": "4x"}'

修改后的最终可用启动参数配置如下图所示:

小技巧:GPUStack 支持模型部署克隆功能,可在操作菜单中直接使用。对于需要基于现有配置重新部署、仅做少量参数调整的场景,可以省去重复填写参数的步骤。

效果验证与对比

http://www.gsyq.cn/news/1641670.html

相关文章:

  • 为什么选择Upmin Admin Ruby?Rails开发者必备的10个理由
  • kiUi性能优化技巧:让你的OpenGL界面流畅运行的10个方法
  • Traduccion项目完全指南:如何参与You Don‘t Know JS西班牙语翻译
  • d3d8to9完整指南:让老游戏在Windows 10/11上完美运行的免费解决方案
  • 终极Sunshine游戏串流卸载指南:如何彻底清理并释放系统资源
  • 终极音乐歌词解决方案:163MusicLyrics让你的音乐库完美同步歌词
  • 羽球联盟 HarmonyOS NEXT 实战系列 (06/20):主题Token、Resource颜色与深色模式准备
  • AgentKit 内存管理完全手册:持久化与状态共享最佳实践
  • Spray用户名生成器完全教程:从常见姓名到用户名格式转换
  • 探索MoveIt2三大规划器:如何为你的机器人选择最佳运动规划方案
  • YimMenu终极指南:5分钟掌握GTA5最强修改器的秘密武器
  • 如何用PyTorch-Segmentation-Detection快速训练你的第一个分割模型
  • Cascadia源码解析:从parser.go看CSS选择器的实现原理
  • ZheTian v1.x完整使用指南:从基础到高级的10个技巧
  • Team IDE与CI/CD集成:自动化部署与测试的最佳实践
  • TranslucentTB:Windows任务栏透明美化终极指南,打造个性化桌面体验
  • Python开发AI Agent:从环境配置到生产部署全指南
  • 西北工业大学复习资料:深度学习框架比较与应用指南
  • NVC与FPGA厂商库集成:Xilinx、Altera、Lattice仿真环境搭建终极指南
  • 串行数据可视化神器:Serial-Studio让嵌入式开发数据“活“起来
  • SAN 与传统 CNN 对比:自注意力如何提升图像识别精度与效率
  • TPH-YOLOv5高级应用:多模型集成与加权框融合(WBF)技术
  • Audacity免费音频编辑终极指南:从零到专业的完整解决方案
  • 终极GTA5修改器指南:如何使用YimMenu增强游戏体验
  • 从4小时到15分钟:OpCore Simplify如何彻底改变黑苹果配置体验
  • ProperTree:简单易用的跨平台plist编辑器,黑苹果配置的终极解决方案
  • FlagGems高级技巧:选择性加速让复杂工作流效率提升300%
  • 轻松编译ESP32-BLE2MQTT:基于ESP-IDF的详细步骤
  • nwpu-cram计算机网络实验:DNS配置与分析完整指南 [特殊字符]
  • 如何使用linux_kernel_cves快速查找Linux内核安全漏洞