AWS 기술 블로그

조카소의 이미지 생성형 AI 기술 및 AWS 서비스를 통한 바디프로필 이미지 생성 서비스 구축

조카소는 AI 기술을 활용하여 고도화된 사용자 경험을 제공하는 서비스입니다. 자막 생성 AI는 복잡한 과정 없이 신속하고 정확한 자동 자막 생성을 가능하게 하는 것으로, 크리에이터에게 콘텐츠 제작의 효율성을 높여줍니다. 바디프로필 AI는 고객의 얼굴 데이터를 활용하여 최적화된 비주얼 아웃풋을 제공, 개인화된 경험을 가능하게 합니다. 코드마피아는 이러한 AI 기반 서비스들을 통해 고객에게 편의성을 제공하고자 합니다.

바디프로필 AI 서비스

바디프로필 AI는 고객이 제공한 얼굴 데이터를 분석하여 고도화된 비주얼 아웃풋을 제공하는 인공지능 기반 서비스입니다. 고객이 12장의 얼굴 사진만 등록하면, 해당 데이터를 기반으로 고객의 얼굴을 학습하여 파인 튜닝 모델을 생성합니다. 이때, Stable Diffusion 파인 튜닝 방식으로는 Stable Diffusion + LoRA + Dreambooth 방식을 채택하였습니다. 이렇게 생성된 모델을 활용하여 30장으로 구성된 고화질의 바디프로필 사진 패키지를 제공합니다. 이 서비스를 통해 고객은 운동을 시작하기 전에 미래의 자신이 어떤 모습일지 미리 상상해 볼 수 있습니다. 코드마피아는 본 서비스를 제공하기 위해 AWS BatchAWS Step Funtions를 활용하고 있으며, 모델 학습과 사진 생성 작업을 신속하고 안정적으로 처리하는 효율적인 파이프라인을 구축하였습니다.

바디프로필 AI 서비스 아키텍처

< 그림1. 바디프로필 AI 서비스 아키텍처 >

위 아키텍처는 바디프로필 AI 서비스 구성의 전반적인 흐름을 나타냅니다. 각 대표적인 두가지 플로우에 대해서 설명드리겠습니다.

1. 결제 및 워크플로우 실행 플로우

단계 1: 서비스 사용을 원하는 유저는 조카소 웹페이지를 통해 결제 및 아래 예시와 같이 유저 얼굴이 나온 사진을 업로드합니다. Amazon API Gateway를 통해 이를 받아 유효성을 검증 합니다.

< 그림2. 바디프로필 AI 서비스 입력 사진 예시 >

단계 2: 업로드한 얼굴 사진은 Amazon S3에 결제에 대한 정보와 이메일 정보 등은 Amazon DynamoDB에 저장합니다.

단계 3: 제공된 정보를 기반으로 바디프로필 생성 워크플로우를 실행하는 AWS Step Functions의 State Machine을 실행합니다.

2. 바디프로필 이미지 생성 모델 플로우

단계 1: 유저로부터 제공받은 사진의 얼굴 영역을 잘라내고 Stable Diffusion LoRA 학습에 필요한 파라미터를 구성합니다.

단계 2: AWS Step Function을 통해 앞서 구성된 파라미터를 AWS Batch로 전달하고 Stable Diffusion 모델 파인 튜닝을 진행합니다.

단계 3: 파인 튜닝의 결과물인 “얼굴 이미지 LoRA 모델”을 Amazon S3에 업로드합니다.

단계 4: AWS Batch를 통해서 (1) EC2 인스턴스를 생성하고 (2) Stable Diffusion 추론 컨테이너 이미지를 ECR에서 EC2로 다운로드하고 (3) S3에 저장된 “얼굴 이미지 LoRA 파인 튜닝 모델”을 EC2인스턴스에 다운로드 한 후, 유저의 바디프로필 이미지를 생성합니다.

