不想看过程可以直接跳转至解决方案部分。

up主在使用Ollama 运行 qwen3.5:9b(Q4_K_M 量化)时,推理速度仅约 1.94 t/s,而正常情况下 RTX 4070 跑 9B 模型应该达到 30-50+ t/s

打开任务管理器或 nvidia-smi 查看,发现 NVIDIA 独显 VRAM 占用几乎为 0,模型完全跑在了 Intel 核显上。

# nvidia-smi 显示独显几乎空闲
+-----------------------------------------------------------------------------+
| NVIDIA GeForce RTX 4070 Laptop GPU    Off | 00000000:01:00.0 On  |
| Memory-Usage: 240 MiB / 8188 MiB                                       |
+-----------------------------------------------------------------------------+
# ollama ps 显示 84% GPU,但实际是核显
ollama ps
NAME          ID              SIZE      PROCESSOR          UNTIL
qwen3.5:9b    6488c96fa5fa    6.3 GB    16%/84% CPU/GPU    2 minutes from now

环境信息

项目 详情
CPU Intel i7-13650HX
核显 Intel UHD Graphics (RaptorLake-S),共享内存 ~8GB
独显 NVIDIA RTX 4070 Laptop GPU,8GB VRAM,CUDA Compute 8.9
系统 Windows 11
Ollama v0.30.8
CUDA v12.8 已安装

排查过程

第一步:确认硬件是否被正确检测

查看 Ollama 服务日志,关键文件路径:

%LOCALAPPDATA%\ollama\server.log

日志开头 GPU 发现阶段显示:

"discovering available GPUs..."

# Vulkan 探测到 RTX 4070,但被标记为"集成显卡"并丢弃!
"dropping integrated GPU; to enable, set OLLAMA_IGPU_ENABLE=1"
  id=1 library=Vulkan name=Vulkan1
  description="NVIDIA GeForce RTX 4070 Laptop GPU"

# 只剩下 Intel 核显被 Vulkan 接受
"inference compute"
  id=0 library=Vulkan name=Vulkan0
  description="Intel(R) RaptorLake-S Mobile Graphics Controller"

# CUDA 其实也检测到了 RTX 4070
"inference compute"
  id=0 library=CUDA compute=8.9 name=CUDA0
  description="NVIDIA GeForce RTX 4070 Laptop GPU"

# 但 Ollama 还是选了 Vulkan 后端,且只有 1 张可用卡(核显)
"selecting GPU backend for llama-server model"
  library=Vulkan gpu_count=1 available_gpu_count=2

到这里问题就定位了:Ollama 选了 Vulkan 后端,而 Vulkan 把 RTX 4070 误判为"核显"丢弃了。 最终只有 Intel UHD 在跑。这个问题应该会在笔记本电脑环境中经常发生。

第二步:确认是谁启用了 Vulkan

日志第 1 行 server config 中:

OLLAMA_VULKAN:true

检查系统环境变量,三个级别都没有设置:

[System.Environment]::GetEnvironmentVariable('OLLAMA_VULKAN', 'User')     # 空
[System.Environment]::GetEnvironmentVariable('OLLAMA_VULKAN', 'Machine')  # 空
[System.Environment]::GetEnvironmentVariable('OLLAMA_VULKAN', 'Process')  # 空

结论:OLLAMA_VULKAN=true 是 Ollama 0.30.8 的内部默认值。 新版 Ollama 默认启用 Vulkan 支持,但在笔记本双显卡场景下,Vulkan 的 GPU 分类逻辑存在缺陷。

根因分析

整个问题链:

Ollama 0.30.8 默认 OLLAMA_VULKAN=true
        ↓
Vulkan 后端探测 GPU
        ↓
RTX 4070 Laptop GPU 被 Vulkan 误判为 "integrated GPU"
        ↓
触发 "dropping integrated GPU" 逻辑 → RTX 4070 被丢弃
        ↓
仅剩 Intel 核显可用
        ↓
Ollama 选择 Vulkan 后端 + 1 张 GPU(核显)
        ↓
qwen3.5:9b 完全跑在 Intel 核显上 → ~1.94 t/s

为什么 CUDA 明明检测到了 RTX 4070 却不选?

Ollama 在多后端可用时,Vulkan 后端优先级高于 CUDA。既然 Vulkan 已经"可用"(虽然只剩核显),就不会回退到 CUDA。

解决方案:禁用 Vulkan,强制 CUDA

添加系统环境变量,覆盖 Ollama 内部默认值:

变量名: OLLAMA_VULKAN
变量值: false

PowerShell:

[System.Environment]::SetEnvironmentVariable('OLLAMA_VULKAN', 'false', 'User')

或者手动在环境变量中添加这个环境变量。

重启 Ollama 后,日志变为:

"inference compute"
  id=0 library=CUDA compute=8.9 name=CUDA0
  description="NVIDIA GeForce RTX 4070 Laptop GPU"

"selecting GPU backend for llama-server model"
  library=CUDA gpu_count=1

最后模型完全跑在 RTX 4070 上,推理速度恢复正常。

总结

  1. Ollama 0.30.x 默认 OLLAMA_VULKAN=true,笔记本双显卡场景下 Vulkan 可能误判独显为核显
  2. 最简单的修复:设 OLLAMA_VULKAN=false,让 Ollama 走 CUDA
  3. 排查关键日志:%LOCALAPPDATA%\ollama\server.log 中的 "selecting GPU backend""dropping integrated GPU"
  4. 笔记本独显跑 CUDA 永远比核显跑 Vulkan 快得多

环境变量汇总(修复后)

变量名 作用
OLLAMA_VULKAN false 禁用 Vulkan,强制 CUDA
(可选)CUDA_VISIBLE_DEVICES 0 仅暴露 CUDA 设备 0
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