# MiniCPM-o 4.5 全双工语音服务本地部署全记录
·
MiniCPM-o 4.5 全双工语音服务本地部署全记录
2026年6月13日 · 深夜折腾实录 · GPUFree 平台
背景
最近想在自己服务器上跑一个 MiniCPM-o 4.5 的全双工语音服务,支持实时语音对话、图像理解、视频交互等多模态能力。模型文件已经下载好了,但如何高效部署成可用的服务,折腾了一整晚。
环境概览
| 项目 | 规格 |
|---|---|
| GPU | NVIDIA RTX 4090 24GB |
| CPU | Intel Xeon Gold 6430 (128核) |
| 内存 | 503GB |
| 系统 | Ubuntu 22.04, CUDA 12.8 |
| 平台 | GPUFree 容器环境 |
踩坑历程
坑1:模型格式不匹配
最初以为 GGUF 文件已经下载好了,结果发现 /root/gpufree-data/models/MiniCPM-o-4_5/ 里是 PyTorch safetensors 格式,而 GGUF 文件实际上在 /root/gpufree-share/ 下,且只有 llama.cpp 用的文件。
全双工语音服务需要的是 PyTorch 官方方案,GGUF 跑不了 WebSocket 全双工。
坑2:依赖安装困难
官方推荐 Python 3.10 + Miniconda,但:
- 下载 Miniconda 太慢(网络限制)
- 磁盘空间不足(根目录只剩 4.8GB,
gpufree-data满了) - 系统自带 Python 3.12,与官方推荐的 3.10 有差异
解决方案:直接用系统 Python,缺什么装什么,跳过 Miniconda。
# 安装缺失的关键依赖
pip3 install --break-system-packages \
"transformers==4.51.0" \
"accelerate==1.12.0" \
"minicpmo-utils[all]>=1.0.5" \
"websockets>=16.0" \
"fastapi>=0.128.0" \
"uvicorn>=0.40.0" \
"pydantic>=2.11.0" \
"soxr" \
"stepaudio2-minicpmo"
坑3:配置文件格式错误
config.json 格式有误,修复为:
{
"model": {
"model_path": "/root/gpufree-data/models/MiniCPM-o-4_5",
"pt_path": null,
"attn_implementation": "auto"
},
"audio": {
"ref_audio_path": "/root/gpufree-share/audio/ref_minicpm_signature.wav",
"playback_delay_ms": 200,
"chat_vocoder": "token2wav"
},
"service": {
"gateway_port": 8188,
"worker_base_port": 22400,
"max_queue_size": 1000,
"request_timeout": 300.0,
"compile": false,
"data_dir": "data"
},
"duplex": {
"pause_timeout": 60.0
}
}
坑4:进程管理
后台启动的进程容易被系统终止。最终用 setsid 彻底分离进程:
setsid bash -c 'cd /path/to/demo && CUDA_VISIBLE_DEVICES=0 PYTHONPATH=. python3 worker.py --worker-index 0 --gpu-id 0 --port 22400' </dev/null &>/dev/null &
disown
坑5:外网访问与 WSS 加密
这是最折腾的一环:
- 云平台端口转发:8006 端口映射为
https://xxx.gpufree.cn:8443/,但直接访问返回 404 - frp 方案:尝试在公网机器部署 frps,但 GitHub 下载 frp 包一直超时
- 最终方案:用 nginx 反向代理,一行命令搞定 WSS 加密
# 安装 nginx
apt-get install -y nginx openssl
# 生成自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/server.key \
-out /etc/nginx/ssl/server.crt \
-subj "/CN=localhost"
# 配置 nginx 反向代理 + WebSocket 支持
cat > /etc/nginx/sites-available/minicpm-o << 'EOF'
upstream minicpm_backend {
server 127.0.0.1:8188;
}
server {
listen 8443 ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
location / {
proxy_pass http://minicpm_backend;
}
}
EOF
最终架构
你的浏览器 ──wss──> [云平台端口转发 :8443] ──> [nginx :8443] ──> [Gateway :8188] ──> [Worker :22400]
| 组件 | 端口 | 说明 |
|---|---|---|
| Worker | 22400 | 模型加载,GPU 推理 |
| Gateway | 8188 | HTTP API,会话管理 |
| Nginx | 8443 | WSS 加密,WebSocket 代理 |
服务验证
# 健康检查
curl -k https://localhost:8443/health
# {"status":"healthy","timestamp":"2026-06-14T01:17:12.243783"}
# WebSocket 全双工语音测试
python3 -c "
import asyncio, ssl, websockets
async def test():
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
async with websockets.connect(
'wss://localhost:8443/v1/realtime?mode=audio',
ssl=ctx, max_size=2**25
) as ws:
msg = await ws.recv()
print('Connected!', msg[:200])
asyncio.run(test())
"
可用的 API 端点
| 模式 | WebSocket 路径 | 说明 |
|---|---|---|
| 全双工语音 | /v1/realtime?mode=audio |
实时语音对话 |
| 轮次对话 | /v1/realtime?mode=chat |
文本/图片/视频/音频 |
| 半双工语音 | /v1/realtime?mode=audio&duplex=half |
对讲机模式 |
资源消耗
| 指标 | 数值 |
|---|---|
| GPU 显存 | ~21.5GB / 24GB |
| 模型大小 | ~19GB (PyTorch safetensors) |
| 推理速度 | 首包延迟约 1-2s |
| 并发数 | 1(24GB 显存上限) |
经验总结
- 先确认模型格式再决定部署方案 — GGUF ≠ PyTorch,全双工需要官方 PyTorch 方案
- nginx 就是最好的 WSS 反向代理 — 不需要 frp、不需要额外工具
setsid+disown是保活进程的利器 — 避免后台进程被意外终止- 磁盘空间要提前规划 — 容器环境尤其要注意,
/分区满了会出问题 - 依赖版本要对齐 — transformers 4.51.0 是关键,5.x 不兼容
参考资源
折腾到凌晨一点半,全双工语音终于通了。看着手机里传来的实时语音回复,感觉这一晚上的坑都值了。
🌙 几米 记于 2026-06-14
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)