# 单机多模型 GPU 推理服务器：Qwen + Whisper + TimesFM 的统一部署方案

> 该项目提供了一种在单张 Tesla P40 GPU 上统一运行 Qwen 3.5（对话+视觉）、Whisper（语音转录）和 TimesFM 2.5（时序预测）的解决方案，通过智能加载/卸载机制实现 GPU 资源的高效利用。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-04-06T04:37:47.000Z
- 最近活动: 2026-04-06T04:56:35.495Z
- 热度: 159.7
- 关键词: llm, inference, gpu, qwen, whisper, timesfm, docker, multimodal
- 页面链接: https://www.zingnex.cn/forum/thread/gpu-qwen-whisper-timesfm
- Canonical: https://www.zingnex.cn/forum/thread/gpu-qwen-whisper-timesfm
- Markdown 来源: ingested_event

---

## 项目概述\n\nllm-inference-server 是一个统一的多模型 GPU 推理服务器，能够在单个 Docker 容器中同时运行四种不同的 AI 模型：\n\n- **Qwen 3.5 9B**：通用对话模型，支持问答、写作和推理任务\n- **Qwen 3.5 0.8B**：轻量级对话模型，支持视觉和音频输入\n- **Whisper large-v3-turbo**：音频转录模型，将语音转换为文本\n- **TimesFM 2.5**：时序预测基础模型，预测数值时间序列的未来值\n\n核心设计理念是"按需加载、空闲卸载"——每个模型仅在需要时加载，闲置一段时间后自动卸载，使 GPU 在无任务时降至约 12W 的低功耗状态。\n\n## 架构设计\n\n### 单端口路由架构\n\n整个系统通过单一 HTTP 端口（默认 8088）对外提供服务，内部由纯 Python 编写的 server.py 作为路由器：\n\n```\n用户请求 → :8088 (主机) → :8080 (容器)\n                │\n            server.py\n         (纯 Python 路由器)\n                │\n    ┌───────────┼───────────┐\n    │           │           │\nllama-server  whisper-server  timesfm_worker.py\n:9180 (Qwen 9B)  :9182        :9183\n:9181 (Qwen 0.8B)\n```\n\nserver.py 是唯一始终运行的进程，负责监听请求并在需要时启动相应的模型子进程。当模型超过 IDLE_TIMEOUT（默认 300 秒）未被使用时，自动关闭并释放显存。\n\n### 为什么保持低功耗\n\n由于 server.py 本身不导入任何 GPU 库，当所有模型都处于空闲状态时，GPU 处于 P8 状态（约 12W）。这种设计对于需要长时间运行但调用频率不高的场景特别有价值。\n\n## 支持的模型与资源占用\n\n### 模型加载时的显存占用\n\n| 状态 | 显存使用 | 功耗 | GPU 状态 |\n|------|----------|------|----------|\n| 全部空闲 | ~200 MiB | 12W | P8 |\n| 仅 Qwen 9B | ~10.5 GB | 55W | P0 |\n| 仅 Qwen 0.8B | ~1.5 GB | 55W | P0 |\n| 仅 Whisper | ~2.5 GB | 55W | P0 |\n| 仅 TimesFM | ~6.5 GB | 55W | P0 |\n| 四模型全加载 | ~18.9 GB | 60W | P0 |\n| 空闲超时后 | ~200 MiB | 12W | P8 |\n\n在 Tesla P40（24GB 显存）上，所有四个模型可以同时加载，剩余约 5GB 显存缓冲。\n\n## API 端点与使用\n\n### 对话补全（Qwen 9B）\n\n```bash\ncurl -X POST http://localhost:8088/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"qwen\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"解释量子纠缠。\"}],\n    \"max_tokens\": 500\n  }'\n```\n\n### 音频转录（Whisper）\n\n```bash\ncurl -X POST http://localhost:8088/v1/audio/transcriptions \\\n  -F \"file=@recording.wav\" \\\n  -F \"model=whisper-1\"\n```\n\n### 多模态转录（Qwen 0.8B）\n\n```bash\ncurl -X POST http://localhost:8088/v1/transcribe \\\n  -F \"file=@image.jpg\"\n```\n\n### 时序预测（TimesFM）\n\n```bash\ncurl -X POST http://localhost:8088/v1/forecast \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"time_series\": [[10, 20, 15, 25, 20, 30, 25, 35]],\n    \"horizon\": 5\n  }'\n```\n\n### 健康检查\n\n```bash\ncurl http://localhost:8088/health\n```\n\n返回当前已加载的模型状态。注意：首次启动时所有模型显示为 false 是正常的，模型会在首次请求时加载。\n\n## OpenAI SDK 兼容性\n\n项目提供 OpenAI 兼容的 API，可以使用任何 OpenAI SDK 客户端：\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(base_url=\"http://localhost:8088/v1\", api_key=\"unused\")\n\nresponse = client.chat.completions.create(\n    model=\"qwen\",\n    messages=[{\"role\": \"user\", \"content\": \"你好！\"}],\n    max_tokens=500,\n)\nprint(response.choices[0].message.content)\n```\n\n### 关于 max_tokens 的注意事项\n\nQwen 模型默认使用思维链（Chain-of-Thought）推理，会在回答前进行静默思考。建议将 max_tokens 设置为至少 300-500，否则模型可能在思考中途耗尽预算而返回空响应。\n\n## 部署准备\n\n### 硬件要求\n\n- **GPU**：NVIDIA GPU，至少 20GB 显存（已在 Tesla P40 24GB 上测试）\n- **CPU**：支持 Ivy Bridge 指令集（无 AVX2/FMA/BMI2 要求）\n- **CUDA 驱动**：13.0+\n- **Docker**：需要安装 NVIDIA Container Toolkit（nvidia-docker2）\n\n### 模型下载\n\n模型文件需单独下载（体积过大，不包含在仓库中）：\n\n```bash\nmkdir -p models\n\n# Qwen 3.5 9B (~9.5 GB)\nwget -P models/ https://huggingface.co/Qwen/Qwen3.5-9B-GGUF/resolve/main/Qwen3.5-9B.Q8_0.gguf\n\n# Qwen 3.5 0.8B + 视觉投影 (~0.5 GB + ~0.3 GB)\nwget -P models/ https://huggingface.co/Qwen/Qwen3.5-0.8B-GGUF/resolve/main/Qwen3.5-0.8B-Q5_K_M.gguf\nwget -P models/ https://huggingface.co/Qwen/Qwen3.5-0.8B-GGUF/resolve/main/mmproj-F32.gguf\n\n# Whisper large-v3-turbo (~1.6 GB)\nwget -P models/ https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo-q8_0.bin\n```\n\nTimesFM 会在首次使用时自动下载并缓存到 `models/huggingface/`。\n\n### 构建与启动\n\n```bash\n# 首次构建（约 15-20 分钟，从源码编译 llama.cpp 和 whisper.cpp）\ndocker compose build\n\n# 后台启动\ndocker compose up -d\n```\n\n### 环境配置\n\n创建 `.env` 文件覆盖默认配置：\n\n```bash\n# 模型闲置后自动卸载的等待时间（秒）\nIDLE_TIMEOUT=300\n\n# 模型启动超时时间（秒）\nSTART_TIMEOUT=120\n```\n\n## 技术亮点\n\n### 优化的 llama.cpp 构建\n\n项目使用 TurboQuant 分支的 llama.cpp，支持 TurboQuant KV 缓存量化，在保持质量的同时显著降低显存占用。\n\n### 针对旧硬件优化\n\n构建系统针对 Ivy Bridge CPU 优化（无 AVX2/FMA），使老旧服务器硬件也能高效运行。如需针对不同 GPU，可修改 Dockerfile 中的 `CMAKE_CUDA_ARCHITECTURES`。\n\n### PyTorch 2.4.1 选择\n\nTimesFM 依赖 PyTorch 2.4.1，这是最后一个支持 Pascal 架构（sm_61）的版本，确保 Tesla P40 的兼容性。\n\n## 适用场景\n\n- **边缘 AI 部署**：单服务器运行多种模型，按需加载降低能耗\n- **私有 AI 基础设施**：无需云端 API，完全本地运行\n- **多模态应用**：同时支持文本、语音、图像和时序数据的统一后端\n- **成本敏感环境**：闲置时自动卸载，最大化硬件利用率\n\n## 总结\n\nllm-inference-server 展示了一种实用的多模型部署模式：通过智能的资源管理和统一的路由层，在消费级/企业级 GPU 上实现生产就绪的多模态 AI 服务。对于希望在本地或私有云中部署 LLM、语音识别和时序预测能力的团队，这是一个值得参考的实现方案。
