Main Content

parpool

클러스터에서 병렬 풀 만들기

설명

예제

parpool은 디폴트 프로파일을 사용하여 워커로 구성된 병렬 풀을 시작합니다. 디폴트 기본 설정에서 MATLAB®은 물리적 CPU 코어당 하나의 워커를 사용해 로컬 컴퓨터에서 풀을 시작하며, 이때 워커의 최대 개수는 디폴트 프로파일에 설정된 한계까지입니다. 병렬 기본 설정에 대한 자세한 내용은 병렬 기본 설정 지정하기 항목을 참조하십시오.

일반적으로 풀 크기는 디폴트 프로파일의 PreferredPoolNumWorkers 속성에 의해 지정됩니다. 풀 크기에 영향을 미칠 수 있는 모든 요인은 풀 크기 및 클러스터 선택 항목을 참조하십시오.

parpool을 사용하면 워커로 구성된 풀에 대한 특수 작업을 만들고 MATLAB 클라이언트를 병렬 풀에 연결하여 MATLAB의 병렬 언어 기능이 모두 가능하게 됩니다. 병렬 언어 기능에는 parfor, parfeval, parfevalOnAll, spmddistributed가 있습니다. 가능한 경우 워커의 작업 폴더는 MATLAB 클라이언트 세션의 폴더와 일치하도록 설정됩니다.

예제

parpool(poolsize)는 지정된 개수의 워커로 구성된 풀을 만들고 반환합니다. poolsize는 양의 정수이거나 범위를 지정하는 정수 요소를 2개 가진 벡터일 수 있습니다. poolsize가 범위인 경우, 결과 풀의 크기는 요청한 범위 내에서 가능한 큰 값으로 지정됩니다.

poolsize를 지정하면 PreferredPoolNumWorkers 속성에서 지정된 값이 재정의되고, 워커를 사용할 수 있을 때까지 기다려야 하는 경우가 있더라도 정확하게 지정된 개수의 워커로 구성된 풀이 시작됩니다. 대부분의 클러스터에는 시작할 수 있는 최대 워커 개수가 있습니다. 프로파일이 MATLAB 작업 스케줄러 클러스터를 지정하는 경우, parpool은 이 MATLAB 작업 스케줄러에서 이미 실행 중이거나 사용 가능한 워커 중에서 parpool이 사용할 워커를 예약합니다. 프로파일이 로컬 또는 타사 스케줄러를 지정하는 경우, parpool은 스케줄러가 풀에 있는 워커를 시작하도록 지시합니다.

예제

parpool(resources) 또는 parpool(resources,poolsize)resources로 지정된 리소스에서 워커 풀을 시작합니다.

예제

parpool(___,Name,Value)는 풀을 시작할 때 특정 속성에 대해 지정된 값을 적용합니다.

예제

poolobj = parpool(___)은 클러스터의 풀을 나타내는 parallel.Pool 객체를 클라이언트 작업 공간에 반환합니다. 풀 객체를 사용하여 프로그래밍 방식으로 풀을 삭제하거나 속성에 액세스할 수 있습니다. delete(pool)을 사용하여 병렬 풀을 종료합니다.

예제

모두 축소

워커 개수가 정의된 디폴트 프로파일을 사용하여 병렬 풀을 시작합니다. 디폴트 기본 설정에서 디폴트 풀은 로컬 컴퓨터에 있습니다.

parpool

로컬 컴퓨터에서는 여러 유형의 병렬 환경에서 풀을 만들 수 있습니다.

  • 프로세스 워커로 구성된 병렬 풀을 시작합니다.

    parpool('Processes')
  • 스레드 워커로 구성된 병렬 풀을 시작합니다.

    parpool('Threads')

병렬 환경에 대한 자세한 내용은 Choose Between Thread-Based and Process-Based Environments 항목을 참조하십시오.

myProf라는 프로파일을 사용하여 16개의 워커로 구성된 병렬 풀을 시작합니다.

parpool('myProf',16)

디폴트 프로파일로 식별되는 클러스터를 나타내는 객체를 만들고 이 cluster 객체를 사용하여 병렬 풀을 시작합니다. 풀 크기는 디폴트 프로파일로 결정됩니다.

