Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

batch

워커에서 MATLAB 스크립트 또는 함수 실행

설명

예제

j = batch(script)는 디폴트 클러스터 프로파일로 지정된 클러스터의 워커에서 스크립트 파일 script를 실행합니다. (참고: 스크립트 이름에 .m 파일 확장자를 포함하지 마십시오.) 함수는 스크립트를 실행하는 job 객체에 대한 핸들 j를 반환합니다. 스크립트 파일 script는 워커로 복사됩니다.

기본적으로, 사용자가 batch(script)를 실행하면 작업 공간 변수가 클라이언트에서 워커로 복사됩니다. job 객체와 task 객체는 워커로 복사되지 않습니다.

j = batch(expression)은 디폴트 클러스터 프로파일로 지정된 클러스터의 워커에서 expression을 표현식으로 실행합니다. 함수는 표현식을 실행하는 job 객체에 대한 핸들 j를 반환합니다.

기본적으로, 사용자가 batch(expression)을 실행하면 작업 공간 변수가 클라이언트에서 워커로 복사됩니다. job 객체와 task 객체는 워커로 복사되지 않습니다.

j = batch(myCluster,script)는 스크립트가 cluster 객체 myCluster로 지정된 클러스터의 워커에서 실행된다는 점을 제외하고는 batch(script)와 동일합니다.

j = batch(myCluster,expression)은 표현식이 cluster 객체 myCluster로 지정된 클러스터의 워커에서 실행된다는 점을 제외하고는 batch(expression)과 동일합니다.

예제

j = batch(fcn,N,{x1,...,xn})은 디폴트 클러스터 프로파일로 지정된 클러스터의 워커에서 함수 fcn을 실행합니다. 함수는 함수를 실행하는 job 객체에 대한 핸들 j를 반환합니다. 함수는 지정된 인수 x1,...,xn으로 실행되고 N개의 출력 인수를 반환합니다. fcn에 대한 함수 파일은 워커로 복사됩니다. (참고: 함수 이름 인수에 .m 파일 확장자를 포함하지 마십시오.)

예제

j = batch(myCluster,fcn,N,{x1,...,xn})은 함수가 cluster 객체 myCluster로 지정된 클러스터의 워커에서 실행된다는 점을 제외하고는 batch(fcn,N,{x1,...,xn})과 동일합니다.

예제

j = batch(___,Name,Value)는 하나 이상의 이름-값 쌍 인수를 사용하여 작업의 동작을 수정하는 옵션을 지정합니다. 이러한 옵션은 별도의 표시가 없는 한 함수와 스크립트에 대한 일괄 처리를 지원합니다. 위에 열거된 구문에 나와 있는 입력 인수를 원하는 대로 조합하여 이 구문과 함께 사용하십시오.

예제

모두 축소

이 예제에서는 batch를 사용하여 백그라운드에서 실행되는 MATLAB® 워커 세션으로 작업을 분담하는 방법을 보여줍니다.

계산이 수행되는 동안에도 계속해서 MATLAB을 사용할 수 있습니다.

batch 함수를 사용하여 스크립트를 일괄 처리 작업으로 실행합니다. 기본적으로 batch는 디폴트 클러스터 프로파일을 사용합니다. MATLAB 탭에 있는 환경 섹션의 병렬연산 > 병렬 환경 선택에서 디폴트 클러스터 프로파일을 확인하십시오. 또는 'Profile' 이름-값 쌍 인수를 사용하여 클러스터 프로파일을 지정할 수 있습니다.

job = batch('myScript');

batch는 MATLAB을 차단하지 않으며 계산이 진행되는 동안 계속해서 작업할 수 있습니다.

작업이 완료될 때까지 MATLAB을 차단하려면 job 객체에 wait 함수를 사용하십시오.

wait(job);

기본적으로 MATLAB은 일괄 처리 작업의 명령 창 출력값을 작업의 diary에 저장합니다. 이 값을 가져오려면 diary 함수를 사용하십시오.

diary(job)
--- Start Diary ---
n = 100

--- End Diary ---

작업이 완료된 후 load 함수를 사용하여 결과를 가져옵니다.

load(job,'x');
plot(x)

일괄 처리 작업에서 모든 변수를 불러오려면 load(job)을 대신 사용하십시오.

