AWS Batch 기능

AWS Batch를 사용해야 하는 이유

AWS Batch에서는 AWS Management Console, CLI 또는 SDK를 사용하여 배치 작업용 코드를 패키징하고, 종속성을 지정하며, 배치 작업을 제출합니다. 실행 파라미터와 작업 종속성을 지정하고 나면, AWS Batch는 널리 사용되는 다양한 배치 컴퓨팅 워크플로 엔진 및 언어(예: Pegasus WMS, Luigi, Nextflow, Metaflow, Apache Airflow 및 AWS Step Functions)와 손쉽게 통합할 수 있습니다. AWS Batch는 작업 요구 사항에 따라 온디맨드 또는 스팟 인스턴스를 사용할 수 있는 옵션을 통해 Amazon Elastic Container Service(ECS)Amazon Elastic Kubernetes Service(EKS)AWS Fargate 컴퓨팅 리소스를 효율적이고 동적으로 프로비저닝하고 확장합니다. AWS Batch는 신속하게 시작할 수 있도록 기본 작업 대기열과 컴퓨팅 환경 정의를 제공합니다.

작업 정의

다중 컨테이너 작업은 자율 주행 차량 및 로봇 공학에 사용되는 것과 같은 복잡한 시스템을 테스트할 때 규모에 맞는 시뮬레이션을 더 쉽고 빠르게 실행할 수 있는 기능입니다. 한 작업에서 여러 컨테이너를 실행할 수 있는 기능을 통해 시스템을 복잡한 모놀리식 컨테이너로 재구축하지 않고도 AWS Batch의 고급 확장, 일정 관리 및 비용 최적화 기능을 활용할 수 있습니다. 대신 각각 3D 가상 환경, 로봇 인식 센서 또는 데이터 로깅 사이드카와 같은 다양한 시스템 구성 요소를 나타내는 여러 개의 작은 모듈식 컨테이너를 계속 사용할 수 있습니다. 다중 컨테이너 작업은 작업 준비 단계를 줄여 개발 시간을 단축하고 추가 사내 도구를 구축할 필요를 없애줍니다. 또한 여러 컨테이너로 시뮬레이션 작업을 실행하면 서로 다른 팀이 다른 팀의 구성 요소에 방해받지 않고 팀 구성 요소의 오류를 찾아 수정할 수 있도록 구성 요소 책임을 정의하여 소프트웨어 개발(Dev) 및 IT 운영(Ops)을 간소화할 수 있습니다.

AWS Batch는 다중 노드 병렬 작업을 지원하므로 여러 EC2 인스턴스에 걸쳐 단일 작업을 실행할 수 있습니다. 이 기능을 통해 AWS Batch를 사용하여 긴밀하게 결합된 더 큰 규모의 고성능 컴퓨팅(HPC) 애플리케이션 또는 분산 GPU 모델 교육과 같은 워크로드를 효율적으로 실행할 수 있습니다. 또한 AWS Batch는 AWS의 대규모에 따라 높은 수준의 노드 간 통신이 필요한 애플리케이션을 실행할 수 있게 해주는 네트워크 인터페이스인 Elastic Fabric Adapter도 지원합니다.

AWS Batch를 사용하면 vCPU 및 메모리와 같은 리소스 요구 사항, AWS Identity and Access Management(IAM) 역할, 볼륨 탑재 지점, 컨테이너 속성 및 환경 변수를 지정하여 작업이 실행되는 방식을 정의할 수 있습니다. AWS Batch는 Amazon ECS에서 컨테이너식 애플리케이션으로 작업을 실행합니다.  서로 다른 작업 간에 종속성을 정의할 수도 있습니다. 예를 들어 배치 작업이 서로 다른 리소스 요구 사항을 가진 3개의 처리 단계로 구성될 수 있습니다. 종속성의 경우 서로 다른 리소스 요구 사항을 가지며 이전 작업에 따라 다음 작업이 결정되는 3개의 작업을 생성할 수 있습니다.

통합

AWS Batch는 Pegasus WMS, Luigi, Nextflow, Metaflow, Apache Airflow 및 AWS Step Functions와 같은 상용 및 오픈 소스 워크플로 엔진과 통합될 수 있으므로 익숙한 워크플로 언어를 사용하여 배치 컴퓨팅 파이프라인을 모델링할 수 있습니다.

