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

2 views (last 30 days)
研究で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
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
Hironobu Fujioka on 16 Oct 2019
michioさん
コメントありがとうございます。
環境についてですが、cuDNN(CUDA), display driverを
フリーのアンインストーラーで完全に削除し、
各々最新のバージョンでカスタムインストール→クリーンインストールを実行したところ
miniBatchSize=1の状況でですが、無事に動作をするようになりました。
他のminiBatchSizeではまだエラーが出てしまいますが…
現状として、plotも問題なく実行できています。
対応していただきありがとうございました。
もし、今後も改善策などありましたら、教えていただければと思います。
michio
michio on 16 Oct 2019
コメントありがとうございます。気持ちよい解決策が出せず無念です。

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!