필요한 모든 변수를 불러온 후에는 job 객체를 삭제하여 해당 데이터를 정리하고 불필요하게 리소스를 사용하지 않도록 합니다.

delete(job);
clear job

batch를 사용하여 스크립트 파일을 전송하는 경우, MATLAB은 모든 작업 공간 변수를 클러스터로 전송하는데 스크립트에서 사용하지 않는 변수 역시 전송합니다. 작업 공간이 클 경우 데이터 전송 시간이 오래 걸릴 수 있습니다. 이러한 통신 오버헤드를 방지하려면 스크립트를 함수 파일로 변환하는 것이 좋습니다. 함수를 사용하는 예제는 워커에서 일괄 처리 작업 실행 및 파일 액세스하기 항목을 참조하십시오.

고급 옵션을 사용하는 batch를 보려면 워커에서 일괄 처리 작업 실행 및 파일 액세스하기 항목을 참조하십시오.

batch를 사용하여 계산을 백그라운드에서 실행되도록 분담할 수 있습니다. 코드가 파일에 액세스해야 하는 경우 'AttachedFiles' 또는 'AdditionalPaths'와 같은 추가 옵션을 사용하여 데이터에 액세스할 수 있습니다. 계산이 진행되는 동안 MATLAB에서 작업을 종료하거나 계속할 수 있으며 나중에 결과를 복구할 수 있습니다.

예제 준비하기

지원 함수 prepareSupportingFiles를 사용하여 이 예제에 필요한 데이터를 현재 작업 폴더로 복사합니다.

prepareSupportingFiles;

현재 작업 폴더에는 이제 4개의 파일(A.dat, B1.dat, B2.datB3.dat)이 있습니다.

일괄 처리 작업 실행하기

parcluster를 사용하여 cluster 객체를 만듭니다. 기본적으로 parcluster는 디폴트 클러스터 프로파일을 사용합니다. MATLAB 탭에 있는 환경 섹션의 병렬연산 > 디폴트 클러스터 선택에서 디폴트 클러스터 프로파일을 확인합니다.

c = parcluster();

코드를 함수 내에 삽입하고 batch를 사용하여 일괄 처리 작업으로 제출합니다. 사용자 지정 함수의 예는 지원 함수 divideData를 참조하십시오. 출력 인수의 예상 개수 및 셀형 배열을 함수에 대한 입력값으로 지정합니다.

batch를 사용하여 스크립트 파일을 전송하는 경우 MATLAB은 모든 작업 공간 변수를 클러스터로 전송하며, 스크립트에서 사용하지 않는 변수 역시 전송합니다. 작업 공간이 클 경우 데이터 전송 시간에 부정적인 영향을 줍니다. 이러한 통신 오버헤드를 방지하려면 스크립트를 함수 파일로 변환하는 것이 좋습니다. 스크립트 맨 앞에 함수 라인을 추가하여 이 작업을 수행할 수 있습니다. 이 예제에서는 오버헤드를 줄이기 위해 divideData가 이 라이브 스크립트 외부의 파일에 정의되어 있습니다.

코드가 병렬 풀을 사용하는 경우 'Pool' 이름-값 쌍 인수를 사용하여 워커 개수를 지정해 병렬 풀을 만듭니다. batch는 추가적으로 하나의 워커를 사용하여 함수를 실행합니다.

기본적으로 batch는 워커의 초기 작업 폴더를 MATLAB 클라이언트의 현재 폴더로 변경합니다. 이렇게 하면 워커에서 초기 작업 폴더를 제어하는 데 유용합니다. 예를 들어, Windows 클라이언트 컴퓨터에서 Linux 클러스터로 제출하는 경우와 같이 클러스터가 다른 파일 시스템을 사용하여 초기 작업 디렉터리를 제어하려는 경우가 있을 수 있습니다.

  • 워커의 초기 작업 폴더를 유지하고 디폴트 값을 사용하려면 'CurrentFolder''.'으로 설정하십시오.

  • 초기 작업 폴더를 변경하려면 'CurrentFolder'를 원하는 폴더로 설정하십시오.

이 예제에서는 3개의 워커가 있는 병렬 풀을 사용하고 초기 작업 폴더의 임시 위치를 선택합니다. batch를 사용하여 divideData에서 계산을 분담하십시오.

