실시간 추론을 위한 모델 배포 - 아마존 SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

실시간 추론을 위한 모델 배포

중요

Amazon SageMaker Studio 또는 Amazon Studio Classic에서 Amazon SageMaker SageMaker 리소스를 생성할 수 있도록 허용하는 사용자 지정 IAM 정책은 해당 리소스에 태그를 추가할 수 있는 권한도 부여해야 합니다. Studio 및 Studio Classic은 생성한 모든 리소스에 자동으로 태그를 지정하기 때문에 리소스에 태그를 추가할 수 있는 권한이 필요합니다. IAM 정책에 따라 Studio 및 Studio Classic에서는 리소스를 생성할 수 있지만 태깅은 허용하지 않는 경우 AccessDenied "“리소스를 생성하려고 할 때 오류가 발생할 수 있습니다. 자세한 정보는 리소스에 태그를 지정할 SageMaker 수 있는 권한 제공을 참조하세요.

AWS 아마존 관리형 정책 SageMaker리소스 생성 권한을 부여하는 내용에는 해당 SageMaker 리소스를 생성할 때 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

SageMaker 호스팅 서비스를 사용하여 모델을 배포할 수 있는 몇 가지 옵션이 있습니다. SageMaker Studio를 사용하여 대화형 방식으로 모델을 배포할 수 있습니다. 또는 SageMaker Python SDK 또는 Python용 AWS SDK (Boto3) 와 같은 SDK를 사용하여 프로그래밍 방식으로 모델을 배포할 수 있습니다. 를 사용하여 배포할 수도 있습니다. AWS CLI

시작하기 전 준비 사항

SageMaker 모델을 배포하기 전에 다음 사항을 찾아 기록해 두십시오.

  • Amazon S3 버킷이 있는 위치 AWS 리전

  • 모델 아티팩트가 저장되는 Amazon S3 URI 경로

  • 다음에 대한 IAM 역할 SageMaker

  • 추론 코드가 포함된 사용자 지정 이미지의 Docker Amazon ECR URI 레지스트리 경로, 또는 에서 지원하는 내장 Docker 이미지의 프레임워크 및 버전 AWS

각 항목에서 AWS 서비스 사용할 수 있는 목록은 지역 맵 AWS 리전및 에지 네트워크를 참조하십시오. IAM 역할 생성에 대한 자세한 내용은 IAM 역할 생성을 참조하세요.

중요

모델 아티팩트가 저장되는 Amazon S3 버킷은 생성 중인 모델과 AWS 리전 동일해야 합니다.

여러 모델과의 공유 리소스 사용률

Amazon을 사용하여 하나 이상의 모델을 엔드포인트에 배포할 수 SageMaker 있습니다. 여러 모델이 엔드포인트를 공유하는 경우 해당 모델은 ML 컴퓨팅 인스턴스, CPU, 액셀러레이터 등 해당 엔드포인트에 호스팅된 리소스를 공동으로 활용합니다. 엔드포인트에 여러 모델을 배포하는 가장 유연한 방법은 각 모델을 추론 구성 요소로 정의하는 것입니다.

추론 구성 요쇼

추론 구성 요소는 엔드포인트에 모델을 배포하는 데 사용할 수 있는 SageMaker 호스팅 객체입니다. 추론 구성 요소 설정에서 모델, 엔드포인트, 엔드포인트가 호스팅하는 리소스를 모델이 활용하는 방식을 지정합니다. 모델을 지정하기 위해 모델 객체를 지정하거나 SageMaker 모델 아티팩트와 이미지를 직접 지정할 수 있습니다.

설정에서 필요한 CPU 코어, 가속기 및 메모리가 모델에 할당되는 방식을 조정하여 리소스 사용률을 최적화할 수 있습니다. 엔드포인트에 여러 추론 구성 요소를 배포할 수 있으며, 각 추론 구성 요소에는 하나의 모델과 해당 모델에 필요한 리소스 사용률이 포함됩니다.

추론 구성 요소를 배포한 후 API에서 InvokeEndpoint 작업을 사용할 때 관련 모델을 직접 호출할 수 있습니다. SageMaker

추론 구성 요소는 다음과 같은 이점을 제공합니다.

유연성

추론 구성 요소는 모델 호스팅의 세부 정보를 엔드포인트 자체에서 분리합니다. 이를 통해 엔드포인트에서 모델을 호스팅하고 제공하는 방식을 보다 유연하게 제어할 수 있습니다. 동일한 인프라에서 여러 모델을 호스팅할 수 있으며 필요에 따라 엔드포인트에서 모델을 추가하거나 제거할 수 있습니다. 각 모델을 독립적으로 업데이트할 수 있습니다.

확장성

호스트할 각 모델의 복사본 수를 지정할 수 있으며, 요청 처리에 필요한 수량만큼 모델이 로드되도록 최소 사본 수를 설정할 수 있습니다. 모든 추론 구성 요소 사본을 0으로 축소할 수 있으므로 다른 사본을 확장할 공간이 생깁니다.

SageMaker 다음을 사용하여 모델을 배포할 때 모델을 추론 구성 요소로 패키징합니다.

  • SageMaker 스튜디오 클래식.

  • Model 객체 (엔드포인트 유형을 로 설정EndpointType.INFERENCE_COMPONENT_BASED) 를 배포하기 위한 SageMaker Python SDK입니다.

  • 엔드포인트에 AWS SDK for Python (Boto3) 배포하는 InferenceComponent 객체를 정의하는 데 사용됩니다.

SageMaker Studio를 사용하여 모델을 배포합니다.

