Azure Batch의 작업 및 태스크

Azure Batch에서 태스크는 계산 단위를 나타냅니다. 작업은 이러한 태스크의 컬렉션입니다. 작업 및 태스크에 대한 자세한 내용과 Azure Batch 워크플로에서 이들을 사용하는 방법은 아래에 설명되어 있습니다.

작업

작업은 태스크의 컬렉션입니다. 풀의 컴퓨팅 노드에서 해당 태스크에 의해 수행된 컴퓨팅 방식을 관리합니다.

작업은 작업이 실행되는 을 지정합니다. 각 작업에 새 풀을 만들거나 많은 작업에 하나의 풀을 사용할 수 있습니다. 작업 일정과 연결된 각 작업에 대해 풀을 만들거나 작업 일정과 연결된 모든 작업에 대해 하나의 풀을 만들 수 있습니다.

작업 우선 순위

사용자가 만드는 작업에 선택적 작업 우선 순위를 할당할 수 있습니다. Batch 서비스는 작업의 우선 순위 값을 사용하여 각 풀에서(작업 내의 모든 작업에 대해) 예약 순서를 결정합니다.

작업의 우선 순위를 업데이트하려면, 작업 속성 업데이트 작업(Batch REST)을 사용하거나 CloudJob.Priority(Batch .NET)을 수정합니다. 우선 순위 값의 범위는 -1000(가장 낮은 우선 순위)에서 +1000(가장 높은 우선 순위)까지입니다.

동일한 풀 내에서 우선 순위가 높은 작업은 우선 순위가 낮은 작업보다 먼저 예약됩니다. 이미 실행 중인 우선 순위가 낮은 작업은 우선 순위가 높은 작업에 의해 선점되지 않습니다. 우선 순위 수준이 동일한 작업은 예약될 가능성이 동일하며 작업 실행 순서는 정의되지 않습니다.

하나의 풀에서 실행되는 우선 순위 값이 높은 작업은 별도의 풀 또는 다른 Batch 계정에서 실행되는 작업의 예약에 영향을 주지 않습니다. 작업 우선 순위는 작업이 제출될 때 만들어지는 자동 풀에는 적용되지 않습니다.

작업 제약 조건

작업 제약 조건을 사용하여 작업에 특정 제한을 지정할 수 있습니다.

  • 최대 벽시계 시간을 설정할 수 있습니다. 그래서 지정된 최대 벽시계 시간보다 오랫동안 작업이 실행되면 작업 및 연결된 모든 태스크가 종료됩니다.
  • 태스크가 항상 다시 시도되거나 다시 시도되지 않도록 지정하는 것을 포함하여 태스크 다시 시도 최대 횟수를 제약 조건으로 지정할 수 있습니다. 태스크를 다시 시도하면 태스크가 실패하는 경우 다시 실행되도록 다시 큐에 대기됩니다.

작업 관리자 태스크 및 자동 종료

클라이언트 애플리케이션이 작업에 태스크를 추가할 수 있습니다. 또는 작업 관리자 태스크를 지정할 수 있습니다. 작업 관리자 태스크는 풀의 컴퓨팅 노드 중 하나에서 작업 관리자 태스크를 실행하여 작업에 필요한 태스크를 만드는 데 필요한 정보를 포함합니다. 작업 관리자 태스크는 Batch에서 특별히 처리되며, 작업이 생성되는 즉시 큐에 대기되고 실패할 경우 다시 시작됩니다. 작업 관리자 태스크는 작업이 인스턴스화되기 전에 태스크를 정의할 수 있는 유일한 방법이기 때문에 작업 일정에서 만든 작업에 필요합니다.