job = batch(c,@divideData,1,{}, ...
    'Pool',3, ...
    'CurrentFolder',tempdir);

batch가 병렬 워커에서 divideData를 실행하므로 계산이 수행되는 동안 계속해서 MATLAB에서 작업할 수 있습니다.

작업이 완료될 때까지 MATLAB을 차단하려면 job 객체의 wait 함수를 사용하십시오.

wait(job);

결과를 가져오려면 job 객체에 fetchOutputs를 사용하십시오. divideData는 워커가 찾을 수 없는 파일에 종속되어 있으므로 fetchOutputs가 오류를 발생시킵니다. 작업에서 Task 객체의 Error 속성에 대해 getReport를 사용하여 오류 정보에 액세스할 수 있습니다. 이 예제에서 코드는 워커가 찾을 수 없는 파일에 종속됩니다.

getReport(job.Tasks(1).Error)
ans = 
    'Error using divideData (line 4)
     Unable to read file 'B2.dat'. No such file or directory.'

워커에서 파일에 액세스하기

기본적으로 batch는 코드를 자동으로 분석하고 필요한 파일을 워커로 전송합니다. 필요한 파일을 명시적으로 전송해야 하는 경우도 있는데, 예를 들어 런타임에 파일 이름을 결정하는 경우가 그렇습니다.

이 예제에서 divideDatabatch가 자동으로 감지하고 전송하는 지원 파일 A.dat에 액세스합니다. 이 함수는 B1.dat에도 액세스하지만, 런타임에 파일 이름을 확인하므로 자동 종속성 분석에서 이를 감지할 수 없습니다.

type divideData.m 
function X = divideData()
    A = load("A.dat"); 
    X = zeros(flip(size(A)));
    parfor i = 1:3
        B = load("B" + i + ".dat");
        X = X + A\B;
    end
end

워커가 액세스할 수 있는 위치에 데이터가 있는 경우 이름-값 쌍 인수 'AdditionalPaths'를 사용하여 위치를 지정할 수 있습니다. 'AdditionalPaths'는 이 경로를 워커의 MATLAB 검색 경로에 추가하여 워커에서 데이터를 볼 수 있도록 합니다.

pathToData = pwd;
job(2) = batch(c,@divideData,1,{}, ...
    'Pool',3, ...
    'CurrentFolder',tempdir, ...
    'AdditionalPaths',pathToData);
wait(job(2));

워커가 액세스할 수 없는 위치에 데이터가 있는 경우 'AttachedFiles' 이름-값 쌍 인수를 사용하여 파일을 워커로 전송할 수 있습니다. 클라이언트와 워커가 동일한 파일을 공유하지 않거나 클러스터가 비공유 모드에서 일반 스케줄러 인터페이스를 사용하는 경우 사용자가 파일을 전송해야 합니다. 자세한 내용은 Configure Using the Generic Scheduler Interface (MATLAB Parallel Server) 항목을 참조하십시오.

filenames = "B" + string(1:3) + ".dat";
job(3) = batch(c,@divideData,1,{}, ...
    'Pool',3, ...
    'CurrentFolder',tempdir, ...
    'AttachedFiles',filenames);

기존 작업 찾기

작업을 제출한 후 MATLAB을 닫고 나중에 결과를 가져올 수 있습니다. MATLAB을 닫기 전에 작업 ID를 기록해 두십시오.

job3ID = job(3).ID
job3ID = 25

MATLAB을 다시 열면 findJob 함수를 사용하여 작업을 찾을 수 있습니다.

job(3) = findJob(c,'ID',job3ID);
wait(job(3));

또는 작업 모니터를 사용하여 작업을 추적할 수도 있습니다. 작업 모니터는 MATLAB 탭에 있는 환경 섹션의 병렬연산 > 작업 모니터링에서 열 수 있습니다.

결과 가져오기 및 데이터 정리하기

일괄 처리 작업의 결과를 가져오려면 fetchOutputs 함수를 사용하십시오. fetchOutputsbatch를 사용하여 실행된 함수의 출력값을 셀형 배열으로 반환합니다.

X = fetchOutputs(job(3))
X = 1×1 cell array
    {40×207 double}

필요한 모든 출력값을 가져온 후 job 객체가 더 이상 필요하지 않은 경우, 객체를 삭제하여 데이터를 정리하고 불필요하게 리소스를 사용하지 않도록 합니다.

