Ollama系列文章:
Ollama入门,一键启动本地DeepSeek大模型
Ollama入门,Ollama技术架构与原理
Ollama进阶,在Python、Java、Go项目中集成Deepseek、QWQ大模型
Ollama进阶,在Javascript(nodejs)前后端项目中集成Deepseek、QWQ大模型
Ollama高手,玩转本地自定义大模型(LLM)
Ollama高手,调优Ollama环境变量,提高性能与安全性
Ollama高手,调优Ollama模型参数,提高模型输出质量
在前面的系列文章中我们了解了如何在自有的项目中集成Ollama大模型,同时也知道了如何根据项目自身情况自定义大语言模型,从而完成与项目的集成。现在我们进一步探讨Ollama的环境变量调优,使之可以充分调动本地机器的软硬件资源,以提升系统的性能。同时Ollama默认配置存在未授权访问与模型窃取等安全隐患,生产环境中需要进行必要的调整,以提高安全性。
1、如何修改Ollama环境变量
在 Ollama 中,环境变量用于配置运行时的行为、优化性能、控制资源使用等。通过环境变量可以方便地调整 Ollama 的功能,而无需修改代码或重新编译。
在 Linux / macOS 中修改环境变量
1、临时修改,在终端中直接设置环境变量:
export OLLAMA_PORT=12345
export OLLAMA_MODEL_DIR=/path/to/models
ollama serve
2、永久修改,编辑 Shell 配置文件:
~/.bashrc #bash
~/.zshrc #zsh
~/.config/fish/config.fish #fish
打开配置文件后,在文件末尾添加:
export OLLAMA_PORT=12345
export OLLAMA_MODEL_DIR=/path/to/models
export OLLAMA_NUM_GPUS=1
保存后运行以下命令使其生效:
source ~/.bashrc # bash
source ~/.zshrc # zsh
完成修改后,可以通过echo $OLLAMA_PORT
命令查看是否生效。
在 Windows 中修改环境变量
1、临时修改,在 PowerShell 中运行:
$env:OLLAMA_PORT="12345"
$env:OLLAMA_MODEL_DIR="C:\path\to\models"
ollama serve
2、永久修改,通过环境变量设置界面添加或修改,然后重启计算机
变量名: OLLAMA_PORT
变量值: 12345
完成修改后,可以通过echo %OLLAMA_PORT%
或echo $env:OLLAMA_PORT
命令查看是否生效。
在 Docker 中修改环境变量
可以通过 -e 选项传入环境变量:
docker run -e OLLAMA_PORT=12345 -e OLLAMA_MODEL_DIR=/models ollama/ollama:latest
2、如何通过环境变量调优Ollama GPU使用
通过环境变量调优 Ollama 的 GPU 使用,可以有效提升推理性能,减少内存消耗,并根据硬件资源合理分配任务。可以根据本地硬件情况,选择合适的方式进行优化,具体而言:
显存充足的 GPU: 尝试 OLLAMA_GPU_LAYERS=40 以上的设置,以便更多层数在 GPU 上运行。
显存有限的 GPU: 限制 GPU 层数,同时监控显存占用 (nvidia-smi),以避免 OOM(Out of Memory)错误。
CPU+GPU 混合推理: 如果 GPU 层数设置过高导致显存不足,可适当减少 OLLAMA_GPU_LAYERS,让部分推理任务回退到 CPU。
拥有大内存的机器: 启用 MLOCK,使用 OLLAMA_USE_MLOCK=1 锁定内存,避免数据换页。
场景 1:最大化 GPU 利用率
尽可能将模型加载到 GPU 上运行,减少 CPU 负载;同时使用 mlock 锁定模型在内存中,提升推理性能,适用于高性能 GPU,显存充足的场景。
export OLLAMA_ENABLE_CUDA=1
export OLLAMA_GPU_LAYERS=40
export OLLAMA_USE_MLOCK=1
场景 2:显存有限的 GPU 使用
限制 GPU 使用的显存,确保不会因显存不足导致崩溃;同时部分层数在 CPU 上运行,减轻 GPU 负担,适用于显存较小的 GPU(如 8GB 或 12GB)。
export OLLAMA_ENABLE_CUDA=1
export OLLAMA_GPU_LAYERS=20
export OLLAMA_MAX_GPU_MEMORY=6GB
场景 3:多 GPU 环境下的调优
由于目前Ollama并不支持多GPU,因此可以选择性能好的GPU 运行。
export OLLAMA_NUM_GPUS=1
export OLLAMA_GPU_LAYERS=30
监控 GPU 状态
在调优 GPU 使用后,可以通过以下方式监控 GPU 的实际利用率:
使用 nvidia-smi 查看 GPU 使用情况
nvidia-smi
使用 ollama 查看模型运行状态
curl http://localhost:11434/api/status
Ollama GPU调优时常用的环境变量
环境变量 | 用途 | 示例值 | 说明 |
---|---|---|---|
OLLAMA_NUM_GPUS | 指定使用的 GPU 数量 | 1、2 | 目前 Ollama 主要支持单 GPU,但未来可能支持多 GPU |
OLLAMA_GPU_LAYERS | 设置在 GPU 上运行的层数 | 32、40 | 数值越大,GPU 负载越高,减少 CPU 使用率 |
OLLAMA_ENABLE_CUDA | 强制启用 CUDA 进行 GPU 推理 | 1 或 true | 确保 CUDA 可用时启用此选项 |
OLLAMA_USE_MLOCK | 锁定模型在内存中,防止数据交换到磁盘 | 1 或 true | 提高推理速度,防止内存交换 |
OLLAMA_USE_GPU_OFFLOAD | 启用 GPU Offload,将部分任务从 CPU 转移到 GPU | 1 或 true | 适合带有较大显存的 GPU |
OLLAMA_MAX_GPU_MEMORY | 限制 Ollama 使用的 GPU 显存量 | 8GB、16GB | 在多任务场景下有效避免显存溢出 |
3、如何通过环境变量调优Ollama并发性
通过环境变量调优并发能力,可以提升处理请求的效率、优化资源利用率,并确保在多线程或多请求场景下的稳定性。
场景 1:提升 API 服务的并发能力
使用更多 Worker 实例处理请求,提升 API 的吞吐量;使用多线程加速推理,充分利用 CPU 资源;缓存模型结果,减少重复计算;保持连接,减少网络延迟。适用于高流量场景,需要处理大量请求。
export OLLAMA_MAX_WORKERS=8
export OLLAMA_NUM_THREADS=16
export OLLAMA_CACHE_SIZE=8GB
export OLLAMA_KEEP_ALIVE_TIMEOUT=60s
场景 2:限制资源消耗的稳定运行
限制并发请求数量,避免占用过多的 CPU 和内存;使用较小的缓存空间,减少内存压力;在合理的超时时间内保持连接,减少重新建立连接的开销。适用于资源受限的环境,例如笔记本电脑或小型服务器。
export OLLAMA_MAX_WORKERS=2
export OLLAMA_NUM_THREADS=4
export OLLAMA_CACHE_SIZE=2GB
export OLLAMA_KEEP_ALIVE_TIMEOUT=30s
场景 3:GPU 资源充足的场景
GPU 解码加速,大幅提升响应速度;高并发 Worker 和多线程处理,最大化 GPU 计算能力;较大的缓存空间减少重复推理,提高性能。在有强大 GPU 支持的机器上,可以开启并行解码和多线程优化。
export OLLAMA_ENABLE_PARALLEL_DECODE=1
export OLLAMA_MAX_WORKERS=8
export OLLAMA_NUM_THREADS=32
export OLLAMA_CACHE_SIZE=12GB
Ollama并发调优环境变量
环境变量 | 用途 | 示例值 | 说明 |
---|---|---|---|
OLLAMA_MAX_WORKERS | 控制最大并发 Worker 数量,决定模型推理任务的并行度 | 2、4、8 | 设置较高值以支持更多并发请求 |
OLLAMA_NUM_THREADS | 控制每个 Worker 使用的线程数 | 4、8、16 | 提高 CPU 利用率,多线程加速推理 |
OLLAMA_CACHE_SIZE | 设置模型缓存的大小,减少重复加载 | 4GB、8GB | 对相同模型和输入减少计算开销 |
OLLAMA_KEEP_ALIVE_TIMEOUT | 控制 HTTP 连接的保持时间 | 30s、60s | 避免频繁建立连接,提升 API 的响应速度 |
OLLAMA_ENABLE_PARALLEL_DECODE | 启用并行解码,提高多请求时的响应效率 | 1 或 true | 在 GPU 支持的情况下提升多请求处理效率 |
4、如何通过环境变量调优Ollama安全性
Ollama默认配置存在未授权访问与模型窃取等安全隐患,生产环境中需要进行必要的调整,以提高安全性。
场景 1:保护 API 访问
使用身份认证 Token 保护 API,只有持有正确 Token 的请求才会被接受;限制 API 仅允许特定来源访问,防止 CSRF 攻击;使用 TLS 保护通信安全,防止数据泄露;限制请求大小,防止大数据攻击;使用非默认端口,减少端口扫描风险。适用于需要暴露 API 服务的场景。
export OLLAMA_AUTH_TOKEN="super-secret-token"
export OLLAMA_ALLOW_ORIGINS="https://example.com"
export OLLAMA_MAX_REQUEST_SIZE="5MB"
export OLLAMA_API_PORT=11435
export OLLAMA_ENABLE_TLS=1
export OLLAMA_TLS_CERT_FILE="/path/to/cert.pem"
export OLLAMA_TLS_KEY_FILE="/path/to/key.pem"
场景 2:保护本地模型数据
禁止从远程下载模型,防止未经授权的模型替换;启用只读模式,防止模型和配置被意外或恶意修改。适用于需要防止模型数据被篡改或远程拉取的场景。
export OLLAMA_DISABLE_REMOTE_PULL=1
export OLLAMA_READ_ONLY=1
场景 3:安全监控和调试
记录 API 请求、模型运行状态和异常信息,便于排查问题;使用 INFO 日志级别记录重要事件,同时避免过多无关日志。适用于需要监控异常行为和记录日志的场景。
export OLLAMA_LOG_LEVEL="INFO"
场景 4:沙盒环境运行模型
将模型运行在隔离的沙盒环境中,防止模型对系统产生破坏;限制模型对文件系统、网络等资源的访问。适用于执行不受信任的模型或检测模型行为的场景。
export OLLAMA_ENABLE_SANDBOX=1
监控和验证
在设置安全性相关环境变量后,可以通过以下方式验证和监控:
测试 API 身份认证
curl -H "Authorization: Bearer your-secret-token" http://localhost:11435/api/status
查看 API 日志
cat /var/log/ollama.log
验证 TLS 证书
curl --cacert /path/to/cert.pem https://localhost:11435/api/status
常用的安全性相关环境变量
环境变量 | 用途 | 示例值 | 说明 |
---|---|---|---|
OLLAMA_AUTH_TOKEN | 设置 API 请求的身份认证 Token | your-secret-token | 启用身份认证,防止未授权访问 |
OLLAMA_ALLOW_ORIGINS | 配置允许的跨域请求源 | https://example.com | 限制特定来源访问 API,防止 CSRF 攻击 |
OLLAMA_DISABLE_REMOTE_PULL | 禁止从远程下载模型 | 1 或 true | 防止未经授权的模型拉取 |
OLLAMA_READ_ONLY | 将 Ollama 置于只读模式 | 1 或 true | 禁止对模型和配置的更改 |
OLLAMA_API_PORT | 自定义 API 端口 | 11434 | 避免使用默认端口,减少攻击面 |
OLLAMA_MAX_REQUEST_SIZE | 限制 API 请求的最大数据大小 | 10MB | 防止 DoS(拒绝服务)攻击 |
OLLAMA_LOG_LEVEL | 控制日志的详细程度 | INFO、WARN、ERROR | 记录重要事件,监控异常行为 |
OLLAMA_ENABLE_TLS | 启用 TLS 加密 | 1 或 true | 保护 API 通信,防止中间人攻击 |
OLLAMA_TLS_CERT_FILE | 提供 TLS 证书路径 | /path/to/cert.pem | 配合 TLS 使用 |
OLLAMA_TLS_KEY_FILE | 提供 TLS 私钥路径 | /path/to/key.pem | 配合 TLS 使用 |
OLLAMA_ENABLE_SANDBOX | 启用模型沙盒环境 | 1 或 true | 隔离模型运行环境,防止模型恶意行为 |
5、常用Ollama 环境变量
Ollama环境变量默认值
在Ollama的源代码文件envconfig/config.go
中定义了Ollama默认配置:
func AsMap() map[string]EnvVar {
return map[string]EnvVar{
"OLLAMA_DEBUG": {"OLLAMA_DEBUG", Debug, "Show additional debug information (e.g. OLLAMA_DEBUG=1)"},
"OLLAMA_FLASH_ATTENTION": {"OLLAMA_FLASH_ATTENTION", FlashAttention, "Enabled flash attention"},
"OLLAMA_HOST": {"OLLAMA_HOST", "", "IP Address for the ollama server (default 127.0.0.1:11434)"},
"OLLAMA_KEEP_ALIVE": {"OLLAMA_KEEP_ALIVE", KeepAlive, "The duration that models stay loaded in memory (default \"5m\")"},
"OLLAMA_LLM_LIBRARY": {"OLLAMA_LLM_LIBRARY", LLMLibrary, "Set LLM library to bypass autodetection"},
"OLLAMA_MAX_LOADED_MODELS": {"OLLAMA_MAX_LOADED_MODELS", MaxRunners, "Maximum number of loaded models (default 1)"},
"OLLAMA_MAX_QUEUE": {"OLLAMA_MAX_QUEUE", MaxQueuedRequests, "Maximum number of queued requests"},
"OLLAMA_MAX_VRAM": {"OLLAMA_MAX_VRAM", MaxVRAM, "Maximum VRAM"},
"OLLAMA_MODELS": {"OLLAMA_MODELS", "", "The path to the models directory"},
"OLLAMA_NOHISTORY": {"OLLAMA_NOHISTORY", NoHistory, "Do not preserve readline history"},
"OLLAMA_NOPRUNE": {"OLLAMA_NOPRUNE", NoPrune, "Do not prune model blobs on startup"},
"OLLAMA_NUM_PARALLEL": {"OLLAMA_NUM_PARALLEL", NumParallel, "Maximum number of parallel requests (default 1)"},
"OLLAMA_ORIGINS": {"OLLAMA_ORIGINS", AllowOrigins, "A comma separated list of allowed origins"},
"OLLAMA_RUNNERS_DIR": {"OLLAMA_RUNNERS_DIR", RunnersDir, "Location for runners"},
"OLLAMA_TMPDIR": {"OLLAMA_TMPDIR", TmpDir, "Location for temporary files"},
}
}
常用的Ollama 环境变量
基础配置
环境变量 | 用途 | 示例值 | 说明 |
---|---|---|---|
OLLAMA_HOST | 指定 Ollama API 监听的地址 | 0.0.0.0 或 127.0.0.1 | 用于在本地或远程访问 API |
OLLAMA_PORT | 指定 Ollama API 的监听端口 | 11434 默认端口为 | 11434,可更改以避免端口冲突 |
模型管理配置
环境变量 | 用途 | 示例值 | 说明 |
---|---|---|---|
OLLAMA_PULL_PROXY | 设置模型下载时的代理地址 | http://proxy.example.com | 用于加速模型拉取,尤其在国内 |
OLLAMA_MODEL_DIR | 指定模型存储目录 | /path/to/models | 用于从自定义目录加载模型 |
OLLAMA_CACHE_DIR | 指定模型缓存目录 | /path/to/cache | 避免重复下载模型 |
OLLAMA_ALLOW_REMOTE_MODELS | 是否允许拉取远程模型 | 1 或 true | 可用于限制从外部下载模型 |
OLLAMA_FORCE_REDOWNLOAD | 强制重新下载模型 | 1 或 true | 在模型更新时确保拉取最新版本 |
性能优化配置
环境变量 | 用途 | 示例值 | 说明 |
---|---|---|---|
OLLAMA_NUM_GPUS | 指定使用的 GPU 数量 | 1 或 2 | 用于多 GPU 推理,但目前 Ollama 主要支持单 GPU |
OLLAMA_NUM_THREADS | 设置推理时使用的 CPU 线程数 | 8 | 可用于 CPU 推理优化 |
OLLAMA_GPU_LAYERS | 指定在 GPU 中运行的层数 | 32 | 适用于模型量化时的 GPU 加速 |
OLLAMA_ENABLE_CUDA | 启用 CUDA 进行 GPU 推理 | 1 或 true | 确保 CUDA 可用时启用 |
OLLAMA_USE_MLOCK | 锁定内存,防止数据被交换到磁盘 | 1 或 true | 提高推理性能,尤其是大模型 |
安全性配置
环境变量 | 用途 | 示例值 | 说明 |
---|---|---|---|
OLLAMA_AUTH_TOKEN | 配置 API 调用的身份认证 | Token your_token_here | 用于保护 API 免受未授权访问 |
OLLAMA_DISABLE_REMOTE_MODELS | 禁止从远程加载模型 | 1 或 true | 确保只使用本地模型 |
OLLAMA_LOG_LEVEL | 设置日志级别 | info, debug, error | 便于进行安全监控和日志记录 |
调试与开发配置
环境变量 | 用途 | 示例值 | 说明 |
---|---|---|---|
OLLAMA_LOG_FILE | 指定日志输出文件 | /path/to/logfile.log | 保存日志到文件以供后续分析 |
OLLAMA_DEV_MODE | 启用开发模式 | 1 或 true | 提供额外的调试信息 |
OLLAMA_PROFILE | 启用性能分析 | 1 或 true | 输出性能数据以分析推理速度 |
OLLAMA_DEBUG | 启用调试模式 | 1 或 true | 显示更多日志信息,便于排查问题 |