登录
首页 >  科技周边 >  人工智能

为什么DeepSeek本地模型加载到了CPU而非GPU?

时间:2026-05-24 21:54:24 353浏览 收藏

怎么入门科技周边编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《为什么DeepSeek本地模型加载到了CPU而非GPU?》,涉及到,有需要的可以收藏一下

应首先检查PyTorch是否识别GPU,执行torch.cuda.is_available()验证CUDA支持;其次确认NVIDIA驱动、CUDA Toolkit与cuDNN版本匹配;再确保安装的是GPU版PyTorch而非CPU版;接着检查模型加载时device_map是否误设为"cpu";最后排查Accelerate或DeepSpeed配置是否强制启用CPU。

为什么DeepSeek本地模型加载到了CPU而非GPU?

如果您尝试运行本地部署的DeepSeek模型,但发现模型被加载到了CPU设备而非GPU,这通常不是随机行为,而是由环境配置、代码显式指定或依赖缺失共同导致的结果。以下是排查与修正该现象的具体步骤:

一、检查PyTorch是否识别到可用GPU

PyTorch必须能正确探测并初始化NVIDIA GPU设备,否则即使代码中未显式指定CPU,device_map="auto"等参数也会退化为仅使用CPU。此检查是定位问题的第一步。

1、在Python环境中执行以下代码:

import torch

print(torch.__version__)

print(torch.cuda.is_available())

print(torch.cuda.device_count())

print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else "No GPU detected")

2、若torch.cuda.is_available()返回False,说明PyTorch未启用CUDA支持,需进一步验证底层依赖。

二、验证CUDA与cuDNN环境完整性

NVIDIA驱动、CUDA Toolkit和cuDNN三者版本必须严格匹配PyTorch编译时所用的CUDA版本,任一缺失或错配都将导致GPU不可用。

1、在终端运行命令查看驱动与GPU状态:

nvidia-smi

2、若该命令报错或无输出,说明NVIDIA驱动未安装或未正常加载,需前往NVIDIA官网下载对应操作系统版本的最新驱动并重装。

3、若nvidia-smi正常显示GPU信息,再执行:

nvcc --version

4、对比PyTorch官方文档中当前安装版本所要求的CUDA版本(例如torch 2.1.0通常要求CUDA 11.8或12.1),若nvcc输出版本不匹配,则需重装对应版本的PyTorch

三、确认安装的是GPU版PyTorch而非CPU版

常见错误是在创建环境时误装了CPU-only版本的PyTorch,尤其当使用pip install torch时未指定索引源,会默认下载CPU版本。

1、卸载当前PyTorch:

pip uninstall torch torchvision torchaudio

2、访问https://pytorch.org/get-started/locally/,选择操作系统、包管理器、语言、计算平台(CUDA版本)后,复制生成的安装命令。

3、例如,针对CUDA 12.1,应执行:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

4、安装后再次运行torch.cuda.is_available(),必须返回True才表示GPU版已生效

四、检查模型加载代码中的device_map设置

transformers库的from_pretrained方法若显式指定device_map="cpu"或device="cpu",将强制绕过GPU;同时,device_map="auto"在GPU不可用时会静默回退至CPU,不报错也不提示。

1、检查模型加载语句是否包含以下任一写法:

model = AutoModelForCausalLM.from_pretrained(..., device_map="cpu")

model = AutoModelForCausalLM.from_pretrained(..., device="cpu")

2、若存在,将其修改为:

model = AutoModelForCausalLM.from_pretrained(..., device_map="auto")

3、对于仅含单卡的系统,也可显式指定:

model = AutoModelForCausalLM.from_pretrained(..., device_map={"": "cuda:0"})

4、禁止在device_map中传入字符串"cpu"或整数-1,否则必然绑定至CPU。

五、排查Hugging Face Accelerate或DeepSpeed配置干扰

若项目中启用了accelerate launch或集成DeepSpeed,其配置文件(如accelerate_config.yaml或ds_config.json)可能覆盖默认设备策略,强制启用CPU offload或禁用GPU。

1、检查是否存在accelerate_config.yaml文件,打开后确认以下字段值:

mixed_precision: "no"

use_cpu: false

gpu_ids: "all"

2、若use_cpu为true,立即改为false;若不存在该文件,可运行accelerate config重新交互生成配置。

3、检查启动命令是否含--cpu参数:

accelerate launch --cpu train.py

4、若有,删除--cpu参数并确保GPU可见后再运行。

好了,本文到此结束,带大家了解了《为什么DeepSeek本地模型加载到了CPU而非GPU?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多科技周边知识!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>