이제 AWS Batch에서 EC2 시작 템플릿을 지원하므로, Batch가 요구 사항에 맞게 인스턴스를 확장하는 동안 컴퓨팅 리소스에 대한 사용자 지정 템플릿을 구축할 수 있습니다. EC2 시작 템플릿을 지정하여 스토리지 볼륨을 추가하거나, 네트워크 인터페이스를 선택하거나, 권한을 구성하는 등의 다양한 작업을 수행할 수 있습니다. EC2 시작 템플릿은 한 리소스 내의 시작 파라미터를 캡처함으로써 Batch 환경을 구성하는 데 필요한 단계 수를 줄입니다.

 

AWS Batch는 AWS Management Console에 배치 작업에 대한 주요 운영 지표를 표시합니다. 컴퓨팅 파워에 관한 지표뿐만 아니라 실행 중인 작업, 보류 중인 작업 및 완료된 작업에 대한 지표도 볼 수 있습니다. 작업에 대한 로그(예: STDERR, STDOUT)는 콘솔에서 볼 수 있으며, Amazon CloudWatch Logs에도 작성됩니다.

AWS Batch는 IAM을 사용하여 작업이 액세스할 수 있는 AWS 리소스(예: Amazon DynamoDB)를 제어하고 모니터링합니다. 또한, IAM을 통해 조직 내 서로 다른 사용자에 대한 정책을 정의할 수 있습니다. 예를 들어 관리자에게는 모든 AWS Batch API 작업에 대한 전체 액세스 권한을 부여하고, 개발자에게는 컴퓨팅 환경 구성과 작업 등록과 관련된 제한된 권한을 부여하며, 최종 사용자는 작업을 제출하고 삭제하는 데 필요한 권한만 갖도록 제한할 수 있습니다.

컴퓨팅 환경

AWS Batch는 기존 Amazon EKS 클러스터에서 배치 작업을 실행할 수 있습니다. 컨테이너에 필요한 vCPU, 메모리 및 GPU 요구 사항을 지정한 다음 EKS 클러스터 지원 컴퓨팅 환경에 연결된 대기열에 제출합니다. AWS Batch는 Kubernetes 노드의 크기 조정과 노드 내 포드 배치를 모두 관리합니다. 또한 AWS Batch는 Amazon Elastic Compute Cloud(EC2) 온디맨드 및 스팟 인스턴스에 대한 지원을 제공하는 동시에 대기열, 종속성 추적, 작업 재시도, 우선 순위 지정 및 포드 제출을 관리합니다. 또한 AWS Batch는 고유한 네임스페이스에서 EKS 클러스터와 통합되므로 배치 작업이 기존 프로세스에 방해가 되지 않습니다. 마지막으로, AWS Batch는 웜 노드 풀 유지, 특정 양의 vCPU 용량 제한, 노드 확장, 단일 클러스터 또는 여러 클러스터에서 작업 실행 등 사용자를 대신해 용량을 관리합니다.

Fargate 리소스를 지원하는 AWS Batch를 사용하면 배치 작업에 대한 완전한 서버리스 아키텍처를 구축하게 되는 것입니다. Fargate를 사용하면 모든 작업에서 요청한 만큼의 정확한 CPU 용량과 메모리를 받게 되므로 (허용된 Fargate SKU 내에서) 리소스 시간을 낭비하지 않고 EC2 인스턴스 시작을 기다릴 필요가 없습니다.

현재 AWS Batch 사용자라면, Fargate는 EC2 인스턴스로부터 추가 분리 계층을 지원합니다. Amazon Machine Image(AMI)를 관리하거나 패치할 필요가 없습니다. Fargate 호환 가능 작업을 Batch에 제출할 때, Amazon EC2에서 실행할 워크로드와 Fargate에서 실행할 워크로드가 있는 경우 두 가지 다른 서비스를 관리해야 한다는 걱정을 할 필요가 없습니다.

AWS는 우선순위, 작업 재시도, 종속성, 제한 시간 등을 지정할 수 있는 기능 및 관리형 대기열을 갖춘 클라우드 기반 스케줄러를 제공합니다. AWS Batch가 Fargate에 대한 제출과 작업의 수명 주기를 관리하므로 직접 이러한 관리를 수행할 필요가 없습니다.

Fargate는 보안 혜택을 제공하므로 부가적인 노력(예, SOX 및 PCI 준수)을 기울일 필요가 없으며 모든 작업에 대해 컴퓨팅 리소스를 격리합니다.

일정 설정