단계 5: 위 과정을 통해 생성한 바디프로필 이미지를 Amazon S3에 업로드합니다.

단계 6: 생성된 아래 예시와 같은 결과물을 등록된 유저의 이메일로 전송합니다.

< 그림3. 바디프로필 AI 서비스 출력 사진 예시 >

AWS Step Functions로 구성한 바디프로필 생성 워크플로우

AWS Step Functions는 해당 바디프로필 서비스와 여러 작업들이 복합적으로 진행되는 플로우를 제작할 때, 거의 모든 AWS 서비스와 통합되어 직관적인 GUI 환경에서 손쉽게 구성할 수 있는 서비스입니다. 아래에는 이미지를 전처리하고 이에 대한 LoRA + Dreambooth 학습 이후, 이를 기반으로 바디프로필을 생성하는 예시입니다.

< 그림4. 바디프로필 생성 AWS Step Functions 워크플로우>

바디프로필 생성 워크플로우는 얼굴 영역 자르기, 얼굴 이미지 LoRA + Dreambooth 파인 튜닝, 그리고 고해상도 이미지 생성의 세 단계로 구성되어 있습니다.

  1. 얼굴 영역 자르기 단계에서는 프론트엔드를 통해 수집된 사용자 얼굴 이미지를 학습에 적합한 형식으로 전처리합니다. 이 과정에는 Ultralytics의 YOLO 모델이 활용되며, 리소스 효율성 및 추후 다른 이미지 생성 파이프라인과의 상호운용성을 고려하여 AWS Lambda 환경에서 실행됩니다.
  2. 전처리 단계 후에는 LoRA 모델 학습에 필요한 하이퍼파라미터를 조합하고, 이렇게 조합된 파라미터는 AWS Batch를 통해 구동되는 LoRA + Dreambooth트레이닝 워크플로우에 전달됩니다. 이 워크플로우는 예기치 않은 파이프라인 중단 시나리오에 대비하여, ‘모델 존재 여부’를 미리 검증하고, 해당 모델이 존재한다면 이전 실행에서 생성된 모델을 재활용합니다.
  3. 이후에는 고해상도 이미지 생성을 위한 파라미터를 조합하여 AWS Batch에 전달하고, AWS Batch는 Amazon ECR에서 사전 등록된 Docker 이미지를 다운받아 바디프로필 이미지를 생성하기 위한 EC2 환경을 구성하여 바디프로필 이미지를 생성합니다.

마지막으로, AWS Lambda를 통해 Amazon S3에 저장된 생성물의 유효성과 완성도를 상세하게 검증하며, 모든 검증 과정이 성공적으로 마무리되면 임시 데이터를 정리하고 워크플로우를 종료합니다.

사용된 주요 AWS 서비스 소개

AWS Batch

AWS Batch를 사용하면 다양한 배치 컴퓨팅 요구 상황에 대한 배치 작업을 AWS Management Console, CLI 또는 SDK를 사용하여 간단하게 코드를 패키징하고 종속성을 지정하여 제출할 수 있습니다.