c = parcluster
parpool(c)

디폴트 프로파일을 사용하여 병렬 풀을 시작하고 두 개의 코드 파일을 워커로 전달합니다.

parpool('AttachedFiles',{'mod1.m','mod2.m'})

여러 개의 GPU에 액세스할 수 있는 경우에는 병렬 풀을 사용하여 여러 개의 GPU에서 병렬로 계산을 수행할 수 있습니다.

MATLAB에서 사용 가능한 GPU 개수를 확인하려면 gpuDeviceCount 함수를 사용하십시오.

availableGPUs = gpuDeviceCount("available")
availableGPUs = 3

사용 가능한 GPU와 같은 수의 워커를 사용하여 병렬 풀을 시작합니다. MATLAB은 최적의 성능을 위해 기본적으로 각 워커에 다른 GPU를 할당합니다.

parpool('Processes',availableGPUs);
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 3).

각 워커가 사용하는 GPU를 식별하려면 spmd 블록 내에서 gpuDevice를 호출하십시오. spmd 블록은 모든 워커에서 gpuDevice를 실행합니다.

spmd
    gpuDevice
end

parfor 또는 parfeval과 같은 병렬 언어 기능을 사용하여 계산을 병렬 풀의 워커로 분산합니다. 계산에 gpuArray 지원 함수를 사용하는 경우 이러한 함수는 워커의 GPU에서 실행됩니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 항목을 참조하십시오. 예제는 Run MATLAB Functions on Multiple GPUs 항목을 참조하십시오.

계산이 완료되면 병렬 풀을 종료합니다. gcp 함수를 사용하여 현재 병렬 풀을 가져올 수 있습니다.

delete(gcp('nocreate'));

다른 GPU를 선택하려면 gpuDevice를 사용하여 GPU 장치 인덱스를 통해 각 워커에서 특정 GPU를 선택할 수 있습니다. gpuDeviceCount 함수를 사용하여 시스템에 있는 각 GPU 장치의 인덱스를 가져올 수 있습니다.

시스템에 3개의 GPU가 있지만 2개만 계산에 사용하려 한다고 가정하겠습니다. 장치의 인덱스를 가져옵니다.

[availableGPUs,gpuIndx] = gpuDeviceCount("available")
availableGPUs = 3
gpuIndx = 1×3

     1     2     3

사용할 장치의 인덱스를 정의합니다.

useGPUs = [1 3];

병렬 풀을 시작합니다. spmd 블록과 gpuDevice를 사용하여 장치 인덱스를 통해 각 워커를 사용하려는 GPU 중 하나와 연결합니다. spmdIndex 함수는 각 워커의 인덱스를 식별합니다.

parpool('Processes',numel(useGPUs));
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 2).
spmd
    gpuDevice(useGPUs(spmdIndex));
end

최상의 성능을 구현하려면 각 워커에 다른 GPU를 할당하는 것이 좋습니다.

계산이 완료되면 병렬 풀을 종료합니다.

delete(gcp('nocreate'));

디폴트 프로파일을 사용하여 병렬 풀을 만들고 나중에 풀을 삭제합니다.

poolobj = parpool;

delete(poolobj)

현재 병렬 풀의 워커 개수를 구합니다.

poolobj = gcp('nocreate'); % If no pool, do not create new one.
if isempty(poolobj)
    poolsize = 0;
else
    poolsize = poolobj.NumWorkers
end

입력 인수

모두 축소

병렬 풀의 크기로, 양의 정수로 지정되거나, 범위를 지정하는 정수 요소를 2개 가진 벡터로 지정됩니다. poolsize가 범위인 경우, 결과 풀의 크기는 요청한 범위 내에서 가능한 큰 값으로 지정됩니다. 클러스터 프로파일에서 디폴트 기본 워커 개수를 설정할 수 있습니다.

예: parpool('Processes',2)

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

풀을 시작할 리소스로, 'Processes', 'Threads', 클러스터 프로파일 이름 또는 cluster 객체로 지정됩니다.

예: parpool('Processes')

예: parpool('Threads')

예: parpool('myClusterProfile',16)

예: c = parcluster; parpool(c)