작업 내의 모든 태스크가 완료되면 작업은 기본적으로 활성 상태로 유지됩니다. 작업에서 모든 태스크가 완료되면 작업이 자동으로 종료되도록 이 동작을 변경할 수 있습니다. 작업의 onAllTasksComplete 속성(Batch .NET의 OnAllTasksComplete)을 terminatejob*`로 설정하여 태스크가 모두 완료 상태인 경우 작업을 자동으로 종료합니다.

Batch 서비스는 태스크가 없는 작업을 모든 태스크를 완료한 것으로 간주합니다. 따라서 이 옵션은 작업 관리자 태스크와 함께 가장 일반적으로 사용됩니다. 작업 관리자 없이 작업 자동 종료를 사용하려는 경우 처음부터 새 작업의 onAllTasksComplete 속성을 noaction으로 설정한 다음 작업에 태스크의 추가를 완료한 후에 terminatejob*`로 설정해야 합니다.

Scheduled jobs

작업 일정을 사용하여 배치 서비스 내에서 되풀이되는 작업을 만들 수 있습니다. 작업 일정은 작업을 실행할 시간을 지정하며, 실행할 작업에 대한 사양을 포함합니다. 일정의 빈도, 즉 일정이 시행되는 시점 및 기간, 일정의 기간 동안 작업을 만들어야 하는 빈도를 지정할 수 있습니다.

작업

태스크는 작업과 연결되는 계산의 단위입니다. 노드에서 실행됩니다. 태스크는 실행을 위해 노드에 할당되거나, 노드를 사용할 수 있을 때까지 큐에 대기됩니다. 간단히 말해 태스크는 컴퓨팅 노드에서 하나 이상의 프로그램이나 스크립트를 실행하여 완료해야 하는 작업을 수행합니다.

태스크를 만들 때 다음을 지정할 수 있습니다.

  • 태스크에 대한 명령줄 입니다. 컴퓨팅 노드에 애플리케이션 또는 스크립트를 실행하는 명령줄입니다.

    명령줄이 셸에서 실행되지 않도록 주의해야 합니다. 따라서 기본적으로 환경 변수 확장과 같은 셸 기능을 활용할 수 없습니다(PATH 포함). 이러한 기능을 활용하려면 예를 들어 Windows 노드에서 cmd.exe 또는 Linux 노드에서 /bin/sh를 시작하여 명령줄에서 셸을 호출해야 합니다.

    cmd /c MyTaskApplication.exe %MY_ENV_VAR%

    /bin/sh -c MyTaskApplication $MY_ENV_VAR

    태스크가 노드의 PATH 또는 참조 환경 변수가 아닌 애플리케이션 또는 스크립트를 실행해야 하는 경우 태스크 명령줄에서 명시적으로 셸을 호출합니다.

  • 리소스 파일 . 이러한 파일은 태스크의 명령줄이 실행되기 전에 Azure Storage 계정의 Blob Storage에 있는 노드로 자동 복사됩니다. 자세한 내용은 시작 태스크파일 및 디렉터리를 참조하세요.

  • 애플리케이션에 필요한 환경 변수 . 자세한 내용은 태스크에 대한 환경 설정을 참조하세요.

  • 태스크가 실행되어야 하는 제약 조건 . 예를 들어 제약 조건은 태스크가 실행되도록 허용된 최대 시간, 실패한 태스크를 다시 시도해야 하는 최대 횟수 및 태스크의 작업 중인 디렉터리에 파일을 보관하는 최대 시간을 포함합니다.

  • 작업이 실행되도록 예약된 컴퓨팅 노드에 배포할 애플리케이션 패키지 입니다. 애플리케이션 패키지는 태스크가 실행하는 애플리케이션의 간소화된 배포 및 버전 관리를 제공합니다. 작업 수준 애플리케이션 패키지는 공유 풀 환경에서 특히 유용하며 여기서는 다른 작업이 하나의 풀에서 실행되고 작업이 완료될 때 풀이 삭제되지 않습니다. 작업에 있는 태스크가 풀에 있는 노드보다 적은 경우 태스크를 실행하는 노드에만 애플리케이션을 배포하므로 태스크 애플리케이션 패키지는 데이터 전송을 최소화할 수 있습니다.

  • 작업이 노드에서 실행되는 Docker 컨테이너를 만들기 위해 Docker 허브 또는 프라이빗 레지스트리의 컨테이너 이미지 참조 및 추가 설정입니다. 풀이 컨테이너 구성으로 설정된 경우에만 이 정보를 지정합니다.

