복붙노트

[PYTHON] 멀티 코어를 사용하지 않는 IPython.parallel?

PYTHON

멀티 코어를 사용하지 않는 IPython.parallel?

나는 IPython.parallel을 실험하고 있으며 다른 엔진에서 여러 쉘 명령을 실행하려고합니다.

나는 다음 노트를 가지고있다 :

셀 0 :

from IPython.parallel import Client
client = Client()
print len(client)
5

명령을 실행하십시오.

셀 1 :

%%px --targets 0 --noblock
!python server.py

셀 2 :

%%px --targets 1 --noblock
!python mincemeat.py 127.0.0.1

셀 3 :

%%px --targets 2 --noblock
!python mincemeat.py 127.0.0.1

그것이하는 일은 MapReduce의 미식가 구현을 사용한다는 것입니다. 내가 처음 시작할 때! python mincemeat.py 127.0.0.1은 코어 하나를 대략 100 % 사용하고, 두 번째 코어를 실행하면 각각 50 %로 떨어집니다. 컴퓨터에 4 개의 코어 (+ 가상 코어)가 있으며 터미널에서 직접 시작할 때 사용할 수 있지만 노트북에서는 사용할 수 없습니다.

제가 누락 된 것이 있습니까? 파이썬 mincemeat.py 127.0.0.1 명령에 대해 하나의 코어를 사용하고 싶습니다.

편집하다: 명확성을 위해 여러 코어를 사용하지 않는 또 다른 사항은 다음과 같습니다.

셀 1 :

%%px --targets 0 --noblock

a = 0
for i in xrange(100000):
    for j in xrange(10000):
        a += 1

셀 2 :

%%px --targets 0 --noblock

a = 0
for i in xrange(100000):
    for j in xrange(10000):
        a += 1

나는 뭔가를 놓친다 고 생각합니다. 나는이 두 세포가 가능한 한 다른 코어를 사용해야한다고 생각한다. 그러나 그것은 그럴 듯하지 않습니다. 다시 CPU 사용량은 동일한 코어를 공유하고 50 %를 사용함을 보여줍니다. 나는 무엇을 잘못 했는가?

해결법

  1. ==============================

    1.채팅 토론 요약 :

    채팅 토론 요약 :

    CPU 친 화성은 프로세스를 특정 CPU 코어에 고정시키는 메커니즘으로, 여기서 문제는 numpy를 가져올 때 파이썬 프로세스를 CPU 0에 고정시킬 수 있다는 것입니다. 특정 BLAS 라이브러리에 연결 한 결과입니다. 이 셀을 실행하여 모든 엔진의 고정을 해제 할 수 있습니다.

    %%px
    import os
    import psutil
    from multiprocessing import cpu_count
    
    p = psutil.Process(os.getpid())
    p.set_cpu_affinity(range(cpu_count()))
    print p.get_cpu_affinity()
    

    multiprocessing.cpu_count를 사용하여 CPU 수를 얻은 다음 모든 엔진을 모든 CPU와 연결합니다.

    이 문제를 탐구하는 IPython 노트북.

  2. from https://stackoverflow.com/questions/16323743/ipython-parallel-not-using-multicore by cc-by-sa and MIT license