데이터형: char | string | parallel.Cluster

이름-값 인수

선택적으로 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 버전에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶습니다.

예: 'AttachedFiles',{'myFun.m'}

풀에 연결할 파일로, 문자형 벡터, string형, string형 배열 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

이 인수 쌍을 사용하여 parpool은 병렬 풀을 시작하고 식별된 파일을 풀의 워커로 전달합니다. 여기 지정된 파일은 적용 가능한 병렬 프로파일에 지정된 AttachedFiles 속성에 추가되어 전체 연결 파일 목록을 구성합니다. 'AttachedFiles' 속성 이름은 대/소문자를 구분하며 다음과 같이 표시되어야 합니다.

예: {'myFun.m','myFun2.m'}

데이터형: char | cell

클라이언트 경로에서 사용자가 추가한 항목을 시작 시 각 워커의 경로에 추가할지 여부를 지정하는 플래그로, 논리값으로 지정됩니다.

데이터형: logical

클라이언트 세션에서 워커로 복사할 환경 변수의 이름으로, 문자형 벡터, string형, string형 배열 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 여기에 지정된 이름은 적용 가능한 병렬 프로파일에 지정된 'EnvironmentVariables' 속성에 추가되어 전체 환경 변수 목록을 구성합니다. 목록에 있지만 설정되지 않은 변수는 워커로 복사되지 않습니다. 이러한 환경 변수는 병렬 풀 작업 동안 워커에 설정됩니다.

데이터형: char | cell

풀에서 spmd 지원을 활성화할지 여부를 지정하는 플래그로, 논리값으로 지정됩니다. 로컬 클러스터 또는 MATLAB 작업 스케줄러 클러스터에 대한 지원만 비활성화할 수 있습니다. parfor 반복에 워커 간 통신이 발생하지는 않습니다. 따라서 'SpmdEnabled'false인 경우 루프 실행 중에 하나 이상의 워커가 중단되더라도 parfor 루프는 계속됩니다.

데이터형: logical

풀이 유휴 상태인 경우 종료되기까지의 시간(단위: 분)으로, 0보다 큰 정수로 지정됩니다. 풀은 워커에서 코드를 실행하지 않을 경우 유휴 상태로 간주됩니다. 기본적으로 'IdleTimeout'은 병렬 기본 설정의 값과 동일합니다. 병렬 기본 설정에 대한 자세한 내용은 병렬 기본 설정 지정하기 항목을 참조하십시오.

예: pool = parpool('IdleTimeout',120)

출력 인수

모두 축소