참고 항목

태스크의 최대 수명(태스크가 작업에 추가되는 시점부터 완료되는 시점까지)은 180일입니다. 완료된 태스크는 7일 동안 지속됩니다. 최대 수명 이내에 완료되지 않은 태스크에 대한 데이터에는 액세스할 수 없습니다.

노드에서 계산을 수행하도록 정의한 태스크 외에 몇 가지 특수한 태스크도 Batch 서비스에서 제공됩니다.

시작 태스크

풀과 시작 태스크를 연결하여 해당 노드의 운영 환경을 준비할 수 있습니다. 예를 들어, 태스크를 실행하는 애플리케이션을 설치하거나 백그라운드 프로세스를 시작하는 등의 작업을 수행할 수 있습니다. 시작 태스크는 노드가 풀에 유지되는 동안 노드가 시작될 때마다 실행됩니다. 여기에는 노드가 풀에 처음 추가될 때와 다시 시작되거나 이미지로 다시 설치 때 포함됩니다.

시작 태스크의 주요 이점은 태스크 실행에 필요한 컴퓨팅 노드를 구성하고 애플리케이션을 설치하는 데 필요한 모든 정보를 포함할 수 있다는 것입니다. 따라서 풀 내의 노드 수를 늘리려면 간단히 새 대상 노드 수를 지정하면 됩니다. 시작 태스크는 Batch 서비스에서 새 노드를 구성하고 태스크를 수락할 준비가 되도록 하는 데 필요한 정보를 제공합니다.

모든 Azure Batch 태스크와 마찬가지로, 실행할 명령줄 외에 Azure Storage의 리소스 파일 목록을 지정할 수 있습니다. Batch 서비스는 먼저 Azure Storage에서 노드에 리소스 파일을 복사한 다음 명령줄을 실행합니다. 풀 시작 태스크의 경우 파일은 일반적으로 태스크 애플리케이션 및 해당 종속성을 포함합니다.

그러나 시작 태스크는 컴퓨팅 노드에서 실행되는 모든 태스크에서 사용될 참조 데이터를 포함할 수도 있습니다. 예를 들어, 시작 태스크의 명령줄은 robocopy 작업을 수행하여 애플리케이션 파일(리소스 파일로 지정되고 노드에 다운로드됨)을 시작 태스크의 작업 중인 디렉터리에서 공유 폴더로 복사한 다음, MSI 또는 setup.exe를 실행할 할 수 있습니다.

일반적으로 Batch 서비스에서 시작 작업이 완료될 때까지 기다린 후 노드에 작업을 할당할 준비가 되었다고 간주하려고 합니다. 그러나 필요에 따라 이를 다르게 구성할 수 있습니다.

컴퓨팅 노드에서 시작 태스크가 실패하면 노드 상태가 실패를 반영하여 업데이트되고 노드에 태스크가 할당되지 않습니다. 스토리지에서 해당 리소스 파일을 복사하는 동안 문제가 발생하거나 해당 명령줄에서 실행된 프로세스에서 0이 아닌 종료 코드를 반환하면 시작 태스크가 실패할 수 있습니다.

기존 풀에 시작 태스크를 추가하거나 업데이트하는 경우 노드에 적용할 시작 태스크에 대한 해당 컴퓨팅 노드를 다시 부팅해야 합니다.

참고 항목

