Ollama 是一个开源的深度学习框架,专为本地机器上便捷部署和运行大型语言模型(LLM)而设计,它提供了一套完整的深度学习工具链,包括数据预处理、模型构建、训练、评估和部署等功能。
介绍
- ollama 使用 Golang 开发
- 功能
- 本地部署与运行:支持运行 Llama 3.1、Phi 3、Mistral、Gemma 2 等模型,并支持自定义创建的模型
- 轻量级与可扩展性
- API 兼容 OpenAI 的 API
- 预构建模型库:Ollama 包含了一系列预先训练好的大型语言模型,用户可以直接 pull、push
- https://ollama.com/xiexianbin 提供类似于 github 的功能,用来托管模型
- 跨平台支持
- 命令行工具
- 使用
- 本地运行模型
- 模型微调(fine-tuning)
- open-webui 可参考
- 更多Extensions & Plugins
安装 ollama
- 参考
- 支持的 Nvidia GPUs 参考
- 从 https://ollama.com/download 下载
linux
curl -fsSL https://ollama.com/install.sh | sh
# 指定版本
curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.7 sh- AMD GPU install
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- ARM64 install
curl -L https://ollama.com/download/ollama-linux-arm64.tgz -o ollama-linux-arm64.tgz
sudo tar -C /usr -xzf ollama-linux-arm64.tgzlinux 启动方式
- 为 Ollama 创建一个用户和组:
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" # 同时加载的模型数量- 配置 Ollama 监听地址
[Service]
Environment="OLLAMA_HOST=0.0.0.0"docker
-
需要配置
/etc/docker/daemon.json:
"exec-opts": ["native.cgroupdriver=cgroupfs"]环境变量
-
OLLAMA_MAX_QUEUE=512 请求队列大小,在拒绝额外请求之前可以排队的最大请求数
- 默认值为 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每个模型同时处理的最大并行请求数- 默认值将根据可用内存自动选择 4 或 1
-
OLLAMA_FLASH_ATTENTION=1 -
OLLAMA_KV_CACHE_TYPEK/V 缓存的量化类型,能够减少上下文缓存占用的显存控件,目前提供三个参数f16高精度和内存使用率(默认)q8_08 位量化,使用的内存大约是 f16 的 1/2 内存,精度损失非常小,通常对模型的质量没有明显影响q4_04 位量化,使用的内存大约是 f16 的 1/4
-
OLLAMA_LLM_LIBRARY指定不同的 LLM 库启动
OLLAMA_LLM_LIBRARY="cpu_avx2" ollama serveOLLAMA_KEEP_ALIVE控制加载的模型在内存中保留的时间
mac
wget https://ollama.com/download/Ollama-darwin.zip使用
ollam help
支持的模型
- ollama 支持主流的模块,在线查询地址 ollama.com/library
- 以 qwen2 为例,访问 https://ollama.com/library/qwen2 复制
ollama run qwen2即可在本地启动- 先下载模型,然后在本地启动
$ 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.
>>> /byevLLM 后端加速
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
扩展
- unsloth 一个用来训练和微调语言模型的工具
F&Q
msg=“truncating input prompt” limit=2048 prompt=17624 keep=5 new=2048_xxx
默认情况下,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如何将模型保存在内存中或使其立即卸载
- How do I keep a model loaded in memory or make it unload immediately?
- 方法一:请求 API 时,通过 keep_alive 参考控制:-1 表示预订模型并将其留在内存中;0 表示卸载模型并释放内存
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 utilizedn_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 ModelfileOut 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 Modelfilellama_context: n_ctx_pre_seq (131072) > n_ctx_train (32768) – possible training context overflow
请求参数的 n_ctx_pre_seq 比模型训练时的 n_ctx_train 大,导致模型占用大量的内存资源
最近更新
最新评论