AWS Batch를 사용하면 서로 다른 우선순위 수준으로 여러 개의 대기열을 설정할 수 있습니다. 배치 작업은 컴퓨팅 리소스가 작업을 실행할 수 있을 때까지 대기열에 저장됩니다. AWS Batch 스케줄러는 각 작업의 리소스 요구 사항을 기반으로 대기열에 제출된 작업을 언제 어디서 어떻게 실행할지 평가합니다. 스케줄러는 각 대기열의 우선순위를 평가하고, 해당 작업에 대기 중인 종속성이 없는 한, 최적의 컴퓨팅 리소스(예: CPU 최적화와 메모리 최적화 비교)에서 우선순위에 따라 작업을 실행합니다.

GPU 일정 설정을 사용하면 AWS Batch의 작업 정의 입력 변수로 작업에 필요한 액셀러레이터의 수와 유형을 지정할 수 있습니다. 그러면 AWS Batch는 필요한 GPU 수를 토대로 작업에 적합하게 인스턴스의 크기를 확장하고, 적절한 컨테이너만 액셀러레이터에 액세스할 수 있도록 각 작업의 요구에 따라 액셀러레이터를 격리합니다.

크기 조정

Fargate 또는 AWS Fargate Spot을 AWS Batch와 함께 사용하는 경우, Batch에서 몇 가지 개념(컴퓨팅 환경, 작업 대기열, 작업 정의)만 설정하면 되며, 컴퓨팅 인프라의 단일 항목을 관리하지 않고도 완전한 대기열, 스케줄러 및 컴퓨팅 아키텍처를 갖추게 됩니다.

EC2 인스턴스를 원하는 고객을 위해, AWS Batch는 제출된 작업의 볼륨 및 리소스 요구 사항에 따라 컴퓨팅 리소스를 동적으로 프로비저닝하고 조정하는 관리형 컴퓨팅 환경을 제공합니다. EC2 인스턴스 유형, VPC 서브넷 구성, 모든 인스턴스에 걸쳐 최소/최대/필요 vCPU, 온디맨드 인스턴스 요금의 백분율로 스팟 인스턴스에 대해 지불할 의향이 있는 금액과 같은 요구 사항으로 관리형 컴퓨팅 환경을 구성할 수 있습니다.

또는 관리형 컴퓨팅 환경에서 제공하는 구성과는 다른 EC2 인스턴스용 구성(예: 더 큰 EBS 볼륨 또는 다른 운영 체제)을 사용해야 하는 경우 AWS Batch 비관리형 컴퓨팅 환경 내에서 자체 컴퓨팅 리소스를 프로비저닝하고 관리할 수 있습니다. Amazon ECS 에이전트가 포함된 EC2 인스턴스를 프로비저닝하고 지원되는 버전의 Linux 및 Docker를 실행하면 됩니다. 그러면 AWS Batch는 사용자가 프로비저닝한 EC2 인스턴스에서 배치 작업을 실행합니다.

AWS Batch를 사용하면 컴퓨팅 리소스를 할당하는 세 가지 방법 중에서 선택할 수 있습니다. 이러한 전략을 사용하면 AWS Batch가 인스턴스 규모를 조정하는 방법을 결정할 때 처리량과 요금을 고려할 수 있습니다.

최적 적합: AWS Batch가 비용이 가장 저렴한 인스턴스 유형을 최우선으로 고려하여 작업 요구에 가장 적합한 인스턴스 유형을 선택합니다. 선택한 인스턴스 유형의 추가 인스턴스를 사용할 수 없는 경우, AWS Batch는 추가 인스턴스를 사용할 수 있게 될 때까지 기다립니다. 사용 가능한 인스턴스가 충분하지 않거나 사용자가 Amazon EC2 서비스 사용량 한도까지 모두 사용한 경우에는 현재 실행 중인 작업이 완료될 때까지 추가 작업이 실행되지 않습니다. 이 할당 전략은 비용은 저렴하지만 인스턴스 규모를 조정하는 데 한계가 있을 수 있습니다.

최적 적합 진행형: AWS Batch가 vCPU당 비용이 더 저렴한 인스턴스 유형을 최우선으로 고려하여 대기열에 있는 작업의 요구 사항을 충족하는 데 충분한 만큼의 추가 인스턴스 유형을 선택합니다. 이전에 선택된 인스턴스 유형의 추가 인스턴스를 사용할 수 없는 경우에는 AWS Batch가 새로운 인스턴스 유형을 선택합니다.

스팟 용량 최적화: AWS Batch가 중단될 확률이 적은 인스턴스 유형을 최우선으로 고려하여 대기열에 있는 작업의 요구 사항을 충족하는 데 충분한 만큼의 인스턴스 유형을 하나 이상 선택합니다. 이 할당 전력은 스팟 인스턴스 컴퓨팅 리소스에만 사용할 수 있습니다.