# LLM 服务：Ollama vs vLLM vs TGI

在 CLORE.AI 上为您的需求选择合适的 LLM 服务解决方案。

{% hint style="success" %}
所有选项均可在 [CLORE.AI 市场](https://clore.ai/marketplace).
{% endhint %}

{% hint style="info" %}
**2025 更新：** SGLang 已成为顶级框架，常常 **在吞吐量和首次令牌时间（TTFT）基准测试中优于 vLLM** 在吞吐量和 TTFT 基准测试中。vLLM v0.7 和 SGLang v0.4 均推荐用于生产工作负载。
{% endhint %}

## 快速决策指南

| 模型变体                   | 最佳选择                  | 原因           |
| ---------------------- | --------------------- | ------------ |
| 快速测试与聊天                | **Ollama**            | 最简单的设置，最快的启动 |
| 生产 API（最大吞吐量）          | **SGLang** 或 **vLLM** | 2025 年最高吞吐量  |
| 推理模型（DeepSeek-R1）      | **SGLang**            | 对推理链的最佳支持    |
| HuggingFace 集成         | **TGI**               | 原生 HF 支持     |
| 本地开发                   | **Ollama**            | 处处可用         |
| 高并发                    | **SGLang** 或 **vLLM** | 连续批处理        |
| 多模态（TTS、STT、Embedding） | **LocalAI**           | 一体化解决方案      |
| 流式应用                   | **vLLM** 或 **SGLang** | 两者都很优秀       |

## 启动时间比较

| 解决方案    | 典型启动时间  | 注意事项      |
| ------- | ------- | --------- |
| Ollama  | 30-60 秒 | 最快，轻量级    |
| SGLang  | 3-8 分钟  | 从 HF 下载模型 |
| vLLM    | 5-15 分钟 | 从 HF 下载模型 |
| TGI     | 3-10 分钟 | 从 HF 下载模型 |
| LocalAI | 5-10 分钟 | 预加载多个模型   |

{% hint style="info" %}
启动期间出现 HTTP 502 错误是正常的——服务仍在初始化中。
{% endhint %}

***

## 概览比较

| 特性                                            | Ollama       | vLLM    | SGLang  | TGI          | LocalAI       |
| --------------------------------------------- | ------------ | ------- | ------- | ------------ | ------------- |
| **易于设置**                                      | ⭐⭐⭐⭐⭐        | ⭐⭐⭐     | ⭐⭐⭐     | ⭐⭐⭐          | ⭐⭐⭐⭐          |
| **background = Image.open("studio\_bg.jpg")** | ⭐⭐⭐          | ⭐⭐⭐⭐⭐   | ⭐⭐⭐⭐⭐   | ⭐⭐⭐⭐         | ⭐⭐⭐           |
| **模型支持**                                      | ⭐⭐⭐⭐         | ⭐⭐⭐⭐⭐   | ⭐⭐⭐⭐⭐   | ⭐⭐⭐⭐         | ⭐⭐⭐⭐          |
| **API 兼容性**                                   | 自定义 + OpenAI | OpenAI  | OpenAI  | 自定义 + OpenAI | OpenAI        |
| **多 GPU**                                     | 有限           | 优秀      | 优秀      | 良好           | 有限            |
| **内存效率**                                      | 良好           | 优秀      | 优秀      | 非常好          | 良好            |
| **多模态**                                       | 仅视觉          | 仅视觉     | 仅视觉     | 否            | TTS、STT、Embed |
| **启动时间**                                      | 30 秒         | 5-15 分钟 | 3-8 分钟  | 3-10 分钟      | 5-10 分钟       |
| **推理模型**                                      | 有限           | 良好      | 优秀      | 良好           | 有限            |
| **最适合**                                       | 开发           | 生产环境    | 生产 + 推理 | HF 生态系统      | 多模态           |

***

## 2025 基准：DeepSeek-R1-32B

### TTFT、TPOT 与吞吐量（A100 80GB，batch=32，input=512，output=512）

| 框架              | TTFT（毫秒） | TPOT（毫秒/标记） | 吞吐量（标记/秒） | 注意事项         |
| --------------- | -------- | ----------- | --------- | ------------ |
| **SGLang v0.4** | **180**  | **14**      | **2,850** | 2025 年总体最佳   |
| **vLLM v0.7**   | 240      | 17          | 2,400     | 优秀，接近 SGLang |
| llama.cpp       | 420      | 28          | 1,100     | CPU+GPU，量化   |
| Ollama          | 510      | 35          | 820       | 易用性优先        |

> **TTFT** = 首个输出令牌时间（延迟）。 **TPOT** = 每输出令牌时间。对两者而言数值越低越好。

### 吞吐量比较（RTX 4090，Llama 3.1 8B，10 并发用户）

| 框架          | 每秒标记数 | 并发用户数 | 注意事项           |
| ----------- | ----- | ----- | -------------- |
| SGLang v0.4 | 920   | 20-30 | Radix 注意力缓存    |
| vLLM v0.7   | 870   | 20-30 | PagedAttention |
| TGI         | 550   | 10-20 |                |
| Ollama      | 160\* | —     | 默认按顺序处理        |

\*Ollama 默认按顺序提供请求

***

## SGLang

### 概览

SGLang（Structured Generation Language）是由加州大学伯克利分校和 LMSYS 的研究人员开发的高吞吐量 LLM 服务框架。在 2025 年的基准测试中，它经常匹配或超越 vLLM——尤其是针对像 DeepSeek-R1 这样的推理模型。

### 优点

* ✅ 在 2025 年基准测试中通常具有最快的 TTFT 和吞吐量
* ✅ Radix 注意力以实现高效的 KV 缓存重用
* ✅ 对推理模型（DeepSeek-R1、QwQ）有出色支持
* ✅ 与 OpenAI 兼容的 API
* ✅ 连续批处理和前缀缓存
* ✅ 预测性解码支持
* ✅ 多 GPU 张量并行

### 缺点

* ❌ 生态系统较新，社区资源少于 vLLM
* ❌ 比 Ollama 设置更复杂
* ❌ 仅支持 Linux

### 快速开始

```bash
pip install sglang[all]

# 提供模型服务
python -m sglang.launch_server \
    --model-path meta-llama/Llama-3.1-8B-Instruct \
    --host 0.0.0.0 \
    --port 8000
```

### 在 SGLang 中使用 DeepSeek-R1

```bash
python -m sglang.launch_server \
    --model-path deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
    --host 0.0.0.0 \
    --port 8000 \
    --tp 2 \
    --reasoning-parser deepseek-r1
```

### API 使用

```python
from openai import OpenAI

client = OpenAI(base_url='http://localhost:8000/v1', api_key='dummy')

response = client.chat.completions.create(
    model='meta-llama/Llama-3.1-8B-Instruct',
    messages=[
        {'role': 'user', 'content': '解释量子纠缠'}
    ],
    temperature=0.7,
    max_tokens=512
)
print(response.choices[0].message.content)
```

### 多 GPU

```bash
# 2 个 GPU（张量并行）
python -m sglang.launch_server \
    --model-path meta-llama/Llama-3.1-70B-Instruct \
    --host 0.0.0.0 \
    --port 8000 \
    --tp 2
```

### 最适合

* 🎯 面向最大吞吐量的生产 API
* 🎯 推理模型（DeepSeek-R1、QwQ、o1 风格）
* 🎯 低延迟（TTFT）应用
* 🎯 前缀密集型工作负载（高 KV 缓存重用）

***

## Ollama

### 概览

Ollama 是在本地运行 LLM 的最简单方式。非常适合开发、测试和个人使用。

### 优点

* ✅ 一条命令即可安装并运行
* ✅ 内置模型库
* ✅ 出色的命令行体验
* ✅ 支持 Mac、Linux、Windows
* ✅ 自动量化
* ✅ 资源开销低

### 缺点

* ❌ 吞吐量低于其他替代方案
* ❌ 限制的多 GPU 支持
* ❌ 不那么适合生产环境
* ❌ 优化选项较少

### 快速开始

```bash
# 安装
curl -fsSL https://ollama.com/install.sh | sh

# 运行任意模型
ollama run llama3.2
ollama run mistral
ollama run codellama

# 提供 API 服务
ollama serve
```

### API 使用

```python
import requests

# 生成
response = requests.post('http://localhost:11434/api/generate', json={
    'model': 'llama3.2',
    'prompt': '解释量子计算',
    'stream': False
})
print(response.json()['response'])

# 聊天
response = requests.post('http://localhost:11434/api/chat', json={
    'model': 'llama3.2',
    'messages': [
        {'role': 'user', 'content': 'Hello!'}
    ]
})
```

### OpenAI 兼容性

```python
from openai import OpenAI

client = OpenAI(base_url='http://localhost:11434/v1', api_key='ollama')

response = client.chat.completions.create(
    model='llama3.2',
    messages=[{'role': 'user', 'content': '你好！'}]
)
```

### background = Image.open("studio\_bg.jpg")

| A100          | GPU   | 每秒标记数 |
| ------------- | ----- | ----- |
| Llama 3.2 3B  | 按小时费率 | 45-55 |
| Llama 3.1 8B  | 速度    | 35-45 |
| Llama 3.1 70B | 按日费率  | 15-20 |

### 最适合

* 🎯 快速原型设计
* 🎯 个人 AI 助手
* 🎯 学习与试验
* 🎯 简单部署

***

## vLLM

### 概览

vLLM 是一款经考验的高吞吐量 LLM 推理引擎，适用于生产环境。v0.7（2025）带来性能改进、更好的量化支持以及新的预测性解码选项。

### 优点

* ✅ 最高吞吐量（连续批处理 + PagedAttention）
* ✅ PagedAttention 实现高效内存使用
* ✅ 出色的多 GPU 支持
* ✅ 与 OpenAI 兼容的 API
* ✅ 适合生产、社区庞大
* ✅ 支持多种量化格式（AWQ、GPTQ、FP8）
* ✅ v0.7 中的预测性解码

### 缺点

* ❌ 设置更复杂
* ❌ 启动时内存开销较高
* ❌ 仅限 Linux（无原生 Windows/Mac 支持）
* ❌ 需要更多配置

### 快速开始

```bash
pip install vllm

# 提供模型服务（vLLM v0.7）
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3.1-8B-Instruct \
    --host 0.0.0.0 \
    --port 8000
```

### Docker 部署

```bash
docker run --gpus all -p 8000:8000 \
    vllm/vllm-openai:v0.7.0 \
    --model meta-llama/Llama-3.1-8B-Instruct
```

### API 使用

```python
from openai import OpenAI

client = OpenAI(base_url='http://localhost:8000/v1', api_key='dummy')

# 聊天补全
response = client.chat.completions.create(
    model='meta-llama/Llama-3.1-8B-Instruct',
    messages=[
        {'role': 'system', 'content': '你很有帮助。'},
        {'role': 'user', 'content': '写一首关于编程的俳句'}
    ],
    temperature=0.7,
    max_tokens=100
)

# 流式传输
stream = client.chat.completions.create(
    model='meta-llama/Llama-3.1-8B-Instruct',
    messages=[{'role': 'user', 'content': '给我讲个故事'}],
    stream=True
)
for chunk in stream:
    print(chunk.choices[0].delta.content, end='')
```

### 多 GPU

```bash
# 2 块 GPU
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3.1-70B-Instruct \
    --tensor-parallel-size 2

# 4 块 GPU
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3.1-70B-Instruct \
    --tensor-parallel-size 4
```

### background = Image.open("studio\_bg.jpg")

| A100          | GPU     | 每秒标记数   | 并发用户数 |
| ------------- | ------- | ------- | ----- |
| Llama 3.1 8B  | 速度      | 80-100  | 10-20 |
| Llama 3.1 8B  | 512x512 | 120-150 | 20-30 |
| Llama 3.1 70B | 按日费率    | 25-35   | 5-10  |
| Llama 3.1 70B | 2x A100 | 50-70   | 15-25 |

### 最适合

* 🎯 面向大型社区的生产 API
* 🎯 高流量应用
* 🎯 多用户聊天服务
* 🎯 需要最大吞吐量的场景

***

## Text Generation Inference (TGI)

### 概览

HuggingFace 的生产服务器，与 HF 生态系统紧密集成。

### 优点

* ✅ 原生 HuggingFace 集成
* ✅ 适合 HF 模型
* ✅ 良好的多 GPU 支持
* ✅ 内置安全功能
* ✅ Prometheus 指标支持
* ✅ 文档完善

### 缺点

* ❌ 吞吐量略低于 vLLM/SGLang
* ❌ 更高的资源消耗
* ❌ 配置复杂
* ❌ 启动时间更长

### 快速开始

```bash
# Docker（推荐）
docker run --gpus all -p 8080:80 \
    ghcr.io/huggingface/text-generation-inference:latest \
    --model-id meta-llama/Llama-3.1-8B-Instruct

# 对于受限模型使用 HF 令牌
docker run --gpus all -p 8080:80 \
    -e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN \
    ghcr.io/huggingface/text-generation-inference:latest \
    --model-id meta-llama/Llama-3.1-8B-Instruct
```

### background = Image.open("studio\_bg.jpg")

| A100          | GPU     | 每秒标记数  | 并发用户数 |
| ------------- | ------- | ------ | ----- |
| Llama 3.1 8B  | 速度      | 60-80  | 8-15  |
| Llama 3.1 8B  | 512x512 | 90-120 | 15-25 |
| Llama 3.1 70B | 按日费率    | 20-30  | 3-8   |

### 最适合

* 🎯 HuggingFace 模型用户
* 🎯 研究环境
* 🎯 需要内置安全功能的场景
* 🎯 需要 Prometheus 监控的场景

***

## LocalAI

### 概览

LocalAI 是一个与 OpenAI 兼容的 API，支持多种模态：LLM、TTS、STT、Embedding 和图像生成。

### 优点

* ✅ 多模态支持（LLM、TTS、STT、Embedding）
* ✅ 可直接替换 OpenAI
* ✅ 提供预构建模型
* ✅ 支持 GGUF 模型
* ✅ 支持重排序（Reranking）
* ✅ Swagger UI 文档

### 缺点

* ❌ 启动时间更长（5-10 分钟）
* ❌ LLM 吞吐量低于 vLLM/SGLang
* ❌ 图像生成可能存在 CUDA 问题
* ❌ 对于纯 LLM 使用更复杂

### 快速开始

```bash
docker run --gpus all -p 8080:8080 localai/localai:master-aio-gpu-nvidia-cuda-12
```

### API 使用

```python
from openai import OpenAI

client = OpenAI(base_url='http://localhost:8080/v1', api_key='dummy')

# 聊天
response = client.chat.completions.create(
    model='gpt-4',
    messages=[{'role': 'user', 'content': '你好！'}]
)

# TTS
audio = client.audio.speech.create(model='tts-1', input='Hello world', voice='alloy')

# STT
transcript = client.audio.transcriptions.create(model='whisper-1', file=open('audio.mp3', 'rb'))

# Embeddings
embeddings = client.embeddings.create(model='text-embedding-ada-002', input='Hello world')
```

### 最适合

* 🎯 需要多种模态（TTS、STT、LLM）
* 🎯 希望与 OpenAI API 兼容
* 🎯 运行 GGUF 模型
* 🎯 文档重排序工作流

***

## 性能比较（2025）

### 吞吐量（标记/秒）— 单用户

| A100                     | Ollama | vLLM v0.7 | SGLang v0.4 | TGI |
| ------------------------ | ------ | --------- | ----------- | --- |
| Llama 3.1 8B（RTX 3090）   | 40     | 90        | 100         | 70  |
| Llama 3.1 8B（RTX 4090）   | 65     | 140       | 160         | 110 |
| Llama 3.1 70B（A100 40GB） | 18     | 30        | 35          | 25  |

### 吞吐量 — 多用户（10 并发）

| A100                     | Ollama | vLLM v0.7 | SGLang v0.4 | TGI |
| ------------------------ | ------ | --------- | ----------- | --- |
| Llama 3.1 8B（RTX 4090）   | 150\*  | 800       | 920         | 500 |
| Llama 3.1 70B（A100 40GB） | 50\*   | 200       | 240         | 150 |

\*Ollama 默认按顺序提供服务

### 内存使用

| A100              | Ollama | vLLM v0.7 | SGLang v0.4 | TGI  |
| ----------------- | ------ | --------- | ----------- | ---- |
| Llama 3.1 8B      | 5GB    | 6GB       | 6GB         | 7GB  |
| Llama 3.1 70B（Q4） | 38GB   | 40GB      | 39GB        | 42GB |

### 首次输出令牌时间（TTFT）— DeepSeek-R1-32B

| 框架          | TTFT（A100 80GB） | TPOT（毫秒/标记） |
| ----------- | --------------- | ----------- |
| SGLang v0.4 | **180ms**       | **14ms**    |
| vLLM v0.7   | 240ms           | 17ms        |
| llama.cpp   | 420ms           | 28ms        |
| Ollama      | 510ms           | 35ms        |

***

## 功能比较

| 特性         | Ollama | vLLM v0.7    | SGLang v0.4  | TGI              | LocalAI    |
| ---------- | ------ | ------------ | ------------ | ---------------- | ---------- |
| OpenAI API | ✅      | ✅            | ✅            | ✅                | ✅          |
| 流式传输       | ✅      | ✅            | ✅            | ✅                | ✅          |
| 批处理        | 基础     | 连续           | 连续           | 动态               | 基础         |
| 多 GPU      | 有限     | 优秀           | 优秀           | 良好               | 有限         |
| 量化         | GGUF   | AWQ、GPTQ、FP8 | AWQ、GPTQ、FP8 | bitsandbytes、AWQ | GGUF       |
| LoRA       | ✅      | ✅            | ✅            | ✅                | ✅          |
| 预测性解码      | ❌      | ✅            | ✅            | ✅                | ❌          |
| 前缀缓存       | ❌      | ✅            | ✅（Radix）     | ✅                | ❌          |
| 推理模型       | 有限     | 良好           | 优秀           | 良好               | 有限         |
| 指标         | 基础     | Prometheus   | Prometheus   | Prometheus       | Prometheus |
| 函数调用       | ✅      | ✅            | ✅            | ✅                | ✅          |
| 视觉模型       | ✅      | ✅            | ✅            | ✅                | 有限         |
| TTS        | ❌      | ❌            | ❌            | ❌                | ✅          |
| 语音识别       | ❌      | ❌            | ❌            | ❌                | ✅          |
| 嵌入         | ✅      | 有限           | 有限           | 有限               | ✅          |

***

## 何时使用哪种工具

### 在以下情况下使用 Ollama：

* 您想在 5 分钟内上手
* 您正在进行原型或学习
* 您需要个人 AI 助手
* 您使用的是 Mac 或 Windows
* 简洁性比速度更重要

### 在以下情况下使用 SGLang：

* 您需要 **绝对最低的延迟** （TTFT）
* 您正在提供 **推理模型** （DeepSeek-R1、QwQ、o1 风格）
* 您的工作负载具有大量的 **前缀共享** （RAG、系统提示）
* 您需要在 2025 基准中名列前茅的吞吐量
* 您想要前沿优化（Radix 注意力）

### 在以下情况下使用 vLLM：

* 您需要在一个 **成熟、支持良好** 的框架上实现最大吞吐量
* 您正在为大规模用户提供服务
* 您需要具有大社区的生产可靠性
* 您想要可直接替换的 OpenAI 接口
* 您有多 GPU 配置
* 您需要广泛的模型格式支持（AWQ、GPTQ、FP8）

### 在以下情况下使用 TGI：

* 您处于 HuggingFace 生态系统中
* 您需要内置的安全功能
* 您想要详尽的 Prometheus 指标
* 您需要直接提供 HF 模型
* 您处于研究环境中

### 在以下情况下使用 LocalAI：

* 您需要与 LLM 一起的 TTS 和 STT
* 您想要用于 RAG 的 Embeddings
* 您需要文档重排序功能
* 您想要一体化的单一解决方案
* 您正在构建语音应用

***

## 迁移指南

### 从 Ollama 到 SGLang

```python
# Ollama
client = OpenAI(base_url='http://localhost:11434/v1', api_key='ollama')
response = client.chat.completions.create(model='llama3.2', ...)

# SGLang - 只需更改 URL 和模型名称
client = OpenAI(base_url='http://localhost:8000/v1', api_key='dummy')
response = client.chat.completions.create(model='meta-llama/Llama-3.2-3B-Instruct', ...)
```

### 从 vLLM 到 SGLang

两者都支持 OpenAI API —— 只需更改端点 URL。API 完全兼容。

```bash
# vLLM
python -m vllm.entrypoints.openai.api_server --model ... --port 8000

# SGLang（等价）
python -m sglang.launch_server --model-path ... --port 8000
```

***

## 按 GPU 的推荐

| GPU           | 单用户         | 多用户         | 推理模型   |
| ------------- | ----------- | ----------- | ------ |
| RTX 3060 12GB | Ollama      | Ollama      | Ollama |
| RTX 3090 24GB | Ollama      | vLLM        | SGLang |
| RTX 4090 24GB | SGLang/vLLM | SGLang/vLLM | SGLang |
| A100 40GB+    | SGLang      | SGLang      | SGLang |

***

## 使用以下方式支付

* [Ollama 指南](/guides/guides_v2-zh/yu-yan-mo-xing/ollama.md) - 最易设置
* [vLLM 指南](/guides/guides_v2-zh/yu-yan-mo-xing/vllm.md) - 最高吞吐量
* [LocalAI 指南](/guides/guides_v2-zh/yu-yan-mo-xing/localai-openai-compatible.md) - 多模态支持
* [DeepSeek-R1 指南](/guides/guides_v2-zh/yu-yan-mo-xing/deepseek-r1.md) - 推理模型
* [多 GPU 设置](/guides/guides_v2-zh/gao-ji/multi-gpu-setup.md) - 扩展到更大模型
* [API 集成](/guides/guides_v2-zh/gao-ji/api-integration.md) - 构建应用程序


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-zh/dui-bi/llm-serving-comparison.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