Batch는 리소스 파일과 환경 변수가 포함된 시작 태스크의 전체 크기를 제한합니다. 시작 태스크의 크기를 줄이려면 다음 두 가지 방법 중 하나를 사용할 수 있습니다.

  1. 애플리케이션 패키지를 사용하여 Batch 풀의 각 노드에 애플리케이션 또는 데이터를 배포할 수 있습니다. 애플리케이션 패키지에 대한 자세한 내용은 Batch 애플리케이션 패키지를 사용하여 컴퓨팅 노드에 애플리케이션 배포를 참조하세요.

  2. 애플리케이션 파일이 포함된 압축 보관 파일을 수동으로 만들 수 있습니다. 압축 보관 파일을 Azure Storage에 BLOB으로 업로드하세요. 압축 보관 파일을 시작 작업에 대한 리소스 파일로 지정합니다. 시작 작업을 위해 명령줄을 실행하기 전에 명령줄에서 보관 파일의 압축을 푸세요.

    보관 파일의 압축을 풀 때 원하는 보관 도구를 사용할 수 있습니다. 시작 작업에 대한 리소스 파일로 보관 파일의 압축을 풀 때 사용할 도구를 포함해야 합니다.

작업 관리자 태스크

일반적으로 작업 관리자 태스크를 사용하여 작업 실행을 제어 및/또는 모니터링합니다. 예를 들어 작업 관리자 태스크는 작업에 대한 태스크를 만들고 제출하고 실행할 추가 작업을 결정하고 작업이 완료되는 시점을 결정하는 데 주로 사용됩니다.

그러나 작업 관리자 태스크는 이러한 작업에 제한되지 않습니다. 이 작업에 필요한 모든 작업을 수행할 수 있는 완전한 태스크입니다. 예를 들어 작업 관리자 태스크는 매개 변수로 지정된 파일을 다운로드하고, 해당 파일의 내용을 분석하고, 이러한 내용에 따라 추가 태스크를 제출할 수 있습니다.

작업 관리자 태스크는 다른 모든 작업이 시작되기 전에 시작됩니다. 다음과 같은 기능을 제공합니다.

  • 작업이 만들어질 때 Batch 서비스에서 태스크로 자동으로 제출됩니다.
  • 작업의 다른 태스크보다 먼저 실행되도록 예약됩니다.
  • 풀 크기를 줄일 경우 연결된 해당 노드가 풀에서 마지막으로 제거됩니다.
  • 해당 종료는 작업의 모든 태스크에 대한 종료에 연결될 수 있습니다.
  • 작업 관리자 태스크는 다시 시작해야 할 경우 가장 높은 우선 순위가 지정됩니다. 유휴 노드를 사용할 수 없는 경우 Batch 서비스는 풀에서 실행 중인 다른 태스크 중 하나를 종료하여 작업 관리자 태스크를 실행할 공간을 확보할 수 있습니다.
  • 작업의 작업 관리자 태스크는 다른 작업의 태스크보다 우선 순위가 높지 않습니다. 작업 간에는 작업 수준 우선 순위만 준수됩니다.

작업 준비 및 해제 태스크

Batch는 사전 작업 실행 설정에 대한 작업 준비 태스크와 작업 후 유지 관리 또는 정리에 대한 작업 해제 태스크를 제공합니다.

작업 준비 태스크는 다른 모든 작업 태스크가 실행되기 전에 태스크를 실행하도록 예약된 모든 컴퓨팅 노드에서 실행됩니다. 예를 들어 작업 준비 태스크를 사용하여 모든 태스크에서 공유하는 데이터를 복사할 수 있지만 작업에 고유해야 합니다.

작업이 완료된 경우 하나 이상의 태스크를 실행한 풀의 각 노드에서 작업 해제 태스크가 실행됩니다. 예를 들어 작업 해제 태스크는 작업 준비 태스크에서 복사한 데이터를 삭제하거나, 진단 로드 데이터를 압축 및 업로드할 수 있습니다.

작업 준비 및 릴리스 태스크를 사용하면 태스크가 호출될 때 실행할 명령줄을 지정할 수 있습니다. 파일 다운로드, 상승된 권한 실행, 사용자 지정 환경 변수, 최대 실행 기간, 재시도 횟수 및 파일 보존 시간 등의 기능을 제공합니다.

