AWS 기술 블로그

툰스퀘어의 생성형 AI 모델 배포를 위한 Amazon SageMaker 활용 사례

툰스퀘어 (Toonsquare)는 웹 브라우저 기반의 서비스형 소프트웨어(SaaS) AI 인공지능 웹툰 창작 플랫폼인 ‘투닝(Tooning)’ 서비스를 제공하는 플랫폼입니다. 디지털 창작에 최적화된 핵심 AI 기술을 적용하여 투닝 매직AI, 에디터, 월드 서비스 등을 운영하며 창작 문화를 만들고 혁신을 이뤄내고 있습니다. 특히 투닝 매직 AI를 통해 사용자가 프롬프트를 클릭하거나 직접 입력하여 고해상도의 이미지를 생성할 수 있는 고퀄리티 이미지 창작 서비스를 제공하고 있습니다.

투닝 매직 AI는 효과적인 모델 학습 및 리소스 사용을 목표로 하고 있으며, 이미지 생성 모델인 Stable  Diffusion에 Low-Rank Adaptation(LoRA) 학습법을 적용하여 빠른 학습 속도와 GPU 요구 사항을 최소화하여 운영하고 있습니다. LoRA는 사전 훈련된 모델의 가중치를 고정하고, 일부 레이어에 학습 가능한 새로운 레이어 가중치를 주입하는 방식으로, 학습 결과가MB단위로 가벼운 특징을 가지고 있습니다.

그리고 모델 및 학습에서 뿐만 아니라 효과적인 리소스 사용을 위해 모델 학습, 추론, ­배포를 포함하는 기계학습 (ML) 파이프라인에 Amazon SageMaker를 사용하고 있습니다.

이 블로그에서는 Toonsquare가 모델 추론 단계에서 SageMaker를 사용할 때 고려한 요건과 SageMaker 추론 엔드포인트를 생성하는 방법을 설명합니다.

솔루션 아키텍처

툰스퀘어는Amazon SageMaker Studio에서 Python3.0 Base이미지를 사용하여 모델 추론을 위한 개발을 수행하고 있습니다. 추론을 위한 컨테이너를 구성하고 학습된 모델을 배포하여, SageMaker 엔드포인트를 생성하였으며 Amazon API Gateway를 통해 사용자 요청을 처리하고 반환하게 됩니다.

모델 추론에는 4가지 모듈이 포함되어 있으며 그 내용은 다음과 같습니다:

  1. input_fn: 모델에 전달될 인풋데이터를JSON형태로 데이터를 입력받고 처리합니다.
  2. model_fn: Base model을 불러온 뒤, LoRA모델의 가중치를 설정하는 작업을 진행합니다.
  3. prodict_fn: input_fn함수로 함수로부터 전달된 요청을 기반으로 추론을 수행합니다. 추론 시 실행할 Step 수와, 결과로 반환하는 이미지 크기와 수 등을 설정하고 예측을 수행합니다.
  4. output_fn: 추론결과로서 반환된 이미지를 base64로 인코딩 후 JSON 형식으로 변환하며 클라이언트로 반환합니다.

먼저 SageMaker에 배포한 모델을 실제 프로덕션에 사용하기 위해서는 추론 엔드포인트를 생성해야 합니다. SageMaker는 실시간 추론, 서버리스 추론, 배치 추론, 그리고 서버리스 추론의4가지 추론 옵션을 제공하고 있으며 아래와 같은 차이가 있습니다.

실시간 추론 서버리스 추론 배치 추론 비동기 추론
추론 엔드포인트 형태 영구적 비영구적 비영구적 비영구적
GPU 지원 여부
(서울 리전 기준)
지원 미지원 지원 지원
페이로드 크기 최대 6MB 최대 4MB GB 단위 데이터셋 최대 1GB
사용 사례 지속적인 트래픽 간헐적인 요청 또는 예측하기 어려운 패턴의 트래픽 대용량 데이터셋 처리, 단일 요청이 아닌 대용량 요청 어느 정도의 지연시간을 수용 가능한 경우