SageMaker Studio를 통해 대화형 방식으로 모델을 만들고 배포하려면 다음 단계를 완료하십시오. Studio에 대한 자세한 내용은 Studio 설명서를 참조하십시오. 다양한 배포 시나리오에 대한 자세한 내용은 블로그 Package 및 SageMaker Amazon을 사용하여 기존 ML 모델 및 LLM을 쉽게 배포하기 — 2부를 참조하십시오.

아티팩트와 권한을 준비하세요.

SageMaker Studio에서 모델을 생성하기 전에 이 섹션을 완료하세요.

Studio에서 아티팩트를 가져와 모델을 만드는 데는 두 가지 옵션이 있습니다.

  1. 미리 패키징된 tar.gz 아카이브를 가져올 수 있습니다. 이 아카이브에는 모델 아티팩트, 사용자 지정 추론 코드 및 파일에 나열된 모든 종속성이 포함되어야 합니다. requirements.txt

  2. SageMaker 아티팩트를 대신 패키징할 수 있습니다. 원시 모델 아티팩트와 종속 항목만 requirements.txt 파일로 가져와서 기본 추론 코드를 제공하면 됩니다 (또는 사용자 지정 추론 코드로 기본 코드를 재정의할 수도 있음). SageMaker SageMaker다음 프레임워크에서 이 옵션을 지원합니다:, XGBoost. PyTorch

모델, AWS Identity and Access Management (IAM) 역할, Docker 컨테이너 (또는 미리 빌드된 컨테이너가 있는 SageMaker 원하는 프레임워크 및 버전) 를 가져오는 것 외에도 Studio를 통해 모델을 생성하고 배포할 수 있는 권한을 부여해야 합니다. SageMaker

AmazonSageMakerFull액세스 정책을 IAM 역할에 연결해야 기타 관련 서비스에 액세스할 SageMaker 수 있습니다. Studio의 인스턴스 유형 가격을 확인하려면 AWS PriceListServiceFull액세스 정책도 첨부해야 합니다 (또는 전체 정책, 더 구체적으로 설명하면 pricing:GetProducts 작업을 첨부하지 않으려는 경우).

모델을 생성할 때 모델 아티팩트를 업로드하기로 선택한 경우 (또는 추론 권장 사항용 샘플 페이로드 파일을 업로드) 하려면 Amazon S3 버킷을 생성해야 합니다. 버킷 이름 앞에 단어를 붙여야 합니다. SageMaker 또는 를 대문자로 바꿀 수도 SageMaker 있습니다. Sagemaker sagemaker

버킷 이름 지정 규칙을 사용하는 것이 좋습니다. sagemaker-{Region}-{accountID} 이 버킷은 업로드한 아티팩트를 저장하는 데 사용됩니다.

버킷을 만든 후 다음 CORS (출처 간 리소스 공유) 정책을 버킷에 연결합니다.

[ { "AllowedHeaders": ["*"], "ExposeHeaders": ["Etag"], "AllowedMethods": ["PUT", "POST"], "AllowedOrigins": ['https://*.sagemaker.aws'], } ]

다음 방법 중 하나를 사용하여 Amazon S3 버킷에 CORS 정책을 연결할 수 있습니다.

배포 가능한 모델 생성

이 단계에서는 원하는 컨테이너 및 프레임워크, 사용자 지정 추론 코드, 네트워크 설정과 같은 추가 사양과 함께 아티팩트를 SageMaker 제공하여 에서 모델의 배포 가능한 버전을 생성합니다.

다음을 수행하여 Studio에서 SageMaker 배포 가능한 모델을 생성합니다.

  1. SageMaker Studio 애플리케이션을 엽니다.

  2. 왼쪽 탐색 창에서 모델을 선택합니다.

  3. 배포 가능한 모델 탭을 선택합니다.

  4. 배포 가능한 모델 페이지에서 [Create] 를 선택합니다.

  5. 배포 가능한 모델 생성 페이지의 모델 이름 필드에 모델 이름을 입력합니다.

배포 가능한 모델 생성 페이지에 작성해야 하는 섹션이 몇 가지 더 있습니다.

컨테이너 정의 섹션은 다음 스크린샷과 같습니다.

Studio에서 모델을 생성하기 위한 컨테이너 정의 섹션의 스크린샷.
컨테이너 정의 섹션의 경우 다음을 수행하십시오.
  1. 컨테이너 유형에서 SageMaker 관리형 컨테이너를 사용하려면 사전 빌드된 컨테이너를 선택하고, 자체 컨테이너가 있는 경우 자체 컨테이너 가져오기를 선택합니다.

  2. 사전 빌드된 컨테이너를 선택한 경우 사용하려는 컨테이너 프레임워크, 프레임워크 버전, 하드웨어 유형을 선택합니다.

  3. 자체 컨테이너 가져오기를 선택한 경우 컨테이너 이미지의 ECR 경로로 Amazon ECR 경로를 입력합니다.

그런 다음 다음 스크린샷과 같은 아티팩트 섹션을 작성하십시오.

