Upload
hoangtu
View
235
Download
0
Embed Size (px)
Citation preview
Matlab Distributed computing guide
Donghyeon KimDonghyeon Kim
1
Chapter 1.
PLSI PLSI 시스템시스템시스템시스템 접속방법접속방법접속방법접속방법
PLSI 시스템 접속방법 – windows
� 윈도우에서 PLSI에접속하기위해서는다음과같은
프로그램이필요합니다.
� SSH 접속프로그램 (Putty)
� X Window System (Xming)
� 다운로드주소� 다운로드주소
� Xming http://sourceforge.net/projects/xming/
� Putty http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
3
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
� Xming설치
4
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
5
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
6
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
7
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
8
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
9
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
10
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
� 설치후트레이바에 Xming실행확인
� PLSI matlab을실행하기위해서는 Xming이반드시
실행되어야합니다.
11
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
� Xming실행확인후, Putty를다운받고실행후, 다음과
같이입력하고 Save를클릭
12
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
� X11 forwarding 을위해서 Enable X11 forwarding을설정
13
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
� 다시 Save 클릭후 Open 클릭
14
PLSI 시스템 접속방법 – windows프로그램 설치 및 설정
� 처음시작시에는다음과같은메시지가뜨지만, 예를누른
후부터는뜨지않습니다.
15
PLSI 시스템 접속방법 – linux설정
� Linux는따로프로그램을설치할필요가없습니다.
터미널에서다음과같이명령어를입력하고접속합니다.
ssh -l 사용자ID -p 1022 login01.plsi.or.kr -XC
16
PLSI 시스템 접속방법
� X11 forwarding 이제대로되는지확인하기위하여 gedit를실행해
봅니다. gedit가제대로실행된다면 X11 forwarding이제대로되는
것입니다. 만약에러가난다면 Xming실행여부와 Putty의 X11
forwarding enable여부를확인해주세요. 리녹스에서안된다면 ssh
옵션중 –XC를넣었는지확인해주세요.
17
PLSI 시스템 접속방법
� ssh명령어로 matlab이설치되어있는 solbaram서버로
접속합니다.
� ssh solbaram-mg01
18
PLSI 시스템 접속방법
� module load 명령어로 matlab의 path를지정하고
matlab을실행합니다.
� module load applic/matlab/R2011b
� matlab
19
PLSI 시스템 접속방법
� 다음과같이 matlab이실행되는걸볼수있습니다.
20
Chapter 2.
Matlab Distributed ComputingMatlab Distributed Computing
Matlab Distributed Computing
� 프로그램을병렬화하는방법은일반적으로아래와같은
방법이있습니다.
1. Task Parallelization
2. Data Parallelization
22
� 이번장에서는위의방법론들에대해서간단히
소개하고예제를진행하도록하겠습니다.
� Task Parallelization은다음과같이
독립된여러가지일을분할하여
처리하는방식입니다.
Matlab Distributed ComputingTask Parallelization
Node 1
Time
Task 1
Node 2
23
Desktop Computer
Time
Task 1 Task 2Task
n…
Time
Task 2
Node n
Time
Task n
…
Matlab Distributed ComputingTask Parallelization - example
� Matlab task parallelization 을수행하기위하여
예제하나를진행하겠습니다.
� 아래의예제는 20000-by-20000 matrix A와 20000-by-1 matrix b를
각각 rand 함수로만든후 Ax의해를구하는작업을 15번반복하는
예제입니다.
< Task_serial.m >
24
< Task_serial.m >% task parallelization example - serial versiontic;sol = zeros(20000,20);for i = 1:15
A = rand(20000,20000);x = rand(20000,1);sol(:,i) = x;
endfprintf('Total time is : %f [sec]\n',toc);
Matlab Distributed ComputingTask Parallelization - example
� 아래는 Task parallelization으로병렬화한소스코드입니다.
< Task_parallel.m >% task parallelization example - parallel versiontic;sched = findResource();job = createJob(sched);set(job,'FileDependencies',{'MatrixMult.m'})for i = 1:15
task(i) = createTask(job,@MatrixMult,1,{});end
25
endsubmit(job)waitForState(job,'finished')results = getAllOutputArguments(job);fprintf('Total time is : %f [sec]\n',toc);< MatrixMult.m >function sol = MatrixMult()A = rand(20000,20000);x = rand(20000,1);sol = x;end
Matlab Distributed ComputingTask Parallelization - 소스해석
sched = findResource();� Matlab distributed computing system에서 사용 가능한 자원을 찾습니다.
job = createJob(sched);� 사용가능한 자원을 바탕으로 job(task의 묶음)을 생성합니다.
set(job,'FileDependencies',{'MatrixMult.m'})� Job 수행시 사용하는 사용자정의 함수파일을 설정합니다.
for i = 1:15task(i) = createTask(job,@MatrixMult,1,{});
26
task(i) = createTask(job,@MatrixMult,1,{});� task를 할당합니다. 위에서 지정한 사용자정의함수(MatrixMult)를 핸들러로 부르고,
사용자정의함수의 반환인자 개수(1개)와 입력인자(없음)를 설정합니다.endsubmit(job)
� Loadleveler에 job을 할당합니다.waitForState(job,'finished')
� Job이 끝날 때까지 GUI를 대기상태로 둡니다.results = getAllOutputArguments(job);
� 결과파일을 results에 저장합니다.
Matlab Distributed ComputingTask Parallelization - example
� 코드실행결과
� Serial : 157.53 [sec]
� Parallel : 34.92 [sec]
� 현재 solbaram-mg01에깔려있는 matlab distributed
computing system은 1노드당 4개의 worker가있고총
16노드, 64 worker를사용가능합니다. 하나의 task는
27
16노드, 64 worker를사용가능합니다. 하나의 task는
최소 1개의 worker를할당하지만, 1노드당 4개의
worker가메모리를공유하기때문에메모리를많이
사용하는문제인경우최대 16가지의 task를수행하는게
좋습니다.
Matlab Distributed ComputingTask Parallelization – example2
� 아래의예제는 10000개의입자에대한 500000번의 1D random
walk의해를구해는예제입니다.
< Task_serial2.m >% Task parallelization example2 - serial versionnIter = 500000;result = zeros(nIter*2+1,1);tic;for i = 1:10000
point = nIter+1;
28
point = nIter+1;for j = 1:nIter
if rand() > 0.5point=point+1;
else point=point-1;
endendresult(point) = result(point) +1;
endfprintf('Total time is : %f [sec]\n',toc);
Matlab Distributed ComputingTask Parallelization – example2
� 아래는 Task parallelization으로병렬화한코드입니다.
< Task_parallel2.m >% Task parallelization example2 - parallel versiontic;nIter = 500000;result = zeros(nIter*2+1,1);sched = findResource();job = createJob(sched);
29
job = createJob(sched);set(job,'FileDependencies',{'randomWalk.m'})for i = 1:10
task(i) = createTask(job,@randomWalk,1,{1000,500000});endsubmit(job)waitForState(job,'finished')results = getAllOutputArguments(job);for i = 1:10
result = result+results{i};endfprintf('Total time is : %f [sec]\n',toc);
Matlab Distributed ComputingTask Parallelization – example2
< randomWalk.m >function result = randomWalk(mole, iter)nIter = iter;result = zeros(nIter*2+1,1);for i = 1:mole
point = nIter+1;for j = 1:nIter
30
for j = 1:nIterif rand() > 0.5
point=point+1;else
point=point-1;end
endresult(point) = result(point) +1;
endend
Matlab Distributed ComputingTask Parallelization – example2
� 코드실행결과
� Serial : 216.53 [sec]
� Parallel : 31.55[sec]
� 10000개의입자에대해서각 worker당 1000개씩 10개의
worker 를써서해결한문제입니다.
31
� 10개의 worker를사용하였지만병렬화효율은
(시리얼코드시간/병렬코드시간)약 7입니다. 나머지는
병렬화딜레이및 worker간의통신으로발생한
손실입니다.
� Data Parallelization은하나의일을다수의
노드가함께수행하여처리시간을줄이는
방법입니다.
Matlab Distributed ComputingData Parallelization
Matlab Distributed
32
Desktop Computer
Task 1
Matlab Distributed
Computing System
Task 1
Matlab Distributed ComputingData Parallelization - example
� Matlab data parallelization을수행하기위하여
예제하나를진행하겠습니다.
� 아래의예제는 20000-by-20000 matrix A와 20000-by-1 matrix b를
각각 rand 함수로만든후 Ax=b를만족하는 x를구하는예제입니다.
< Data_serial.m >% Data parallelization example - serial version
33
% Data parallelization example - serial versiontic;A = rand(20000,20000);b = rand(20000,1);x = A\b;fprintf('Total time is : %f [sec]\n',toc);
Matlab Distributed ComputingData Parallelization - example
� 아래는 Data parallelization으로병렬화한소스코드입니다.
< Data_parallel.m >% Data parallelization example - parallel versionmatlabpool opentic;A = distributed.rand(20000, 20000);b = distributed.rand(20000,1);
34
b = distributed.rand(20000,1);x = A\b;fprintf('Total time is : %f [sec]\n',toc);matlabpool close
Matlab Distributed ComputingData Parallelization - 소스해석
� matlabpool open 64� Matlab data parallelization을 위한 matlab parallel session 열기(64개 lab 사용)
� tic;� A = distributed.rand(20000, 20000);
� Matlabpool에 참여하고있는 lab들의 전체 메모리를 공유하여 rand함수 실행� b = distributed.rand(20000,1);� x = A\b;
� 솔루션 계산
35
� 솔루션 계산� fprintf('Total time is : %f [sec]\n',toc);� matlabpool close
� matlab parallel session 닫기
Matlab Distributed ComputingData Parallelization
� 코드실행결과
� Serial : 360.62 [sec]
� Parallel : 96.38 [sec]
36
Matlab Distributed ComputingData Parallelization
� lablab은 worker와동일하게 1개의 CPU당하나이며, lab이많이투입될수록
연산속도가빨라지게됩니다. 하지만 solbaram-mg01시스템의최대lab수는
64개이기때문에한번에 64개를다사용한다면다른사람이사용할수없게
됩니다.
� Distributed data typeDistributed data type은 데이터를 각각의 lab의 메모리에 저장한 방식이며,
37
Distributed data type은 데이터를 각각의 lab의 메모리에 저장한 방식이며, 연산수행시 lab이 병렬적으로 연산하기 때문에 자연스럽게 data parallelization이 됩니다. 하지만, Distributed data type으로 실행할 수 있는함수는 일반적인 data type보다 상대적으로 작기 때문에 실행전 반드시호환여부를 확인하시는게 좋습니다.
� Distributed data type 호환함수 목록� http://www.mathworks.co.kr/help/toolbox/distcomp/f1-
6010.html#f1-6358
Matlab Distributed ComputingCode execute tip
� 코드가다완성이된상태라면 Matlab GUI환경으로
실행시키는것보다는 CUI환경으로실행시키는게더
편리합니다. Matlab CUI환경에서는 GUI없이간단한
명령어만으로코드가실행됩니다.
� matlab –nodesktop –nosplash
� -nodesktop : GUI화면안보이게하기
38
� -nodesktop : GUI화면안보이게하기
� -nosplash : 로고안보이게하기
Matlab Distributed ComputingCode execute tip
� 코드가다완성이된상태라면 Matlab GUI환경으로
실행시키는것보다는 CUI환경으로실행시키는게더
편리합니다. Matlab CUI환경에서는 GUI없이간단한
명령어만으로코드가실행됩니다.
� matlab –nodesktop –nosplash
� -nodesktop : GUI화면안보이게하기
� -nosplash : 로고안보이게하기
39
� -nosplash : 로고안보이게하기
� 이후 matlab명령어나스크립트를실행하시면됩니다.
� nohup과 &을이용한백그라운드작업은코드오류시
PLSI시스템이불안해질수있기때문에삼가해주시기
바랍니다.