효율적인 배치 작업 구성을 위하여 컴퓨팅 리소스를 할당하는 세 가지 방법 중에서 선택할 수 있습니다. 이러한 전략을 통해 Generative AI와 같은 대용량의 컴퓨팅 리소스가 필요한 경우에 원하는 전략에 따라 AWS에서 제공하는 컴퓨팅 리소스들이 작업을 수행하도록 구성하실 수 있습니다.

  • 최적 적합: AWS Batch가 비용이 가장 저렴한 인스턴스 유형을 최우선으로 고려하여 작업 요구에 가장 적합한 인스턴스 유형을 선택합니다. 선택한 인스턴스 유형의 추가 인스턴스를 사용할 수 없는 경우, AWS Batch는 추가 인스턴스를 사용할 수 있게 될 때까지 기다립니다. 사용할 수 있는 인스턴스가 충분하지 않거나 사용자가 Amazon EC2 서비스 사용량 한도까지 모두 사용한 경우에는 현재 실행 중인 작업이 완료될 때까지 추가 작업이 실행되지 않습니다. 이 할당 전략은 비용은 저렴하지만, 인스턴스 규모를 조정하는 데 한계가 있을 수 있습니다.
  • 최적 적합 진행형: AWS Batch가 vCPU당 비용이 더 저렴한 인스턴스 유형을 최우선으로 고려하여 대기열에 있는 작업의 요구 사항을 충족하는 데 충분한 추가 인스턴스 유형을 선택합니다. 이전에 선택된 인스턴스 유형의 추가 인스턴스를 사용할 수 없는 경우에는 AWS Batch가 새로운 인스턴스 유형을 선택합니다.
  • 스팟 용량 최적화: AWS Batch가 중단될 확률이 적은 인스턴스 유형을 최우선으로 고려하여 대기열에 있는 작업의 요구 사항을 충족하는 데 충분한 인스턴스 유형을 하나 이상 선택합니다. 이 할당 전력은 스팟 인스턴스 컴퓨팅 리소스에만 사용할 수 있습니다.

AWS Step Functions

AWS Step Functions는 최신 애플리케이션을 위한 서버리스 오케스트레이션을 제공합니다. 오케스트레이션은 워크플로우를 여러 단계로 나누고, 흐름 로직을 추가하고, 단계 간의 입력과 출력을 추적하여 중앙에서 관리합니다.

애플리케이션이 실행될 때 단계 함수는 애플리케이션 상태를 유지하여 애플리케이션이 어떤 워크플로우 단계에 있는지 정확히 추적하고 애플리케이션 구성 요소 간에 전달되는 데이터의 이벤트 로그를 저장합니다. 즉, 네트워크에 장애가 발생하거나 구성 요소가 중단되는 경우에도 애플리케이션이 중단된 지점부터 바로 복구할 수 있습니다.

이러한 워크플로우를 코드가 아닌 시각적인 인터페이스를 통해 빠르고 쉽게 구성하도록 Workflow Studio를 제공합니다. 이를 통해 개발자는 복잡한 코드로 워크플로를 구성하는 것이 아닌 직관적인 GUI 환경에서 AWS에서 제공하는 기능과 패턴을 다양하게 조합하여 빠르게 원하는 워크플로우를 구성할 수 있습니다.

이미지 생성 모델 훈련과 실행에 AWS Batch를 선택한 이유