Studio에서 모델을 만들기 위한 아티팩트 섹션의 스크린샷
아티팩트 섹션의 경우 다음을 수행하십시오.
  1. 모델 아티팩트 (PyTorch 또는 XGBoost) 패키징을 SageMaker 지원하는 프레임워크 중 하나를 사용하는 경우 아티팩트의 경우 아티팩트 업로드 옵션을 선택할 수 있습니다. 이 옵션을 사용하면 원시 모델 아티팩트, 가지고 있는 사용자 지정 추론 코드 및 requirements.txt 파일을 간단히 지정하고 아카이브 패키징을 처리할 수 있습니다. SageMaker 다음을 따릅니다.

    1. 아티팩트의 경우 아티팩트 업로드를 선택하여 파일을 계속 제공하십시오. 그렇지 않으면 모델 파일, 추론 코드 및 requirements.txt 파일이 포함된 tar.gz 아카이브가 이미 있는 경우 아티팩트를 미리 패키징하기 위해 S3 URI 입력을 선택하십시오.

    2. 아티팩트를 업로드하기로 선택한 경우 S3 버킷의 경우 아티팩트를 패키징한 후 SageMaker 저장하려는 버킷의 Amazon S3 경로를 입력합니다. 그런 다음 다음 단계를 완료하십시오.

    3. 모델 아티팩트 업로드의 경우 모델 파일을 업로드하십시오.

    4. 추론 코드의 경우, 추론을 SageMaker 제공하는 기본 코드를 사용하려면 기본 추론 코드 사용을 선택합니다. 그렇지 않으면 사용자 지정 추론 코드 업로드를 선택하여 자체 추론 코드를 사용하십시오.

    5. Upload requirements.txt 의 경우 런타임 시 설치하려는 모든 종속성이 나열된 텍스트 파일을 업로드하십시오.

  2. 모델 아티팩트 패키징을 SageMaker 지원하는 프레임워크를 사용하지 않는 경우 Studio는 사전 패키징된 아티팩트 옵션을 보여 주므로 이미 패키징된 모든 아티팩트를 아카이브로 제공해야 합니다. tar.gz 다음을 따릅니다.

    1. 사전 패키징된 아티팩트의 경우, tar.gz 아카이브가 이미 Amazon S3에 업로드되어 있는 경우 사전 패키징된 모델 아티팩트의 입력 S3 URI를 선택합니다. 아카이브를 직접 업로드하려면 사전 패키징된 모델 아티팩트 업로드를 선택합니다. SageMaker

    2. 사전 패키징된 모델 아티팩트에 대해 S3 URI 입력을 선택한 경우, S3 URI용 아카이브의 Amazon S3 경로를 입력합니다. 그렇지 않으면 로컬 시스템에서 아카이브를 선택하여 업로드하십시오.

다음 섹션은 보안으로, 다음 스크린샷과 같습니다.

Studio에서 모델을 생성하기 위한 보안 섹션의 스크린샷
보안 섹션의 경우 다음을 수행하십시오.
  1. IAM 역할의 경우 IAM 역할의 ARN을 입력합니다.

  2. (선택 사항) 가상 사설 클라우드 (VPC) 의 경우 모델 구성 및 아티팩트를 저장할 Amazon VPC를 선택할 수 있습니다.

  3. (선택 사항) 컨테이너의 인터넷 액세스를 제한하려면 네트워크 격리 토글을 켜십시오.

마지막으로, 다음 스크린샷과 같은 고급 옵션 섹션을 선택적으로 작성할 수 있습니다.

Studio에서 모델을 생성하기 위한 고급 옵션 섹션의 스크린샷.
(선택 사항) 고급 옵션 섹션의 경우 다음을 수행하십시오.
  1. Amazon SageMaker Inference Recommender 작업을 생성한 후 모델에서 실행하려면 사용자 지정 인스턴스 권장 사항 토글을 활성화하십시오. 추론 추천기는 추론 성능 및 비용 최적화를 위한 권장 인스턴스 유형을 제공하는 기능입니다. 모델 배포를 준비할 때 이러한 인스턴스 권장 사항을 확인할 수 있습니다.

  2. 환경 변수 추가의 경우 컨테이너의 환경 변수를 키-값 쌍으로 입력합니다.

  3. 태그의 경우 모든 태그를 키-값 쌍으로 입력합니다.

  4. 모델 및 컨테이너 구성을 완료한 후 배포 가능한 모델 생성을 선택합니다.

이제 SageMaker Studio에 배포할 준비가 된 모델이 있을 것입니다.

모델 배포

마지막으로 이전 단계에서 구성한 모델을 HTTPS 엔드포인트에 배포합니다. 엔드포인트에 단일 모델 또는 여러 모델을 배포할 수 있습니다.

모델 및 엔드포인트 호환성

모델을 엔드포인트에 배포하려면 먼저 다음 설정의 값이 동일하여 모델과 엔드포인트가 호환되어야 합니다.

  • IAM 역할

  • Amazon VPC (서브넷 및 보안 그룹 포함)

  • 네트워크 격리 (활성화 또는 비활성화)

Studio는 다음과 같은 방법으로 호환되지 않는 엔드포인트에 모델을 배포하는 것을 방지합니다.

  • 새 엔드포인트에 모델을 배포하려는 경우 호환되는 초기 설정으로 엔드포인트를 SageMaker 구성합니다. 이러한 설정을 변경하여 호환성을 깨뜨리면 Studio에서 알림을 표시하고 배포를 차단합니다.

  • 기존 엔드포인트에 배포하려고 하는데 해당 엔드포인트가 호환되지 않는 경우 Studio는 경고를 표시하고 배포를 차단합니다.

  • 배포에 여러 모델을 추가하려고 하면 Studio는 서로 호환되지 않는 모델을 배포하지 못하도록 합니다.

Studio에 모델 및 엔드포인트 비호환성에 대한 알림이 표시되면 알림에서 세부 정보 보기를 선택하여 호환되지 않는 설정을 확인할 수 있습니다.