delete(job)
clear job

입력 인수

모두 축소

MATLAB 스크립트로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

기본적으로, 사용자가 이 인수를 지정하면 작업 공간 변수가 클라이언트에서 워커로 복사됩니다. job 객체와 task 객체는 워커로 복사되지 않습니다.

예: batch('aScript');

데이터형: char | string

실행할 표현식으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

기본적으로, 사용자가 이 인수를 지정하면 작업 공간 변수가 클라이언트에서 워커로 복사됩니다. job 객체와 task 객체는 워커로 복사되지 않습니다.

예: batch('y = magic(3)');

데이터형: char | string

클러스터로, 클러스터 계산 리소스를 나타내는 parallel.Cluster 객체로 지정됩니다. 이 객체를 만들려면 parcluster 함수를 사용하십시오.

예: cluster = parcluster; batch(cluster,'aScript');

데이터형: parallel.Cluster

워커가 실행할 함수로, 함수 핸들 또는 함수 이름으로 지정됩니다.

예: batch(@myFunction,1,{x,y});

데이터형: char | string | function_handle

실행된 함수 fcn에서 예상되는 출력값 개수로, 음이 아닌 정수로 지정됩니다.

예: batch(@myFunction,1,{x,y});

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

함수 fcn에 대한 입력 인수로, 셀형 배열로 지정됩니다.

예: batch(@myFunction,1,{x,y});

데이터형: cell

이름-값 인수

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

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

예: j = batch(@myFunction,1,{x,y},'Pool',3);

워커로 복사할 변수로, 'Workspace'와 함께 구조체형 스칼라가 쉼표로 구분되어 지정됩니다.

디폴트 값은 클라이언트 작업 공간의 변수에 대응하는 필드를 갖는 구조체형 스칼라입니다. 변수를 구조체형 스칼라의 필드로 지정하십시오.

script 또는 expression을 지정하는 경우 작업 공간 변수만 클라이언트에서 워커로 복사됩니다. job 객체와 task 객체는 워커로 복사되지 않습니다.

예: workspace.myVar = 5; j = batch('aScript','Workspace',workspace);

데이터형: struct

클러스터를 식별하는 데 사용되는 클러스터 프로파일로, 'Profile'과 함께 문자형 벡터 또는 string형이 쉼표로 구분되어 지정됩니다. 이 옵션이 생략된 경우 디폴트 프로파일이 클러스터를 식별하는 데 사용되고 작업과 태스크 속성에 적용됩니다.

예: j = batch('aScript','Profile','Processes');

데이터형: char | string

스크립트 또는 함수가 실행되기 전에 워커의 MATLAB 검색 경로에 추가할 경로로, 'AdditionalPaths'와 함께 문자형 벡터, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다.

디폴트 검색 경로는 워커와 클라이언트에서 동일하지 않을 수 있으며 이러한 경로 차이는 현재 작업 폴더(cwd), 플랫폼 또는 네트워크 파일 시스템 액세스가 다르기 때문일 수 있습니다. 'AdditionalPaths' 이름-값 쌍 인수를 지정하면 워커가 코드 파일, 데이터 파일 또는 모델 파일 등의 파일을 올바른 위치에서 찾을 수 있습니다.

'AdditionalPaths'를 사용하여 공유 파일 시스템의 파일에 액세스할 수 있습니다. 경로 표현은 타깃 머신에 따라 다를 수 있습니다. 'AdditionalPaths'는 클러스터의 컴퓨터에서 표시되는 경로여야 합니다. 예를 들어, 로컬 Windows® 컴퓨터의 Z:\data가 Linux® 클러스터의 /network/data인 경우, 후자를 'AdditionalPaths'에 추가하십시오. 데이터저장소를 사용하는 경우에는 서로 다른 경로 표현에 대응할 수 있도록 'AlternateFileSystemRoots'를 대신 사용하십시오. 자세한 내용은 Set Up Datastore for Processing on Different Machines or Clusters 항목을 참조하십시오.

AdditionalPaths로는 절대 경로가 아닌 상대 경로 또는 파일 이름을 사용해야만 파일을 찾을 수 있으니 유의하십시오.

예: j = batch(@myFunction,1,{x,y},'AdditionalPaths','/network/data/');

데이터형: char | string | cell

