MATLAB Answers

0

rtx2080tiと​matlab2019​bでのdeep learningにお​けるCUDA_ERR​OR_ILLEGAL​_ADDRESS

Asked by Hironobu Fujioka on 8 Oct 2019
Latest activity Commented on by michio
on 16 Oct 2019
研究で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

  0 Comments

Sign in to comment.

1 Answer

Answer by michio
on 9 Oct 2019

プロットなどの表示に関わる処理とネットワークの学習処理、この双方に GPU を使用することがエラーの要因となっているケースが見られます。以下を試して頂いてエラーがでるかどうか確認頂けますでしょうか?
1:コマンドウィンドウで
opengl software
と実行した後に、エラーが発生した処理を再度実行。画像表示関係に GPU を使用しない設定です。設定状況は
opengl info
で確認でき、元の GPU を使う設定に戻す場合は
opengl hardware
を実行します。
2:画像表示関係を最小限に、すなわち trainingOptions 'OutputFcn' [] に、'Plots' 'none' に設定してもエラーが発生しますでしょうか。
3:'MiniBatchSize' を小さくするのも効果があるかもしれません。

  6 Comments

michio
2019 年 10 月 15 日
そうでしたが、、困りました。
改めて初心に戻って確認させて頂きたいのですが、
> cuDNNはv7.6.2.24を用いています(最新のバージョン以外も試していますが、同じエラーが出ます。)
と記載頂いておりますが、参考まで試した cuDNN の他のバージョンを教えて頂けませんでしょうか?少し古いものの方がよいかも、という情報もありまして実際に試されたものがあれば教えて頂きたく。
また実行環境も参考まで
ver
と実行すると MATLAB のバージョンや OS の情報がでますので、そちら冒頭だけで構いませんのでお願いいたします。
michioさん
コメントありがとうございます。
環境についてですが、cuDNN(CUDA), display driverを
フリーのアンインストーラーで完全に削除し、
各々最新のバージョンでカスタムインストール→クリーンインストールを実行したところ
miniBatchSize=1の状況でですが、無事に動作をするようになりました。
他のminiBatchSizeではまだエラーが出てしまいますが…
現状として、plotも問題なく実行できています。
対応していただきありがとうございました。
もし、今後も改善策などありましたら、教えていただければと思います。
michio
2019 年 10 月 16 日
コメントありがとうございます。気持ちよい解決策が出せず無念です。

Sign in to comment.