모델을 배포하는 한 가지 방법은 Studio에서 다음을 수행하는 것입니다.

  1. SageMaker Studio 애플리케이션을 엽니다.

  2. 왼쪽 탐색 창에서 모델을 선택합니다.

  3. 모델 페이지의 모델 목록에서 하나 이상의 모델을 선택합니다. SageMaker

  4. 배포를 선택합니다.

  5. 엔드포인트 이름의 드롭다운 메뉴를 엽니다. 기존 엔드포인트를 선택하거나 모델을 배포할 새 엔드포인트를 생성할 수 있습니다.

  6. 인스턴스 유형에서 엔드포인트에 사용할 인스턴스 유형을 선택합니다. 이전에 해당 모델에 대해 추론 추천자 작업을 실행한 경우 권장 인스턴스 유형이 권장이라는 제목 아래 목록에 나타납니다. 그렇지 않으면 모델에 적합할 수 있는 예상 인스턴스가 몇 개 보일 것입니다.

    인스턴스 유형 호환성: JumpStart

    모델을 배포하는 경우 Studio는 JumpStart 모델이 지원하는 인스턴스 유형만 표시합니다.

  7. 초기 인스턴스 수에 엔드포인트에 프로비저닝하려는 초기 인스턴스 수를 입력합니다.

  8. 최대 인스턴스 수에는 트래픽 증가를 수용하기 위해 엔드포인트가 확장할 때 프로비저닝할 수 있는 최대 인스턴스 수를 지정합니다.

  9. 배포하는 모델이 모델 허브에서 가장 많이 사용되는 JumpStart LLM 중 하나인 경우 인스턴스 유형 및 인스턴스 수 필드 뒤에 대체 구성 옵션이 나타납니다.

    가장 인기 있는 JumpStart LLM의 경우 비용 또는 성능에 맞게 최적화하기 위해 사전 AWS 벤치마킹된 인스턴스 유형을 제공합니다. 이 데이터는 LLM 배포에 사용할 인스턴스 유형을 결정하는 데 도움이 될 수 있습니다. 대체 구성을 선택하면 사전 벤치마킹된 데이터가 포함된 대화 상자가 열립니다. 패널은 다음 스크린샷과 같습니다.

    대체 구성 상자의 스크린샷

    대체 구성 상자에서 다음을 수행하십시오.

    1. 인스턴스 유형을 선택합니다. 시간당 비용 또는 최고 성능을 선택하여 지정된 모델의 비용 또는 성능을 최적화하는 인스턴스 유형을 확인할 수 있습니다. 지원되는 기타 인스턴스를 선택하여 JumpStart 모델과 호환되는 다른 인스턴스 유형의 목록을 볼 수도 있습니다. 여기서 인스턴스 유형을 선택하면 6단계에서 지정한 이전의 모든 인스턴스 선택을 덮어쓰게 된다는 점에 유의하십시오.

    2. (선택 사항) 선택한 구성 사용자 지정 토글을 켜서 최대 총 토큰 수 (허용할 최대 토큰 수, 입력 토큰과 모델에서 생성된 출력의 합계), 최대 입력 토큰 길이 (각 요청의 입력에 허용하려는 최대 토큰 수) 및 최대 동시 요청 (모델이 한 번에 처리할 수 있는 최대 요청 수) 을 지정합니다.

    3. [Select] 를 선택하여 인스턴스 유형과 구성 설정을 확인합니다.

  10. Model 필드에는 배포 중인 모델 이름이 이미 채워져 있어야 합니다. 모델 추가를 선택하여 배포에 모델을 더 추가할 수 있습니다. 추가하는 각 모델에 대해 다음 필드를 채우십시오.

    1. CPU 코어 수에 모델 사용 전용으로 사용하려는 CPU 코어를 입력합니다.

    2. 최소 복사본 수에는 언제든지 엔드포인트에서 호스팅하려는 최소 모델 복사본 수를 입력합니다.

    3. 최소 CPU 메모리 (MB) 에는 모델에 필요한 최소 메모리 양 (MB) 을 입력합니다.

    4. 최대 CPU 메모리 (MB) 의 경우 모델에서 사용할 수 있도록 허용하려는 최대 메모리 양 (MB) 을 입력합니다.

  11. (선택 사항) 고급 옵션의 경우 다음을 수행하십시오.

    1. IAM 역할의 경우 기본 SageMaker IAM 실행 역할을 사용하거나 필요한 권한이 있는 자체 역할을 지정하십시오. 참고로 이 IAM 역할은 배포 가능한 모델을 생성할 때 지정한 역할과 동일해야 합니다.

    2. VPC (가상 사설 클라우드) 의 경우 엔드포인트를 호스팅할 VPC를 지정할 수 있습니다.

    3. KMS 키 암호화의 경우, AWS KMS 엔드포인트를 호스팅하는 ML 컴퓨팅 인스턴스에 연결된 스토리지 볼륨의 데이터를 암호화할 키를 선택합니다.

    4. 네트워크 격리 활성화 토글을 켜서 컨테이너의 인터넷 액세스를 제한하십시오.

    5. 타임아웃 컨피그레이션의 경우 모델 데이터 다운로드 타임아웃 (초)컨테이너 시작 상태 점검 타임아웃 (초) 필드에 값을 입력합니다. 이 값은 모델을 컨테이너에 다운로드하고 컨테이너를 시작하는 데 SageMaker 허용되는 최대 시간을 각각 결정합니다.

    6. 태그의 경우 모든 태그를 키-값 쌍으로 입력합니다.

    참고

    SageMaker 배포 중인 모델과 호환되는 초기 값으로 IAM 역할, VPC 및 네트워크 격리 설정을 구성합니다. 이러한 설정을 변경하여 호환성을 깨뜨리면 Studio에서 알림을 표시하고 배포를 차단합니다.

옵션을 구성한 후에는 페이지가 다음 스크린샷과 같이 표시되어야 합니다.

