当前位置: 首页 > news >正文

使用 NVIDIA GPU加速大模型推理运算

使用 NVIDIA GPU加速大模型推理运算

  • 前置
  • 一、大模型参数配置
    • 1.1 Windows 系统
    • 1.2 Linux 系统
  • 二、运行与检测
  • 三、性能优化建议
  • 四、常见问题

前置

使用 NVIDIA GPU加速大模型推理运算: 核心部分就是配置四个环境变量,文章大部分内容为参数解释和详细界面展示。如果觉得文章啰嗦,请直接查看 1.1 Windows系统 -> 方式一 -> 环境变量配置。 配置完成后,重新打开一个窗口,即可在 GPU 上跑大模型。

你的电脑已经安装了,**NVIDIA 显卡驱动,CUDA Toolkit **,且正常使用。

软件是否必装说明
NVIDIA 显卡驱动✅ 必装基础驱动,没有的话显卡无法工作
CUDA Toolkit✅ 必装提供 CUDA 计算接口,推荐 11.8~12.2 版本
cuDNN❌ 无需手动装Ollama 内置了适配的 cuDNN 库,
日志里的ggml-cuda.dll已包含

如果没有安装,请在网上搜索其他博主的安装教程。

NVIDIA 显卡驱动安装教程 仅供参考:2025 CUDA 和 cuDNN 在 Windows 上如何安装配置(保姆级详细版)

检查是否安装 NVIDIA 显卡驱动

打开cmd, 执行以下指令:

nvidia-smi

查看是否安装 CUDA Toolkit

nvcc--version

输出以下内容表示已经安装:

一、大模型参数配置

1.1 Windows 系统

终止 ollama 进程

打开任务管理器(ctrl+shift+ESC),搜索ollama, 在后台进程中,右键,选择结束任务。关闭所有ollama相关的进程。

配置环境变量

这里三种方式任选其一,只要把环境变量配置了就行。我写三种方式只是为了方便我自己复习,我之前对环境变量一点也不懂,后来接触多了就知道环境变量是什么了,但是每次配置都是图形化界面(方式三),每次都要找,很麻烦。现在学了Linux 有一点感悟,好像什么东西都可以使用指令的方式配置,于是有了方式一,方式二。方式一是cmd的方式进行配置,一些简单的指令使用cmd 进行配置是非常方便的。我在搜cmd 配置环境变量的时候,发现还可以使用powshell 配置,而且 powshell 语法的可读性是比cmd 可读性强的,功能也更强大。可以理解为 Powshell 是 cmd 的进阶,支持和兼容 cmd 的绝大多数指令。cmd 脚本的后缀为:*.bat / *.cmd, PowerShell 脚本的后缀是:*.ps1

方式一: 使用 cmd 方式配置环境变量

ollama官方明确给出的关于GPU的环境变量只有一个CUDA_VISIBLE_DEVICES,该变量用于控制 CUDA 应用程序(比如 Ollama、PyTorch、TensorFlow 等)可以看到和使用哪些 GPU 设备。它的值有两种,一种是GPU序号,一种是GPU的UUID。像其他环境变量:OLLAMA_CPU_ONLYOLLAMA_GPU_LAYEROLLAMA_GPU_LAYERSOLLAMA_NUM_GPUOLLAMA_NUM_GPUS,可能官网没有,也可能是网传错误的,我能力有限,只能唯一确定一个官方准确的环境变量CUDA_VISIBLE_DEVICES

翻译:如果你系统里有多块 NVIDIA 显卡,想限制 Ollama 只用子集,可以把CUDA_VISIBLE_DEVICES设置为逗号分隔的 GPU 列表。可以使用数字 ID,但顺序可能有所不同,因此 UUID 更可靠。你可以通过运行nvidia-smi -L来发现 GPU 的 UUID。如果你想忽略 GPU 并强制 CPU 使用,可以使用一个无效的 GPU ID(例如“-1”)

换言之:你不设置,默认就是GPU跑模型,如果你有多块GPU, 你可以使用CUDA_VISIBLE_DEVICES来显示指定你的GPU序号,序号之间以英文的逗号分隔。但是GPU的序号容易发生变动,然而每块GPU的UUID是固定不变的,所以你可以将CUDA_VISIBLE_DEVICES的值设置为GPU的UUID。你可以通过nvidia-smi -L指令获得GPU的UUID。另外,如果你不想使用GPU,而是想强制使用CPU,那么,你就把CUDA_VISIBLE_DEVICES的值设置为一个无效的GPU ID,比如,你可以设置为:-1

Ollama 官方文档连接:GPU-硬件支持

所以这里只设置一个环境变量就行:CUDA_VISIBLE_DEVICES

管理员的身份打开cmd, 这里以指令的方式配置环境变量,执行以下指令:

:: 1. 查看 GPU 的 UUID (格式为:GPU-xxxx) nvidia-smi -L :: 2. 指定 GPU 加速 setx /m CUDA_VISIBLE_DEVICES <GPU_UUID>

打开任务管理器,查看GPU序号:

