Ollama 是一个开源的深度学习框架,专为本地机器上便捷部署和运行大型语言模型(LLM)而设计,它提供了一套完整的深度学习工具链,包括数据预处理、模型构建、训练、评估和部署等功能。
介绍
- ollama 使用 Golang 开发
 
- 功能
- 本地部署与运行:支持运行 Llama 3.1、Phi 3、Mistral、Gemma 2 等模型,并支持自定义创建的模型
 
- 轻量级与可扩展性
 
- API 兼容 OpenAI 的 API
 
- 预构建模型库:Ollama 包含了一系列预先训练好的大型语言模型,用户可以直接 pull、push
 
- 跨平台支持
 
- 命令行工具
 
 
- 使用
 
- open-webui 可参考
 
- 更多Extensions & Plugins
 
安装 ollama
linux
curl -fsSL https://ollama.com/install.sh | sh
# 指定版本
curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.7 sh
curl -L https://ollama.com/download/ollama-linux-amd64-rocm.tgz -o ollama-linux-amd64-rocm.tgz
sudo tar -C /usr -xzf ollama-linux-amd64-rocm.tgz
curl -L https://ollama.com/download/ollama-linux-arm64.tgz -o ollama-linux-arm64.tgz
sudo tar -C /usr -xzf ollama-linux-arm64.tgz
linux 启动方式
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
sudo usermod -a -G ollama $(whoami)
/etc/systemd/system/ollama.service 
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"
[Install]
WantedBy=default.target
sudo systemctl daemon-reload
sudo systemctl enable ollama
- debug 日志,
sudo systemctl edit ollama 或手动创建文件 /etc/systemd/system/ollama.service.d/override.conf
- 查看日志 
journalctl -e -u ollama 或 journalctl -u ollama 
- docker 启动的,通过 
docker logs 查看日志 
 
[Service]
Environment="OLLAMA_DEBUG=1"
- 资源不足时,配置资源限制,
sudo systemctl edit ollama 或手动创建文件 /etc/systemd/system/ollama.service.d/override.conf 
[Service]
Environment="OLLAMA_NUM_PARALLEL=4"       # 并行处理请求的数量
Environment="OLLAMA_MAX_LOADED_MODELS=4"  # 同时加载的模型数量
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
docker
"exec-opts": ["native.cgroupdriver=cgroupfs"]
环境变量
- 
参考
 
- 
OLLAMA_MAX_QUEUE=512 请求队列大小,在拒绝额外请求之前可以排队的最大请求数
 
- 
OLLAMA_DEBUG=1
 
- 
AMD_LOG_LEVEL=3
 
- 
OLLAMA_HOME=~/.ollama
 
- 
OLLAMA_MODELS=$OLLAMA_HOME/models 指定模型的存储位置
 
- 
OLLAMA_LLM_LIBRARY="cpu_avx2" ollama serve
 
- 
OLLAMA_MAX_LOADED_MODELS=3 最大加载模型的数量,请根据内存设置
- 默认值为 GPU 数量的 3 倍,或对于 CPU 推理为 3
 
 
- 
OLLAMA_NUM_PARALLEL=1 每个模型同时处理的最大并行请求数
 
- 
OLLAMA_FLASH_ATTENTION=1
 
- 
OLLAMA_KV_CACHE_TYPE K/V 缓存的量化类型,能够减少上下文缓存占用的显存控件,目前提供三个参数
f16 高精度和内存使用率(默认) 
q8_0 8 位量化,使用的内存大约是 f16 的 1/2 内存,精度损失非常小,通常对模型的质量没有明显影响 
q4_0 4 位量化,使用的内存大约是 f16 的 1/4 
 
- 
OLLAMA_LLM_LIBRARY 指定不同的 LLM 库启动
 
OLLAMA_LLM_LIBRARY="cpu_avx2" ollama serve
OLLAMA_KEEP_ALIVE 控制加载的模型在内存中保留的时间 
mac
wget https://ollama.com/download/Ollama-darwin.zip
使用
ollam help
  
  
    
      $ 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 to a registry
  list        List models
  ps          List running models
  cp          Copy a model
  rm          Remove a model
  help        Help about any command
Flags:
  -h, --help      help for ollama
  -v, --version   Show version information
Use "ollama [command] --help" for more information about a command.
     
   
 
支持的模型
$ ollama run qwen2
pulling manifest
pulling 87048bcd5521... 100% ▕███████████████████████████████████████████████████████▏ 4.7 GB
pulling 8cf247399e57... 100% ▕███████████████████████████████████████████████████████▏ 1.7 KB
pulling f1cd752815fc... 100% ▕███████████████████████████████████████████████████████▏  12 KB
pulling 56bb8bd477a5... 100% ▕███████████████████████████████████████████████████████▏   96 B
pulling e711233e7343... 100% ▕███████████████████████████████████████████████████████▏  485 B
verifying sha256 digest
writing manifest
removing any unused layers
success
>>> hi
How's it going? Is there something I can help you with or would you like to chat?
>>> /?
Available Commands:
  /set            Set session variables
  /show           Show model information
  /load <model>   Load a session or model
  /save <model>   Save your current session
  /bye            Exit
  /?, /help       Help for a command
  /? shortcuts    Help for keyboard shortcuts
