Jupyter Notebook中torch.cuda.device_count()返回0但is_available()返回True的问题
核心原因
你的Jupyter Notebook环境中CUDA_VISIBLE_DEVICES被设置为-1,这个值会强制屏蔽所有GPU设备,导致torch.cuda.device_count()返回0;而torch.cuda.is_available()返回True是因为系统本身的CUDA驱动与PyTorch版本匹配,该函数仅验证CUDA环境可用性,不检查GPU是否可见。
终端环境正常是因为终端的CUDA_VISIBLE_DEVICES未被设置为-1,PyTorch可以正常识别GPU。
解决步骤
临时修复(单次有效)
重启Jupyter Notebook内核后,先执行以下代码设置环境变量,再导入PyTorch:import os os.environ["CUDA_VISIBLE_DEVICES"] = "0" import torch # 验证 print(torch.cuda.device_count()) # 应返回1从终端启动Jupyter(彻底解决环境变量继承问题)
激活你的conda环境lol,然后直接从终端启动Jupyter:conda activate lol jupyter notebook这种方式下,Notebook会完全继承终端的环境变量,包括正确的GPU可见性配置。
检查Jupyter配置文件
查找Jupyter的配置文件jupyter_notebook_config.py(通常在~/.jupyter/目录下),检查是否存在强制设置环境变量的配置:c.NotebookApp.env = {'CUDA_VISIBLE_DEVICES': '-1'}如果有,将其删除或修改为
{'CUDA_VISIBLE_DEVICES': '0'},保存后重启Jupyter。检查conda环境激活脚本
查看~/anaconda3/envs/lol/etc/conda/activate.d/目录下的脚本文件,确认是否有设置CUDA_VISIBLE_DEVICES=-1的代码,如有则删除该配置。
内容的提问来源于stack exchange,提问作者Yiming Feng




