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行にあります。
事前にトレーニングされた重みは、別の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'}))
事前にトレーニングされたモデルが異なる数のCudaデバイスでトレーニングされている場合、そのエラーが発生する可能性があります。たとえば、モデルのトレーニング中に3つのCudaデバイスを使用していて、同じトレーニング済みモデルを1つのCudaデバイスのみのデバイスにロードしているとします。