容器化部署ollama环境变量问题

你的 GPU 是 GTX 1050 Ti,而 Ollama 依赖 CUDA 计算能力至少 7.0,但 GTX 1050 Ti 只有 6.1,这可能是 Ollama 不支持的原因。

你可以运行:

bash
nvidia-smi --query-gpu=compute_cap --format=csv

如果输出 < 7.0,说明你的 GPU 不支持 Ollama 的 CUDA 版本,你可能需要使用 CPU 推理,或者换一张更高计算能力的 GPU(如 RTX 20 系列及以上)。

环境变量解释:

  • CUDA_VISIBLE_DEVICES: 0 # 指定使用 GPU 0
  • OLLAMA_USE_CUDA: true # ollama开启GPU
  • OLLAMA_USE_GPU: true # ollama开启GPU

这些环境变量的详细解释如下(GPT4.0回答):

1. KEEP_GPUS_TIMEOUT: 40

  • 作用:保持 GPU 资源分配的超时时间,单位通常是
  • 影响:如果 Ollama 在 40 秒内没有使用 GPU,可能会释放 GPU 资源(取决于实现)。
  • 适用场景:避免 GPU 资源长期占用而不释放,有助于提高资源利用率。

2. TZ: Asia/Shanghai

  • 作用:设置 容器内部的时区Asia/Shanghai(北京时间)。
  • 影响:影响日志、任务调度等依赖系统时间的功能。
  • 适用场景:如果不设置,容器可能默认使用 UTC 时间,导致日志时间与实际不符。

3. OLLAMA_ORIGINS: "*"

  • 作用:配置 CORS 允许的来源* 表示允许所有来源访问 Ollama API。
  • 影响
    • 允许任何客户端(前端网页、应用等)访问 Ollama API。
    • 可能存在安全风险,建议限制特定域名,如:
      1
      OLLAMA_ORIGINS: "http://example.com,https://example.com"
  • 适用场景
    • 允许 Web 应用(如 VueReact)调用 Ollama。
    • 开发和测试环境,方便跨域请求。

4. OLLAMA_HOST: "0.0.0.0"

  • 作用:设置 Ollama 监听的 网络接口0.0.0.0 表示监听所有 IP 地址。
  • 影响
    • 允许外部访问 Ollama API(如 http://<服务器IP>:11434)。
    • 如果只想让本地访问,建议改成:
      1
      OLLAMA_HOST: "127.0.0.1"
  • 适用场景
    • 部署在远程服务器,允许局域网或公网访问 Ollama。
    • 如果是本地开发,建议限制为 127.0.0.1

5. CUDA_VISIBLE_DEVICES: 0

  • 作用:指定 可见的 GPU0 表示使用 第 1 块 GPU
  • 影响
    • 如果服务器有多块 GPU:
      • CUDA_VISIBLE_DEVICES: 1 → 只使用 第 2 块 GPU
      • CUDA_VISIBLE_DEVICES: 0,1 → 使用 第 1 和 2 块 GPU
    • 如果设置为 -1,则 禁用 GPU,强制使用 CPU。
  • 适用场景
    • 多 GPU 服务器,指定某块 GPU 运行 Ollama。
    • 资源控制,避免 Ollama 占用所有 GPU。

6. OLLAMA_USE_CUDA: true

  • 作用:强制启用 CUDA 加速,让 Ollama 使用 GPU 进行推理。
  • 影响
    • true:如果检测到 NVIDIA GPU,Ollama 运行在 GPU 上(性能更快)。
    • false:即使有 GPU 也 强制使用 CPU(可能用于调试)。
  • 适用场景
    • 需要 GPU 加速的模型推理。
    • 服务器上有 GPU,但默认未启用,需要手动指定。

7、NVIDIA_DRIVER_CAPABILITIES=compute,utility

NVIDIA_DRIVER_CAPABILITIES=compute,utility 是一个环境变量,用于控制 Docker 容器内可用的 NVIDIA 驱动功能。

在 Docker 运行带 GPU 加速的容器时,这个变量确保容器可以使用必要的 GPU 计算能力。它的作用如下:

  • **compute**:启用 GPU 计算功能(用于 CUDA、TensorFlow、PyTorch 等)。
  • **utility**:启用 NVIDIA 实用程序(如 nvidia-smi)。

总结

变量作用影响
KEEP_GPUS_TIMEOUT: 40GPU 资源保持时间40 秒内无任务可能释放 GPU
TZ: Asia/Shanghai设置时区确保容器日志时间正确
OLLAMA_ORIGINS: "*"允许所有来源访问 API跨域访问,可能有安全风险
OLLAMA_HOST: "0.0.0.0"监听所有 IP允许外部访问 Ollama
CUDA_VISIBLE_DEVICES: 0选择 GPU0代表使用第 1 块 GPU
OLLAMA_USE_CUDA: true启用 GPU 加速true= 使用 CUDA,false= 仅 CPU

如果你在 云服务器 上运行 Ollama,建议:

  • 限制 API 访问,避免被滥用:
    1
    OLLAMA_ORIGINS: "http://yourdomain.com"
  • 只监听本地,如果不需要外部访问:
    1
    OLLAMA_HOST: "127.0.0.1"
  • 指定 GPU,避免影响其他任务:
    1
    CUDA_VISIBLE_DEVICES: 0

你是想排查 Ollama 不使用 GPU 的问题吗?如果是,nvidia-smi 显示 无进程,说明 Ollama 仍然在 CPU 上跑,可能要进一步检查 Ollama 运行日志或 docker-compose 配置。🚀

docker-compose.yml文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: '3'
services:
ollama:
image: registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:ollama
container_name: ollama
runtime: nvidia
user: root
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: ["gpu"]
count: all # 根据需要调整 GPU 的数量
volumes:
- /root/.ollama:/root/.ollama
ports:
- "11434:11434"
environment:
KEEP_GPUS_TIMEOUT: 40
TZ: Asia/Shanghai
OLLAMA_ORIGINS: "*"
OLLAMA_HOST: "0.0.0.0"
CUDA_VISIBLE_DEVICES: 0,1
OLLAMA_USE_CUDA: true
NVIDIA_DRIVER_CAPABILITIES: compute,utility