툰스퀘어의 경우, 비용 및 성능 효과적인 추론 형태를 사용하기 위해 실시간 추론과 서버리스 추론을 고려하였으며, 페이로드 크기가 크지 않고GPU를 사용하여 낮은 지연 시간으로 이미지를 제공해야했습니다. 따라서 요건에 맞는 추론 유형으로 실시간 추론 엔드포인트를 사용하였습니다.

추론 엔드포인트를 생성하기 위한 전반적인 흐름 및 방법에 대해 알아봅니다.

  • 단계 1 : 학습할 이미지와 텍스트 데이터 등을 S3 버킷에 업로드합니다.
  • 단계 2: SageMaker Studio에서 환경 (Base Pythono 3.0 이미지 사용)을 구성하고 터미널을 통해 Hugging Face에서 LoRA 모델의 Base모델이 되는 Stable diffusion 모델을 가져옵니다. LoRA 학습을 위한 깃허브 리포지토리 또한 클론하여 준비합니다.
  • 단계 3: Dependency 설정 등을 마치고, 모델 학습을 위한 파라미터 셋팅을 마칩니다. 학습 시 Epoch가 진행될 때, 지정한 폴더에 LoRA모델이 저장됩니다. 이렇게 생성된 생성된 LoRA 모델과 Base 모델은 S3에 저장하여 관리합니다.
  • 단계 4: 사용할 코드 및 모델 파일들을 tar로 압축합니다.
  • 단계 5 : 필요한 IAM Role과 AWS 리전을 지정하고, 압축된 model을 Amazon S3 버킷으로 복사합니다.
    import os
    import boto3
    import sagemaker
    from sagemaker import get_execution_role
    
    # 현재 AWS 계정의 리전
    region = boto3.Session().region_name
    
    # Sagemaker 작업을 실행하는 데 사용할 IAM 역할을 가져옴
    role = get_execution_role()
    
    # Sagemaker에서 자동으로 생성된 기본 s3 버킷을 사용
    bucket = sagemaker.Session().default_bucket()
    
    # model.tar.gz 파일을 SageMaker에서 가져온 기본 버킷으로 복사
    !aws s3 cp model.tar.gz s3://$bucket/model.tar.gz
    
  • 단계 6 : Pytorch 모델에 필요한 설정 및 정의를 수행합니다.
    from sagemaker.pytorch import PyTorchModel
    
    # S3 버킷을 사용해서 모델 아티팩트의 경로를 지정함(model.tar.gz)
    model_path = 's3://{}/model.tar.gz'.format(bucket)
    
    # model_data = 모델 아티팩트의 s3 경로
    # role = sagemaker 작업을 수행하는 데 사용되는 IAM 역할
    # entry_point = 모델 추론을 수행하기 위한 python script
    pytorch_model = PyTorchModel(model_data=model_path,
                                 role=role,
                                 entry_point='inference.py',
                                 framework_version="2.0.0",
                                 py_version="py310")
    
  • 단계 7 : SageMaker에 모델을 배포하고 추론하기 위한 predictor를 생성합니다.
    from sagemaker.deserializers import JSONDeserializer
    from sagemaker.serializers import JSONSerializer
    from sagemaker.serializers import IdentitySerializer
    from sagemaker.deserializers import BytesDeserializer
    from sagemaker.deserializers import NumpyDeserializer
    
    # 모델을 호스팅할 SageMaker엔드포인트 생성
    # instance_type = 호스팅할 EC2 인스턴스 유형 지정
    # initial_instance = 호스팅할 인스턴스 수 지정
    # serializer = 입력 데이터 직렬화 방법 정의
    # deserializer = 생성된 predictor의 정보 출력
    predictor = pytorch_model.deploy(
        instance_type='ml.g4dn.xlarge',
        initial_instance_count=1,
        serializer=IdentitySerializer(content_type='application/json'),
        deserializer=JSONDeserializer()
    )
    

