# Ollama

在 CLORE.AI GPU 上本地运行 LLM 的最简单方式。

{% hint style="info" %}
**当前版本：v0.6+** — 本指南涵盖 Ollama v0.6 及更高版本。主要新功能包括结构化输出（JSON Schema 强制）、兼容 OpenAI 的 embeddings 端点（`/api/embed`），以及并发模型加载（无需交换即可同时运行多个模型）。详情请参见 [v0.6+ 新增内容](#new-in-v06) 。
{% endhint %}

{% hint style="success" %}
所有示例都可以在通过 [CLORE.AI Marketplace](https://clore.ai/marketplace).
{% endhint %}

## 服务器要求

| 参数   | 最低      | 推荐       |
| ---- | ------- | -------- |
| RAM  | 8GB     | 16GB+    |
| VRAM | 6GB     | 8GB+     |
| 网络   | 100Mbps | 500Mbps+ |
| 启动时间 | 约 30 秒  | -        |

{% hint style="info" %}
Ollama 很轻量，适用于大多数 GPU 服务器。对于更大的模型（13B+），请选择配备 16GB+ RAM 和 12GB+ VRAM 的服务器。
{% endhint %}

## 为什么选择 Ollama？

* **一条命令即可设置** - 无需 Python，无需依赖项
* **模型库** - 使用以下命令下载模型： `ollama pull`
* **兼容 OpenAI 的 API** - 可直接替换使用
* **GPU 加速** - 自动检测 CUDA
* **多模型** - 同时运行多个模型（v0.6+）

## 在 CLORE.AI 上快速部署

**Docker 镜像：**

```
ollama/ollama
```

**端口：**

```
22/tcp
11434/http
```

**命令：**

```bash
ollama serve
```

### 验证是否正常工作

部署后，找到你的 `http_pub` URL 于 **我的订单** 并测试：

```bash
# 请替换为你实际的 http_pub URL
curl https://your-http-pub.clorecloud.net/

# 预期响应："Ollama is running"
```

{% hint style="warning" %}
如果你收到 HTTP 502，请等待 30-60 秒——服务仍在启动中。
{% endhint %}

## 访问你的服务

在 CLORE.AI 上部署后，可通过以下方式访问你的 Ollama 实例： `http_pub` URL：

```bash
# 在“我的订单”中找到你的 http_pub，然后：
curl https://your-http-pub.clorecloud.net/api/tags

# 对于 API 调用，请使用你的 http_pub URL：
curl https://your-http-pub.clorecloud.net/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Hello!"}],
  "stream": false
}'
```

{% hint style="info" %}
所有 `localhost:11434` 以下示例在通过 SSH 连接时可正常工作。对于外部访问，请替换为你的 `https://your-http-pub.clorecloud.net/` URL。
{% endhint %}

## 安装

### 使用 Docker（推荐）

```bash
docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
```

### 手动安装

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

这一条命令会安装最新版 Ollama，设置 systemd 服务，并自动配置 GPU 检测。适用于 Ubuntu、Debian、Fedora 以及大多数现代 Linux 发行版。

## 运行模型

### 拉取并运行

```bash
# 拉取模型
ollama pull llama3.2

# 运行交互式聊天
ollama run llama3.2

# 使用提示词运行
ollama run llama3.2 "解释什么是量子计算"
```

### 热门模型

| 模型                  | 大小      | 使用场景       |
| ------------------- | ------- | ---------- |
| `llama3.2`          | 3B      | 快速、通用      |
| `llama3.1`          | 8B      | 质量更好       |
| `llama3.1:70b`      | 70B     | 最佳质量       |
| `mistral`           | 7B      | 快速，质量不错    |
| `mixtral`           | 47B     | MoE，高质量    |
| `codellama`         | 7-34B   | 代码生成       |
| `deepseek-coder-v2` | 16B     | 最适合代码      |
| `deepseek-r1`       | 7B-671B | 推理模型       |
| `deepseek-r1:32b`   | 32B     | 平衡推理       |
| `qwen2.5`           | 7B      | 多语言        |
| `qwen2.5:72b`       | 72B     | 最佳 Qwen 质量 |
| `phi4`              | 14B     | 微软最新模型     |
| `gemma2`            | 9B      | 谷歌的模型      |

### 模型变体

```bash
# 量化变体
ollama pull llama3.1:8b-instruct-q4_K_M   # 4 位（更小、更快）
ollama pull llama3.1:8b-instruct-q8_0     # 8 位（质量更好）
ollama pull llama3.1:8b-instruct-fp16     # 全精度

# 尺寸变体
ollama pull llama3.1:8b    # 80 亿参数
ollama pull llama3.1:70b   # 700 亿参数

# 新模型（v0.6+ 时代）
ollama pull deepseek-r1:7b      # 推理，低成本
ollama pull deepseek-r1:14b     # 推理，高效率
ollama pull deepseek-r1:32b     # 推理，平衡
ollama pull deepseek-r1:70b     # 推理，高质量
ollama pull qwen2.5:72b         # 最大的 Qwen，顶级质量
ollama pull phi4                # Microsoft Phi-4 14B
```

## v0.6+ 新增内容

Ollama v0.6 为生产工作负载引入了多个重要功能：

### 结构化输出（JSON Schema）

强制模型响应匹配特定的 JSON Schema。适用于需要可靠、可解析输出的应用：

```bash
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "告诉我关于加拿大的信息。"}],
  "format": {
    "type": "object",
    "properties": {
      "name": {"type": "string"},
      "capital": {"type": "string"},
      "population": {"type": "integer"},
      "languages": {
        "type": "array",
        "items": {"type": "string"}
      }
    },
    "required": ["name", "capital", "population", "languages"]
  },
  "stream": false
}'
```

使用结构化输出的 Python 示例：

```python
from openai import OpenAI
import json

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

response = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "列出 3 种编程语言及其主要用途"}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "languages",
            "schema": {
                "type": "object",
                "properties": {
                    "languages": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {"type": "string"},
                                "use_case": {"type": "string"},
                                "popularity_rank": {"type": "integer"}
                            }
                        }
                    }
                }
            }
        }
    }
)

data = json.loads(response.choices[0].message.content)
print(data)
```

### 兼容 OpenAI 的 Embeddings 端点（`/api/embed`)

v0.6+ 新增： `/api/embed` 端点与 OpenAI 完全兼容，并支持批量输入：

```bash
# 单文本 embedding
curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": "Hello world"
}'

# 批量 embeddings（v0.6 新增）
curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": ["First document", "Second document", "Third document"]
}'
```

OpenAI 客户端可直接与 `/v1/embeddings`:

```python
from openai import OpenAI
import numpy as np

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

# 先拉取 embedding 模型：ollama pull nomic-embed-text
response = client.embeddings.create(
    model="nomic-embed-text",
    input=["Hello world", "Goodbye world"]
)

emb1 = np.array(response.data[0].embedding)
emb2 = np.array(response.data[1].embedding)

# 余弦相似度
similarity = np.dot(emb1, emb2) / (np.linalg.norm(emb1) * np.linalg.norm(emb2))
print(f"相似度：{similarity:.4f}")
```

热门 embedding 模型：

```bash
ollama pull nomic-embed-text      # 1.37 亿，快速，质量不错
ollama pull mxbai-embed-large     # 3.35 亿，质量更高
ollama pull all-minilm            # 2300 万，最快
```

### 并发模型加载

在 v0.6 之前，Ollama 会卸载一个模型以加载另一个模型。v0.6+ 支持同时运行多个模型，仅受可用 VRAM 限制：

```bash
# 同时加载两个模型
ollama run llama3.2 &
ollama run deepseek-r1:7b &

# 查看正在运行的内容
curl http://localhost:11434/api/ps
```

配置并发：

```bash
# 允许同时加载最多 4 个模型
OLLAMA_MAX_LOADED_MODELS=4 ollama serve

# 每个运行器在独立进程中运行（隔离更好）
OLLAMA_NUM_PARALLEL=2 ollama serve
```

这在以下场景中特别有用：

* 对不同模型进行 A/B 测试
* 用于不同任务的专用模型（编码 + 聊天）
* 将常用模型保持在 VRAM 中以保持热启动

## API 使用

### 聊天完成

```bash
# 通过 http_pub（外部访问）：
curl https://your-http-pub.clorecloud.net/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Hello!"}],
  "stream": false
}'

# 通过 SSH 隧道（localhost）：
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Hello!"}],
  "stream": false
}'
```

{% hint style="info" %}
添加 `"stream": false` 以一次性获得完整响应，而不是流式输出。
{% endhint %}

### 兼容 OpenAI 的端点

```python
from openai import OpenAI

# 对于外部访问，请使用你的 http_pub URL：
client = OpenAI(
    base_url="https://your-http-pub.clorecloud.net/v1",
    api_key="ollama"  # 任意字符串都可以
)

# 或通过 SSH 隧道：
# client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

response = client.chat.completions.create(
    model="llama3.2",
    messages=[
        {"role": "user", "content": "什么是机器学习？"}
    ]
)

print(response.choices[0].message.content)
```

### 流式输出

```python
stream = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "写一首诗"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
```

### Embeddings

```bash
# 旧版端点（仍可使用）
curl http://localhost:11434/api/embeddings -d '{
  "model": "nomic-embed-text",
  "prompt": "Hello world"
}'

# 新的 v0.6+ 端点（支持批量，兼容 OpenAI）
curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": ["Hello world", "Another text"]
}'
```

### 文本生成（非聊天）

```bash
curl https://your-http-pub.clorecloud.net/api/generate -d '{
  "model": "llama3.2",
  "prompt": "人生的意义是",
  "stream": false
}'
```

## 完整 API 参考

所有端点都可同时通过以下方式工作： `http://localhost:11434` （通过 SSH）以及 `https://your-http-pub.clorecloud.net` （外部）。

### 模型管理

| 端点             | 方法     | 描述           |
| -------------- | ------ | ------------ |
| `/api/tags`    | GET    | 列出所有已下载模型    |
| `/api/show`    | POST   | 获取模型详情       |
| `/api/pull`    | POST   | 下载模型         |
| `/api/delete`  | DELETE | 删除模型         |
| `/api/ps`      | GET    | 列出当前正在运行的模型  |
| `/api/version` | GET    | 获取 Ollama 版本 |

#### 列出模型

```bash
curl https://your-http-pub.clorecloud.net/api/tags
```

响应：

```json
{
  "models": [
    {"name": "llama3.2:latest", "size": 2019393189, "digest": "...", "modified_at": "..."}
  ]
}
```

#### 显示模型详情

```bash
curl https://your-http-pub.clorecloud.net/api/show -d '{"name": "llama3.2"}'
```

#### 通过 API 拉取模型

```bash
curl https://your-http-pub.clorecloud.net/api/pull -d '{
  "name": "mistral:7b",
  "stream": false
}'
```

响应：

```json
{"status": "success"}
```

{% hint style="warning" %}
大型模型下载可能需要几分钟。对于超大型模型（30GB+），可考虑使用 SSH 和 CLI： `ollama pull model-name`
{% endhint %}

#### 删除模型

```bash
curl -X DELETE https://your-http-pub.clorecloud.net/api/delete -d '{"name": "mistral:7b"}'
```

#### 列出正在运行的模型

```bash
curl https://your-http-pub.clorecloud.net/api/ps
```

响应：

```json
{
  "models": [
    {"name": "llama3.2:latest", "size": 2019393189, "expires_at": "2025-01-25T12:00:00Z"}
  ]
}
```

#### 获取版本

```bash
curl https://your-http-pub.clorecloud.net/api/version
```

响应：

```json
{"version": "0.6.8"}
```

### 推理端点

| 端点                     | 方法   | 描述                                |
| ---------------------- | ---- | --------------------------------- |
| `/api/generate`        | POST | 文本补全                              |
| `/api/chat`            | POST | 聊天补全                              |
| `/api/embeddings`      | POST | 生成 embeddings（旧版）                 |
| `/api/embed`           | POST | 生成 embeddings v0.6+（批量，兼容 OpenAI） |
| `/v1/chat/completions` | POST | 兼容 OpenAI 的聊天                     |
| `/v1/embeddings`       | POST | 兼容 OpenAI 的 embeddings            |

### 自定义模型创建

通过 API 创建带有特定系统提示词的自定义模型：

```bash
curl https://your-http-pub.clorecloud.net/api/create -d '{
  "name": "my-assistant",
  "modelfile": "FROM llama3.2\nSYSTEM 你是一个乐于助人的编码助手。"
}'
```

## GPU 配置

### 检查 GPU 使用情况

```bash
# 在容器或服务器中
nvidia-smi

# Ollama 会在日志中显示 GPU
ollama run llama3.2 --verbose
```

### 多 GPU

Ollama 会自动使用可用的 GPU。若要指定 GPU：

```bash
CUDA_VISIBLE_DEVICES=0 ollama serve
```

### 内存管理

```bash
# 设置 GPU 内存限制
OLLAMA_GPU_MEMORY=8GiB ollama serve

# 保持模型加载
OLLAMA_KEEP_ALIVE=24h ollama serve

# 允许并发模型（v0.6+）
OLLAMA_MAX_LOADED_MODELS=3 ollama serve
```

## 自定义模型（Modelfile）

使用系统提示词创建自定义模型：

```dockerfile
# Modelfile
FROM llama3.2

SYSTEM 你是一个乐于助人的编码助手。始终提供代码示例。

PARAMETER temperature 0.7
PARAMETER top_p 0.9
```

```bash
ollama create coding-assistant -f Modelfile
ollama run coding-assistant
```

## 作为服务运行

### Systemd

```ini
# /etc/systemd/system/ollama.service
[Unit]
Description=Ollama 服务
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ollama serve
Restart=always
Environment="OLLAMA_HOST=0.0.0.0"

[Install]
WantedBy=multi-user.target
```

```bash
systemctl enable ollama
systemctl start ollama
```

## 性能提示

1. **使用合适的量化**
   * Q4\_K\_M 追求速度
   * Q8\_0 追求质量
   * fp16 追求最高质量
2. **让模型匹配 VRAM**
   * 8GB：7B 模型（Q4）
   * 16GB：13B 模型或 7B（Q8）
   * 24GB：34B 模型（Q4）
   * 48GB+：70B 模型
3. **保持模型加载**

   ```bash
   OLLAMA_KEEP_ALIVE=1h ollama serve
   ```
4. **快速 SSD 可提升性能**
   * 模型加载和 KV 缓存都受益于快速存储
   * 配备 NVMe SSD 的服务器可获得 2-3 倍更好的性能

## 基准测试

### 生成速度（tokens/秒）

| 模型                   | RTX 3060 | RTX 3090 | RTX 4090 | A100 40GB |
| -------------------- | -------- | -------- | -------- | --------- |
| Llama 3.2 3B (Q4)    | 120      | 160      | 200      | 220       |
| Llama 3.1 8B (Q4)    | 60       | 100      | 130      | 150       |
| Llama 3.1 8B (Q8)    | 45       | 80       | 110      | 130       |
| Mistral 7B (Q4)      | 70       | 110      | 140      | 160       |
| Mixtral 8x7B (Q4)    | -        | 35       | 55       | 75        |
| Llama 3.1 70B (Q4)   | -        | -        | 18       | 35        |
| DeepSeek-R1 7B (Q4)  | 65       | 105      | 135      | 155       |
| DeepSeek-R1 32B (Q4) | -        | -        | 22       | 42        |
| Qwen2.5 72B (Q4)     | -        | -        | 15       | 30        |
| Phi-4 14B (Q4)       | -        | 50       | 75       | 90        |

*基准测试更新于 2026 年 1 月。实际速度可能因服务器配置而异。*

### 首个 token 时间（毫秒）

| 模型   | RTX 3090 | RTX 4090 | A100 |
| ---- | -------- | -------- | ---- |
| 3B   | 50       | 35       | 25   |
| 7-8B | 120      | 80       | 60   |
| 13B  | 250      | 150      | 100  |
| 34B  | 600      | 350      | 200  |
| 70B  | -        | 1200     | 500  |

### 上下文长度 vs VRAM（Q4）

| 模型  | 2K 上下文 | 4K 上下文 | 8K 上下文 | 16K 上下文 |
| --- | ------ | ------ | ------ | ------- |
| 7B  | 5GB    | 6GB    | 8GB    | 12GB    |
| 13B | 8GB    | 10GB   | 14GB   | 22GB    |
| 34B | 20GB   | 24GB   | 32GB   | 48GB    |
| 70B | 40GB   | 48GB   | 64GB   | 96GB    |

## GPU 要求

| 模型   | Q4 VRAM | Q8 VRAM |
| ---- | ------- | ------- |
| 3B   | 3GB     | 5GB     |
| 7-8B | 5GB     | 9GB     |
| 13B  | 8GB     | 15GB    |
| 34B  | 20GB    | 38GB    |
| 70B  | 40GB    | 75GB    |

## 成本估算

CLORE.AI 市场典型费率：

| GPU                                                                                                | VRAM | 价格/天       | 适合用途       |
| -------------------------------------------------------------------------------------------------- | ---- | ---------- | ---------- |
| [RTX 3090](https://clore.ai/rent-3090.html?utm_source=docs\&utm_medium=guide\&utm_campaign=ollama) | 24GB | $0.30–1.00 | 13B-34B 模型 |
| [RTX 4090](https://clore.ai/rent-4090.html?utm_source=docs\&utm_medium=guide\&utm_campaign=ollama) | 24GB | $0.50–2.00 | 34B 模型，快速  |
| RTX 4070                                                                                           | 12GB | $0.20–0.50 | 7B 模型      |
| A100 80GB                                                                                          | 80GB | $1.50–3.00 | 70B 模型     |

*价格为美元/天。费率因提供商而异 — 查看* [*CLORE.AI Marketplace*](https://clore.ai/marketplace) *以获取当前费率。*

## 故障排查

### 模型无法加载

```bash
# 检查可用内存
nvidia-smi

# 尝试更小的量化
ollama pull llama3.1:8b-q4_0
```

### 生成缓慢

```bash
# 检查是否使用了 GPU
ollama run llama3.2 --verbose

# 确保 CUDA 可用
nvidia-smi
```

### 连接被拒绝

```bash
# 确保服务器正在运行
ollama serve

# 检查是否绑定到所有接口
OLLAMA_HOST=0.0.0.0 ollama serve
```

### http\_pub URL 上出现 HTTP 502

这意味着服务仍在启动。等待 30-60 秒后重试：

```bash
# 检查服务是否就绪
curl https://your-http-pub.clorecloud.net/

# 预期："Ollama is running"
# 如果是 502：等待并重试
```

## 下一步

* [Open WebUI](/guides/guides_v2-zh/yu-yan-mo-xing/open-webui.md) - Ollama 的美观聊天界面
* [vLLM](/guides/guides_v2-zh/yu-yan-mo-xing/vllm.md) - 高吞吐量生产服务
* [DeepSeek-R1](/guides/guides_v2-zh/yu-yan-mo-xing/deepseek-r1.md) - 推理模型
* [DeepSeek-V3](/guides/guides_v2-zh/yu-yan-mo-xing/deepseek-v3.md) - 最佳通用模型
* [Qwen2.5](/guides/guides_v2-zh/yu-yan-mo-xing/qwen25.md) - 多语言替代方案
* [Text Generation WebUI](/guides/guides_v2-zh/yu-yan-mo-xing/text-generation-webui.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/yu-yan-mo-xing/ollama.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.
