Deep Learning 모델 학습 시, GPU 점유율 및 Mini-Batch 크기에 따른 속도 향상 관련 문의

12 ビュー (過去 30 日間)
Jin Yong Kim
Jin Yong Kim 2024 年 8 月 27 日
コメント済み: Jin Yong Kim 2024 年 8 月 28 日
현재 2D, 1D 데이터를 함꼐 입력하여 데이터를 추정하는 Deep Learning 모델을 설계하여 활용하고 있습니다.
모델을 학습하는 과정에서 학습속도를 향상시키기 위해 Mini-batch 크기를 512에서 8192로 증가하였으나, 오히려 학습 속도가 감소하였습니다.
이러한 현상에 대한 이유를 알 수 있을까요?
그리고 학습 시, GPU를 사용하게 끔 설정했으나, GPU 점유율이 5% 이상을 넘지 않습니다. 모델이 단순해서 그런건지, GPU를 최대한 활용할 수 있게 옵션을 설정해야되는건지에 대해 문의드립니다.
아래는 현재 사용하고 있는 모델의 구조에 대한 정보입니다.
---------------------------------------------------------------------------------------
학습 데이터(S,S,C,N) = 9x9x26x596354 (입력1) / 596354x8 (입력2) / 596354x1 (출력)
net = dlnetwork;
tempNet = [
imageInputLayer([9 9 26],"Name","imageinput","Normalization","zscore")
convolution2dLayer([3 3],26,"Name","conv","Padding","same")
reluLayer("Name","relu")
averagePooling2dLayer([3 3],"Name","avgpool2d","Padding","same","Stride",[3 3])
fullyConnectedLayer(26,"Name","fc")
reluLayer("Name","relu_3")
flattenLayer("Name","flatten")];
net = addLayers(net,tempNet);
tempNet = featureInputLayer(8,"Name","featureinput");
net = addLayers(net,tempNet);
tempNet = [
concatenationLayer(1,2,"Name","concat")
fullyConnectedLayer(256,"Name","fc_1")
reluLayer("Name","relu_1")
fullyConnectedLayer(256,"Name","fc_2")
reluLayer("Name","relu_2")
fullyConnectedLayer(1,"Name","fc_3")];
net = addLayers(net,tempNet);
% 헬퍼 변수 정리
clear tempNet;
net = connectLayers(net,"featureinput","concat/in1");
net = connectLayers(net,"flatten","concat/in2");
net = initialize(net);
---------------------------------------------------------------------------------------

採用された回答

Angelo Yeo
Angelo Yeo 2024 年 8 月 28 日
안녕하세요.
미니 배치 사이즈를 키우면 한번에 빠르게 학습될 것 같지만 항상 그렇지는 않습니다. 말씀하신 "학습 속도"가 정확히 어떤 것인지 알 수는 없지만
(1) 배치 사이즈가 너무 크면 기본적으로 메모리에 올리는 과정에서 발생하는 오버헤드로 인해 매 iteration의 동작 속도 자체가 느려질 수 있습니다.
(2) 또, learning curve 상에서 볼 수 있는 전체적인 학습 속도도 감소할 수 있는데 그 이유는 배치 사이즈가 커지면 iteration 수가 감소하게 되며 가중치 업데이트 빈도가 감소하는 결과를 낳습니다. 따라서, learning rate이 적절히 조절되지 않은 상태에서 가중치가 드물게 업데이트 되면 전체적인 학습 속도도 느려질 수 있습니다.
위 두 상황에 대해 아주 극단적으로 생각해서 전체 데이터를 한번에 학습하는 경우를 생각해보십시오. 더 쉽게 이해하실 수 있으시리라 생각합니다.
뉴럴넷 학습 속도를 향상시키기 위한 전반적인 가이드라인을 아래와 같이 제공하고 있사오니 확인하여 주십시오.
또, 적절한 하이퍼파라미터를 알아내기 위해 보통 실험 설계를 많이 수행합니다. 아래 그림에서 alpha, beta 등으로로 표현되는 파라미터들을 바꿔가면서 (parameter sweeping 혹은 Bayesian optimization 을 지원합니다.) 최적의 결과를 내는 하이퍼 파라미터를 알아내는 방법입니다. 아래의 앱은 MATLAB의 Experiment Manager라는 앱이며 MATLAB 제품에 포함되어 있습니다.
실험 설계 앱에 관한 설명은 아래 문서에서 확인하실 수 있습니다.
실험 설계 앱에 관한 비디오 자료는 아래에서 확인할 수 있습니다.
마지막으로 trainingOptions가 잘 만들어진게 맞다면 현재 GPU의 점유율이 낮은 것은 모델이 너무 단순하기 때문으로 생각됩니다.
  1 件のコメント
Jin Yong Kim
Jin Yong Kim 2024 年 8 月 28 日
네, 도움이되었습니다. 감사합니다

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange빅 데이터 처리 についてさらに検索

製品


リリース

R2024a

Community Treasure Hunt

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

Start Hunting!