위와 같이 모델을 배포하면, 콘솔을 통해 SageMaker 엔드포인트가 생성된 것을 확인할 수 있습니다.

  • 단계 8 : 실제 프로덕션에서 추론 엔드포인트를 사용할 때는, 트래픽 양에 따라 자동으로 인스턴스 수를 확장하고 축소해야 합니다. Amazon EC2와 동일하게 SageMaker는 오토 스케일링(Auto Scaling)를 지원하고 있으며, 필요한 용량에 맞춰 오토 스케일링 구성 항목을 설정합니다.
  • 단계 9: SageMaker 엔드포인트는 퍼블릭으로 노출되지 않으므로, 클라이언트에서 요청할 수 있도록 Amazon API Gateway를 사용합니다. 클라이언트 요청 처리에 따라 API Gateway와 Lambda를 같이 사용하고, 결과만 반환한다면 API Gateway만 사용할 수 있습니다.
    프롬프트 요청을 처리하기 위해, API Gateway에서 아래와 같은 Method Request를 작성합니다.

    {
        “prompt”: “a man”,
        “style”: “SageMaker Endpoint 1”
    }
    

    요청한 기능을 수행하기 위해서는 Integration Request에서 Mapping Template을 작성하여 해당하는 SageMaker 엔드포인트로 경로가 지정될 수 있도록 합니다.

마무리

이 블로그에서는 학습한 머신러닝 모델을 SageMaker에서 추론하기 위한 방법을 설명드리면서 툰스퀘어의 실 사용 사례를 소개드렸습니다. 여러분들도 Amazon SageMaker Studio를 통해 개발 환경을 손쉽게 구성하고 모델을 배포하여 ML 파이프라인을 손쉽게 운영하실 수 있습니다. 또한 AWS SDK를 사용하여, 개발 환경에서 모델을 SageMaker 엔드포인트로 손쉽게 배포하고 탄력적으로 추론 엔드포인트를 운영할 수 있습니다.

툰스퀘어의 SageMaker 사용 여정이 여러분들의 ML 모델 배포 및 운영에 도움이 되길 바라면서 개발 후기와 함께 글을 마치도록 하겠습니다.

“Amazon SageMaker를 사용한 이번 프로젝트는 훌륭한 개발자 경험(Developer Experience)을 안겨주었습니다. SageMaker의 사용자 중심으로 만들어진 기능들과 강력한 자원 관리 덕분에 프로젝트 진행이 매우 효율적이었습니다. 모델 학습부터 추론, 배포가 간편하게 이루어지며, Auto Scaling과 Amazon CloudWatch 통합을 통한 자동화는 운영 효율을 높여 비용을 절감하는 데 큰 도움이 되었습니다. 특히, SageMaker와 LoRA의 조합은 속도, 가벼움, 낮은 GPU 요구사항에서 우수한 성능을 보여주었습니다. 미래에는 SageMaker의 다양한 기능을 더욱 활용하여 AI 모델 개발을 더욱 효율적으로 수행하고자 합니다. SageMaker를 통한 프로젝트 진행은 시간과 비용을 절약하는 데 큰 기여를 하였으며, 이 경험이 향후 프로젝트에도 긍정적인 영향을 끼칠 것으로 기대합니다.”

이름

김원중

김원중 개발자는 Toonsquare에서 AI 모델 리서치와 MLOps 파이프라인 구축 및 개발을 주로 담당하고 있습니다. 더불어 Frontend와 QA 역할까지 다양한 분야에서 활동하며, 팀 내에서의 유연성을 강조하고 효율성을 높이는 데에 주력하고 있습니다. 최신 기술의 도입과 실험을 통해 Toonsquare의 서비스를 더 나은 수준으로 개선하기 위해 노력하고 있습니다.

이름

송종호

송종호 개발자는 Toonsquare 에서 Web & AI Application Developer로서 일하고 있습니다. AI 모델이 사용 될 수 있는 부분을 파악하고, 해당 모델을 이용한 기능 파이프라인을 구현하거나, 다양한 오픈 소스 AI 모델들의 fine-tuning 등을 담당합니다. 현재는 노동 집약적인 웹툰 시장의 문제점을 해결하고, 나아가 일반인들도 창작의 기쁨을 느낄 수 있도록 하는 SASS 어플리케이션을 만드는 데 집중하고 있습니다.

Jisoo Min

Jisoo Min

Jisoo Min is a Startup Solutions Architect at Amazon Web Services (AWS). She loves working with startups and data analytics services.