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

研究で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

Réponses (1)

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

6 commentaires

Hironobu Fujioka
Hironobu Fujioka le 10 Oct 2019
Modifié(e) : Hironobu Fujioka le 10 Oct 2019
michioさん
回答ありがとうございます。
1, 2, 3共に試してみましたが、cudaのエラーが出てしまいました。(エラーの出る個数は減りましたが)
1,2両方で試したりもしましたが、結果は変わらずでした。
出たエラーとしては、先述のに加え、
CUDA_ERROR_MISALIGNED_ADDRESS
が出たりします。もしほかの改善策などありましたら、回答よろしくお願いします。
そうでしたか・・ miniBatchSize = 1 でも NG ですか。
trainingOptions で solver を "adam" から "sgdm" に変更するといかがでしょう。
実行前の reset が有効だったケースもみられます。
michioさん
コメントありがとうございます。
miniBatchSize=1でも無理でした。
Validationのタイミングでエラーが出ます(solver='adam')の場合
solver='sgdm'の場合はすぐにエラーが出ました。
また、resetの件ですが、プログラムの先頭で行った場合と、コマンドで実行した場合を試しましたが、今のところエラーが出ました。
もし、他に解決策などありましたら、教えていただきたいです。
よろしくお願いいたします。
そうでしたが、、困りました。
改めて初心に戻って確認させて頂きたいのですが、
> cuDNNはv7.6.2.24を用いています(最新のバージョン以外も試していますが、同じエラーが出ます。)
と記載頂いておりますが、参考まで試した cuDNN の他のバージョンを教えて頂けませんでしょうか?少し古いものの方がよいかも、という情報もありまして実際に試されたものがあれば教えて頂きたく。
また実行環境も参考まで
ver
と実行すると MATLAB のバージョンや OS の情報がでますので、そちら冒頭だけで構いませんのでお願いいたします。
michioさん
コメントありがとうございます。
環境についてですが、cuDNN(CUDA), display driverを
フリーのアンインストーラーで完全に削除し、
各々最新のバージョンでカスタムインストール→クリーンインストールを実行したところ
miniBatchSize=1の状況でですが、無事に動作をするようになりました。
他のminiBatchSizeではまだエラーが出てしまいますが…
現状として、plotも問題なく実行できています。
対応していただきありがとうございました。
もし、今後も改善策などありましたら、教えていただければと思います。
コメントありがとうございます。気持ちよい解決策が出せず無念です。

Connectez-vous pour commenter.

Catégories

En savoir plus sur Deep Learning Toolbox dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!