이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

심층 학습 일괄 처리 작업을 클러스터로 보내기

이 예제에서는 계속해서 작업을 진행하거나 훈련 중에 MATLAB을 닫을 수 있도록 심층 학습 훈련 일괄 처리 작업을 클러스터로 보내는 방법을 보여줍니다.

심층 신경망 훈련은 종종 몇 시간 혹은 며칠이 소요될 수 있습니다. 신경망을 일괄 처리 작업으로 훈련시킨 다음 준비가 되면 클러스터에서 결과를 가져오면 시간을 효율적으로 사용할 수 있습니다. 연산이 진행되는 동안 MATLAB에서 계속해서 작업할 수도 있고, MATLAB을 닫은 다음 나중에 작업 모니터를 사용하여 결과를 얻을 수도 있습니다. 이 예제에서는 parfor를 사용하여 다중 심층 학습 네트워크 훈련시키기 항목의 병렬 파라미터 스윕을 일괄 처리 작업으로 보냅니다. 작업이 완료되면 훈련된 네트워크들을 가져온 다음 각각의 정확도를 비교할 수 있습니다.

요구 사항

이 예제를 실행하려면 먼저 클러스터를 구성하고 데이터를 클라우드로 업로드해야 합니다. MATLAB에서는 MATLAB 데스크탑에서 직접 클라우드에 클러스터를 만들 수 있습니다. 탭의 병렬 메뉴에서 클러스터 생성 및 관리를 선택합니다. 클러스터 프로파일 관리자에서 클라우드 클러스터 생성을 클릭합니다. 또는 MathWorks Cloud Center를 사용하여 계산 클러스터를 만들고 액세스할 수도 있습니다. 자세한 내용은 Getting Started with Cloud Center를 참조하십시오. 이 예제에서는 MATLAB 탭의 병렬 > 디폴트 클러스터 선택에서 방금 만든 클러스터가 디폴트 값으로 설정되어 있는지 확인하십시오. 그런 다음 Amazon S3 버킷으로 데이터를 업로드하면 MATLAB에서 직접 사용할 수 있습니다. 이 예제에서는 기존에 Amazon S3에 저장되어 있는 CIFAR-10 데이터 세트 복사본을 사용합니다. 자세한 지침은 심층 학습 데이터를 클라우드로 업로드하기 항목을 참조하십시오.

일괄 처리 작업 제출하기

batch 함수를 사용하여 스크립트를 클러스터에 일괄 처리 작업으로 보냅니다. 클러스터는 스크립트의 내용을 실행할 워커를 하나 할당합니다. 스크립트의 병렬 코드가 워커가 더 많으면 유리한 경우, 즉 일례로 자동 병렬 지원이나 parfor 루프가 포함되어 있는 경우, 워커를 명시적으로 요청해야 합니다. batch는 스크립트를 실행하는 클라이언트에 대해 한 개의 워커를 사용합니다. 'Pool' 이름-값 쌍 인수를 사용하여 더 많은 워커를 지정할 수 있습니다.

여기서는 trainMultipleNetworks 스크립트를 클러스터로 보냅니다. 이 스크립트에는 parfor를 사용하여 다중 심층 학습 네트워크 훈련시키기의 병렬 파라미터 스윕이 포함되어 있습니다. 스크립트에 parfor 루프가 포함되어 있으므로, Pool 이름-값 쌍 인수를 사용하여 워커를 4개 더 지정합니다.

totalNumberOfWorkers = 5;
job1 = batch('trainMultipleNetworks', ...
    'Pool',totalNumberOfWorkers-1);

작업 모니터를 확인하여 클러스터에 있는 작업의 현재 상태를 볼 수 있습니다. 탭의 환경 섹션에서 병렬 > 작업 모니터링을 선택하여 작업 모니터를 엽니다.

클러스터에 작업을 추가로 제출할 수 있습니다. 클러스터가 다른 작업을 실행 중이어서 사용할 수 없는 경우, 클러스터를 사용할 수 있을 때까지 새로 제출하는 작업이 대기 중 상태가 됩니다.

프로그래밍 방식으로 결과 가져오기

클러스터로 작업을 제출한 후에는 연산이 진행되는 동안 MATLAB에서 계속해서 작업할 수 있습니다. 작업이 완료되어야 코드의 나머지 부분을 실행할 수 있는 경우 wait 명령을 사용하여 MATLAB을 차단하십시오. 여기서는 작업이 끝날 때까지 기다리십시오.

wait(job1);

작업이 끝나면 load 함수를 사용하여 결과를 가져옵니다. 여기서는 제출한 스크립트에 있는 병렬 파라미터 스윕에서 훈련된 네트워크들과 그 정확도를 가져옵니다.

load(job1,'accuracies');
accuracies
accuracies = 4×1

    0.8312
    0.8276
    0.8288
    0.8258

load(job1,'trainedNetworks');
trainedNetworks
trainedNetworks = 4×1 cell array
    {1×1 SeriesNetwork}
    {1×1 SeriesNetwork}
    {1×1 SeriesNetwork}
    {1×1 SeriesNetwork}

일괄 처리 작업의 모든 변수를 불러오려면 load 함수를 인수 없이 사용하십시오.

load(job1);

MATLAB을 닫은 경우에도, 연산이 진행되는 동안 또는 연산이 완료된 후에 클러스터에 있는 작업을 복구하여 결과를 가져올 수 있습니다. MATLAB을 닫기 전에 작업 ID를 기록해 두고 나중에 findJob 함수를 사용하여 작업을 가져오십시오.

작업을 가져오려면 먼저 parcluster 함수를 사용하여 클러스터에 대한 클러스터 객체를 만드십시오. 그런 다음 findJob에 작업 ID를 제공합니다. 여기서 작업 ID는 1입니다.

c = parcluster('MyClusterInTheCloud');
job = findJob(c,'ID',1);

마쳤으면 작업을 삭제합니다. 작업 모니터에서 작업이 제거됩니다.

delete(job1);

작업 모니터를 사용하여 결과 가져오기

일괄 처리 작업을 제출하면 연산이 모두 클러스터에서 수행되므로 MATLAB을 안전하게 닫을 수 있습니다. 다른 MATLAB 세션에서 작업 모니터를 사용하여 작업의 상태를 확인할 수 있습니다.

작업이 완료되면 작업 모니터에서 결과를 가져올 수 있습니다. 탭의 환경 섹션에서 병렬 > 작업 모니터링을 선택하여 작업 모니터를 엽니다. 그런 다음 작업을 마우스 오른쪽 버튼으로 클릭하여 상황별 메뉴를 표시합니다. 이 메뉴에서는 다음을 수행할 수 있습니다.

  • 세부 정보 표시를 클릭하여 작업 공간으로 작업 불러오기

  • 변수 불러오기를 클릭하여 작업의 모든 변수 불러오기

  • 모두 마친 후 삭제를 클릭하여 작업 삭제

참고 항목

관련 예제

세부 정보