ollama使用详解
1. 概述
官网:Ollama
GITHUB:
ollama/ollama: Get up and running with Llama 2, Mistral, Gemma, and other large language models. (github.com)
open-webui(ollama webui)
open-webui/open-webui: User-friendly WebUI for LLMs (Formerly Ollama WebUI) (github.com)
ollama支持的模型库:
library (ollama.com)
Ollama是一个开源的大型语言模型服务,提供了类似OpenAI的API接口和聊天界面,可以非常方便地部署最新版本的GPT模型并通过接口使用。支持热加载模型文件,无需重新启动即可切换不同的模型。
Ollama的优势:提供类似OpenAI的简单内容生成接口,极易上手使用,类似ChatGPT的的聊天界面,无需开发直接与模型聊天,支持热切换模型,灵活多变。
Ollama可以让你很好的运行当前流行的各种大模型,并与各种其他平台相结合,对外提供大模型服务,比如 ollama + oneapi,ollama + lobe-chat,ollama + gpustack 等。
ollama可以很好的支持 CPU 和 GPU 两种运行方式。
最好的参考文档及FAQ:
ollama/docs at main · ollama/ollama (github.com)
faq.md 中有包含所有环境变量的说明。
2. 部署实施
系统环境:ubuntu22.04 64bit (本文试验环境)
2.1 下载
Download Ollama on Linux
curl -fsSL https://ollama.com/install.sh | sh
通过输出日志,可以看到下载完毕后,自动安装,并创建了systemd服务。
>>> Installing ollama to /usr/local/bin...
[sudo] password for ubuntu:
>>> Creating ollama user...
>>> Adding ollama user to render group...
>>> Adding ollama user to video group...
>>> Adding current user to ollama group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...
Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service.
>>> NVIDIA GPU installed.
可以看到创建了服务,路径:/etc/systemd/system/ollama.service,后面根据需要,可以编辑。
版本查询:
ollama --version
# 看到版本输出:ollama version is 0.1.30
安装成功!接下来便可以用 pull 命令从在线模型库下载模型来玩了。
2.2 模型测试
在 library (ollama.com) 中查询 qwen,可以看到 Qwen已经在模型库中:
Qwen 1.5 is a series of large language models by Alibaba Cloud spanning from 0.5B to 72B parameters
选择一个模型下载并运行:
ollama pull qwen:7b
# 运行
ollama run qwen:7b
Ollama 采取了与 Docker 组织镜像相似的方案,使用模型名加上标签的形式( model:tag
)来确定具体的模型版本,不加标签时默认为 latest
,通常对应 7B 参数量 4bit 量化版。而如果要运行 13B 版本,就可以使用 13b
标签。
2.3 ollama服务
默认端口为 11434,可以通过http://ip:port 进行查看。
需要对外发布,则需要修改 OLLAMA_HOST 设置。
参考:ollama/docs/faq.md at main · ollama/ollama (github.com) 中
直接编辑 ollama.service文件
切换到root权限在,利用 vi /etc/systemd/system/ollama.service 打开编辑。参考如下:
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/home/ubuntu/.local/bin:/home/ubuntu/miniconda3/bin:/home/ubuntu/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="CUDA_VISIBLE_DEVICES=0,1,2,3"
Environment="OLLAMA_HOST=0.0.0.0:11434"
[Install]
WantedBy=default.target
默认ollama是采用CPU运算,如果要使用GPU,则需要配置 Environment="CUDA_VISIBLE_DEVICES=0,1,2,3" 根据实际情况分配即可。
修改完后,reload and restart:
systemctl daemon-reload
systemctl restart ollama
2.4 让大模型一直驻留在内存
默认情况,ollama默认5分钟,会把model unload,但下一次载入时,会消耗更多的时间。
The keep_alive
parameter can be set to:
- a duration string (such as "10m" or "24h")
- a number in seconds (such as 3600)
- any negative number which will keep the model loaded in memory (e.g. -1 or "-1m")
- '0' which will unload the model immediately after generating a response
For example, to preload a model and leave it in memory use:
curl http://localhost:11434/api/generate -d '{"model": "llama2", "keep_alive": -1}'
To unload the model and free up memory use:
curl http://localhost:11434/api/generate -d '{"model": "llama2", "keep_alive": 0}'
直接在 ollama.service 中添加设置 OLLAMA_KEEP_ALIVE=-1 即可。
但现在有一个问题,这种方法同时只能一个模型驻留在内存中。
2.5 单模型多请求和多模型多请求
可以设置环境变量:
OLLAMA_NUM_PARALLEL
OLLAMA_MAX_LOADED_MODELS
3. 通过docker安装与运行
各种指令参考:
# 外部端口:内部端口
docker run -d -p 11434:11434 ollama/ollama
# 外部访问
本地:http://localhost:11434
# 务必要添加 --restart always 参数
# 无GPU
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama --restart always ollama/ollama
# 有GPU
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama --restart always ollama/ollama
docker run -d --gpus=all -v ollama:/root/.ollama -e OLLAMA_ORIGINS="*" -p 11434:11434 --name ollama --restart always ollama/ollama
docker run -d --gpus=all -v ollama:/root/.ollama -e OLLAMA_NUM_PARALLEL=2 -e OLLAMA_MAX_LOADED_MODELS=2 -e OLLAMA_ORIGINS="*" -p 11434:11434 --name ollama --restart always ollama/ollama
# 进入容器指令,ollama为容器名称:
docker exec -it ollama /bin/bash
# 运行模型,需要先进入容器内,然后运行
ollama run qwen2.5:0.5b # 用于测试
# 然后在外部通过链接访问测试
可以通过 -e 参数设置环境变量,-v 参数挂载卷。
-e OLLAMA_NUM_PARALLEL=2
-e OLLAMA_MAX_LOADED_MODELS=2
# 因浏览器安全限制,需要为 Ollama 进行跨域配置后方可正常使用。比如 lobe-chat中,就需要配套此参数。
-e OLLAMA_ORIGINS="*"
# 具体可以参见 docs/faq.md 文件
4. 常用指令
# 帮助
ollama -h
# Create a model
ollama create mymodel -f ./Modelfile
# Pull a model
ollama pull llama2
# Remove a model
ollama rm llama2
# Copy a model
# # 很多模型下载后,包含了很长的路径信息,不方便处理,可以通过cp指令,拷贝一份,然后重新简洁命名。
ollama cp sdfxxxxx/llama2 my-llama2
# List models
ollama list
# Run a model
ollama run llama2
sudo systemctl stop ollama # 停止服务
sudo systemctl start ollama # 启动服务
# 监听http服务,指定GPU
export OLLAMA_HOST="0.0.0.0:11434"
export CUDA_VISIBLE_DEVICES="0"
ollama serve # 启动 如果以服务的方式已运行,则此处运行时会提示端口已占用
ollama show --modelfile xxxx # 可以查看模型信息
指令参考:
ollama/cmd/cmd.go at main · ollama/ollama (github.com)
环境变量:
OLLAMA_HOST The host:port to bind to (default "127.0.0.1:11434")
OLLAMA_ORIGINS A comma separated list of allowed origins.
OLLAMA_MODELS The path to the models directory (default is "~/.ollama/models")
OLLAMA_KEEP_ALIVE The duration that models stay loaded in memory (default is "5m")
OLLAMA_DEBUG Set to 1 to enable additional debug logging
查看日志:利用 journalctl 处理
# -e 直接跳转到页的最后
# -r 时间倒序查看
# -n 10 最新的10条
# -f 实时查看
journalctl -e -u ollama -f -r
# 具体详情,可以查询 journalctl 说明。
(end)