MATLAB Deep Learning Toolbox 설치 및 수행 – RHEL7/Centos7 환경

MATLAB Deep Learning Toolbox 설치 및 수행 – RHEL7/Centos7 환경

 

  1. MATLAB 다운로드 및 설치

 

https://kr.mathworks.com/discovery/deep-learning.html

 

우측 상단 소프트웨어 평가판 다운로드

 

 

신청에 관련된 기본 정보 입력하면, 아래와 같이 Trial License 코드와 패키지를 다운로드 받을 수 있음.

 

위의 라이선스 ID 를 기록해 두고, Linux (64-bit) 버튼을 클릭한다.

 

다운로드를 받으면 아래와 같은 패키지 파일을 다운 받는다

matlab_R2018b_glnxa64.zip

 

설치하고자 하는 서버의 /usr/local/src 에 해당 파일을 복사해 둔다.

 

# cd /usr/local/src

# mkdir MATLAB_SRC; mv matlab_R2018b_glnxa64.zip MATLAB_SRC

# cd MATLAB_SRC; unzip matlab_R2018b_glnxa64.zip

# ./install

 

Mathlab 설치 시 라이선스 인증과 부가 toolbox 설치 시 인터넷 연결이 반드시 필요하다.

인터넷 동작 유무를 확인한다. (연구소와 같이 외부 인터넷 연결이 차단된 경우, Proxy 를 통한 연결등을

Connection Settings 에서 확인이 가능하다. 외부 인터넷 연결이 되는 환경에서는 그냥 Next 를 선택함.

 

 

라이선스 동의 체크하고 Next

 

라이선스를 신청할 때 사용한 이메일과 패스워드를 입력한다. 만일 조직 단위로 라이선스 계약이 체결된

경우 회사나 학교 정식 메일 주소로 연결을 하도록 한다.

 

해당하는 라이선스를 선택하고 Next (위에서 확인한 평가판 라이선스 ID 부분이 여기에 들어있어야 한다)

 

설치 위치 지정하고 Next

 

사용하고자 하는 Toolbox 선택하고 Next (MATLAB, Deep Learning Toolbox, Parallel Computing Toolbox 는 반드시 선택)

 

Matlab 명령을 기본 PATH 위치에 link 함.

 

설치 진행됨. ..

 

 

  1. MATLAB 사용하기

 

MATLAB 을 실행하는 명령어는 matlab 이다.

아래는 몇가지 실행 방법이다.

 

# matlab   : 일반적인 실행 방법

# matlab -nosplash -desktop : matlab 실행 시 최소 띄위지는 아래 splash 를 띄우지 않는다.

스케줄러를 통해 matlab 을 실행할 경우, Splash 가 뜬 후, 실제 Matlab gui 가 실행된다.

이때 스케줄러 내에 DISPLAY 변수가 splash 에만 적용되고, 두번째 띄워지는 matlab gui 에는

반영되지 않는 문제가 있다. 스케줄러 상에서 matlab gui 실행 시 사용되는 명령 구문 .

 

# matlab -nodisplay -nosplash : 배치모드로 사용할때 gui 를 띄우지 않고 수행하는 방법이다.

# matlab -nosoftwareopengl : 3D GL driver 가 있을 경우, 이용한다. Matlab 에는 3D 그래프등 다양한
이미지 처리 기능이 있다. 이때 HW 그래픽 가속이 필요할 수 있다.

 

일단 기본 방법으로 실행하면 아래와 같이 matlab gui 가 실행된다.

 

# matlab

 

가운데 명령 창을 통해 matlab code 를 실행해 보면 동작 유무를 확인할 수 있다.

 

기본적인 동작 유무 확인으로 plot 차트를 하나 그려본다.

아래와 같이 파일을 하나 만든다. VI 편집기로 만들어도 되고, matlab에서 좌측에 “새로만들기” 버튼을

누르면 편집기가 생성된다. 내용을 복사한 후, fluent2.log 명으로 저장

 

 

# vi fluent2.log

1 1.0000e+00

2 1.0000e+00

3 5.9437e-01

4 5.2764e-01

5 3.7845e-01

6 3.4240e-01

7 2.7706e-01

8 2.1786e-01

9 1.7236e-01

10 1.4756e-01

11 1.3594e-01

12 1.7600e-01

13 1.5246e-01

14 1.2266e-01

15 1.0237e-01

16 9.2072e-02

.

.

 

이 파일 내용으로 plot 을 그려 본다.

MATLAB 명령창에 아래 내용을 입력하면 된다.

 

A=textread (‘fluent2.log’)

plot (A(:,1),A(:,2))

 

 

다음 테스트를 위해 명령창 내용을 지워본다

 

>> clc

 

우측 레이어창을 보면 앞 작업에 사용한 MATLAB 변수가 저장되어 있다. 이 부분도 지운다.

 

>> clearvars

 

테스트 하는 MATLAB 코드가 복잡한 경우 일일이 복사하기 귀찮을 수 있다.

이때는 MATLAB 코드 구문을 파일로 저장해 두고, 해당 스크립트 파일을 실행하여 처리할 수도 있다.

 

우측에 파일 explore 창의 matlab_mnist.m 파일을 열어본다. 그럼 편집기가 열리면 내용이 나타난다.

 

위 내용을 run 명령으로 일괄적으로 자동 실행해 본다.

MATLAB 명령창에 아래 내용 실행

 

script_name = ‘matlab_mnist.m’

run (script_name)

 

그럼..아래와 같이 모든 코드 내용이 자동으로 실행되어 진다.

 

  1. MATLAB 딥러닝 코드 실행하기

 

아래 사이트에 MATLAB으로 실행해 볼 수 있는 딥러닝 예제가 여러 있다.

한줄 한줄 MATLAB 명령창에 복사하여 실행해 보며 코드 내용을 검증한다.

 

https://kr.mathworks.com/solutions/deep-learning/examples.html

 

딥러닝 Training 단계에서 GPU 가 장착된 시스템이라면 자동으로 GPU 가 이용되고,

Multi Core 환경에서는 자동으로 Multi Threads로 병렬계산 되는 것을 확인할 수 있을 것이다.

 

추천 샘플

 

//// 기본적인 동작 유무 확인에 적함.

 

# vi matlab_mnist.m

=====================================================

digitDatasetPath = fullfile(matlabroot,’toolbox’,’nnet’,’nndemos’, …

‘nndatasets’,’DigitDataset’);

 

imds = imageDatastore(digitDatasetPath, …

‘IncludeSubfolders’,true,’LabelSource’,’foldernames’);

 

figure;

perm = randperm(10000,20);

for i = 1:20

subplot(4,5,i);

imshow(imds.Files{perm(i)});

end

 

labelCount = countEachLabel(imds)

 

img = readimage(imds,1);

size(img)

 

 

numTrainFiles = 750;

[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,’randomize’);

 

 

layers = [

imageInputLayer([28 28 1])

 

convolution2dLayer(3,8,’Padding’,’same’)

batchNormalizationLayer

reluLayer

 

maxPooling2dLayer(2,’Stride’,2)

 

convolution2dLayer(3,16,’Padding’,’same’)

batchNormalizationLayer

reluLayer

 

maxPooling2dLayer(2,’Stride’,2)

 

convolution2dLayer(3,32,’Padding’,’same’)

batchNormalizationLayer

reluLayer

 

fullyConnectedLayer(10)

softmaxLayer

classificationLayer];

 

 

options = trainingOptions(‘sgdm’, …

‘InitialLearnRate’,0.01, …

‘MaxEpochs’,4, …

‘Shuffle’,’every-epoch’, …

‘ValidationData’,imdsValidation, …

‘ValidationFrequency’,30, …

‘Verbose’,false, …

‘Plots’,’training-progress’);

 

net = trainNetwork(imdsTrain,layers,options);

 

YPred = classify(net,imdsValidation);

YValidation = imdsValidation.Labels;

 

accuracy = sum(YPred == YValidation)/numel(YValidation)

====================================================

 

/// 조금 그래픽한 결과를 보기 싶을때 .

/// 단 실행 시 alexnet toolbox 를 설치해야함.

# vi matlab_alexnet.m

====================================================

net = alexnet;

net.Layers

 

layer = 23;

channels = [9 188 231 563 855 975];

 

net.Layers(end).Classes(channels)

I = deepDreamImage(net,layer,channels);

 

figure

I = imtile(I);

imshow(I)

iterations = 100;

channels = 9;

I = deepDreamImage(net,layer,channels, …

‘Verbose’,false, …

‘NumIterations’,iterations);

 

figure

imshow(I)

levels = 4;

channels = 739;

 

I = deepDreamImage(net,layer,channels, …

‘Verbose’,false, …

‘NumIterations’,iterations, …

‘PyramidLevels’,levels);

 

figure

imshow(I)

====================================================

 

/// GPU vs CPU 성능 차이를 BMT 할때 적합함.

# matlab_seq2seq.m

====================================================

load HumanActivityTrain

XTrain

 

X = XTrain{1}(1,:);

classes = categories(YTrain{1});

 

figure

for j = 1:numel(classes)

label = classes(j);

idx = find(YTrain{1} == label);

hold on

plot(idx,X(idx))

end

hold off

 

xlabel(“Time Step”)

ylabel(“Acceleration”)

title(“Training Sequence 1, Feature 1”)

legend(classes,’Location’,’northwest’)

 

featureDimension = 3;

numHiddenUnits = 100;

numClasses = 5;

 

layers = [ …

sequenceInputLayer(featureDimension)

lstmLayer(numHiddenUnits,’OutputMode’,’sequence’)

fullyConnectedLayer(numClasses)

softmaxLayer

classificationLayer];

 

options = trainingOptions(‘adam’, …

‘GradientThreshold’,1, …

‘InitialLearnRate’,0.01, …

‘LearnRateSchedule’,’piecewise’, …

‘LearnRateDropPeriod’,20, …

‘Verbose’,0, …

‘Plots’,’training-progress’);

 

net = trainNetwork(XTrain,YTrain,layers,options);

 

load HumanActivityTest

figure

plot(XTest’)

xlabel(“Time Step”)

legend(“Feature ” + (1:featureDimension))

title(“Test Data”)

 

YPred = classify(net,XTest);

 

acc = sum(YPred == YTest)./numel(YTest)

 

figure

plot(YPred,’.-‘)

hold on

plot(YTest)

hold off

 

xlabel(“Time Step”)

ylabel(“Activity”)

title(“Predicted Activities”)

legend([“Predicted” “Test Data”])

====================================================

 

 

/// CPU Multi Threads 성능 테스트 시 적합 .

 

# matlab_lstm.m

====================================================

[XTrain,YTrain] = japaneseVowelsTrainData;

XTrain(1:5)

 

figure

plot(XTrain{1}’)

xlabel(“Time Step”)

title(“Training Observation 1”)

legend(“Feature ” + string(1:12),’Location’,’northeastoutside’)

 

numObservations = numel(XTrain);

for i=1:numObservations

sequence = XTrain{i};

sequenceLengths(i) = size(sequence,2);

end

 

[sequenceLengths,idx] = sort(sequenceLengths);

XTrain = XTrain(idx);

YTrain = YTrain(idx);

 

figure

bar(sequenceLengths)

ylim([0 30])

xlabel(“Sequence”)

ylabel(“Length”)

title(“Sorted Data”)

 

miniBatchSize = 27;

 

inputSize = 12;

numHiddenUnits = 100;

numClasses = 9;

 

layers = [ …

sequenceInputLayer(inputSize)

bilstmLayer(numHiddenUnits,’OutputMode’,’last’)

fullyConnectedLayer(numClasses)

softmaxLayer

classificationLayer]

 

maxEpochs = 100;

miniBatchSize = 27;

 

options = trainingOptions(‘adam’, …

‘ExecutionEnvironment’,’cpu’, …

‘GradientThreshold’,1, …

‘MaxEpochs’,maxEpochs, …

‘MiniBatchSize’,miniBatchSize, …

‘SequenceLength’,’longest’, …

‘Shuffle’,’never’, …

‘Verbose’,0, …

‘Plots’,’training-progress’);

 

net = trainNetwork(XTrain,YTrain,layers,options);

 

[XTest,YTest] = japaneseVowelsTestData;

XTest(1:3)

 

numObservationsTest = numel(XTest);

for i=1:numObservationsTest

sequence = XTest{i};

sequenceLengthsTest(i) = size(sequence,2);

end

[sequenceLengthsTest,idx] = sort(sequenceLengthsTest);

XTest = XTest(idx);

YTest = YTest(idx);

 

miniBatchSize = 27;

YPred = classify(net,XTest, …

‘MiniBatchSize’,miniBatchSize, …

‘SequenceLength’,’longest’);

 

acc = sum(YPred == YTest)./numel(YTest)

===================================================

 

 

  1. 터미널 명령창에서 Batch 모드 실행 방법

 

matlab -nosplash -nodesktop -r “try, run(‘<MATLAB_스크립트파일명>’), catch e, disp(getReport(e)), exit(1), end, exit(0);”

 

매번 명령 구문 입력하기 번거로우니 wrapper 스크립트를 하나 작성한다.

 

# vi /usr/local/bin/run_matlab

===================================================

#!/bin/sh

 

matlab -nosplash -nodesktop -r “try, run(‘$1’), catch e, disp(getReport(e)), exit(1), end, exit(0);”

===================================================

 

# chmod 755 /usr/local/bin/run_matlab

 

Matlab 스크립트가 있는 곳으로 가서..위의 딥러닝 스크립트 예제를 실행해 본다.

 

# run_matlab matlab_mnist.m

 

 

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.