클라이언트의 병렬 풀에 대한 액세스로, parallel.Pool 객체로 반환됩니다.

  • 데스크탑의 왼쪽 아래 코너에 있는 풀 상태 표시기는 풀에 연결된 클라이언트 세션과 풀 상태를 보여줍니다. 아이콘을 클릭하면 지원되는 풀 동작에 대한 메뉴가 표시됩니다.

    풀이 실행 중인 경우: The parallel pool status indicator indicating that a pool is running, showing the start parallel pool and parallel preferences menu options. 실행 중인 풀이 없는 경우:The parallel pool status indicator indicating that no pool is running, showing the start parallel pool and parallel preferences menu options.

  • 필요로 할 때 병렬 풀을 자동으로 만들도록 병렬 기본 설정을 설정한 경우, parpool 명령을 명시적으로 호출할 필요가 없습니다. 풀 설정에 드는 오버헤드 시간이 발생하는 시점을 조절하려면 사용자가 명시적으로 풀을 만들면 됩니다. 이렇게 하면 이후 병렬 언어 구문을 처리해야 할 때 미리 준비해 놓은 풀을 바로 사용할 수 있습니다.

  • delete(poolobj)는 병렬 풀을 종료합니다. 병렬 풀이 없는 경우, 병렬 기본 설정에서 병렬 풀이 자동으로 시작되도록 설정되지 않았다면 spmdparfor는 클라이언트에서 단일 스레드로 실행됩니다.

  • MATLAB 편집기를 사용하여 병렬 풀에 연결된 클라이언트의 파일을 업데이트하는 경우, 이 업데이트는 자동으로 풀의 워커로 전파됩니다. (Simulink® 모델 파일에는 이러한 자동 업데이트가 적용되지 않습니다. 업데이트된 모델 파일을 워커로 전파하려면 updateAttachedFiles 함수를 사용하십시오.)

  • 가능한 경우 워커의 처음 작업 폴더는 MATLAB 클라이언트 세션의 폴더와 일치하도록 설정됩니다. 그런 후 클라이언트 명령 창에 입력된 다음 명령도 풀의 모든 워커에서 실행됩니다.

    이 동작을 통해 모든 워커의 작업 폴더와 명령 검색 경로를 설정할 수 있으므로 parfor 루프와 같은 후속 풀 동작이 적절한 상황에서 실행됩니다.

    Windows® 운영 체제를 사용하는 클라이언트에서 cd 또는 addpath를 사용하여 폴더를 변경하거나 경로를 추가하면, 워커로 전송되는 값은 폴더에 대한 UNC 경로입니다(가능한 경우). Linux® 운영 체제를 사용하는 클라이언트의 경우에는 절대 폴더 위치가 전송됩니다.

    이러한 명령이 클라이언트에서 작동하지 않는 경우 워커에서도 실행되지 않습니다. 예를 들어, addpath 실행 시 클라이언트가 액세스할 수 없는 폴더를 지정하는 경우 addpath 명령은 워커에서 실행되지 않습니다. 그러나 클라이언트에서 작업 폴더를 설정할 수 있지만 어떤 워커에서도 지정된 대로 설정할 수 없는 경우, 클라이언트 명령 창에 오류 메시지가 반환되지 않습니다.

    클라이언트가 워커와 동일한 플랫폼이 아니거나, 클라이언트에 대한 로컬 폴더 또는 클라이언트에서 매핑된 폴더를 워커가 동일한 방식으로 사용할 수 없거나, 폴더가 비공유 파일 시스템에 있는 등의 혼합 플랫폼 환경에서는 이러한 미세한 동작 차이에 유의해야 합니다. 예를 들어, MATLAB 클라이언트가 Microsoft® Windows 운영 체제에서 실행되고 MATLAB 워커가 모두 Linux 운영 체제에서 실행되는 경우, addpath에 대한 인수가 클라이언트와 워커에서 동일하게 작동할 수 없습니다. 이 경우 함수 pctRunOnAll을 사용하여 모든 워커에서 명령이 실행되도록 할 수 있습니다.

    클라이언트와 워커 간의 또 다른 차이는 matlabroot 폴더의 일부인 addpath 인수가 워커에 대해 설정되지 않은 점입니다. MATLAB 설치 기반이 워커의 경로에 이미 포함되어 있다고 가정합니다. 풀의 워커와 관련된 addpath 규칙은 다음과 같습니다.

    • matlabroot 폴더의 하위 폴더는 워커로 전송되지 않습니다.

    • matlabroot 폴더가 처음 나오기 전에 표시되는 폴더는 워커의 경로 맨 위에 추가됩니다.

    • matlabroot 폴더가 처음 나온 후에 표시되는 폴더는 워커의 경로에서 matlabroot 폴더 그룹 뒤에 추가됩니다.

    예를 들어, 클라이언트에 대한 matlabrootC:\Applications\matlab\이라고 가정하겠습니다. 열려 있는 병렬 풀에서 다음을 실행하여 클라이언트와 모든 워커에서 경로를 설정합니다.

    addpath('P1',
            'P2',
            'C:\Applications\matlab\T3',
            'C:\Applications\matlab\T4',
            'P5',
            'C:\Applications\matlab\T6',
            'P7',
            'P8');

    T3, T4T6matlabroot의 하위 폴더이므로 워커의 경로에 설정되지 않습니다. 따라서 워커에서 이 명령의 영향을 받는 경로 부분은 다음과 같습니다.

    P1
    P2
    <worker original matlabroot folders...>
    P5
    P7
    P8
  • Macintosh 또는 Linux를 사용 중이고 대규모 병렬 풀을 만드는 동안 문제가 발생하는 경우 Recommended System Limits for Macintosh and Linux 항목을 참조하십시오.

버전 내역

R2013b에 개발됨

모두 확장