LLM 推理与调度实操

Ollama 是一款开源工具,支持本地运行多种 LLM,并提供统一的 REST API。vLLM 是高吞吐、内存高效的推理引擎,FastAPI 则以类型提示和高性能著称,适合构建 RESTful API。由于 Mac M4 不支持外接 GPU,Ollama 和 vLLM 均在 CPU 上运行,Orbstack 提供单节点 Kubernetes 开发环境。


技术选型说明

本节介绍各核心组件的技术选型及其作用。

  • Ollama(本地模型管理,Ollama): Ollama 是一款开源工具,能够在本地机器上下载、管理并运行多种开源 LLM。它简化了模型格式转换和依赖管理(如 ollama run llama3.2 可下载并启动 LLaMA 3 模型),支持 GPU 和 CPU 加速。Ollama 提供命令行和 REST API(如 /api/generate/api/chat),便于集成到其他应用。
  • vLLM(推理调度引擎,vLLM): vLLM 是伯克利开发的高吞吐率 LLM 推理引擎,专为批量推理和多用户场景优化。支持多种硬件平台(包括 Intel/AMD CPU),可在无 GPU 环境下运行。vLLM 兼容 OpenAI API,支持 FP32/FP16 数据类型,模型需提前转换为支持的精度。
  • FastAPI(接口框架,FastAPI): FastAPI 是现代、快速的 Python Web 框架,适合构建 RESTful API。基于类型提示,性能优异,支持自动生成交互文档(Swagger/OpenAPI)。

三者结合,既兼顾无 GPU 兼容性,也保证高效推理和开发便捷性。


架构图

下方为本地 LLM 服务的架构示意图,展示各组件间的交互关系。

【iframe defaul_iframe_type】https://assets.jimmysong.io/images/book/ai-handbook/playbook/llm-reference/5f1c0485e479e3d45c031df3a0fedd2b.svg

图 1: 本地 LLM 服务架构示意

  • FastAPI 接口: 接收用户 HTTP 请求(如 POST /chat),并调用后端推理服务。
  • vLLM 推理引擎: 负责调度推理任务,兼容 OpenAI API。
  • Ollama 本地模型: 运行指定 LLM 模型,通过 REST API 实现推理调用。

本地开发与测试流程

本节详细介绍本地开发与测试的具体步骤。

  1. 安装 Ollama 并加载模型
  1. 首先需在 macOS 上安装 Ollama,可通过 Homebrew 或官网下载:
brew install ollama
  1. 安装后,使用如下命令拉取并启动模型:
ollama run llama3.2
  1. 启动后,执行 ollama serve 开启 REST API 服务(默认端口 11434)。
  1. 安装并运行 vLLM
  1. 在 Python 环境中安装 vLLM:
pip install vllm
  1. 启动推理服务器示例:
vllm serve Qwen/Qwen3-8B --device cpu
  1. 注意根据 Mac M4 资源选择合适模型,并确保模型为 FP32/FP16 类型。
  1. 实现 FastAPI 应用
  1. 编写 FastAPI 应用,提供如 POST /chat 接口。下方代码示例展示如何通过 HTTP 调用 Ollama 的 API:
from fastapi import FastAPI, Body
import requests

app = FastAPI()

@app.post("/chat")
async def chat(messages: list = Body(...)):
    response = requests.post(
        "http://localhost:11434/api/chat",
        json={"model": "llama3.2", "messages": messages}
    )
    return response.json()
  1. 通过上述接口即可实现本地推理。
  1. 接口测试
  1. 启动 FastAPI 应用后,可用 curl 进行接口测试。以下为常用测试命令:
    • 调用 Ollama 接口:
    curl http://localhost:11434/api/chat -d '{"model":"llama3.2","messages":[{"role":"user","content":"你好"}]}'
    • 调用 FastAPI 接口:
    curl -X POST http://localhost:8000/chat 
         -H "Content-Type: application/json" 
         -d '{"messages":[{"role":"user","content":"Hello"}]}'
    • 调用 vLLM 的 OpenAI 接口:
curl http://localhost:8000/v1/completions 
     -H "Content-Type: application/json" 
     -d '{
          "model": "Qwen/Qwen3-8B",
          "prompt": "Explain AI",
          "max_tokens": 100
      }'
  1. 通过上述命令可验证各部分服务是否正常。

Kubernetes 部署流程

本节介绍如何将本地 LLM 服务部署到 Kubernetes 环境。

  1. 准备 Helm Chart 或 YAML
  1. 推荐使用 Helm Chart 管理部署清单。目录结构示例:
chart/
  Chart.yaml
  values.yaml
  templates/
    deployment.yaml
    service.yaml
  1. 在 Deployment 中通过 volumeMountsvolumes 挂载模型目录,或将模型打包进镜像。
  1. 启动 OrbStack 本地 K8s
  1. 在 Mac 上使用 OrbStack 启动单节点 Kubernetes:
orb start k8s
  1. OrbStack 内置 kubectl,可直接管理集群。
  1. 部署服务
  1. 使用 Helm 或 kubectl 部署应用:
helm install llm-service ./chart
kubectl apply -f deployment.yaml
  1. 部署后,Kubernetes 会为服务分配 ClusterIP 或 NodePort,OrbStack 支持直接访问 NodePort 服务。
  1. 日志和调试
  1. 部署完成后,可用如下命令查看状态和日志:
kubectl get pods
kubectl get svc
kubectl logs <pod-name>
  1. 如模型加载失败,可进入 Pod 内部检查模型文件及类型兼容性(vLLM 需 FP32/FP16)。

部署验证与常见问题排查

本节总结常见问题及排查方法,帮助快速定位和解决部署过程中的障碍。

  • 端口访问问题: 确认服务类型配置正确,OrbStack 的 K8s 可通过 localhost 访问 NodePort/LoadBalancer 服务。若无法访问,检查 OrbStack 设置及 Kubernetes Ingress/Service 配置。
  • 模型加载失败: 若 vLLM 报数据类型不支持,需将模型转换为 FP16 或使用 Ollama 运行。Ollama 对内存有要求,7B 需 8GB,13B 需 16GB,33B 需约 32GB。内存不足时可选用更小模型或开启量化(如 INT8)。
  • 资源占用优化: 无 GPU 环境下性能有限,可减少 max_tokens 或使用更小模型。确保 vLLM 和 Ollama 设置合理线程数,避免阻塞。
  • 调试日志: 利用 kubectl logs 查看容器输出,定位错误。FastAPI 应用日志可辅助排查请求问题。

总结

通过 Ollama、vLLM 与 FastAPI 的组合,即使在无 GPU 的本地环境下,也能高效搭建 LLM 问答服务。Ollama 简化模型管理,vLLM 提供高吞吐推理能力,FastAPI 以低开发成本暴露标准接口。该方案适合本地开发调试,也为线上部署提供一致性保障。对于希望在无 GPU 环境下探索 LLM 的开发者,这是一条清晰可行的实践路径。

参考文献

技术落地

本地开发环境搭建

2026-1-11 14:44:54

技术落地

PyTorch 入门与性能分析

2026-1-11 14:44:56

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索