작업 준비 및 해제 태스크에 대한 자세한 내용은 Azure Batch 컴퓨팅 노드에서 작업 준비 및 완료 태스크 실행을 참조하세요.

다중 인스턴스 태스크

다중 인스턴스 태스크는 둘 이상의 컴퓨팅 노드에서 동시에 실행될 수 있도록 구성된 태스크입니다. 다중 인스턴스 태스크와 함께 할당되는 계산 노드 그룹이 필요한 MPI(메시지 전달 인터페이스)와 같은 고성능 컴퓨팅 시나리오를 사용하여 단일 워크로드를 처리할 수 있습니다.

Batch .NET 라이브러리를 사용하여 일괄 처리에서 MPI 작업 실행에 대한 자세한 내용은 다중 인스턴스 태스크를 사용하여 Azure Batch에서 MPI(Message Passing Interface) 애플리케이션 실행을 확인합니다.

업무 종속성

작업 종속성은 그 이름에서 알 수 있듯이, 한 작업이 실행되기 전까지 다른 작업에 종속되도록 지정할 수 있습니다. 이 기능은 "다운스트림" 태스크가 "업스트림" 태스크의 출력을 사용하거나 업스트림 태스크가 다운스트림 태스크에 필요한 몇 가지 초기화를 수행하는 상황에 대한 지원을 제공합니다.

이 기능을 사용하려면 먼저 Batch 작업에서 태스크 종속성을 사용하도록 설정해야 합니다. 그런 다음 다른(또는 여러 다른) 태스크에 종속된 각 태스크에 대해 해당 태스크가 종속된 태스크를 지정합니다.

태스크 종속성을 통해 다음과 같은 시나리오를 구성할 수 있습니다.

  • taskBtaskA에 종속됨(taskBtaskA가 완료될 때까지 실행을 시작하지 않음)
  • taskCtaskAtaskB에 종속됨
  • taskD는 실행하기 전에 태스크 범위(예: 태스크 1~10)에 종속됨

자세한 내용은 azure-batch-samples GitHub 리포지토리에서 Azure Batch에서 태스크 종속성TaskDependencies 코드 샘플을 참조하세요.

태스크에 대한 환경 설정

Batch 서비스에 의해 실행되는 각 태스크는 컴퓨팅 노드에 설정된 환경 변수에 액세스할 수 있습니다. 여기에는 Batch 서비스에 의해 정의된 환경 변수와 작업에 대해 정의할 수 있는 사용자 지정 환경 변수가 포함됩니다. 작업이 실행하는 애플리케이션 및 스크립트는 실행 중에 해당 환경 변수에 액세스할 수 있습니다.

이러한 엔터티에 대한 환경 설정 속성을 채워서 태스크 또는 작업 수준에서 사용자 지정 환경 변수를 설정할 수 있습니다. 자세한 내용은 작업에 작업 추가 작업(Batch REST) 또는 Batch .NET의 CloudTask.EnvironmentSettingsCloudJob.CommonEnvironmentSettings 속성을 참조하세요.

클라이언트 애플리케이션 또는 서비스는 태스크에 대한 정보 가져오기 작업(Batch REST)을 사용하거나 CloudTask.EnvironmentSettings 속성(Batch .NET)에 액세스하여 태스크의 환경 변수(시스템 정의 및 사용자 정의)를 가져올 수 있습니다. 컴퓨팅 노드에서 실행되는 프로세스는 친숙한 %VARIABLE_NAME%(Windows) 또는 $VARIABLE_NAME(Linux) 구문을 사용하여 노드의 다음 환경 변수 및 기타 환경 변수에 액세스할 수 있습니다.

컴퓨팅 노드 환경 변수에서 모든 서비스 정의 환경 변수의 목록을 찾을 수 있습니다.

다음 단계