최근에는 AI 모델의 발전과 함께 이미지 생성 기술이 급속하게 발전하고 있습니다. 이러한 기술의 발전은 다양한 서비스와 애플리케이션에 적용되며, 특히 이미지 생성 모델은 사용자의 요구에 따라 실시간으로 이미지를 생성하는 데 큰 역할을 합니다. 그러나 컨테이너 기반으로 실행되는 이러한 모델을 효율적으로 배포하고 관리하는 것은 쉽지 않습니다. 이를 기반으로 코드마피아는 AWS에서 고려할 수 있는 옵션인 Amazon SageMaker, Amazon ECS, AWS Batch 세 가지 옵션 중에서 고려했습니다. 그 결과, AWS Batch가 가장 비용 효율적이고 유연한 옵션으로 판단되었습니다. 아래에는 왜 AWS Batch를 선택했는지에 대한 이유를 설명하겠습니다.

  1. 비용 효율성: AWS Batch는 바디프로필 서비스 방식처럼 실행할 태스크가 있을 때만 인스턴스를 구동합니다. 이는 인스턴스가 항상 구동되어 있지 않아도 되므로 비용을 절감할 수 있습니다. 특히, 이미지 생성 워크플로우와 같은 작업을 On-demand로 처리하는 경우에는 AWS Batch의 이러한 특성이 큰 장점으로 작용합니다.
  2. 컨테이너 구성의 편의성: AWS Batch는 컨테이너 배포 및 실행에 대한 기본 설정값을 제공합니다. 이에 따라 사용자는 복잡한 설정 과정 없이 쉽게 배포 및 실행을 진행할 수 있습니다.
  3. 비용 절감: Amazon SageMaker는 머신러닝 개발 전반에 필요한 인프라, 도구들을 완전 관리형으로 제공해 주는 서비스입니다. 코드마피아에서는 SageMaker의 완전관리형 서비스보다는, 최대한 비용 효율적인 접근방법인 AWS 서비스를 직접적으로 구성하는 (Do It Yourself, DIY) 방식을 선택하여, 자체 역량이 뛰어난 엔지니어가 이러한 DIY 방식을 통해 AWS Batch를 통하여 직접 구축하였습니다.
  4. 통합 운용의 편의성: AWS Batch는 AWS Step Functions와 함께 운용될 경우, Batch 작업의 시작과 종료를 하나의 Step으로 관리할 수 있습니다. 이에 따라 별도로 Amazon SQSAmazon EventBridge와 같은 리소스를 운용할 필요가 없습니다.
  5. 사용 사례: 바디프로필 서비스는 사용자로부터 얼굴 사진 이미지 약 20장을 받아 이미지 생성 워크플로우를 통해 처리합니다. 이 과정에서 이미지 LoRA + Dreambooth로 파인 튜닝 작업과 이렇게 생성된 파인 튜닝된 모델을 사용하여 이미지 생성(파인 튜닝 모델 추론)을 실행하는 작업을 On-demand로 처리해야 합니다. 이러한 요구 사항을 효과적으로 만족시키기 위해 AWS Batch를 사용했습니다.

결론적으로, AWS Batch는 생성형 이미지 모델의 실행에 있어 비용 효율성, 설정의 편의성, 통합 운용의 편의성 등 다양한 장점을 제공한다고 판단하여 코드마피아에서는 AWS Batch를 선택했습니다.

AWS Batch + AWS Step Functions 사용 팁

위에서 설명한 AWS Batch에서는 Job에 대한 Command 정의가 사전에 필요하며, 이를 위해 AWS에서는 사전에 구성할 수 있도록 Batch Job Definition을 제공합니다. 하지만 실제 운영 환경에서는 Job에 대한 실행 Command를 수정하거나 새로운 Command를 추가할 때마다 Job Definition에서 Command와 Parameter를 변경해야 하므로 관리 및 운영에 불편함이 있습니다. 이러한 이유로 AWS Step Functions를 통해 AWS Batch 작업을 관리했습니다.

Step Functions에서의 Command 관리 이점:

  • 중앙화된 관리: Step Functions에서 Command를 직접 관리하면, 여러 Job Definitions를 별도로 관리할 필요 없이 한 곳에서 모든 Command를 관리할 수 있습니다.
  • 유연성: Step Functions의 State Machine 정의를 통해 다양한 조건과 로직에 따라 동적으로 Command를 생성하거나 변경할 수 있습니다.
  • 운영의 편의성: Command 변경이 필요할 때 Step Functions만 수정하면 되므로, 별도의 Job Definition 관리 없이 빠르게 반영할 수 있습니다.

AWS Batch + AWS Step Functions :

  • Parameterized Command: Step Functions에서는 입력 파라미터를 기반으로 동적으로 Command를 생성할 수 있습니다. 이를 활용하면 다양한 조건에 따른 Command 실행이 가능합니다.
  • Error Handling: Step Functions는 에러 핸들링 기능을 제공합니다. Batch Job 실행 중 발생하는 에러를 Step Functions에서 캐치하고, 적절한 대응 조치를 취할 수 있습니다.
  • Monitoring & Logging: Step Functions와 AWS Batch 모두 CloudWatch와 통합되어 있습니다. 이를 활용하여 실행 로그, 메트릭스, 알림 등을 효과적으로 관리할 수 있습니다.

