MATLAB
누리온 및 뉴론 시스템에서 MATLAB 데스크톱 및 MATLAB Parallel Server 사용 방법
원격데스크톱(VNC, 우분투 OS) 에서 MATLAB 데스크톱 프로그램을 사용할 수 있으며, 누리온 및 뉴론 시스템의 작업 스케줄러를 통해서 할당된 계산 노드에서 MATLAB Parallel Server를 사용하여 대규모 병렬 연산 작업을 실행할 수 있다. (MATLAB 지원 버전 : R2024a)
누리온 및 뉴론 시스템에서 MATLAB 데스크톱 및 MATLAB Parallel Server를 사용하기 위해서는 사용자(소속기관)가 라이선스를 보유해야 하며, 아래 지침에 따라 MATLAB 사용자 라이선스 활성화를 수행해야 한다.
보유 라이선스 현황 및 활성화된 컴퓨터를 확인하기 위해서는 Mathworks 계정에 접속하시기 바랍니다.
사용자 라이선스 관련 문의는 기관 라이선스 담당자 혹은 MathWorks 계정 및 라이선싱 에서 요청하시기 바랍니다.

가. MATLAB 데스크톱 프로그램 실행
1. APP 추가 클릭 후 추가할 앱 선택 화면에서 MATLAB via VNC를 선택한다.

2. 사용하고자 하는 CPU(GPU) 수 및 메모리 용량을 선택하고 추가 버튼을 클릭한다. MATLAB 데스크톱 프로그램을 실행하기 위해서는 최소 4GB 이상의 메모리가 필요하다.


3. APP 추가 후 대시보드 화면에서 matlab_vnc APP을 클릭하면 브라우저의 새로운 탭에서 VNC(원격 데스크톱)이 실행되며, 연결 버튼을 클릭하면 VNC 화면이 출력된다.



4. MATLAB 사용자 라이선스 활성화를 먼저 완료한 후, 바탕 화면에서 MATLAB 아이콘을 클릭하여 MATLAB 데스크톱 프로그램을 실행할 수 있다.

Academic individual 라이선스를 보유한 MATLAB 사용자는 아래와 같이 터미널에서 명령어를 입력하거나, 바탕화면에서 MATLAB r2024a_online 아이콘을 클릭하여 MATLAB 데스크톱 프로그램을 실행할 수 있다.
#> matlab -licmode onlinelicensing

MATLAB 사용자 라이선스 활성화 방법은 '나. MATLAB 사용자 라이선스 활성화' 를 참조하시기 바랍니다.
나. MATLAB 사용자 라이선스 활성화
MATLAB 데스크톱 및 Parallel Server를 실행하기 위해서는 온라인 라이선스 활성화 또는 사용자 MATLAB 라이선스 서버 연결이 필요하다.
1) 온라인 라이선스 활성화
온라인 Mathworks 계정 및 라이선스를 가진 사용자는 아래 절차에 따라 온라인 라이선스 활성화가 가능하다.
바탕 화면에서 MATLAB r2024a 아이콘을 클릭하여 실행된 Mathworks Product Activation 에서 사용자 Email 및 패스워드를 입력한다.

2. 사용자 보유 라이선스 목록에서 적절한 라이선스를 선택한다.

적절한 사용자 라이선스가 선택 되었는지 확인 후 Activate 버튼을 눌러 활성화 한다.


(유의사항-1) MATLAB Academic individual 라이선스 활성화
Academic individual 라이선스를 보유한 MATLAB 사용자는 아래와 같이 터미널에서 명령어를 입력하거나, 바탕화면에서 MATLAB r2024a_online 아이콘을 클릭하여 라이선스계정 인증을 통해 라이선스 활성화를 진행해야 합니다.
#> matlab -licmode onlinelicensing

