Batch
Batch는 일련의 작업들을 한번에 하는 것을 의미한다. 많은 작업을 한 번에 처리하는 것은 리소스와 시간을 절약할 수 있다.
또한 클라이언트의 요청과 서버의 처리를 완전히 분리할 수 있다. 특정 시간대에 몰아서 작업을 처리하는 방식은 비동기적이며, 이는 클라이언트와 서버 간의 상호작용을 끊임없이 유지할 필요 없다.
- 해야할 작업(job)을 정의
- 실행된 작업은 작업 큐(job queue)안으로
- AWS Batch에 의해 작업 스케줄링 및 관리
일반적인 Batch 사용
많은 경우에서는 Docker image 를 이용해서 Batch job을 정의한다. 만일 Batch를 이용해서 AI 이미지 생성 파이프라인을 구축하고 싶은 경우, AI 이미지 생성 파이썬 코드를 Docker image로 만든 후 Batch job으로 정의를 하면 된다. 해당 정의를 기반으로 생성된 작업은 해당 파이썬 코드를 수행할 것이다.
- docker image를 ECR 에 push
- 배치 환경 설정(compute environment, job queue)
- docker image이용해서 Batch job definition
- 정의를 기반으로 작업 생성
우선 그러기 위해서는 docker image를 ECR 에 올려야 한다. 아래 글들에 해당 과정에 대한 설명이 잘 나와있다.
https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/docker-push-ecr-image.html
이 후, compute environment, job queue, job definition은 아래의 wizard 를 쭉 진행하면 된다.
https://us-east-1.console.aws.amazon.com/batch/home?region=us-east-1#wizard
https://us-east-1.console.aws.amazon.com/batch/home?region=us-east-1#wizard
us-east-1.console.aws.amazon.com
과정을 쭉 진행하다보면, Job definition 에서 아래와 같은 화면을 볼 수 있다. 빨간 부분에는 이미지의 주소(ECR 주소), 파란 부분에는 실행하고 싶은 명령어를 입력하면 된다. 만일 도커 안, echo 디렉토리 내의 test_server.py를 실행하고 싶은 경우에는 아래와 같이 입력하면 된다.
["python", "/echo/test_server.py"]
이렇게 쭉 작업을 생성해주면, 작업 큐에 작업이 들어간다. 큐에 들어간 작업은 비동기적으로 수행된다. 이렇게 하여 python 코드가 Batch에 의해 실행되었다.
조금 더 생각해보면
아래와 같은 질문들이 나올 수 있다.
- python 코드가 실제 AI image generation 과 같이 GPU 환경에서 작동해야 한다면?
- 작업을 수동으로 생성해주는 것이 아닌 클라이언트의 요청을 받아서 수행하려면?
- 작업 큐 안에 있는 작업을 정해진 시간에 처리하려면?
- 작업을 수행하고 나온 결과물을 s3에 올리려면?
쭉 살피고 관련해서 포스트를 작성해야겠다!
'Backend > AWS' 카테고리의 다른 글
[AWS] EC2 vs Lambda 무엇을 이용할까 (0) | 2024.02.04 |
---|---|
[AWS] Unable to import module 'lambda_function': No module named 'pydantic_core._pydantic_core' (1) | 2024.02.01 |
[AWS] Batch job docker image 환경변수 (1) | 2023.12.07 |
[AWS] Batch (How to Submit Job) (0) | 2023.12.05 |
[AWS] VPC, Subnet 등 용어 정리 (0) | 2023.11.25 |