워커로 전송할 파일 또는 폴더로, 'AttachedFiles'와 함께 문자형 벡터, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다.

예: j = batch(@myFunction,1,{x,y},'AttachedFiles','myData.dat');

데이터형: char | string | cell

클라이언트 경로에서 사용자가 추가한 항목을 워커 경로에 추가하는 플래그로, 'AutoAddClientPath'와 함께 논리값이 쉼표로 구분되어 지정됩니다.

예: j = batch(@myFunction,1,{x,y},'AutoAddClientPath',false);

데이터형: logical

종속성 분석을 사용하도록 설정하고 코드 파일을 자동으로 작업에 연결하는 플래그로, 'AutoAttachFiles'와 함께 논리값이 쉼표로 구분되어 지정됩니다. 값을 true로 설정한 경우 일괄 처리 스크립트나 함수가 분석되고 이에 종속된 코드 파일이 자동으로 워커로 전송됩니다.

예: j = batch(@myFunction,1,{x,y},'AutoAttachFiles',true);

데이터형: logical

스크립트 또는 함수가 실행되는 폴더로, 'CurrentFolder'와 함께 문자형 벡터 또는 string형이 쉼표로 구분되어 지정됩니다. 워커에 없는 폴더일 수도 있습니다. 이 속성의 디폴트 값은 batch 명령이 실행될 때의 MATLAB의 현재 디렉터리입니다. 인수가 '.'이면 일괄 처리가 실행되기 전의 폴더로 그대로 유지됩니다.

예: j = batch(@myFunction,1,{x,y},'CurrentFolder','.');

데이터형: char | string

함수 호출에서 diary를 수집하는 플래그로, 'CaptureDiary'와 함께 논리값이 쉼표로 구분되어 지정됩니다. 수집된 데이터에 대한 자세한 내용은 diary를 참조하십시오.

예: j = batch('aScript','CaptureDiary',false);

데이터형: logical

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

예: j = batch('aScript','EnvironmentVariables',"MY_ENV_VAR");

데이터형: char | string | cell

병렬 풀에 들어갈 워커 개수로, 'Pool'과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 음이 아닌 정수.

  • 음이 아닌 정수로 구성된 요소를 2개 가진 벡터(범위로 해석됨). 결과로 생성되는 병렬 풀의 크기는 요청한 범위 내에서 가능한 한 큰 값입니다.

추가적으로 batch는 일괄 처리 작업 자체를 실행하는데 또다른 워커를 사용합니다.

스크립트 또는 함수는 일괄 처리 코드 내에 있는 parforspmd와 같은 명령문의 실행을 위해 이 풀을 사용합니다. 풀에는 일괄 처리를 실행하는 워커 외에 N개의 워커가 필요하므로 클러스터에 사용 가능한 워커가 N+1개 이상 있어야 합니다. 이미 실행 중인 병렬 풀은 batch를 실행하는 데 필요하지 않습니다. 또한, 일괄 처리에서 생성되는 새 풀은 이미 열어 놓은 풀과 관련이 없습니다. 자세한 내용은 병렬 풀을 사용하여 일괄 처리 작업 실행하기 항목을 참조하십시오.

디폴트 값 0을 사용하는 경우, 스크립트 또는 함수는 단일 워커에서만 실행되고 병렬 풀에서는 실행되지 않습니다.

예: j = batch(@myFunction,1,{x,y},'Pool',4);

예: j = batch(@myFunction,1,{x,y},'Pool',[2,6]);

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

출력 인수

모두 축소

작업으로, parallel.Job 객체로 반환됩니다.

예: j = batch('aScript');

데이터형: parallel.Job

일괄 처리 작업의 상태를 보거나 진행 상황을 추적하려면 Job Monitor 항목에 설명된 대로 작업 모니터를 사용하십시오. 또한 작업 모니터를 사용하여, 다른 세션에서 생성된 일괄 처리 작업을 위해 job 객체를 가져오거나 batch 호출에서 job 객체를 반환하지 않고 생성된 일괄 처리 작업을 위해 job 객체를 가져올 수도 있습니다.

불필요하게 클러스터 저장소 리소스를 사용하지 않도록 더 이상 필요하지 않은 일괄 처리 작업은 삭제하십시오.

버전 내역

R2008a에 개발됨

모두 확장