宿主机必须先安装正确版本的NVIDIA驱动并重启,再通过conda创建CUDA环境、注册Jupyter kernel,最后在代码中显式调用.to('cuda')才能真正启用GPU;仅换kernel或调用torch.cuda.is_available()不等于GPU被实际使用。

确认宿主机 GPU 驱动已就绪
没装好 NVIDIA 驱动,后面所有步骤都白搭。Jupyter 本身不管理驱动,它只是 Python 进程的前端界面,真正调用 GPU 的是 PyTorch 或 TensorFlow —— 它们依赖系统级驱动和 CUDA 库。
先在终端运行:nvidia-smi。如果看到显卡型号、驱动版本和正在运行的进程列表,说明驱动已加载;如果报错 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,就得先装驱动,别急着配 Jupyter。
- Ubuntu 用户推荐用
apt install nvidia-driver-535(根据显卡型号选对应版本,40 系显卡建议 ≥525,A100/H100 建议 ≥535) - 不要用
sudo ./NVIDIA-Linux-*.run手动安装,容易破坏桌面环境 - 装完必须重启,或至少执行
sudo modprobe nvidia+sudo modprobe nvidia-uvm
用 conda 创建带 CUDA 支持的虚拟环境
pip 安装 PyTorch-GPU 极易出错,因为 pip 不处理 CUDA/cuDNN 的二进制兼容性。conda 能自动拉取匹配的 pytorch、cudatoolkit 和 cudnn 三件套。
执行以下命令(以 CUDA 11.8 为例):
conda create -n gpu_env python=3.10 conda activate gpu_env conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
注意:pytorch-cuda=11.8 是关键参数,不是 cuda-toolkit=11.8 —— 后者只装编译器,前者才带运行时库和 PyTorch 编译绑定。
- 别混用
pip install torch和 conda 安装,尤其不能在 conda 环境里用 pip 覆盖 torch - 验证是否装对:运行
python -c "import torch; print(torch.__config__.show())",输出里应含USE_CUDA=ON - conda-forge 渠道有时更新更快,但 PyTorch 官方渠道(
-c pytorch)更稳妥
把 conda 环境注册为 Jupyter kernel
Jupyter 默认只认 base 环境。你得手动把 gpu_env 暴露给它,否则 notebook 里 import torch 用的还是旧环境里的 CPU 版本。
在已激活的 gpu_env 中运行:
pip install ipykernel python -m ipykernel install --user --name gpu_env --display-name "Python (gpu_env)"
重启 Jupyter Notebook(不是刷新页面,是关掉进程再 jupyter notebook),新建 notebook 后右上角 Kernel → Change kernel → 选 Python (gpu_env)。
- 如果 kernel 列表里出现重复项,用
jupyter kernelspec list查路径,再用jupyter kernelspec remove xxx删除旧的 -
--display-name可自定义显示名,避免和其它环境混淆 - 不用装
nb_conda插件——它已过时,且和新版 conda 冲突
验证 GPU 是否真被 notebook 用上
光看 torch.cuda.is_available() 返回 True 不够。常见陷阱是:代码跑在 GPU 上,但数据没移过去,或者模型没 .to('cuda'),结果全程走 CPU。
在 notebook cell 中运行:
import torch
print("CUDA available:", torch.cuda.is_available())
print("Device count:", torch.cuda.device_count())
x = torch.randn(1000, 1000).cuda()
y = torch.randn(1000, 1000).cuda()
z = torch.mm(x, y) # 强制触发 GPU 计算
print("GPU memory allocated:", torch.cuda.memory_allocated() / 1024**2, "MB")关键看最后一行输出是否 > 0。如果一直是 0,说明 tensor 没真正上 GPU,检查 .cuda() 或 .to('cuda') 是否漏写,或是否误用了 .cpu()。
- PyTorch 2.0+ 推荐统一用
.to('cuda'),比.cuda()更安全(支持多卡和设备迁移) - TensorFlow 用户请用
tf.config.list_physical_devices('GPU'),不是tf.test.is_gpu_available()(已弃用) - 别信任务管理器里“GPU 利用率”,Jupyter 的 kernel 进程可能被系统调度器限制,要看
nvidia-smi的python进程实际占用
Jupyter 本身不决定是否用 GPU,它只是个壳。真正起作用的是 kernel 环境里 PyTorch/TensorFlow 的编译配置、CUDA 驱动状态、以及你代码里每一处 .to() 的调用。最容易忽略的,是以为换 kernel 就万事大吉,结果忘了改代码里的设备声明。


