(유의사항-2) MATLAB Parallel Server 온라인 라이선스 활성화
MATLAB Parallel Server의 온라인 라이선스를 활성화 하기 위해서는 아래 절차를 따라야 한다.
1) Mathworks 라이선스 센터에 접속하여 보유한 MATLAB Parallel Server 라이선스를 설치 및 활성화에서 온라인 라이선싱으로 변경한다. (단, Academic 라이선스를 보유한 사용자는 변경이 필요하지 않을 수도 있음)
2) MATLAB 데스크톱 프로그램 실행 후 Cluster Profile Manager의 누리온 및 뉴론 프로파일에서 관련 파라미터를 설정해야 한다.
(누리온 / 뉴론 프로파일 파라미터) RequiresOnlineLicensing : true
상기 파라미터를 설정하고 MATLAB Parallel Server 를 통해 병렬 작업을 처음 실행 할 때 아래와 같이 로그인 창이 뜨면 MathWorks 계정 정보를 입력해 MATLAB Parallel Server 라이선스를 활성화 하면 된다.



동일 라이선스에서 정해진 횟수 이상 활성화된 컴퓨터가 등록된 경우, MathWorks 계정의 라이선스 센터에서 활성화된 컴퓨터를 비활성화해야 한다.


2) 사용자 라이선스 서버 연결
사용자(기관)가 구축한 외부 MATLAB 라이선스 서버를 연결하는 라이선스 활성화 방법은 아래와 같이 라이선스 서버를 명기한 network.lic 파일을 생성하여 사용자 홈 디렉터리의 지정된 디렉터리에 저장해야 한다.
사용자가 MATALB VNC 앱을 종료한 후 재시작하는 경우에도 라이선스 활성화 작업을 반복할 필요가 없다.
외부 MATLAB 라이선스 서버와 연결을 허용하기 위해서는 KSC 홈페이지의 사용자 기술지원(상담) 게시판을 통해 담당자에게 라이선스 서버 IP 및 포트 번호를 기술하여 접속 허용을 요청해야 한다.
SERVER 192.168.100.101 50604GT654FG 27000
USE_SERVER
## 사용자 홈 디렉터리에 .matlab/R2024a 디렉터리를 생성한 후 라이선스 파일을 복사해야 함
#> mkdir -p ~/.matlab/R2024a_licenses
#> cp ~/network.lic ~/.matlab/R2024a_licenses
다. MATLAB 병렬 컴퓨팅
1) 로컬 서버에서 MATLAB 병렬 연산 작업 실행
MATLAB Parallel Computing Toolbox 라이선스를 보유한 사용자는 MATLAB 데스크톱 프로그램이 실행되고 있는 누리온/뉴론 MyKSC의 로컬 서버에서 MATLAB 병렬 연산을 실행할 수 있다. 아래 예시는 뉴론 MyKSC에서 MATLAB 병렬 연산 실행 예시이며, 누리온 MyKSC에서도 동일한 방식으로 실행할 수 있다.
MATLAB 데스크톱 프로그램의 Parallel computing options에서 Create and Manage Clusters... 메뉴의 Discover Clusters를 실행하여 뉴론 시스템을 위한MATLAB Parallel Server cluster로 'Neuron'을 선택하여 프로파일을 추가한다.


Cluster Profile Manager를 실행한다.

메뉴를 선택하여 Cluster Profile Manager를 실행하고 Cluster Profile에서 Processes를 선택하고 Set as Default 설정 후 Edit 버튼을 눌러서 MATLAB_VNC 앱에 할당된 CPU 코어 수 이내에서 Numworkers 값을 설정한다.

