Download pdf - Parallel python

Transcript
Page 1: Parallel python

Parallel Python

12년 10월 9일 화요일

Page 2: Parallel python

개요

• Parallel Python

• Python

• 설치• 사용방법(Nodes & Client)

• 시연

12년 10월 9일 화요일

Page 3: Parallel python

Python• 1991년 귀도 반 로섬이 발표

• 인터프리터• 객체지향• 동적타입의 대화형 언어

• 사용하기 쉬우며, 플랫폼 독립적

12년 10월 9일 화요일

Page 4: Parallel python

GIL• Global Interpreter Lock

• GIL로 인해 Python에선 스레드가 코어 1개 밖에 사용하지 못함.(병행성에 약점)

• 요즘같은 멀티코어시대에서 비효율적이나, Python같은 인터프리터 언어에서 코드복잡성이나 락에 자원을 낭비하지 않고 높은 효율성을 유지하게 해줌

12년 10월 9일 화요일

Page 5: Parallel python

Multiprocessing

• Process-based “threading interface”

• New in python version 2.6

• >>> from multiprocessing

12년 10월 9일 화요일

Page 6: Parallel python

Parallel Python

• 멀티코어, 클러스터를 이용 분산&병렬 처리를 지원하는 Multiprocessing 기반의 Python 모듈

• 가벼우면서 설치 및 사용하기 간편

• 오픈소스(BSD-Like license)

12년 10월 9일 화요일

Page 7: Parallel python

PP설치

• Python 2.5 이상 설치

• user$ curl -0 http://www.parallelpython.com/downloads/pp/pp-1.6.2.tar.gz | tar -zx

• user$ sudo python setup.py install

12년 10월 9일 화요일

Page 8: Parallel python

On the client 

2) Import pp module:

    import pp

3)  Create a list of all the nodes in your cluster (computers where you've run ppserver.py)

    ppservers=("node-1", "node-2", "node-3")

4) Start pp execution server with the number of workers set to the number of processors in the system and list of ppservers to connect with :

    job_server = pp.Server(ppservers=ppservers) 

5) Submit all the tasks for parallel execution:

    f1 = job_server.submit(func1, args1, depfuncs1, modules1)

    f2 = job_server.submit(func1, args2, depfuncs1, modules1)

    f3 = job_server.submit(func2, args3, depfuncs2, modules2) 

   ...etc...

6) Retrieve the results as needed:

    r1 = f1()

    r2 = f2()

    r3 = f3() 

12년 10월 9일 화요일

Page 9: Parallel python

On the nodes 

1) Start parallel python execution server on all your remote computational nodes:

    node-1> ./ppserver.py

    node-2> ./ppserver.py

    node-3> ./ppserver.py

12년 10월 9일 화요일

Page 10: Parallel python

예제 시연 1 import math, sys, md5, time 2 import pp 3 4 def md5test(hash, start, end): 5 for x in xrange(start, end): 6 if md5.new(str(x)).hexdigest() == hash: 7 return x 8 9 ppservers = ("127.0.0.1", "1.234.80.127", "210.94.181.157",) 10 11 if len(sys.argv) > 1: 12 ncpus = int(sys.argv[1]) 13 job_server = pp.Server(ncpus, ppservers=ppservers) 14 else: 15 job_server = pp.Server(ppservers=ppservers) 16 17 print "Starting pp with", job_server.get_ncpus(), "workers" 18 hash = md5.new("1829182").hexdigest() 19 print "hash =", hash 20

21 start_time = time.time() 22 start = 1 23 end = 2000000 24 25 parts = 128 26 27 step = (end - start) / parts + 1 28 jobs = [] 29 30 for index in xrange(parts): 31 starti = start+index*step 32 endi = min(start+(index+1)*step, end) 33 jobs.append(job_server.submit(md5test, (hash, starti, endi), (), ("md5",))) 34 35 for job in jobs: 36 result = job() 37 if result: 38 break 39 40 if result: 41 print "Reverse md5 for", hash, "is", result 42 else: 43 print "Reverse md5 for", hash, "has not been found" 44 45 print "Time elapsed: ", time.time() - start_time, "s" 46 job_server.print_stats()

12년 10월 9일 화요일

Page 11: Parallel python

Hadoop VS PP

• 배우기 어렵다. VS 배우기 쉽다

• 클라우드 VS 클러스터링

• 최소 3GB 이상 데이터 VS 크기 상관 없음.

• 구축이 어렵다. VS 구축이 쉽다.

12년 10월 9일 화요일

Page 12: Parallel python

참고 자료

• 파이썬 공식 사이트 : http://python.org

• 파이썬 GIL 깊숙히!! : http://openlook.org:625/blog/2006/11/12/cb-1136/

• PP 공식사이트 : http://www.parallelpython.com

• Hadoop VS Parallel Python : http://stackoverflow.com/questions/7701989/can-someone-explain-parallelpython-versus-hadoop-for-distributing-python-process

12년 10월 9일 화요일


Recommended