什么是 Ollama?
Ollama 是一个可以在本地部署和管理开源大语言模型的框架。它极大地简化了开源大语言模型的安装和配置细节,一经推出就广受好评。目前已在 GitHub 上获得了大量 Star。
不管是著名的 Llama 系列,还是最新的 AI 新贵 Mistral,等等各种开源大语言模型,都可以用 Ollama 实现一键安装并运行。支持的更多模型的列表可以查看 Ollama 官网。
| Model | Parameters | Size | Download |
| --- | --- | --- |
| Llama 2 | 7B | 3.8GB | ollama run llama2 |
| Mistral | 7B | 4.1GB | ollama run mistral |
如何安装 Ollama 框架?
Ollama 支持各个平台:Mac、Windows 和 Linux,也提供了 Docker image。在 Ollama 官网或者 GitHub 可以下载,然后一键安装 Ollama 框架:
- Linux:
curl -fsSL https://ollama.com/install.sh | sh
由于 Ollama 刚支持 Windows 不久,在 Windows 上的相关配置还不够完善,以下将以 Linux 上运行 Ollama 来举例说明。
运行 Ollama 服务
在 Ollama 安装完成后,一般会自动启动 Ollama 服务,而且会自动设置为开机自启动。安装完成后,可以使用如下命令查看是否 Ollama 是否正常启动。如下例子中显示'Active: active (running)'表示 Ollama 已经正常启动。
$ systemctl status ollama
● ollama.service - Ollama Service
Loaded: loaded (/etc/systemd/system/ollama.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/ollama.service.d
└─environment.conf
Active: active (running) since Thu 2024-03-07 09:09:39 HKT; 4 days ago
Main PID: 19975 (ollama)
Tasks: 29 (limit: 69456)
Memory: 1.1G
CPU: 14min 44.702s
CGroup: /system.slice/ollama.service
└─19975 /usr/local/bin/ollama serve
在 Linux 上,如果 Ollama 未启动,可以用如下命令启动 Ollama 服务:ollama serve,或者 sudo systemctl start ollama。
通过分析 Linux 的安装脚本 install.sh,就会看到其中已经将 ollama serve 配置为一个系统服务,所以可以使用 systemctl 来 start / stop ollama 进程。
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=$BINDIR/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"
启动 Ollama 服务后,可以查看当前的 Ollama 版本,以及常用命令。
~$ ollama -v
ollama version is 0.1.20
~$ ollama --help
Large language model runner
Usage:
ollama [flags]
ollama [command]
Available Commands:
serve Start ollama
create Create a model from a Modelfile
show Show information for a model
run Run a model
pull Pull a model from a registry
push Push a model from a registry
list List models
cp Copy a model
rm Remove a model
help Help about any command
Flags:
-h, --help help for any command
-v, --version Show version information
如何下载并运行大语言模型?
至此,已经完成 Ollama 框架的安装,接下来,可以用一条命令在本地运行大语言模型。以著名的 Llama 举例:ollama run llama2。
如果还没有下载过指定的大语言模型,这条命令将会先执行 ollama pull llama2,将大语言模型下载到本地,再在本地运行大语言模型。
下载完成后,运行效果如下:
~$ ollama run llama2
>>> who are you?
I am LLaMA, an AI assistant developed by Meta AI that can understand and respond to human input in a conversational manner. I am trained on a massive dataset of text from the internet and can generate human-like responses to a wide range of topics and questions.
>>> Send a message (/? for help)
REST API
Ollama 还提供了 API 接口,允许通过 HTTP 请求与模型交互。
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt":"Why is the sky blue?",
"stream": false
}'
返回结果如下:
{
"model": "llama2",
"created_at": "2024-02-26T04:35:10.787352404Z",
"response": "The sky appears blue because of a phenomenon called Rayleigh scattering...",
"done": true,
"total_duration": 7001870820,
"load_duration": 4930376,
"prompt_eval_duration": 60907000,
"eval_count": 309,
"eval_duration": 6931593000
}
使用 API 接口,就可以实现更多灵活的功能,比如与 IDE 插件配合,实现本地的编程助手。
高级功能与扩展
创建自定义模型
Ollama 允许用户通过 Modelfile 创建自定义模型。Modelfile 定义了模型的基础参数、模板和系统提示词。
- 创建一个名为
Modelfile 的文件。
- 写入以下内容:
FROM llama2
SYSTEM "You are a helpful coding assistant."
PARAMETER temperature 0.7
- 构建模型:
ollama create my-custom-model -f Modelfile
- 运行自定义模型:
ollama run my-custom-model
Python 集成示例
可以通过 Python 的 requests 库调用 Ollama API,实现自动化交互。
import requests
url = "http://localhost:11434/api/generate"
data = {
"model": "llama2",
"prompt": "Hello, how are you?",
"stream": False
}
response = requests.post(url, json=data)
print(response.json()["response"])
对于流式输出,可以将 stream 设为 True 并逐行读取响应内容。
性能调优
在 Modelfile 或环境变量中可以调整 GPU 层数和线程数,以优化推理速度。
PARAMETER num_gpu 99
PARAMETER num_thread 8
这有助于充分利用本地硬件资源,减少推理延迟。
常见问题排查
如何查看运行的日志?
在 Linux 上运行命令 journalctl -u ollama,即可查看运行日志。
如何配置本地大模型对局域网提供服务?
在 Linux 上创建如下配置文件,并配置环境变量 OLLAMA_HOST 来指定对局域网提供服务的地址,再重启 Ollama 服务即可。
[Service]
Environment=OLLAMA_HOST=0.0.0.0:11434
如此配置后,即可由一台 GPU 服务器为本地局域网提供大语言模型的服务。
本地有多张 GPU,如何用指定的 GPU 来运行 Ollama?
在 Linux 上创建如下配置文件,并配置环境变量 CUDA_VISIBLE_DEVICES 来指定运行 Ollama 的 GPU,再重启 Ollama 服务即可。
[Service]
Environment=CUDA_VISIBLE_DEVICES=1,2
下载的大模型存储在哪个路径?
默认情况下,不同操作系统存储的路径如下:
- macOS:
~/.ollama/models
- Linux:
/usr/share/ollama/.ollama/models
- Windows:
C:\Users\.ollama\models
如何修改大模型存储的路径?
Linux 平台安装 Ollama 时,默认安装时会创建用户 ollama,再将模型文件存储到该用户的目录 /usr/share/ollama/.ollama/models。但由于大模型文件往往特别大,有时需要将大模型文件存储到专门的数据盘,此时就需要修改大模型文件的存储路径。
官方提供的方法是设置环境变量 OLLAMA_MODELS,但我在 Linux 上尝试后,并没有成功。
分析 Linux 版的安装脚本 install.sh 后,我发现是由于其中创建了用户 ollama 和用户组 ollama,然后将大模型存储到了该用户的目录 /usr/share/ollama/.ollama/models,而我的帐户对 ollama 帐户的一些操作并不能生效,即使我再手动将我的帐户添加进 ollama 用户组,也仍然会有一些权限问题,导致对 ollama 帐户的目录操作不生效。
由于新建的 ollama 帐户并没有给我带来额外的便利,最后我用以下步骤来实现修改大模型文件的存储路径:
- 修改安装文件 install.sh,取消其中创建用户 ollama 的步骤。
- 修改安装文件 install.sh,使用我的帐户来启动 ollama 服务。
- 修改安装文件 install.sh,添加如下配置中指定环境变量
OLLAMA_MODELS 指定存储路径,再用此安装文件来安装 ollama。
Environment="OLLAMA_MODELS=/home/paco/lab/LLM/ollama/OLLAMA_MODELS"
或者在安装完成后,创建如下配置文件,并配置环境变量 OLLAMA_MODELS 来指定存储路径,再重启 Ollama 服务。
[Service]
Environment=OLLAMA_MODELS=<path>/OLLAMA_MODELS
端口冲突处理
如果启动 Ollama 时提示端口被占用(通常是 11434),请检查是否有其他进程使用该端口,并使用 lsof -i :11434 查看占用情况,必要时终止进程或修改 OLLAMA_HOST 环境变量更换端口。
总结
Ollama 提供了一个轻量级且高效的方案,让开发者能够在本地快速部署和运行开源大语言模型。通过命令行工具和 REST API,用户可以轻松集成 AI 能力到自己的应用中。无论是进行简单的对话测试,还是构建复杂的 RAG 系统,Ollama 都是理想的本地推理引擎。随着社区的发展,其支持的模型和功能将不断丰富,成为本地 AI 开发的重要基础设施。