Studio의 배포 모델 페이지 스크린샷

배포를 구성한 후 [Deploy] 를 선택하여 엔드포인트를 생성하고 모델을 배포합니다.

Python SDK를 사용하여 모델 배포하기

SageMaker Python SDK를 사용하면 두 가지 방법으로 모델을 빌드할 수 있습니다. 첫 번째는 Model or ModelBuilder 클래스에서 모델 객체를 만드는 것입니다. Model클래스를 사용하여 Model 객체를 생성하는 경우 모델 패키지 또는 추론 코드 (모델 서버에 따라 다름), 클라이언트와 서버 간의 데이터 직렬화 및 역직렬화를 처리하는 스크립트, 사용을 위해 Amazon S3에 업로드할 종속성을 지정해야 합니다. 모델을 빌드하는 두 번째 방법은 모델 아티팩트 또는 추론 코드를 제공하는 ModelBuilder 데 사용하는 것입니다. ModelBuilder종속성을 자동으로 캡처하고, 필요한 직렬화 및 역직렬화 함수를 추론하고, 종속성을 패키징하여 객체를 생성합니다. Model ModelBuilder에 대한 자세한 정보는 Amazon에서 모델을 SageMaker 생성하십시오. ModelBuilder 섹션을 참조하십시오.

다음 섹션에서는 모델을 생성하고 모델 객체를 배포하는 두 가지 방법을 모두 설명합니다.

설정

다음 예제는 모델 배포 프로세스를 준비합니다. 필요한 라이브러리를 가져오고 모델 아티팩트를 찾는 S3 URL을 정의합니다.

SageMaker Python SDK
예 임포트 명령문

다음 예제는 SageMaker Python SDK, Python용 SDK (Boto3) 및 Python 표준 라이브러리에서 모듈을 가져옵니다. 이 모듈은 모델을 배포하는 데 도움이 되는 유용한 메서드를 제공하며, 이어지는 나머지 예제에서도 이 모듈을 사용합니다.

import boto3 from datetime import datetime from sagemaker.compute_resource_requirements.resource_requirements import ResourceRequirements from sagemaker.predictor import Predictor from sagemaker.enums import EndpointType from sagemaker.model import Model from sagemaker.session import Session
boto3 inference components
예 임포트 명령문

다음 예제는 Python용 SDK (Boto3) 와 파이썬 표준 라이브러리에서 모듈을 가져옵니다. 이 모듈은 모델을 배포하는 데 도움이 되는 유용한 메서드를 제공하며, 이어지는 나머지 예제에서도 이 모듈을 사용합니다.

import boto3 import botocore import sys import time
boto3 models (without inference components)
예 임포트 명령문

다음 예제는 Python용 SDK (Boto3) 와 파이썬 표준 라이브러리에서 모듈을 가져옵니다. 이 모듈은 모델을 배포하는 데 도움이 되는 유용한 메서드를 제공하며, 이어지는 나머지 예제에서도 이 모듈을 사용합니다.

import boto3 import botocore import datetime from time import gmtime, strftime
예 모델 아티팩트 URL

다음 코드는 예제 Amazon S3 URL을 빌드합니다. URL은 Amazon S3 버킷에서 사전 학습된 모델의 모델 아티팩트를 찾습니다.

# Create a variable w/ the model S3 URL # The name of your S3 bucket: s3_bucket = "DOC-EXAMPLE-BUCKET" # The directory within your S3 bucket your model is stored in: bucket_prefix = "sagemaker/model/path" # The file name of your model artifact: model_filename = "my-model-artifact.tar.gz" # Relative S3 path: model_s3_key = f"{bucket_prefix}/"+model_filename # Combine bucket name, model file name, and relate S3 path to create S3 model URL: model_url = f"s3://{s3_bucket}/{model_s3_key}"

전체 Amazon S3 URL은 다음 예제에서 사용되는 변수에 model_url 저장됩니다.

개요

SageMaker Python SDK 또는 Python용 SDK (Boto3) 를 사용하여 모델을 배포할 수 있는 방법은 여러 가지가 있습니다. 다음 섹션에는 몇 가지 가능한 접근 방식을 위해 완료해야 하는 단계가 요약되어 있습니다. 다음 예제를 통해 이러한 단계를 보여 줍니다.

SageMaker Python SDK

SageMaker Python SDK를 사용하여 다음 방법 중 하나로 모델을 빌드할 수 있습니다.

  • Model클래스에서 모델 객체 생성 — 모델 패키지 또는 추론 코드 (모델 서버에 따라 다름), 클라이언트와 서버 간 데이터의 직렬화 및 역직렬화를 처리하는 스크립트, 사용을 위해 Amazon S3에 업로드할 모든 종속성을 지정해야 합니다.

  • ModelBuilder클래스에서 모델 객체 생성 — 모델 아티팩트 또는 추론 코드를 제공하고 종속성을 ModelBuilder 자동으로 캡처하고, 필요한 직렬화 및 역직렬화 함수를 추론하고, 종속성을 패키징하여 Model 객체를 생성합니다.

    ModelBuilder에 대한 자세한 정보는 Amazon에서 모델을 SageMaker 생성하십시오. ModelBuilder 섹션을 참조하십시오. 자세한 내용은 SageMaker— 1부 블로그를 통해 기존 ML 모델 및 LLM을 쉽게 패키징하고 배포할 수도 있습니다.

