# Ollama

在 CLORE.AI GPU 上本地运行大型语言模型（LLM）的最简单方法。

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

{% hint style="success" %}
所有示例都可以在通过以下方式租用的 GPU 服务器上运行： [CLORE.AI 市场](https://clore.ai/marketplace).
{% endhint %}

## 服务器要求

| 参数   | 最低      | 推荐       |
| ---- | ------- | -------- |
| 内存   | 8GB     | 16GB+    |
| 显存   | 6GB     | 8GB+     |
| 网络   | 100Mbps | 500Mbps+ |
| 启动时间 | \~30 秒  | -        |

{% hint style="info" %}
Ollama 轻量且适用于大多数 GPU 服务器。对于更大的模型（13B+），请选择具有 16GB+ 内存和 12GB+ 显存的服务器。
{% 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：
# 对与图像相关的响应返回 null
  "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 "Explain quantum computing"
```

### 流行模型

| A100                | 规模      | 模型变体       |
| ------------------- | ------- | ---------- |
| `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      | 谷歌的模型      |

### 1024x1024

```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    # 8 亿参数
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 模式）

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

```bash
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Tell me about Canada."}],
  "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": "List 3 programming languages with their main use cases"}],
    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"
}'

# 批量 embedding（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: {similarity:.4f}")
```

流行的 embedding 模型：

```bash
ollama pull nomic-embed-text      # 137M，速度快，质量良好
ollama pull mxbai-embed-large     # 335M，更高质量
ollama pull all-minilm            # 23M，最快
```

### 并发模型加载

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

```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

# 每个 runner 在单独进程中（更好隔离）
OLLAMA_NUM_PARALLEL=2 ollama serve
```

这在以下场景尤其有用：

* 对不同模型进行 A/B 测试
* 针对不同任务的专用模型（编码 + 聊天）
* 将常用模型保持在显存中以减少加载延迟

## API 使用

### 聊天补全

```bash
# 通过 http_pub（外部访问）：
# 对与图像相关的响应返回 null
  "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": "What is machine learning?"}
    ]
)

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

### 流式传输

```python
stream = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "Write a poem"}],
    stream=True
)

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

### 嵌入

```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": "The meaning of life is",
  "stream": false
}'
```

## 完整 API 参考

所有端点既支持 `http://localhost:11434` （通过 SSH）和 `https://your-http-pub.clorecloud.net` （外部）。

### 模型管理

| 端点             | 方法     | 4s           |
| -------------- | ------ | ------------ |
| `/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"}
```

### 推理端点

| 端点                     | 方法   | 4s                                |
| ---------------------- | ---- | --------------------------------- |
| `端点并使用`                | POST | 文本补全                              |
| `和兼容 OpenAI 的端点不`      | 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 You are a helpful coding assistant."
}'
```

## 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 You are a helpful coding assistant. Always provide code examples.

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 Service
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. **根据显存匹配模型**
   * 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/sec）

| A100                 | 按小时费率 | 速度  | 512x512 | 按日费率 |
| -------------------- | ----- | --- | ------- | ---- |
| 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 月。实际速度可能因服务器配置而异。*

### 首个标记时间（ms）

| A100 | 速度  | 512x512 | 2s  |
| ---- | --- | ------- | --- |
| 3B   | 50  | 35      | 25  |
| 7-8B | 120 | 80      | 60  |
| 13B  | 250 | 150     | 100 |
| 34B  | 600 | 350     | 200 |
| 70B  | -   | 1200    | 500 |

### 上下文长度与显存（Q4）

| A100 | 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 要求

| A100 | Q4 显存 | Q8 显存 |
| ---- | ----- | ----- |
| 3B   | 3GB   | 5GB   |
| 7-8B | 5GB   | 9GB   |
| 13B  | 8GB   | 15GB  |
| 34B  | 20GB  | 38GB  |
| 70B  | 40GB  | 75GB  |

## 下载所有所需的检查点

典型 CLORE.AI 市场价格：

| GPU     | 显存   | 价格/天       | 适合         |
| ------- | ---- | ---------- | ---------- |
| 按小时费率   | 12GB | $0.15–0.30 | 7B 模型      |
| 速度      | 24GB | $0.30–1.00 | 13B-34B 模型 |
| 512x512 | 24GB | $0.50–2.00 | 34B 模型，快速  |
| 2s      | 40GB | $1.50–3.00 | 70B 模型     |

*价格以美元/天计。费率因提供商而异——请查看* [*CLORE.AI 市场*](https://clore.ai/marketplace) *A100 40GB*

## # 使用固定种子以获得一致结果

### 模型无法加载

```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：等待并重试
```

## 使用以下方式支付

* [打开 WebUI](https://docs.clore.ai/guides/guides_v2-zh/yu-yan-mo-xing/open-webui) - 为 Ollama 提供美观的聊天界面
* [vLLM](https://docs.clore.ai/guides/guides_v2-zh/yu-yan-mo-xing/vllm) - 高吞吐量的生产服务
* [DeepSeek-R1](https://docs.clore.ai/guides/guides_v2-zh/yu-yan-mo-xing/deepseek-r1) - 推理模型
* [DeepSeek-V3](https://docs.clore.ai/guides/guides_v2-zh/yu-yan-mo-xing/deepseek-v3) - 最佳通用模型
* [Qwen2.5](https://docs.clore.ai/guides/guides_v2-zh/yu-yan-mo-xing/qwen25) - 多语言替代方案
* [文本生成 WebUI](https://docs.clore.ai/guides/guides_v2-zh/yu-yan-mo-xing/text-generation-webui) - 高级功能


---

# 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.