Use """ to begin a multi-line message.
>>> /bye
vLLM 后端加速
pip install vllm
ollama configure --backend=vllm
常用命令
# 查看模本模型
$ ollama list
NAME           	ID          	SIZE  	MODIFIED
llama3.1:latest	62757c860e01	4.7 GB	3 hours ago
# 下载模型
$ ollama pull llama3.1
# 创建模型
ollama create mymodel -f ./Modelfile
# 删除模型
ollama rm llama3.1
# 复制模型
ollama cp llama3.1 my-model
# 启动模型
ollama run llama3.1
ollama run llama3.1 "Summarize this file: $(cat README.md)"
# 查看模型详情
ollama show llama3.1
# 查看模型 Modelfile
ollama show --modelfile llama3.1
ollama show --modelfile llama3.1 > Modelfile
# 模型以服务启动,当您想在不运行桌面应用程序的情况下启动 ollama 时
ollama serve
# 查看运行中的模型,如在 GPU 还是 CPU,参考 https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-tell-if-my-model-was-loaded-onto-the-gpu
# 100% GPU 表示模型完全加载到 GPU 中
# 100% CPU 表示模型完全加载到系统内存中
# 48%/52% CPU/GPU 表示模型被部分加载到 GPU 和系统内存中
$ ollama ps
NAME      	ID          	SIZE 	PROCESSOR	UNTIL
llama3:70b	bcfb190ca3a7	42 GB	100% GPU 	4 minutes from now
# 卸载模型,模型从内存删除
ollama stop llama3:70b
# 卸载模型也可以通过 keep_alive 控制
# 保留在内存
curl http://localhost:11434/api/generate -d '{"model": "llama3.2", "keep_alive": -1}'
# 卸载模型并释放内存
curl http://localhost:11434/api/generate -d '{"model": "llama3.2", "keep_alive": 0}'
如何查看模型支持的最大上小文
- ollama 查看日志 
llama.context_length,如查看 deepseek-r1 的 context_length 
扩展
F&Q
默认情况下,Ollama 使用上下文窗口(参数 num_ctx)大小为 2048 tokens,对于比较大的上下文窗口数据会出现被截断的问题,可通过修改 num_ctx 参数控制(参考):
- 运行时,通过命令行设置 
/set parameter num_ctx 4096 
- 调用 API 时指定
 
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Why is the sky blue?",
  "options": {
    "num_ctx": 4096
  }
}'
- 通过 Modelfile 设置参数,然后使用 
ollama create xxx -f Modefile 创建新模型(参考),调整 num_ctx 大小,该大小不能大于模型训练时的最大下文 
FROM qwen2:7b
PARAMETER num_ctx 32768
PARAMETER num_predict -1
# PARAMETER top_k 30
# PARAMETER top_p 0.95
# PARAMETER temperature 0.6
如何将模型保存在内存中或使其立即卸载
curl http://localhost:11434/api/generate -d '{"model": "llama3.2", "keep_alive": -1}'
卸载模型时立即释放内存:
curl http://localhost:11434/api/generate -d '{"model": "llama2", "keep_alive": 0}'
- 方法二:通过环境变量 
OLLAMA_KEEP_ALIVE 控制 
error looking up nvidia GPU memory
cuda driver library failed to get device context 800 time= level=WARN source=gpu.go:449 msg="error looking up nvidia GPU memory"
the full capacity of the model will not be utilized
n_ctx_per_seq (2048) < n_ctx_train (131072) -- the full capacity of the model will not be utilized
n_ctx_per_seq 是输入上限(num_ctx),Ollama 配置参数里的输入上限只有 2048 个 token,而 Llama-70B 训练时的输入上限是 131072 个 token,输入上限非常影响模型的表现,特别是做阅读理解时,能否吞下整个材料直接决定结果是否准确 
- 解决方式,通过 Modelfile 调整模型镜像参数
 
PARAMETER num_ctx 131072
PARAMETER num_predict -1
# ollama create <new-model-name> -f Modelfile
Out of memory when offloading layers on ROCm
$ ollama show --modelfile llama3.1:70b-instruct-q4_0 > Modelfile
# edit Modelfile and add "PARAMETER num_gpu 46"
$ ollama create llama3.1:70b-instruct-n46-q4_0 -f Modelfile
llama_context: n_ctx_pre_seq (131072) > n_ctx_train (32768) – possible training context overflow
请求参数的 n_ctx_pre_seq 比模型训练时的 n_ctx_train 大,导致模型占用大量的内存资源