matlab distributed computing guide

39
Matlab Distributed computing guide Donghyeon Kim Donghyeon Kim 1

Upload: hoangtu

Post on 09-Feb-2017

232 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Matlab Distributed computing guide

Matlab Distributed computing guide

Donghyeon KimDonghyeon Kim

1

Page 2: Matlab Distributed computing guide

Chapter 1.

PLSI PLSI 시스템시스템시스템시스템 접속방법접속방법접속방법접속방법

Page 3: Matlab Distributed computing guide

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

Page 4: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

� Xming설치

4

Page 5: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

5

Page 6: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

6

Page 7: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

7

Page 8: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

8

Page 9: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

9

Page 10: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

10

Page 11: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

� 설치후트레이바에 Xming실행확인

� PLSI matlab을실행하기위해서는 Xming이반드시

실행되어야합니다.

11

Page 12: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

� Xming실행확인후, Putty를다운받고실행후, 다음과

같이입력하고 Save를클릭

12

Page 13: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

� X11 forwarding 을위해서 Enable X11 forwarding을설정

13

Page 14: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

� 다시 Save 클릭후 Open 클릭

14

Page 15: Matlab Distributed computing guide

PLSI 시스템 접속방법 – windows프로그램 설치 및 설정

� 처음시작시에는다음과같은메시지가뜨지만, 예를누른

후부터는뜨지않습니다.

15

Page 16: Matlab Distributed computing guide

PLSI 시스템 접속방법 – linux설정

� Linux는따로프로그램을설치할필요가없습니다.

터미널에서다음과같이명령어를입력하고접속합니다.

ssh -l 사용자ID -p 1022 login01.plsi.or.kr -XC

16

Page 17: Matlab Distributed computing guide

PLSI 시스템 접속방법

� X11 forwarding 이제대로되는지확인하기위하여 gedit를실행해

봅니다. gedit가제대로실행된다면 X11 forwarding이제대로되는

것입니다. 만약에러가난다면 Xming실행여부와 Putty의 X11

forwarding enable여부를확인해주세요. 리녹스에서안된다면 ssh

옵션중 –XC를넣었는지확인해주세요.

17

Page 18: Matlab Distributed computing guide

PLSI 시스템 접속방법

� ssh명령어로 matlab이설치되어있는 solbaram서버로

접속합니다.

� ssh solbaram-mg01

18

Page 19: Matlab Distributed computing guide

PLSI 시스템 접속방법

� module load 명령어로 matlab의 path를지정하고

matlab을실행합니다.

� module load applic/matlab/R2011b

� matlab

19

Page 20: Matlab Distributed computing guide

PLSI 시스템 접속방법

� 다음과같이 matlab이실행되는걸볼수있습니다.

20

Page 21: Matlab Distributed computing guide

Chapter 2.

Matlab Distributed ComputingMatlab Distributed Computing

Page 22: Matlab Distributed computing guide

Matlab Distributed Computing

� 프로그램을병렬화하는방법은일반적으로아래와같은

방법이있습니다.

1. Task Parallelization

2. Data Parallelization

22

� 이번장에서는위의방법론들에대해서간단히

소개하고예제를진행하도록하겠습니다.

Page 23: Matlab Distributed computing guide

� 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

Page 24: Matlab Distributed computing guide

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);

Page 25: Matlab Distributed computing guide

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

Page 26: Matlab Distributed computing guide

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에 저장합니다.

Page 27: Matlab Distributed computing guide

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를수행하는게

좋습니다.

Page 28: Matlab Distributed computing guide

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);

Page 29: Matlab Distributed computing guide

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);

Page 30: Matlab Distributed computing guide

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

Page 31: Matlab Distributed computing guide

Matlab Distributed ComputingTask Parallelization – example2

� 코드실행결과

� Serial : 216.53 [sec]

� Parallel : 31.55[sec]

� 10000개의입자에대해서각 worker당 1000개씩 10개의

worker 를써서해결한문제입니다.

31

� 10개의 worker를사용하였지만병렬화효율은

(시리얼코드시간/병렬코드시간)약 7입니다. 나머지는

병렬화딜레이및 worker간의통신으로발생한

손실입니다.

Page 32: Matlab Distributed computing guide

� Data Parallelization은하나의일을다수의

노드가함께수행하여처리시간을줄이는

방법입니다.

Matlab Distributed ComputingData Parallelization

Matlab Distributed

32

Desktop Computer

Task 1

Matlab Distributed

Computing System

Task 1

Page 33: Matlab Distributed computing guide

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);

Page 34: Matlab Distributed computing guide

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

Page 35: Matlab Distributed computing guide

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 닫기

Page 36: Matlab Distributed computing guide

Matlab Distributed ComputingData Parallelization

� 코드실행결과

� Serial : 360.62 [sec]

� Parallel : 96.38 [sec]

36

Page 37: Matlab Distributed computing guide

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

Page 38: Matlab Distributed computing guide

Matlab Distributed ComputingCode execute tip

� 코드가다완성이된상태라면 Matlab GUI환경으로

실행시키는것보다는 CUI환경으로실행시키는게더

편리합니다. Matlab CUI환경에서는 GUI없이간단한

명령어만으로코드가실행됩니다.

� matlab –nodesktop –nosplash

� -nodesktop : GUI화면안보이게하기

38

� -nodesktop : GUI화면안보이게하기

� -nosplash : 로고안보이게하기

Page 39: Matlab Distributed computing guide

Matlab Distributed ComputingCode execute tip

� 코드가다완성이된상태라면 Matlab GUI환경으로

실행시키는것보다는 CUI환경으로실행시키는게더

편리합니다. Matlab CUI환경에서는 GUI없이간단한

명령어만으로코드가실행됩니다.

� matlab –nodesktop –nosplash

� -nodesktop : GUI화면안보이게하기

� -nosplash : 로고안보이게하기

39

� -nosplash : 로고안보이게하기

� 이후 matlab명령어나스크립트를실행하시면됩니다.

� nohup과 &을이용한백그라운드작업은코드오류시

PLSI시스템이불안해질수있기때문에삼가해주시기

바랍니다.