기본적으로 AWS Step Functions을 이용하여 손쉽게 복잡한 워크플로우를 구성하실 수 있으며 AWS Batch와 같은 자체적으로 통합되어있는 서비스는 더욱 효과적으로 쓸 수 있도록 다양한 기능을 제공합니다.

마무리

해당 블로그에서는 AI 기술을 통해 단순히 만드는 즐거움에서 그치는 것이 아닌 경험하는 즐거움으로 확장시키는 코드마피아의 바디프로필 AI 서비스에 대한 사례를 소개드렸습니다. 고객은 Generative AI 서비스에 필요한 비용효율적인 인프라 구성, 서비스 파이프라인 구축, 결제 및 알림 등을 AWS와 함께하였으며 적은 개발인원으로 AWS 솔루션즈 아키텍트와 함께 최적의 아키텍처 구성을 설계하여 빠르게 서비스를 검증, 테스트하여 출시하였습니다. 아래에 고객의 AWS 상에서의 Generative AI 서비스 구축 경험 메시지를 공유하며 글을 마치도록 하겠습니다.

“소수의 인원으로 다양한 서비스를 빠르게 출시하기 위해서는 개발에 드는 리소스를 최소화하고 빠르게 다양한 시도를 해볼 수 있는 개발 환경이 필요했습니다. AWS Step Functions와 AWS Batch를 조합한 파이프라인이 이를 가능하게 해주었습니다. Step Functions를 활용함으로써 전체 파이프라인을 효율적으로 운용할 수 있었고, AWS Batch를 활용함으로써 로컬에서 테스트한 세팅과 로직들을 큰 마찰 없이 배포할 수 있었습니다. 또한, 서비스 출시 전에 AWS 전문가분들의 지원을 받아 아키텍처의 최적화 방안 및 대규모 트래픽 대응 전략을 검토하였습니다. AWS와의 협업을 통한 이러한 성과에 감사의 의미를 표하며, 고객 중심의 탁월한 서비스를 제공할 수 있게 해준 AWS의 기술력에 찬사를 보냅니다.”

Donggeon Jo

조동근 (Dongkeun Jo)

조동근 대표는 코드마피아에서 AI 모델 개발과 Backend, 아키텍처 및 MLOps 파이프라인 등 서비스를 안정적으로 운영하고 배포하기 위해 필요한 의사결정 및 개발을 총괄하고 있으며 유튜브 조코딩 채널 크리에이터 활동을 통해 기술과 제품을 알리는 역할을 담당하고 있습니다.

Seungkeon Moon

문승건 (Seungkeon Moon)

문승건 개발자는 코드마피아에서 Frontend, Backend, 아키텍처 및 MLOps 파이프라인 등 서비스를 안정적으로 운영하고 배포하기 위해 필요한 의사결정 및 개발을 담당하고 있습니다.

Sangbeom Ma

Sangbeom Ma

마상범 솔루션즈 아키텍트는 영상 이커머스 스타트업 경험을 바탕으로, 클라우드를 통한 애플리케이션 운영, 미디어, AIML 등 다양한 영역에서 고객이 최적의 아키텍처를 구성하도록 돕고 고객의 비즈니스 성과를 달성하도록 AWS 클라우드 전환을 지원하는 업무를 담당하고 있습니다.

Gonsoo Moon

Gonsoo Moon

AWS AIML 스페셜리스트 솔루션즈 아키텍트로 일하고 있습니다. AI/ML 의 다양한 유스케이스 및 프러뎍션 경험을 바탕으로 고객의 AI/ML 문제를 해결하기 위해 고객과 함께 고민하고 협업하는 일을 주로 하고 있습니다. AI/ML 기술을 데이터 과학자, 개발자, 분석가 분에게 전파하여, 글로벌 및 한국 사회가 발전될 수 있게 기여를 하고자 합니다.