下面的是我从网上搜索的配置教程里的环境变量+豆包给的解释,人工智障的豆包,有时候说有这个变量,有时候说没有,又说这个变量不存在,还说这样写是错的。我真是服了,查这个资料搞了我两天。最后还得是查官方文档才确定——豆包是瞎说的!!!真服了。以下变量谨慎配置(或者说你配置了也是无效的,ollama 不识别),OLLAMA_CPU_ONLYOLLAMA_GPU_LAYEROLLAMA_GPU_LAYERSOLLAMA_NUM_GPUOLLAMA_NUM_GPUS。我也不知道这几个变量是有还是没有,是单数还是负数,我只从官方文档查到了一个CUDA_VISIBLE_DEVICES。如果有大佬知道烦请在评论区告诉我。

文章到此就结束了,以下内容来自于网上资料整合(我前两天写的),并不一定准确,或许是错误的,注意甄别!!!


:: 1. 允许使用 GPU 加速 setx /m OLLAMA_CPU_ONLY 0 :: 2. 选择 GPU 计算后端(使用cuda) setx /m OLLAMA_GPU_LAYERS "cuda" :: 3. 控制多少层模型跑在 GPU 上 (全部在 GPU 上) setx /m OLLAMA_NUM_GPUS 999

参数详解:

OLLAMA_CPU_ONLY:(允许使用GPU加速)

  • 作用:强制 Ollama 只使用 CPU 推理,完全禁用所有 GPU(包括 NVIDIA/AMD/ 核显)。
  • 取值
    • 0(默认):允许使用 GPU 加速;
    • 1:强制禁用 GPU,纯 CPU 运行。
  • 优先级:最高!只要设为1,其他 GPU 相关参数全部失效。

CUDA_VISIBLE_DEVICES:(指定使用哪一块GPU)

  • 作用只对 NVIDIA GPU 生效,限制程序能看到哪些 NVIDIA GPU,精准锁定目标显卡。
  • 取值:
    • 0:只使用序号为 0 的 NVIDIA 显卡(对应nvidia-smi里的GPU 0, 也可通过任务管理器查看);
    • GPU_UUID:使用指定 UUID 的 NVIDIA 显卡(精准锁定,避免重启后序号变化);
    • -1:禁用所有 NVIDIA GPU,强制用 CPU;
    • 0,1:多卡环境下同时使用序号 0 和 1 的 NVIDIA 显卡。

OLLAMA_GPU_LAYERS:(选择GPU计算后端)

  • 作用:指定 Ollama 使用哪种 GPU 后端计算(解决「多 GPU 时选谁」的问题)。
  • 取值:
    • cuda:强制使用 NVIDIA CUDA 后端(只识别 NVIDIA 显卡,屏蔽 AMD / 核显);
    • directml:使用 DirectML 后端(Windows 下默认,会优先选 AMD/Intel 核显);
    • vulkan:使用 Vulkan 后端(跨平台,兼容性一般);
    • 不设置:Ollama 自动选择(Windows 下优先directml,容易误选核显)。

OLLAMA_NUM_GPUS:(控制多少层模型跑在GPU上)

  • 作用:控制将多少层模型加载到 GPU 上,是「显存 vs 速度」的平衡开关。
  • 取值:
    • 0:所有层都加载到 CPU,等于禁用 GPU 计算(和OLLAMA_CPU_ONLY=1效果一致);
    • 999(推荐):尽可能将所有层加载到 GPU(自动适配模型层数);
    • 具体数字(如30):只将前 30 层加载到 GPU,剩余层回退到 CPU。
  • 关键逻辑:
    • 数值越大 → 更多层在 GPU → 推理速度越快,但占用显存越多;
    • 数值越小 → 更多层在 CPU → 速度变慢,但节省显存。
    • 999为特殊数字,即使模型有1200层,你写 999,仍然是尽可能将所有层加载到 GPU。

方式二:使用 PowerShell 方式配置环境变量

win+R输入:wt,按住ctrl + shift回车, 以管理员的身份运行 powershell。或者win + x打开快捷菜单,点击终端管理员

执行以下指令:

# 1. 允许GPU加速,禁用纯CPU模式[Environment]::SetEnvironmentVariable("OLLAMA_CPU_ONLY","0","Machine")# 2. 指定 GPU (填写你自己GPU的UUID)nvidia-smi-L[Environment]::SetEnvironmentVariable("CUDA_VISIBLE_DEVICES","<GPU_UUID>","Machine")# 3. 核心配置:4GB显存适配,仅将20层模型加载到GPU[Environment]::SetEnvironmentVariable("OLLAMA_GPU_LAYERS","20","Machine")# 4. 仅使用1块GPU[Environment]::SetEnvironmentVariable("OLLAMA_NUM_GPUS","1","Machine")

方式三:使用图形化界面方式配置环境变量

win+S打开搜索, 搜索系统环境变量,打开系统环境变量, 点击环境变量, 在系统变量中新增以下4个变量。

变量名说明
OLLAMA_CPU_ONLY0表示允许使用 GPU 加速
CUDA_VISIBLE_DEVICES<序号值/UUID>指定使用哪一块GPU
OLLAMA_GPU_LAYERScuda选择GPU计算后端
OLLAMA_NUM_GPUS999控制多少层模型跑在GPU上

