Ollama 本地部署与运行大模型完全指南
本文详细介绍了 Ollama 在本地机器上部署和运行大型语言模型(LLM)的完整流程,涵盖安装、模型管理、自定义配置、API 集成及性能优化等核心内容。
随着大模型技术的发展,越来越多的企业和个人开始关注数据隐私与离线推理能力。虽然线上 API 提供了便利,但本地部署能确保数据不出域,且无需依赖网络状态。Ollama 作为一个开源项目,以其易用性和高性能成为本地运行 LLM 的首选工具之一。
Ollama 介绍
Ollama 是一个专为在本地机器上便捷部署和运行大型语言模型而设计的开源工具。它让用户无需深入了解复杂的底层技术,就能轻松地加载、运行和交互各种 LLM 模型。
核心特点
- 本地部署:不依赖云端服务,用户可以在自己的设备上运行模型,保护数据隐私。
- 多操作系统支持:无论是 Mac、Linux 还是 Windows,都能方便地安装使用。
- 多模型支持:支持多种流行的 LLM 模型,如 Llama、Falcon、Gemma 等,一键运行。
- 易于使用:提供了直观的命令行界面,操作简单,上手容易。
- 可扩展性:支持自定义配置,用户可以根据自己的硬件环境和模型需求进行优化。
- 开源:代码完全开放,用户可以自由查看、修改和分发。
安装指南
MacOS
苹果电脑安装非常简单,下载 Zip 包解压,运行即可。
https://ollama.com/download/Ollama-darwin.zip
安装运行 Ollama.app 之后,系统任务栏上会有一个应用程序图标,点击可以关闭 Ollama 服务。
Windows
Windows 版本目前处于预览版,官方也提供了安装包,安装过程与其他软件类似。
https://ollama.com/download/OllamaSetup.exe
Linux
Linux 系统直接通过 Shell 脚本执行安装命令:
curl -fsSL https://ollama.com/install.sh | sh
Docker 容器化运行
除了直接安装,还可以通过 Docker 运行。官方提供了镜像 ollama/ollama。
CPU 模式
CPU 模式不需要额外配置驱动,直接运行即可:
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
NVIDIA GPU 模式
若要在容器内使用 Nvidia GPU 进行推理,需要安装 NVIDIA Container Toolkit。
- 安装 NVIDIA GPU 驱动程序及工具包(以 Ubuntu 为例):
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
- 配置容器运行时并重启 Docker 服务:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
- 启动容器时增加
--gpus=all 参数:
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
AMD GPU 模式
如果使用 AMD GPUs,请使用 rocm 版本的镜像:
docker run -d --device /dev/kfd --device /dev/dri -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama:rocm
运行模型
本地运行
安装成功后,运行模型只需一条命令:
ollama run llama3.1
首次运行会自动从网络下载模型(约 5GB),下载完成后即可进入对话模式。
容器运行
在容器内部运行模型与本机操作一致:
docker exec -it ollama ollama run llama3
支持的模型
使用 ollama run <模型名> 来运行模型。以下是常用模型列表:
| 模型 | 参数 | 大小 | 模型名 |
|---|
| Llama3.1 | 8B | 4.7G | llama3.1 |
| Llama3.1 | 405B | 231G | llama3.1:405b |
| GLM4 | 9B | 5.5G | glm4 |
| Qwen2 | 7B | 4.4G | qwen2 |
| Qwen2 | 72B | 41G | qwen2:72b |
| Llama3 | 8B | 4.7G | llama3 |
| Llama3 | 70B | 40G | llama3:70b |
| Phi3 | 3.8B | 2.3G | phi3 |
| Gemma2 | 9B | 5.5G | gemma2 |
| Mistral | 7B | 4.1G | mistral |
完整的模型库可在 Ollama Library 中搜索查看。不同型号模型对内存要求如下:
- 运行
7B 型号模型至少需要 8 GB RAM。
- 运行
13B 型号模型至少需要 16 GB RAM。
- 运行
33B 型号模型至少需要 32 GB RAM。
自定义模型
除了内置模型,Ollama 支持导入自定义模型,主要格式包括 GGUF、PyTorch 和 Safetensors。
从 GGUF 导入
GGUF 是一种二进制格式,旨在快速加载和保存模型。导入步骤如下:
- 创建名为
Modelfile 的文件,包含 FROM 指令指向本地文件路径:
FROM ./vicuna-33b.Q4_0.gguf
- 在 Ollama 中创建模型,指定名称:
ollama create vicuna-33b-q4 -f Modelfile
- 像运行内置模型一样运行新模型:
ollama run vicuna-33b-q4
从 PyTorch 或 Safetensors 导入
如果模型架构支持(如 LlamaForCausalLM, MistralForCausalLM),可直接导入:
FROM /path/to/safetensors/directory
如果不支持,需先使用 llama.cpp 转换为 GGUF 格式。常见转换脚本包括 convert_hf_to_gguf.py 等。
示例:转换 HuggingFace 模型
git clone https://github.com/ggerganov/llama.cpp.git
pip install -r llama.cpp/requirements.txt
python llama.cpp/convert_hf_to_gguf.py vicuna-hf --outfile vicuna-13b-v1.5.gguf --outtype q8_0
定制系统提示
Ollama 允许为每个模型定制系统提示(System Prompt)。以智谱 GLM 为例:
- 确保已下载模型:
ollama pull glm4
- 创建
Modelfile:
FROM glm4
PARAMETER temperature 1
SYSTEM """
你现在是一个修仙世界的修炼导师,来指导人们修炼。每次回答都以:「渺小的人类」作为开始。
"""
- 创建并运行模型:
ollama create glm4xiuxian -f ./Modelfile
ollama run glm4xiuxian
Modelfile 参数详解
PARAMETER temperature:控制生成随机性,越高越具创造性。
PARAMETER top_p:核采样参数,限制词汇选择范围。
PARAMETER repeat_penalty:重复惩罚,防止模型陷入循环。
SYSTEM:定义模型的初始角色和指令。
CLI 命令全解
模型管理
- 创建模型:
ollama create mymodel -f ./Modelfile
- 拉取模型:
ollama pull llama3(若存在则更新)
- 删除模型:
ollama rm llama3(节省磁盘空间)
- 复制模型:
ollama cp llama3 my-model(占用双倍空间)
交互与调试
- 多行输入:使用单引号
''' 包裹多行文本。
- 多模态模型:输入图片路径即可上传,例如
/Users/jmorgan/Desktop/smile.png。
- 非交互式提问:
ollama run glm4xiuxian 今天我要做什么
- 显示信息:
ollama show glm4(仅针对已下载模型)
服务启动
默认端口为 11434。如需同时运行多个实例,可通过环境变量指定端口:
OLLAMA_HOST=127.0.0.1:11435 ollama serve
关键环境变量说明:
OLLAMA_DEBUG:开启调试日志。
OLLAMA_KEEP_ALIVE:模型在内存中保持加载的时间(默认 5 分钟)。
OLLAMA_MAX_LOADED_MODELS:每个 GPU 最大加载模型数。
OLLAMA_NUM_PARALLEL:并行请求的最大数量。
OLLAMA_MODELS:模型存储目录路径。
REST API 介绍
Ollama 启动后自动提供 HTTP API。
生成接口
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt":"Why is the sky blue?"
}'
聊天接口
curl http://localhost:11434/api/chat -d '{
"model": "llama3",
"messages": [
{ "role": "user", "content": "why is the sky blue?" }
]
}'
流式响应
设置 stream: false 可获取非流式结果,默认通常为流式输出。
Python API 介绍
Ollama 提供了 Python 客户端库,便于集成到应用中。
安装依赖
pip install ollama
基础用法
import ollama
response = ollama.chat(model='llama3', messages=[
{'role': 'user', 'content': 'Why is the sky blue?',}
])
print(response['message']['content'])
流式处理
stream = ollama.chat(
model='llama3',
messages=[{'role': 'user', 'content': 'Why is the sky blue?'}],
stream=True,
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
错误处理
try:
ollama.chat(model)
except ollama.ResponseError as e:
print('Error:', e.error)
if e.status_code == 404:
ollama.pull(model)
自定义客户端
from ollama import Client
client = Client(host='http://localhost:11434')
response = client.chat(model='llama3', messages=[
{'role': 'user', 'content': 'Say this is a test',}
])
日志与调试
日志文件通常位于 ~/.ollama/logs/server.log。可通过以下命令查看:
cat ~/.ollama/logs/server.log
如果是 Docker 运行,直接查看容器日志:
docker logs <container-name>
上下文窗口调整
默认上下文窗口为 2048 tokens。可通过 /set parameter num_ctx 4096 或在 API 中指定 options.num_ctx 进行调整。
GPU 使用情况检查
使用 ps 命令查看模型加载情况。Processor 列显示:
100% GPU:模型完全加载至显存。
100% CPU:模型完全加载至系统内存。
48%/52% CPU/GPU:模型部分加载至显存和内存。
Ollama 作为服务使用
默认情况下,Ollama 仅监听本地回环地址。若要允许外部访问:
Linux/Server
OLLAMA_HOST=0.0.0.0:11434 ollama serve
macOS
使用 launchctl 设置环境变量:
launchctl setenv OLLAMA_HOST "0.0.0.0"
随后重启 Ollama 应用。
并发与性能优化
服务器设置可用于调整并发处理能力:
OLLAMA_MAX_LOADED_MODELS:默认值为 3 * GPU 数量或 3(CPU 推理)。
OLLAMA_NUM_PARALLEL:默认根据可用内存自动选择 4 或 1。
OLLAMA_MAX_QUEUE:排队请求最大数量,默认 512。
处理逻辑:
- 若有足够内存,可同时加载多个模型。
- 对于同一模型,若有足够内存,可并发处理请求。
- 若内存不足,请求将排队等待,直至有模型空闲释放空间。
OpenAI 兼容性
Ollama 提供实验性的 OpenAI API 兼容性,便于迁移现有应用。
Python 客户端
from openai import OpenAI
client = OpenAI(
base_url='http://localhost:11434/v1/',
api_key='ollama',
)
chat_completion = client.chat.completions.create(
messages=[{'role': 'user', 'content': 'Say this is a test'}],
model='llama3',
)
JavaScript 客户端
import OpenAI from 'openai'
const openai = new OpenAI({
baseURL: 'http://localhost:11434/v1/',
apiKey: 'ollama',
})
const chatCompletion = await openai.chat.completions.create({
messages: [{ role: 'user', content: 'Say this is a test' }],
model: 'llama3',
})
模型名称映射
若程序强制依赖特定模型名(如 gpt-3.5-turbo),可复制模型进行重命名:
ollama cp llama3 gpt-3.5-turbo
这样原有程序无需修改即可调用本地模型。
模型存储
不同操作系统的默认存储位置:
- MacOS:
~/.ollama/models
- Linux:
/usr/share/ollama/.ollama/models
- Windows:
C:\Users\%username%\.ollama\models
可通过 OLLAMA_MODELS 环境变量指定其他目录。
总结
Ollama 极大地降低了本地运行大模型的门槛,支持多种硬件环境及开发语言。通过合理的参数配置和环境变量管理,可以实现高效、稳定的私有化部署方案。结合 OpenAI 兼容接口,开发者可以快速构建基于本地大模型的应用生态。