无效的设备序号,CUDA / TORCH

Posted

技术标签:

【中文标题】无效的设备序号,CUDA / TORCH【英文标题】:Invalid device Ordinal , CUDA / TORCH 【发布时间】:2018-11-19 21:14:18 【问题描述】:

我在 ubuntu 16.04 中运行脚本时遇到此错误。请多多包涵,我是 python 新手, 我已经检查了互联网上已经可用的选项,但无法修复它。

 RuntimeError: cuda runtime error (10) : invalid device ordinal at torch/csrc/cuda/Module.cpp:32

我目前正在运行这个文件。

from __future__ import print_function
from models import LipRead
import torch
import toml
from training import Trainer
from validation import Validator

print("Loading options...")
with open('options.toml', 'r') as optionsFile:
options = toml.loads(optionsFile.read())

if(options["general"]["usecudnnbenchmark"] and options["general"]    ["usecudnn"]):
print("Running cudnn benchmark...")
torch.backends.cudnn.benchmark = True

#Create the model.
model = LipRead(options)

if(options["general"]["loadpretrainedmodel"]):
model.load_state_dict(torch.load(options["general"]    ["pretrainedmodelpath"]))

#Move the model to the GPU.
if(options["general"]["usecudnn"]):
model = model.cuda(options["general"]["gpuid"])

trainer = Trainer(options)
validator = Validator(options)

for epoch in range(options["training"]["startepoch"], options["training"]["epochs"]):

if(options["training"]["train"]):
    trainer.epoch(model, epoch)

if(options["validation"]["validate"]):
    validator.epoch(model)

我怀疑这个文件与弹出的错误有关

Title = "TOML Example"

[general]
usecudnn = true
usecudnnbenchmark = true
gpuid = 0
loadpretrainedmodel = true
pretrainedmodelpath = "trainedmodel.pt"
savemodel = true
modelsavepath = "savedmodel.pt"

[input]
batchsize = 18
numworkers = 18
shuffle = true

[model]
type = "LSTM"
inputdim = 256 
hiddendim = 256
numclasses = 500
numlstms = 2

[training]
train = true
epochs = 15
startepoch = 10
statsfrequency = 1000
dataset = "/udisk/pszts-ssd/AV-ASR-data/BBC_Oxford/lipread_mp4"
learningrate = 0.003
momentum = 0.9
weightdecay = 0.0001

[validation]
validate = true
dataset = "/udisk/pszts-ssd/AV-ASR-data/BBC_Oxford/lipread_mp4"
saveaccuracy = true
accuracyfilelocation = "accuracy.txt"

错误主要出现在我终于到达的 gpuid 行中。

【问题讨论】:

什么错误?您的帖子不包含错误,还包括可能产生错误的源代码 @Lasitha 感谢您的评论,我正在编辑问题,看看您是否可以对其进行排序 你确定你有一个受支持的、工作的 GPU 吗?您能否正确运行 CUDA Toolkit 中的任何示例? 是的,我用过其他代码,它们工作正常 【参考方案1】:

预训练的权重可能会映射到不同的 gpuid。如果在多个 Cuda 设备上预训练的模型足够小,则可以在单个 GPU 上运行它。这是假设至少一批大小为 1 的批次适合可用的 GPU 和 RAM。

#WAS
model.load_state_dict(torch.load(final_model_file, map_location='cuda:0':'cuda:1'))
#IS
model.load_state_dict(torch.load(final_model_file, map_location='cuda:0':'cuda:0'))

【讨论】:

【参考方案2】:

如果在不同数量的 Cuda 设备上训练预训练模型,您可能会遇到该错误。例如,在训练模型时,您使用了 3 个 Cuda 设备,而现在您将相同的训练模型加载到只有一个 Cuda 设备的设备上。

【讨论】:

那么,当只有一个可用时,是否有可能使用在多个 Cuda 设备上预训练的模型? 检查@rigo 答案。您只需要传递要在 pytorch 中加载权重的设备。例如 net.load_state_dict(torch.load("weight_path.pth", map_location="cuda:0"))【参考方案3】:

尝试这样做

import torch
print(torch.cuda.is_available())

如果您的输出为 False,则表示 PyTorch 尚未检测到 GPU。 我遇到了同样的问题,重新安装 Pytorch 对我有用。 您可能还想看看这个https://github.com/pytorch/pytorch/issues/6098。

【讨论】:

以上是关于无效的设备序号,CUDA / TORCH的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 无效设备符号错误

CUDA可分离编译+共享库->无效的设备功能/段错误

Tensorflow-gpu 问题(CUDA 运行时错误:设备内核映像无效)

torch.cuda.stream(stream)

从设备到主机的 cudaMemcpy 中的参数无效错误

带有 CUDA 和 Nvidia 卡的 PyTorch:RuntimeError:CUDA 错误:所有支持 CUDA 的设备都忙或不可用,但 torch.cuda.is_available() 为 T