다음 예제에서는 모델을 생성하고 모델 객체를 배포하는 두 가지 방법을 모두 설명합니다. 이러한 방식으로 모델을 배포하려면 다음 단계를 완료해야 합니다.

  1. ResourceRequirements객체와 함께 모델에 할당할 엔드포인트 리소스를 정의합니다.

  2. Model또는 ModelBuilder 클래스에서 모델 객체를 생성합니다. ResourceRequirements객체는 모델 설정에서 지정됩니다.

  3. Model객체의 deploy 메서드를 사용하여 엔드포인트에 모델을 배포합니다.

boto3 inference components

다음 예제는 추론 구성 요소에 모델을 할당한 다음 추론 구성 요소를 엔드포인트에 배포하는 방법을 보여줍니다. 이러한 방식으로 모델을 배포하려면 다음 단계를 완료해야 합니다.

  1. (선택 사항) create_model메서드를 사용하여 SageMaker 모델 객체를 생성합니다.

  2. 엔드포인트 구성 객체를 생성하여 엔드포인트에 대한 설정을 지정합니다. 생성하려면 create_endpoint_config메서드를 사용합니다.

  3. create_endpoint메서드를 사용하여 엔드포인트를 생성하고, 요청 시 생성한 엔드포인트 구성을 제공하십시오.

  4. create_inference_component메서드를 사용하여 추론 구성 요소를 생성합니다. 설정에서 다음 중 하나를 수행하여 모델을 지정합니다.

    • SageMaker 모델 객체 지정

    • 모델 이미지 URI 및 S3 URL 지정

    또한 엔드포인트 리소스를 모델에 할당합니다. 추론 구성 요소를 생성하여 모델을 엔드포인트에 배포합니다. 모델별로 하나씩 여러 추론 구성 요소를 생성하여 여러 모델을 엔드포인트에 배포할 수 있습니다.

boto3 models (without inference components)

다음 예제는 모델 객체를 생성한 다음 모델을 엔드포인트에 배포하는 방법을 보여줍니다. 이러한 방식으로 모델을 배포하려면 다음 단계를 완료해야 합니다.

  1. create_model메서드를 사용하여 SageMaker 모델을 생성합니다.

  2. 엔드포인트 구성 객체를 생성하여 엔드포인트에 대한 설정을 지정합니다. 생성하려면 create_endpoint_config메서드를 사용합니다. 엔드포인트 구성에서는 모델 객체를 생산 변형에 할당합니다.

  3. create_endpoint메서드를 사용하여 엔드포인트를 생성합니다. 요청시 생성한 엔드포인트 구성을 제공하십시오.

    엔드포인트를 생성할 때 엔드포인트 리소스를 SageMaker 프로비저닝하면 엔드포인트가 모델을 엔드포인트에 배포합니다.

구성

다음 예제는 엔드포인트에 모델을 배포하는 데 필요한 리소스를 구성합니다.

SageMaker Python SDK

다음 예제는 ResourceRequirements 객체가 있는 모델에 엔드포인트 리소스를 할당합니다. 이러한 리소스에는 CPU 코어, 가속기, 메모리가 포함됩니다. 그런 다음 이 예제는 클래스에서 모델 객체를 만듭니다. Model 또는 ModelBuilder클래스를 인스턴스화하고 실행하여 모델 객체를 만들 수도 있습니다. build 이 메서드도 예제에 나와 있습니다. ModelBuilder모델 패키징을 위한 통합 인터페이스를 제공하며, 이 경우 대규모 모델 배포를 위한 모델을 준비합니다. 이 예제는 Hugging Face 모델을 구성하는 ModelBuilder 데 사용합니다. ( JumpStart 모델을 전달할 수도 있습니다). 모델을 빌드한 후에는 모델 객체에 리소스 요구 사항을 지정할 수 있습니다. 다음 단계에서는 이 객체를 사용하여 엔드포인트에 모델을 배포합니다.

resources = ResourceRequirements( requests = { "num_cpus": 2, # Number of CPU cores required: "num_accelerators": 1, # Number of accelerators required "memory": 8192, # Minimum memory required in Mb (required) "copies": 1, }, limits = {}, ) now = datetime.now() dt_string = now.strftime("%d-%m-%Y-%H-%M-%S") model_name = "my-sm-model"+dt_string # build your model with Model class model = Model( name = "model-name", image_uri = "image-uri", model_data = model_url, role = "arn:aws:iam::111122223333:role/service-role/role-name", resources = resources, predictor_cls = Predictor, ) # Alternate mechanism using ModelBuilder # uncomment the following section to use ModelBuilder /* model_builder = ModelBuilder( model="<HuggingFace-ID>", # like "meta-llama/Llama-2-7b-hf" schema_builder=SchemaBuilder(sample_input,sample_output), env_vars={ "HUGGING_FACE_HUB_TOKEN": "<HuggingFace_token>}" } ) # build your Model object model = model_builder.build() # create a unique name from string 'mb-inference-component' model.model_name = unique_name_from_base("mb-inference-component") # assign resources to your model model.resources = resources */
boto3 inference components

다음 예제에서는 메서드를 create_endpoint_config 사용하여 엔드포인트를 구성합니다. 이 구성을 엔드포인트를 생성할 때 엔드포인트에 할당합니다. 구성에서 하나 이상의 생산 변형을 정의합니다. 각 변형에 대해 Amazon에서 SageMaker 프로비저닝할 인스턴스 유형을 선택하고 관리형 인스턴스 조정을 활성화할 수 있습니다.

endpoint_config_name = "endpoint-config-name" endpoint_name = "endpoint-name" inference_component_name = "inference-component-name" variant_name = "variant-name" sagemaker_client.create_endpoint_config( EndpointConfigName = endpoint_config_name, ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name", ProductionVariants = [ { "VariantName": variant_name, "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1, "ManagedInstanceScaling": { "Status": "ENABLED", "MinInstanceCount": 1, "MaxInstanceCount": 2, }, } ], )
boto3 models (without inference components)
예 모델 정의

