배포를 위한 패키징 (Packaging for deployment)

배포를 위한 패키징 (Packaging for deployment)

BentoML에서 만든 서비스를 어느 환경에든 똑같이 배포하려면, 실행에 필요한 모든 것을 한 덩어리로 묶어야 해요. 이때 쓰는 표준 포맷이 바로 Bento예요. Bento 안에는 소스 코드, Python 의존성, 모델 아티팩트, 설정이 모두 담겨서, 환경이 달라져도 동일하고 재현 가능하게 동작할 수 있답니다.

출처: https://docs.bentoml.com/en/latest/get-started/packaging-for-deployment.html

런타임 환경 정의하기

Bento를 빌드하기 전에, 먼저 런타임 환경을 정의해야 해요. 아래처럼 bentoml.images.Image로 이미지를 만들고, Python 버전과 필요한 패키지를 지정해 두면 돼요.

import bentoml

my_image = bentoml.images.Image(python_version="3.11") \
    .python_packages("torch", "transformers")

@bentoml.service(
    image=my_image,
    envs=[
        {"name": "HF_TOKEN"},   # 값을 생략하면 배포 시점에 설정할 수 있어요
        {"name": "DB_HOST", "value": "localhost"}
    ]
)
class Summarization:
    ...

여기서 중요한 환경 필드가 두 가지예요. python_version은 사용할 Python 버전을 뜻하고, 기본값은 빌드 환경의 Python 버전이에요. python_packages는 필요한 Python 패키지 목록인데, 대신 requirements_file("requirements.txt")로 requirements 파일을 참조할 수도 있어요. 이렇게 정의한 런타임 환경은 @bentoml.service 데코레이터의 image에 적용하고, 필요한 환경 변수는 envs 파라미터로 지정해요.

Bento 빌드하기

service.py 파일이 있는 디렉터리에서 아래 명령을 실행하면 Bento가 빌드돼요.

bentoml build

기본적으로 이 명령은 실행한 디렉터리 아래의 모든 파일을 패키징해요. 특정 파일이나 디렉터리를 제외하고 싶다면 .bentoignore 파일에 정의하면 돼요. 빌드가 끝나면 각 Bento에는 자동으로 고유한 버전이 붙고, 저장된 Bento 목록은 bentoml list로 확인할 수 있어요.

bentoml list

한 가지 짚고 넘어갈게요. bentoml buildbentoml deploy 워크플로우의 일부예요. 프로젝트를 BentoCloud에 바로 배포할 거라면 bentoml deploy를 쓰면 되고, BentoCloud 없이 Bento만 만들고 싶을 때만 이 명령을 사용하면 돼요.

Bento 컨테이너화하기

빌드한 Bento를 Docker 이미지로 만들려면 bentoml containerize <bento_tag> 명령을 쓰면 돼요.

bentoml containerize summarization:latest

Apple 실리콘(Mac)을 쓰는 경우라면, 일부 Python 라이브러리와의 호환성 문제를 피하기 위해 --platform 옵션을 지정해 줄 수 있어요.

bentoml containerize --platform=linux/amd64 summarization:latest

Docker 이미지의 태그는 기본적으로 Bento 태그와 같아요. 생성된 이미지는 docker images로 확인하고, 아래처럼 로컬에서 실행할 수 있어요.

docker run -it --rm -p 3000:3000 summarization:lkpxx2u5o24wpxjr serve

이렇게 만든 Docker 이미지를 활용하면 Docker를 지원하는 어떤 환경에서든 모델을 실행할 수 있는 거예요.

더 알아보기

  • 클라우드 배포 워크플로우: Cloud deployment
  • 런타임 환경과 빌드 커스터마이징: Define the runtime environment