rtx2080tiとmatlab2019bでのdeep learningにおけるCUDA_ERROR_ILLEGAL_ADDRESS
Show older comments
研究でdeep learning toolbox, parallel computing toolboxを使用して
画像のノイズ除去の研究を行っています。
このCNN層を用いたノイズ除去を行っているのですが、cudaエラー CUDA_ERROR_ILLEGAL_ADDRESS
がコマンドウィンドウに出力され、
研究が進みません。
GPUはrtx 2080ti
display driverは436.48
cuda driverは10.1
cuDNNはv7.6.2.24を用いています(最新のバージョン以外も試していますが、同じエラーが出ます。)
改善策を教えていただきたいです。
使用しているプログラムは以下の通りです。
なお、XTrain, YTrainは4-Dの形で格納しています。
layers = [ ...
imageInputLayer([inputSize Timeblock 1],'Name','input')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv1')
batchNormalizationLayer('Name','BNorm1')
reluLayer('Name','relu1')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv2')
batchNormalizationLayer('Name','BNorm2')
reluLayer('Name','relu2')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv3')
batchNormalizationLayer('Name','BNorm3')
reluLayer('Name','relu3')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv4')
batchNormalizationLayer('Name','BNorm4')
reluLayer('Name','relu4')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv5')
batchNormalizationLayer('Name','BNorm5')
reluLayer('Name','relu5')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv6')
batchNormalizationLayer('Name','BNorm6')
reluLayer('Name','relu6')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv7')
batchNormalizationLayer('Name','BNorm7')
reluLayer('Name','relu7')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv8')
batchNormalizationLayer('Name','BNorm8')
reluLayer('Name','relu8')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv9')
batchNormalizationLayer('Name','BNorm9')
reluLayer('Name','relu9')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv10')
batchNormalizationLayer('Name','BNorm10')
reluLayer('Name','relu10')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv11')
batchNormalizationLayer('Name','BNorm11')
reluLayer('Name','relu11')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv12')
batchNormalizationLayer('Name','BNorm12')
reluLayer('Name','relu12')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv13')
batchNormalizationLayer('Name','BNorm13')
reluLayer('Name','relu13')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv14')
batchNormalizationLayer('Name','BNorm14')
reluLayer('Name','relu14')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv15')
batchNormalizationLayer('Name','BNorm15')
reluLayer('Name','relu15')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv16')
batchNormalizationLayer('Name','BNorm16')
reluLayer('Name','relu16')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv17')
batchNormalizationLayer('Name','BNorm17')
reluLayer('Name','relu17')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv18')
batchNormalizationLayer('Name','BNorm18')
reluLayer('Name','relu18')
convolution2dLayer(3,64,'Stride',[1 1],'Padding','same','Name','Conv19')
batchNormalizationLayer('Name','BNorm19')
reluLayer('Name','relu19')
convolution2dLayer(3,1,'Stride',[1 1],'Padding','same','Name','Convfin')
regressionLayer('Name','out')]
lgraph = layerGraph(layers);
options = trainingOptions('adam', ...
'InitialLearnRate',0.0003,...
'MaxEpochs',20, ...
'MiniBatchSize',12, ...
'Shuffle','every-epoch', ...
'L2Regularization', 0.004,...
'ExecutionEnvironment','auto',...
'OutputFcn',@(info)savetrainingplot(info),...
'ValidationData',{XValidation,YValidation}, ...
'ValidationFrequency',250, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropFactor',0.5, ...
'LearnRateDropPeriod',4, ...
'Plots','training-progress')
net=trainNetwork(XTrain,YTrain,lgraph,options);
エラー文は以下の通りです。
警告: CUDA 実行中に予期しないエラーが発生しました。CUDA エラー:
CUDA_ERROR_ILLEGAL_ADDRESS
> In nnet.internal.cnn/Trainer/train (line 87)
In trainNetwork>doTrainNetwork (line 260)
In trainNetwork (line 168)
In network_full (line 2092)
エラー: trainNetwork (line 170)
CUDA 実行中に予期しないエラーが発生しました。CUDA エラー:
CUDA_ERROR_ILLEGAL_ADDRESS
エラー: network_full (line 2092)
net=trainNetwork(XTrain,YTrain,lgraph,options);
原因:
エラー: gpuArray/gather
CUDA 実行中に予期しないエラーが発生しました。CUDA エラー:
CUDA_ERROR_ILLEGAL_ADDRESS
Answers (1)
michio
on 9 Oct 2019
プロットなどの表示に関わる処理とネットワークの学習処理、この双方に GPU を使用することがエラーの要因となっているケースが見られます。以下を試して頂いてエラーがでるかどうか確認頂けますでしょうか?
1:コマンドウィンドウで
opengl software
と実行した後に、エラーが発生した処理を再度実行。画像表示関係に GPU を使用しない設定です。設定状況は
opengl info
で確認でき、元の GPU を使う設定に戻す場合は
opengl hardware
を実行します。
2:画像表示関係を最小限に、すなわち trainingOptions の 'OutputFcn' を [] に、'Plots' を 'none' に設定してもエラーが発生しますでしょうか。
3:'MiniBatchSize' を小さくするのも効果があるかもしれません。
6 Comments
Hironobu Fujioka
on 10 Oct 2019
Edited: Hironobu Fujioka
on 10 Oct 2019
michio
on 10 Oct 2019
そうでしたか・・ miniBatchSize = 1 でも NG ですか。
trainingOptions で solver を "adam" から "sgdm" に変更するといかがでしょう。
実行前の reset が有効だったケースもみられます。
Hironobu Fujioka
on 14 Oct 2019
michio
on 15 Oct 2019
そうでしたが、、困りました。
改めて初心に戻って確認させて頂きたいのですが、
> cuDNNはv7.6.2.24を用いています(最新のバージョン以外も試していますが、同じエラーが出ます。)
と記載頂いておりますが、参考まで試した cuDNN の他のバージョンを教えて頂けませんでしょうか?少し古いものの方がよいかも、という情報もありまして実際に試されたものがあれば教えて頂きたく。
また実行環境も参考まで
ver
と実行すると MATLAB のバージョンや OS の情報がでますので、そちら冒頭だけで構いませんのでお願いいたします。
Hironobu Fujioka
on 16 Oct 2019
michio
on 16 Oct 2019
コメントありがとうございます。気持ちよい解決策が出せず無念です。
Categories
Find more on Deep Learning Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!