1.2 Linux 系统

打开配置文件:

# 编辑当前用户的配置(仅当前用户生效)vim~/.bashrc# 或编辑系统配置(所有用户生效)# sudo vim /etc/profile

在文件末尾粘贴以下 4 行配置:

# ==============================================# Ollama GPU 加速配置# ==============================================exportOLLAMA_CPU_ONLY="0"# CUDA_VISIBLE_DEVICES="0",前提是你的服务器有NVIDIA显卡,并且系统分配的序列号为: 0号exportCUDA_VISIBLE_DEVICES="0"exportOLLAMA_GPU_LAYERS="cuda"exportOLLAMA_NUM_GPUS="999"

使配置生效:

# 针对 .bashrc (用户级)source~/.bashrc# 针对 /etc/profile (系统级)# source /etc/profile

二、运行与检测

环境变量配置完成后,需要关闭终端,重现打开一个窗口,或者重启电脑,让环境变量生效。

文章以deepseek-r1:1.5b模型为例,打开一个新的cmd 窗口执行以下指令:

ollama run deepseek-r1:1.5b

使用以下指令查看程序占用:

ollamaps

三、性能优化建议

  • 批处理优化:使用–batch-size调整批量大小,避免显存溢出。
  • 显存分配:启用–tensor-parallel进行多路张量并行。
  • 混合精度:设置–precision fp16bf16提升速度并降低显存占用。
  • 多模型调度:通过OLLAMA_SCHED_SPREAD=1跨多GPU分配任务。

四、常见问题

  • CUDA内存不足:降低–batch-size或启用–cpu-offload
  • 模型加载慢:增加–load-timeout或使用 NVMe SSD 存储模型。

通过以上配置,Ollama 可在 RTX 3060 等消费级显卡上流畅运行 13B 模型,并在高端 GPU 上支持更大规模的推理任务。


End

你好,少年,未来可期~

http://www.jsqmd.com/news/530635/

相关文章:

  • 别死记硬背了!用Python小项目理解计算机导论核心:二进制、补码与数据存储
  • 微信聊天记录永久保存与迁移完全指南:从数据备份到安全管理
  • Windows 10/11 本地部署 Coze-Studio 完整避坑指南:从 Docker 配置到知识库向量模型
  • DCT-Net卡通头像生成实战:从单张测试到自动化流水线
  • 别再只会抄Datasheet了!手把手教你用SY8113BADC设计一个3A输出的DCDC电源模块(附PCB布局避坑点)
  • Llama-3.2V-11B-cot惊艳案例:建筑设计图规范符合性自动审查
  • Face3D.ai Pro入门必看:理解面部拓扑回归中形状/表情/纹理三通道解耦机制
  • 医疗领域突破:GLM-4-9B-Chat-1M电子病历分析系统
  • ICC II 布线优化实战:从 route_auto 到 route_opt 的收敛之路
  • Phi-3-Mini-128K实际项目应用:集成至内部OA系统实现自然语言工单处理
  • RK3562开发板实战:从零构建安卓Linux智能家居控制中心
  • 模块导入失败完全解决指南:ComfyUI-Impact-Pack的环境配置终极方案
  • PyQt5 vs Tkinter:哪个更适合你的GUI开发需求?
  • ChatGLM-6B部署全流程视频配套标题:从零开始搭建稳定双语对话服务
  • UE5 Chaos破坏系统实战:从零开始打造电影级爆炸效果(含性能优化技巧)
  • FireRedASR语音识别工具效果展示:实测多场景音频,转文字准确率超高
  • 零基础玩转LiuJuan20260223Zimage:Docker+Gradio,小白也能轻松上手
  • vLLM-v0.17.1开源大模型部署教程:低成本GPU算力高效利用方案
  • 5款终极免费音频工具:用open-source-mac-os-apps打造专业级macOS音频工作流
  • 问题解决|MT5文本增强镜像常见部署问题汇总,附详细解决方案
  • OBS+腾讯会议双人连麦直播保姆级教程(含背景设计技巧)
  • 【底层心法】别让 Flash 拖垮你的 400MHz 内核!撕开链接器脚本 (.ld) 的黑盒,用 ITCM 榨干微控制器的最后一滴算力
  • s2-pro语音合成教程:通过Seed固定语音风格确保输出一致性
  • Tacport堡垒机实战:从零配置到Web界面访问的完整流程(附Redis集成技巧)
  • cv_unet_image-colorizationGPU算力优化:混合精度训练后模型FP16推理精度损失<0.3%
  • 2026年搪瓷拼装罐应用白皮书能源化工防腐储液剖析 - 优质品牌商家
  • FASTDDS v2.8.1在Linux上的极简安装:从下载到运行只需5步
  • 保姆级教程:在Ollama中玩转MiniCPM-V-2_6,支持视频理解
  • 前瞻2026:河北无机防火堵料采购指南与优质服务商解析 - 2026年企业推荐榜
  • 通义千问2.5-7B-Instruct快速入门:vLLM+WebUI部署指南