다음 예제에서는 의 create_model 메서드를 사용하여 SageMaker 모델을 정의합니다 AWS SDK for Python (Boto3).

model_name = "model-name" create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name", PrimaryContainer = { "Image": "image-uri", "ModelDataUrl": model_url, } )

이 예제에서는 다음을 지정합니다.

  • ModelName: 모델 이름(이 예제에서는 model_name이라는 문자열 변수로 저장됨).

  • ExecutionRoleArn: Amazon이 ML 컴퓨팅 인스턴스에 배포하거나 일괄 변환 작업을 위해 모델 아티팩트와 Docker 이미지에 액세스하는 데 SageMaker 사용할 수 있는 IAM 역할의 Amazon 리소스 이름 (ARN) 입니다.

  • PrimaryContainer: 모델이 예측을 위해 배포될 때 추론 코드에서 사용하는 추론 코드, 연결된 아티팩트 및 사용자 지정 환경 맵을 포함하는 기본 도커 이미지의 위치입니다.

예 엔드포인트 구성

다음 예제는 메서드를 사용하여 엔드포인트를 구성합니다. create_endpoint_config SageMaker Amazon은 이 구성을 사용하여 모델을 배포합니다. 구성에서 해당 create_model 메서드로 생성한 하나 이상의 모델을 식별하여 Amazon에서 SageMaker 프로비저닝할 리소스를 배포합니다.

endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName = "endpoint-config-name", # List of ProductionVariant objects, one for each model that you want to host at this endpoint: ProductionVariants = [ { "VariantName": "variant-name", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 # Number of instances to launch initially. } ] )

이 예제는 ProductionVariants 필드에 다음 키를 지정합니다.

Deploy

다음 예시는 엔드포인트에 모델을 배포합니다.

SageMaker Python SDK

다음 예제는 모델 객체의 deploy 메서드를 사용하여 실시간 HTTPS 엔드포인트에 모델을 배포합니다. 모델 생성과 배포 모두에 대한 resources 인수 값을 지정하는 경우 배포를 위해 지정한 리소스가 우선합니다.

predictor = model.deploy( initial_instance_count = 1, instance_type = "ml.p4d.24xlarge", endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, resources = resources, )

이 예제는 instance_type 필드에 해당 모델의 Amazon EC2 인스턴스 유형 이름을 지정합니다. initial_instance_count필드의 경우 엔드포인트를 실행할 초기 인스턴스 수를 지정합니다.

다음 코드 샘플은 엔드포인트에 모델을 배포한 다음 동일한 엔드포인트에 다른 모델을 배포하는 또 다른 사례를 보여줍니다. 이 경우 두 모델의 deploy 메서드에 동일한 엔드포인트 이름을 제공해야 합니다.

# Deploy the model to inference-component-based endpoint falcon_predictor = falcon_model.deploy( initial_instance_count = 1, instance_type = "ml.p4d.24xlarge", endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, endpoint_name = "<endpoint_name>" resources = resources, ) # Deploy another model to the same inference-component-based endpoint llama2_predictor = llama2_model.deploy( # resources already set inside llama2_model endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, endpoint_name = "<endpoint_name>" # same endpoint name as for falcon model )
boto3 inference components

엔드포인트를 구성한 후에는 create_endpoint 메서드를 사용하여 엔드포인트를 생성합니다. 엔드포인트 이름은 계정 내에서 고유해야 합니다 AWS 리전 . AWS

다음 예시에서는 요청에 지정된 엔드포인트 구성을 사용하여 엔드포인트를 생성합니다. SageMaker Amazon은 엔드포인트를 사용하여 리소스를 프로비저닝합니다.

sagemaker_client.create_endpoint( EndpointName = endpoint_name, EndpointConfigName = endpoint_config_name, )

엔드포인트를 생성한 후 추론 구성 요소를 생성하여 하나 이상의 모델을 엔드포인트에 배포할 수 있습니다. 다음 예제에서는 create_inference_component 메서드를 사용하여 하나를 생성합니다.

sagemaker_client.create_inference_component( InferenceComponentName = inference_component_name, EndpointName = endpoint_name, VariantName = variant_name, Specification = { "Container": { "Image": "image-uri", "ArtifactUrl": model_url, }, "ComputeResourceRequirements": { "NumberOfCpuCoresRequired": 1, "MinMemoryRequiredInMb": 1024 } }, RuntimeConfig = {"CopyCount": 2} )
boto3 models (without inference components)
예 배포

에 엔드포인트 구성을 제공합니다 SageMaker. 서비스는 ML 컴퓨팅 인스턴스를 시작하고 구성에서 지정된 대로 모델을 배포합니다.

모델 및 엔드포인트 구성이 완료되면 create_endpoint 메서드를 사용하여 엔드포인트를 생성합니다. 엔드포인트 이름은 계정 내에서 고유해야 합니다 AWS 리전 . AWS

다음 예시에서는 요청에 지정된 엔드포인트 구성을 사용하여 엔드포인트를 생성합니다. SageMaker Amazon은 엔드포인트를 사용하여 리소스를 프로비저닝하고 모델을 배포합니다.