Command Window에서 사용자의 MATLAB 병렬 프로그램이 저장된 디렉터리로 이동하여 실행 명령어를 입력한다. 아래 예시에서는 MATLAB 데스크톱 프로그램이 실행되고 있는 로컬 서버에서 MALTAB 병렬 연산을 수행하는 방법을 보여주고 있다.
(뉴론 CPU 기반의 대화식 병렬 연산 작업실행 예시)
primeNumbers = primes(unit64(2^18));
compositeNumbers = primeNumbers.*primeNumbers(randperm(numel(primeNumbers)));
factors = zeros(numel(primeNumbers),2);
numWorkers = [1 2 3];
tLocal = zeros(size(numWorkers));
for w = 1:numel(numWorkers)
tic;
parfor (idx = 1:numel(compositeNumbers), numWorkers(w))
factors(idx,:) = factor(compositeNumbers(idx));
end
tLocal(w) = toc;
end
f = figure;
plot(numWorkers, tLocal);
title('Run time with the number of workers');
xlabel('Number of workers);
xticks(numWorkers);
ylabel('Run time(sec)');
pool = parpool('Processes', 3);
parallel_plot;
delete(pool);

(뉴론 GPU 기반의 대화식 병렬 연산 작업 실행 예시)
N=1000;
numIterations = 1000;
r = gpuArray.linspace(0,4,N);
x = rand(1,N,"gpuArray");
numGPUs = gpuDeviceCount("available");
parpool("Processes",numGPUs);
numSimulations = 100;
X = zeros(numSimulations,N,"gpuArray");
parfor i = 1:numSimulations
X(i,:) = rand(1,N,"gpuArray");
for n=1:numIterations
X(i,:) = r.*X(i,:).*(1-X(i,:));
end
end
figure
plot(r,X,'.');
numGPUS = gpuDeviceCount("available");
pool = ("Processes",numGPUS);
multi_gpu;
delete(pool);

2) 누리온/뉴론 계산 노드에서 MATLAB 병렬 연산 작업 실행
MATLAB Parallel Server 라이선스를 보유한 사용자는 누리온/뉴론 시스템의 계산 노드에서 MATLAB 병렬 연산 작업을 실행할 수 있다.
MATLAB Parallel Server를 통한 병렬 컴퓨팅 연산을 실행하기 위해서는 온라인 라이선스 활성화 또는 사용자 라이선스 서버 연결이 필요하며 사용자 MATLAB 사용자 라이선스 활성화를 참고 하시기 바랍니다.

a. 누리온
MATLAB 데스크톱 프로그램의 Parallel computing options에서 Create and Manage Clusters... 메뉴의 Discover Clusters를 실행하여 누리온 시스템을 위한MATLAB Parallel Server cluster로 'Nurion'을 선택하여 프로파일을 추가한다.


Cluster Profile 목록에서 Nurion을 선택하고 Set as Default 설정 후 Edit 버튼을 눌러서 아래와 같은 파라미터의 값을 설정한다.

Numworkers : 병렬 연산을 실행할 워커수를 지정한다. 누리온 시스템에서 matlab 병렬 연산을 위한 계산 노드는 노드 당 40개의 CPU 코어를 가지고 있다. 사용자의 MATLAB Parallel server 라이선스 수 이내에서 워커수를 짝수로 설정한다.
JobStorageLocation : 사용자의 스크래치 디렉터리에서 작업 정보가 저장될 경로를 지정한다.
RequiresOnlineLicensing : Matlab Parallel Server 온라인 라이선스 활성화를 위해서는 true로 설정한다. * MATLAB Parallel Server 라이선스도 온라인 라이선싱으로 변경 되어야 한다. (관련 링크)
EmailAddress : 작업 시작 및 종료 시 안내 메일을 받을 사용자 메일 주소를 지정한다.
QueueName: 누리온 시스템에서 MATLAB 병렬 연산을 위해 사용할 배치 작업 스케줄러(PBS Pro) 작업큐의 이름을 지정한다. 현재 norm_skl 큐만 사용 가능하다.


