pytorch Cuda.isVSCode .ipynb上为假,但在JupyterLab上为真

0h4hbjxa  于 2022-11-09  发布在  Vscode
关注(0)|答案(1)|浏览(142)

我想在一个gpu上训练一个VGG模型,因为我有很多图像(137 099),我需要这个过程走得更快。
对于这一点,我有一个笔记本:我的GPU在一个集群(SLURM)上,在那里我通过带有VSCode的remote-ssh由ssh连接。
我正在使用一个conda环境env 2,Python 3.7.12,torch 1.8.1+ cu 101,torch.版本.cuda == 10.1
在我的第一间牢房里,我确实

import torch

print(torch.cuda.is_available())

DEVICE    = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

然后我得到

False

DEVICE = 'cpu'

看起来系统无法访问gpu,我的VGG的训练确实很慢。
然而,如果我在笔记本电脑上使用!nvidia-smi,我可以看到gpu(TITAN X Pascal)
现在,我用python文件test.py代替笔记本test.ipynb(仍在带有env 2的VSCode上)进行了同样的尝试。

torch.cuda.is_available() = True,

训练也会更快。
如果我用JupyterLab运行test.ipynb,我还可以得到

torch.cuda.is_available() = True,

所以看起来VSCode不能从笔记本(test.ipynb)访问gpu,但是可以从python文件(test.py)访问,即使我对这两个文件使用相同的python内核(env 2)。
有人知道它是从哪里来的吗?
备注:

print(sys.executable) 

 > /home/manon/.conda/envs/env2/bin/python

test.py和测试.ipynb文件都适用

jjhzyzn0

jjhzyzn01#

实际上我已经弄明白了。我首先要创建一个隧道,这样我就可以使用远程Jupyter服务器运行Jupyter内核的脚本。我用以下代码创建了这个隧道:

jupyter notebook --ip localhost --port 3001 --no-browser

这个命令给了我一个URI:
您可以在本地主机上运行
然后,我单击VSCode状态栏中的“Jupyter Server:Local”按钮,选择了一个Jupyter远程服务器(您也可以使用“Jupyter:指定连接的本地或远程Jupyter服务器命令”)
并复制了先前在中获取的URI:“输入正在运行的Jupyter服务器的URI”。
在这之后,一切都很好

相关问题