Skip to content

Ollama

本地运行大语言模型的工具

官方网站

简介

Ollama 是一个本地大语言模型运行框架,提供简单易用的命令行界面,让用户能够在本地设备上运行各种开源 LLM 模型。它支持多种操作系统,包括 macOS、Linux 和 Windows。

主要特性

  • 本地部署:模型完全在本地运行,无需网络连接
  • 多模型支持:支持 Llama、Qwen、Mistral、DeepSeek 等多种开源模型
  • 简单易用:通过命令行即可完成模型下载和运行
  • API 兼容:提供 OpenAI 兼容的 API 接口
  • 资源优化:支持 GPU 加速,智能管理显存

安装

macOS

bash
brew install ollama

Linux

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

Windows

访问 https://ollama.com/download 下载安装程序

基本用法

运行模型

bash
# 运行默认模型(llama3.2)
ollama run llama3.2

# 运行其他模型
ollama run qwen2.5
ollama run deepseek-r1
ollama run mistral
ollama run llama3.1
ollama run gemma2
ollama run phi4

模型管理

bash
# 列出本地已下载的模型
ollama list

# 删除模型
ollama rm llama3.2

# 显示模型信息
ollama show llama3.2

# 从 Ollama 库拉取模型(运行时会自动拉取)
ollama pull llama3.2
ollama pull qwen2.5:7b
ollama pull deepseek-r1:8b

自定义模型

创建 Modelfile

dockerfile
FROM llama3.2

# 设置系统提示词
SYSTEM """你是一个专业的 Python 程序员,擅长编写简洁、高效的代码。
你总是会:
1. 提供完整的代码示例
2. 解释代码的工作原理
3. 给出最佳实践建议
4. 指出潜在的改进点"""

# 设置温度参数(控制创造性)
PARAMETER temperature 0.7

# 设置上下文窗口大小
PARAMETER num_ctx 8192

构建自定义模型

bash
ollama create my-python-assistant -f Modelfile
ollama run my-python-assistant

API 调用

REST API

Ollama 提供与 OpenAI 兼容的 API 接口。

python
import requests

response = requests.post(
    "http://localhost:11434/api/chat",
    json={
        "model": "llama3.2",
        "messages": [
            {
                "role": "user",
                "content": "用 Python 写一个快速排序算法"
            }
        ],
        "stream": False
    }
)

print(response.json()["message"]["content"])

生成接口

python
import requests

response = requests.post(
    "http://localhost:11434/api/generate",
    json={
        "model": "llama3.2",
        "prompt": "解释什么是装饰器,并给出一个示例",
        "stream": False
    }
)

print(response.json()["response"])

在应用中使用

python
import ollama

# 方式一:直接调用
response = ollama.chat(model='llama3.2', messages=[
    {'role': 'user', 'content': '什么是 Python 的生成器?'}
])
print(response['message']['content'])

# 方式二:流式输出
stream = ollama.chat(model='llama3.2', messages=[
    {'role': 'user', 'content': '用 Python 实现一个简单的协程'}
], stream=True)

for chunk in stream:
    print(chunk['message']['content'], end='', flush=True)

# 方式三:使用系统提示词
response = ollama.chat(model='llama3.2', messages=[
    {'role': 'system', 'content': '你是一个数据科学家,擅长使用 Python 进行数据分析'},
    {'role': 'user', 'content': '如何使用 Pandas 读取 CSV 文件?'}
])

常用模型推荐

通用对话

模型大小特点
llama3.23.8GB综合能力强,支持多语言
qwen2.54.7GB中文优化,效果优秀
mistral4.1GB速度快,效率高
gemma25.5GBGoogle 出品,质量稳定

代码能力

模型大小特点
deepseek-coder4.7GB专注于代码生成
qwen2.5-coder4.7GB阿里代码模型
starcoder27.1GB微软代码模型

长文本处理

模型大小特点
qwen2.5:32b18GB超长上下文
deepseek-r167GB推理能力强

配置文件

环境变量

bash
# 设置模型存储路径
export OLLAMA_MODELS=/path/to/models

# 设置 GPU 相关
export CUDA_VISIBLE_DEVICES=0

# 设置日志级别
export OLLAMA_LOG_LEVEL=debug

启动参数

bash
# 指定端口
ollama serve --port 11435

# 设置并发数
ollama serve --num-parallel 4

# 禁用 GPU
ollama serve --no-cuda

常见问题

1. 模型下载慢

bash
# 使用镜像源(如果可用)
export OLLAMA_BASE_URL=http://mirror.example.com

2. GPU 未被使用

bash
# 检查 GPU 支持
ollama ps

# 确认 CUDA 安装
nvidia-smi

# 重新启动服务
sudo systemctl restart ollama

3. 内存不足

bash
# 使用量化模型(更小的模型版本)
ollama run llama3.2:1b    # 1.3GB
ollama run qwen2.5:0.5b   # 394MB

4. API 连接失败

bash
# 确保服务已启动
ollama serve

# 检查端口是否正确
netstat -tlnp | grep 11434

与其他工具集成

在 LangChain 中使用

python
from langchain_ollama import ChatOllama

llm = ChatOllama(
    model="llama3.2",
    temperature=0,
    base_url="http://localhost:11434"
)

response = llm.invoke("Python 什么是列表推导式?")
print(response.content)

在 Docker 中运行

dockerfile
FROM ollama/ollama:latest

# 运行特定模型
CMD ["ollama", "serve"]
bash
docker run -d -p 11434:11434 -v ollama:/root/.ollama ollama/ollama

性能优化

1. 批处理请求

python
import ollama

prompts = [
    "Python 的装饰器是什么?",
    "解释 Python 的 GIL",
    "什么是闭包?"
]

# 批量处理
for prompt in prompts:
    response = ollama.generate(model='llama3.2', prompt=prompt)
    print(f"Q: {prompt}\nA: {response['response']}\n")

2. 缓存响应

python
from functools import lru_cache

@lru_cache(maxsize=128)
def cached_inference(prompt: str) -> str:
    response = ollama.generate(model='llama3.2', prompt=prompt)
    return response['response']

3. 使用 GPU

确保安装了 CUDA 版本的 PyTorch,Ollama 会自动检测并使用 GPU。

python
import ollama

# Ollama 自动使用 GPU
response = ollama.chat(model='llama3.2', messages=[
    {'role': 'user', 'content': '高性能 Python 编程技巧'}
])