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