首页 / 文章

实战型大语言模型服务:Ollama、vLLM与TGI

将模型文件转换为LLM API的服务层:用于本地运行的Ollama,用于GPU的vLLM和Hugging Face TGI,以及普通transformers所不具备的功能。

发布者:REACTAPP.TOP阅读约 5 分钟1118 词

来源: Serving LLMs, Hands-On — Ollama, vLLM & TGI

服务引擎:“直接调用模型”背后的层次

你之前一直在调用模型——通常是通过 Ollama。本指南介绍的是推理服务器:它负责加载模型权重、管理 GPU 内存、对任务进行批处理,并传输令牌,从而使多个客户端能够通过同一个 API 进行请求。你会经常听到的三个名称是:Ollama、vLLM 和 TGI(文本生成推理)。

Ollama 的实验在笔记本电脑的 CPU 上就能正常运行。而 vLLM 和 TGI 需要 GPU——如果没有的话,可以使用 Colab 或 Kaggle。请将此视为一个实践指南:按照步骤操作并完成练习。

为何单纯的 transformers 不能作为服务器

加载模型并调用.generate()方法仅适用于单次缓慢的请求。在高负载情况下,该方式会失效:无法实现连续批处理,内存管理能力薄弱,多用户流式处理也很不便。服务引擎的存在正是为了将“模型文件”转化为“API”。

Ollama — 以本地优先

安装、拉取、运行,然后调用HTTP API即可:

ollama pull llama3.2
ollama serve            # usually already running; serves on http://localhost:11434
from openai import OpenAI   # pip install openai

client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")  # key is ignored locally

resp = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "Explain KV cache in one sentence."}],
)
print(resp.choices[0].message.content)

无需云密钥即可利用它学习提示词并构建应用。但当需要大规模调度时,就要了解它的局限性。

vLLM — 适合批处理的GPU服务

在GPU运行环境中:

pip install vllm
vllm serve meta-llama/Llama-3.1-8B-Instruct       # OpenAI-compatible server on :8000

其核心优势在于兼容OpenAI的接口以及连续批处理功能。需注意监控GPU内存使用情况与最大上下文长度限制。

TGI — Hugging Face的服务框架

docker run --runtime nvidia --gpus all \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  -p 8000:8000 --ipc=host \
  vllm/vllm-openai:latest \
  --model meta-llama/Llama-3.1-8B-Instruct

TGI专注于通过流式处理和追踪功能来实现HF模型的生产级服务。可根据自身模型需求,对比其与vLLM在延迟和操作复杂度方面的表现。

并列思维模型

client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy")   # ← base_url changed
resp = client.chat.completions.create(
    model="meta-llama/Llama-3.1-8B-Instruct",                           # ← model changed
    messages=[{"role": "user", "content": "Explain KV cache in one sentence."}],
)
print(resp.choices[0].message.content)
  • Ollama:分布式部署与本地迭代
  • vLLM:NVIDIA环境下并发时的tokens/秒处理速度
  • TGI:以HF模型为中心的生产环境服务

轮到你了

docker run --gpus all --shm-size 1g -p 8080:80 \
  -v ~/.cache/huggingface:/data \
  ghcr.io/huggingface/text-generation-inference:latest \
  --model-id meta-llama/Llama-3.1-8B-Instruct

用相同的提示词测试每台服务器,记录TTFT时间与tokens/秒的处理速度,然后判断哪种引擎适合你的下一个项目——笔记本演示、内部GPU设备,还是多租户API。

让部署流程尽可能简单:通过compose工具搭建,添加健康检查功能,并设置一个统一的位置来更换模型。正是这种简单性让内部工具能够在实际值班安排中持续使用。

让部署流程尽可能简单:通过compose工具搭建,添加健康检查功能,并设置一个统一的位置来更换模型。正是这种简单性让内部工具能够在实际值班安排中持续使用。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班安排时依然正常运行。

让部署过程尽可能简单:使用 Compose 进行构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班调度时依然正常运行。

让部署过程尽可能简单:使用 Compose 进行构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班调度时依然正常运行。

让部署过程尽可能简单:使用 Compose 进行构建,加入健康检查功能,并提供一个统一的位置来切换模型。正是这种简单性让内部工具能够在面对真实的值班调度时依然正常运行。