Appearance
Ollama
本地运行大语言模型的工具
官方网站
简介
Ollama 是一个本地大语言模型运行框架,提供简单易用的命令行界面,让用户能够在本地设备上运行各种开源 LLM 模型。它支持多种操作系统,包括 macOS、Linux 和 Windows。
主要特性
- 本地部署:模型完全在本地运行,无需网络连接
- 多模型支持:支持 Llama、Qwen、Mistral、DeepSeek 等多种开源模型
- 简单易用:通过命令行即可完成模型下载和运行
- API 兼容:提供 OpenAI 兼容的 API 接口
- 资源优化:支持 GPU 加速,智能管理显存
安装
macOS
bash
brew install ollamaLinux
bash
curl -fsSL https://ollama.ai/install.sh | shWindows
访问 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-assistantAPI 调用
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.2 | 3.8GB | 综合能力强,支持多语言 |
| qwen2.5 | 4.7GB | 中文优化,效果优秀 |
| mistral | 4.1GB | 速度快,效率高 |
| gemma2 | 5.5GB | Google 出品,质量稳定 |
代码能力
| 模型 | 大小 | 特点 |
|---|---|---|
| deepseek-coder | 4.7GB | 专注于代码生成 |
| qwen2.5-coder | 4.7GB | 阿里代码模型 |
| starcoder2 | 7.1GB | 微软代码模型 |
长文本处理
| 模型 | 大小 | 特点 |
|---|---|---|
| qwen2.5:32b | 18GB | 超长上下文 |
| deepseek-r1 | 67GB | 推理能力强 |
配置文件
环境变量
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.com2. GPU 未被使用
bash
# 检查 GPU 支持
ollama ps
# 确认 CUDA 安装
nvidia-smi
# 重新启动服务
sudo systemctl restart ollama3. 内存不足
bash
# 使用量化模型(更小的模型版本)
ollama run llama3.2:1b # 1.3GB
ollama run qwen2.5:0.5b # 394MB4. 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 编程技巧'}
])