Command Window에서 사용자의MATLAB 병렬 프로그램이 저장된 디렉터리로 이동하여 실행 명령어를 입력한다. 아래 예제는 누리온 계산 노드의 MATLAB 워커에서 대화식 병렬 작업 및 일괄 처리식 병렬 작업을 실행하는 방법을 보여주고 있다.
(대화식 병렬 연산 작업실행 예시)
primeNumbers = primes(unit64(2^19));
compositeNumbers = primeNumbers.*primeNumbers(randperm(numel(primeNumbers)));
factors = zeros(numel(primeNumbers),2);
numWorkers = [1 2 4 8 16 32];
tLocal = zeros(size(numWorkers));
for w = 1:numel(numWorkers)
tic;
parfor (idx = 1:numel(compositeNumbers), numWorkers(w))
factors(idx,:) = factor(compositeNumbers(idx));
end
tLocal(w) = toc;
end
f = figure;
plot(numWorkers, tLocal);
title('Run time with the number of workers');
xlabel('Number of workers);
xticks(numWorkers);
ylabel('Run time(sec)');
pool = parpool('Nurion', 32);
parallel_plot;
delete(pool);

(일괄 처리식 병렬 연산 작업 실행 예시)
function [numWorkers,tLocal] = parallelFcn()
compositeNumbers = primeNumbers.*primeNumbers(randperm(numel(primeNumbers)));
factors = zeros(numel(primeNumbers),2);
numWorkers = [1 2 4 8 16 31];
tLocal = zeros(size(numWorkers));
for w = 1:numel(numWorkers)
tic;
parfor (idx = 1:numel(compositeNumbers), numWorkers(w))
factors(idx,:) = factor(compositeNumbers(idx));
end
tLocal(w) = toc;
end
end
totalNumberOfWorkers = 32;
cluster = parcluster("Nurion");
job = batch(cluster,'parallelFcn',2,{},'Pool', totalNumberOfWorkers-1,'CurrentFolder','.');
results=fetchOutputs(job);
numWorkers=results{1};
tLocal=results{2};
disp(numWorkers);
disp(tLocal);

b. 뉴론
MATLAB 데스크톱 프로그램의 Parallel computing options에서 Create and Manage Clusters... 메뉴의 Discover Clusters를 실행하여 뉴론 시스템을 위한 MATLAB Parallel Server cluster로 Neuron을 선택하여 프로파일을 추가한다.


Cluster Profile 목록에서 Neuron을 선택하고 Set as Default 설정 후 Edit 버튼을 눌러서 아래와 같은 파라미터의 값을 설정한다.

Numworkers : 병렬 연산을 실행할 워커수를 지정한다. 뉴론 시스템에서 matlab 병렬 연산을 위한 계산 노드는 다양한 구성을 가지고 있다. 사용자의 MATLAB Parallel server 라이선스 수 이내에서 워커수를 설정한다.
JobStorageLocation : 사용자의 스크래치 디렉터리에서 작업 정보가 저장될 경로를 지정한다.
RequiresOnlineLicensing : Matlab Parallel Server 온라인 라이선스 활성화를 위해서는 true로 설정한다. * MATLAB Parallel Server 라이선스도 온라인 라이선싱으로 변경 되어야 한다. (관련 링크)
EmailAddress : 작업 종료 시 안내 메일을 보낼 사용자 메일 주소를 지정한다.
GPU: 계산 노드 당 GPU 수를 지정한다.
MemPerCPU : CPU 코어 당 메모리 용량을 지정한다.
Nodes : 계산 노드 수를 지정한다.
Partition: 파티션(큐)를 지정한다.
TaskPerNode: 계산 노드 당 타스크 수를 지정한다.


( CPU 기반의 일괄 처리식 병렬 연산 작업 실행 예시)
function [numWorkers,tLocal] = parallelFcn()
primeNumbers = primes(unit64(2^18));
compositeNumbers = primeNumbers.*primeNumbers(randperm(numel(primeNumbers)));
factors = zeros(numel(primeNumbers),2);
numWorkers = [1 2 4 8 16 31];
tLocal = zeros(size(numWorkers));
for w = 1:numel(numWorkers)
tic;
parfor (idx = 1:numel(compositeNumbers), numWorkers(w))
factors(idx,:) = factor(compositeNumbers(idx));
end
tLocal(w) = toc;
end
end
totalNumberOfWorkers = 32;
cluster = parcluster("Neuron");
job = batch(cluster,'parallelFcn',2,{},'Pool', totalNumberOfWorkers-1,'CurrentFolder','.');
results=fetchOutputs(job);
numWorkers=results{1};
tLocal=results{2};
disp(numWorkers);
disp(tLocal);

( GPU 기반의 대화식 병렬 연산 작업 실행 예시)
N = 10000;
numIterations = 10000;
numSimulations = 1000;
r = linspace(0, 4, N);
spmd
gpuID = gpuDevice;
fprintf("GPU %d is using...\n", gpuID.Index);
r_gpu = gpuArray(r);
X = rand(numSimulations, N, 'gpuArray');
for n = 1:numIterations
X = r_gpu .* X .* (1 - X);
end
X = gather(X);
end
X_final = cat(1, X{:});
figure
plot(r, X_final, '.');
title('Multi-GPU Logistic Map Simulation');
xlabel('r');
ylabel('X');
pool = parpool('Neuron', 4);
multi_node_gpu;
delete(pool);


라. 참고 자료
1) MATLAB 병렬 연산 관련 참고 자료
2) 자주 발생하는 문제의 해결 방법
Last updated