create_endpoint_response = sagemaker_client.create_endpoint( # The endpoint name must be unique within an AWS Region in your AWS account: EndpointName = "endpoint-name" # The name of the endpoint configuration associated with this endpoint: EndpointConfigName = "endpoint-config-name")

를 사용하여 모델을 배포하십시오. AWS CLI

를 사용하여 엔드포인트에 모델을 배포할 수 AWS CLI있습니다.

개요

를 사용하여 모델을 배포하는 AWS CLI경우 추론 구성 요소를 사용하거나 사용하지 않고 모델을 배포할 수 있습니다. 다음 섹션에는 두 가지 접근 방식에 대해 실행하는 명령이 요약되어 있습니다. 다음 예제를 통해 이러한 명령을 보여 줍니다.

With inference components

추론 구성 요소가 포함된 모델을 배포하려면 다음을 수행하십시오.

  1. (선택 사항) create-model명령을 사용하여 모델을 생성합니다.

  2. 엔드포인트 구성을 생성하여 엔드포인트에 대한 설정을 지정합니다. 생성하려면 create-endpoint-config명령을 실행합니다.

  3. create-endpoint명령을 사용하여 엔드포인트를 생성합니다. 명령 본문에서 생성한 엔드포인트 구성을 지정합니다.

  4. create-inference-component명령을 사용하여 추론 구성 요소를 생성합니다. 설정에서 다음 중 하나를 수행하여 모델을 지정합니다.

    • SageMaker 모델 객체 지정

    • 모델 이미지 URI 및 S3 URL 지정

    또한 엔드포인트 리소스를 모델에 할당합니다. 추론 구성 요소를 생성하여 모델을 엔드포인트에 배포합니다. 모델별로 하나씩 여러 추론 구성 요소를 생성하여 여러 모델을 엔드포인트에 배포할 수 있습니다.

Without inference components

추론 구성 요소를 사용하지 않고 모델을 배포하려면 다음을 수행하십시오.

  1. create-model명령을 사용하여 SageMaker 모델을 생성합니다.

  2. 엔드포인트 구성 객체를 생성하여 엔드포인트에 대한 설정을 지정합니다. 생성하려면 create-endpoint-config명령을 사용합니다. 엔드포인트 구성에서는 모델 객체를 생산 변형에 할당합니다.

  3. create-endpoint명령을 사용하여 엔드포인트를 생성합니다. 명령 본문에서 생성한 엔드포인트 구성을 지정합니다.

    엔드포인트를 생성할 때 엔드포인트 리소스를 SageMaker 프로비저닝하면 엔드포인트가 모델을 엔드포인트에 배포합니다.

구성

다음 예제는 엔드포인트에 모델을 배포하는 데 필요한 리소스를 구성합니다.

With inference components
예 create-endpoint-config 명령

다음 예제에서는 create-endpoint-config 명령을 사용하여 엔드포인트 구성을 생성합니다.

aws sagemaker create-endpoint-config \ --endpoint-config-name endpoint-config-name \ --execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name\ --production-variants file://production-variants.json

이 예제에서 파일은 다음 JSON을 사용하여 프로덕션 production-variants.json 변형을 정의합니다.

[ { "VariantName": "variant-name", "ModelName": "model-name", "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 } ]

명령이 성공하면 는 생성한 리소스의 ARN으로 AWS CLI 응답합니다.

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }
Without inference components
예 모델 생성 명령

다음 예제에서는 create-model 명령을 사용하여 모델을 생성합니다.

aws sagemaker create-model \ --model-name model-name \ --execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name \ --primary-container "{ \"Image\": \"image-uri\", \"ModelDataUrl\": \"model-s3-url\"}"

명령이 성공하면 는 생성한 리소스의 ARN으로 AWS CLI 응답합니다.

{ "ModelArn": "arn:aws:sagemaker:us-west-2:111122223333:model/model-name" }
예 create-endpoint-config 명령

다음 예제에서는 create-endpoint-config 명령을 사용하여 엔드포인트 구성을 생성합니다.

aws sagemaker create-endpoint-config \ --endpoint-config-name endpoint-config-name \ --production-variants file://production-variants.json

이 예제에서 파일은 다음 JSON을 사용하여 프로덕션 production-variants.json 변형을 정의합니다.

[ { "VariantName": "variant-name", "ModelName": "model-name", "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 } ]

명령이 성공하면 는 생성한 리소스의 ARN으로 AWS CLI 응답합니다.

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }

Deploy

다음 예시는 엔드포인트에 모델을 배포합니다.

With inference components
예 생성-엔드포인트 명령

다음 예제에서는 create-endpoint 명령으로 엔드포인트를 생성합니다.

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

명령이 성공하면 는 생성한 리소스의 ARN으로 AWS CLI 응답합니다.

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }
예 create-inference-component 명령

다음 예제는 create-inference-component 명령으로 추론 구성 요소를 만듭니다.

aws sagemaker create-inference-component \ --inference-component-name inference-component-name \ --endpoint-name endpoint-name \ --variant-name variant-name \ --specification file://specification.json \ --runtime-config "{\"CopyCount\": 2}"

이 예제에서 파일은 다음 JSON을 사용하여 컨테이너와 컴퓨팅 리소스를 specification.json 정의합니다.

{ "Container": { "Image": "image-uri", "ArtifactUrl": "model-s3-url" }, "ComputeResourceRequirements": { "NumberOfCpuCoresRequired": 1, "MinMemoryRequiredInMb": 1024 } }

명령이 성공하면 는 생성한 리소스의 ARN으로 AWS CLI 응답합니다.

{ "InferenceComponentArn": "arn:aws:sagemaker:us-west-2:111122223333:inference-component/inference-component-name" }
Without inference components
예 엔드포인트 생성 명령

다음 예제에서는 create-endpoint 명령으로 엔드포인트를 생성합니다.

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

명령이 성공하면 는 생성한 리소스의 ARN으로 AWS CLI 응답합니다.

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }