Amazon SageMaker PlatoBlockchain 데이터 인텔리전스를 사용하여 AWS Graviton 기반 인스턴스에서 기계 학습 추론 워크로드를 실행하세요. 수직 검색. 일체 포함.

Amazon SageMaker를 사용하여 AWS Graviton 기반 인스턴스에서 기계 학습 추론 워크로드 실행

오늘, 우리는 시작합니다 아마존 세이지 메이커 에 대한 추론 AWS 그래비톤 Graviton 칩이 제공하는 가격, 성능 및 효율성 이점을 활용할 수 있습니다.

Graviton 기반 인스턴스는 SageMaker에서 모델 추론에 사용할 수 있습니다. 이 게시물은 기계 학습(ML) 추론 워크로드를 x86에서 SageMaker의 Graviton 기반 인스턴스로 마이그레이션하고 배포하는 데 도움이 됩니다. SageMaker 훈련 모델을 Graviton 기반 인스턴스에 배포하고, Graviton으로 작업할 때의 모범 사례를 다루고, 가격 대비 성능 이점에 대해 논의하고, SageMaker Graviton 인스턴스에 TensorFlow 모델을 배포하는 방법에 대한 단계별 가이드를 제공합니다.

Graviton에 대한 간략한 개요

AWS Graviton은 최고의 가격 대비 성능을 제공하고 x86에 비해 에너지 효율이 더 높은 AWS에서 설계한 프로세서 제품군입니다. AWS Graviton 3 프로세서는 Graviton 프로세서 제품군의 최신 제품이며 bfloat16 및 3배의 SIMD(Single Instruction Multiple Data) 대역폭 지원을 포함하여 ML 워크로드에 최적화되어 있습니다. 이 두 가지 기능이 결합되면 Graviton 2는 Graviton 3 인스턴스에 비해 최대 60배 더 나은 성능을 제공할 수 있습니다. Graviton XNUMX는 또한 동급 제품과 동일한 성능으로 최대 XNUMX% 더 적은 에너지를 사용합니다. 아마존 엘라스틱 컴퓨트 클라우드 (Amazon EC2) 인스턴스. 탄소 배출량을 줄이고 지속 가능성 목표를 달성하려는 경우에 유용한 기능입니다.

솔루션 개요

Graviton 인스턴스에 모델을 배포하려면 다음 중 하나를 사용합니다. AWS 딥 러닝 컨테이너 or 나만의 용기 가져오기 Arm v8.2 아키텍처와 호환됩니다.

AWS가 PyTorch, TensorFlow, Scikit-learn 및 XGBoost를 사용하여 호스트 모델에 컨테이너를 제공하고 모델이 아키텍처에 구애받지 않기 때문에 x86 기반 인스턴스에서 Graviton 인스턴스로 모델을 마이그레이션(또는 새 배포)하는 것이 간단합니다. 그럼에도 불구하고 자체 라이브러리를 가져오려는 경우 그렇게 할 수도 있습니다. 컨테이너가 Arm64 아키텍처를 지원하는 환경으로 빌드되었는지 확인하기만 하면 됩니다. 자세한 내용은 다음을 참조하십시오. 나만의 알고리즘 컨테이너 구축.

모델을 배포하려면 세 단계를 완료해야 합니다.

  1. SageMaker 모델 생성: 여기에는 모델 파일 위치, 배포에 사용할 컨테이너 및 추론 스크립트 위치에 대한 정보가 포함됩니다. (x86 기반 추론 인스턴스에 이미 배포된 기존 모델이 있는 경우 이 단계를 건너뛸 수 있습니다.)
  2. 엔드포인트 구성 생성: 여기에는 엔드포인트에 대해 원하는 인스턴스 유형(예: Graviton7의 경우 ml.c3g.xlarge), 1단계에서 생성한 모델의 이름 및 당 인스턴스 수에 대한 정보가 포함됩니다. 끝점.
  3. 2단계에서 만든 엔드포인트 구성으로 엔드포인트를 시작합니다.

사전 조건

시작하기 전에 다음 전제 조건을 고려하십시오.

  1. 에 나열된 전제 조건을 완료하십시오. 사전 조건.
  2. 모델은 PyTorch, TensorFlow, XGBoost 또는 Scikit-learn 기반 모델이어야 합니다. 다음 표에는 이 글을 쓰는 시점에서 현재 지원되는 버전이 요약되어 있습니다. 최신 업데이트는 다음을 참조하십시오. SageMaker 프레임워크 컨테이너(SM 지원만 해당).
    . Python TensorFlow 파이 토치 사이 킷 러닝 XGBoost
    지원되는 버전 3.8 2.9.1 1.12.1 1.0-1 1.3-1에서 1.5-1
  3. 추론 스크립트는 다음 위치에 저장됩니다. 아마존 단순 스토리지 서비스 (아마존 S3).

다음 섹션에서는 배포 단계를 안내합니다.

SageMaker 모델 생성

x86 기반 추론 인스턴스에 이미 배포된 기존 모델이 있는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 다음 단계를 완료하여 SageMaker 모델을 생성합니다.

  1. S3 버킷에 저장한 모델을 찾습니다. URI를 복사합니다.
    나중에 모델 URI를 사용합니다. MODEL_S3_LOCATION.
  2. 모델 교육 중에 사용된 프레임워크 버전과 Python 버전을 식별합니다.
    프레임워크 및 Python 버전별로 사용 ​​가능한 AWS Deep Learning Containers 목록에서 컨테이너를 선택해야 합니다. 자세한 내용은 다음을 참조하십시오. Amazon ECR용 다중 아키텍처 컨테이너 이미지 소개.
  3. S3 버킷에서 추론 Python 스크립트 URI를 찾습니다(공통 파일 이름은 inference.py).
    추론 스크립트 URI는 INFERENCE_SCRIPT_S3_LOCATION.
  4. 이러한 변수를 사용하면 다음 명령으로 SageMaker API를 호출할 수 있습니다.
    client = boto3.client("sagemaker")
    
    client.create_model(
        ModelName="Your model name",
        PrimaryContainer={
            "Image": ,
            "ModelDataUrl": ,
            "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": ,
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": 
            }
        },
        ExecutionRoleArn= 
    )

다중 아키텍처 이미지를 만들고 동일한 이미지를 다른 태그와 함께 사용할 수도 있습니다. 인스턴스가 배포될 아키텍처를 지정할 수 있습니다. 자세한 내용은 다음을 참조하십시오. Amazon ECR용 다중 아키텍처 컨테이너 이미지 소개.

엔드포인트 구성 만들기

모델을 생성한 후 다음 명령을 실행하여 엔드포인트 구성을 생성해야 합니다(사용 중인 인스턴스 유형 참고).

client.create_endpoint_config(
    EndpointConfigName= ,
    ProductionVariants=[
        {
         "VariantName": "v0",
         "ModelName": "Your model name",
         "InitialInstanceCount": 1,
         "InstanceType": "ml.c7g.xlarge",
        },
    ]
)

다음 스크린샷은 SageMaker 콘솔의 엔드포인트 구성 세부 정보를 보여줍니다.

끝점 실행

이전 단계에서 만든 끝점 구성을 사용하여 끝점을 배포할 수 있습니다.

client.create_endpoint(
    EndpointName = "",
    EndpointConfigName = ""
    )

모델 엔드포인트가 배포될 때까지 기다리십시오. 예측은 x86 기반 인스턴스에 배포된 엔드포인트에 대한 예측을 요청하는 것과 동일한 방식으로 요청할 수 있습니다.

다음 스크린샷은 SageMaker 콘솔의 엔드포인트를 보여줍니다.

구성의 SageMaker 끝점

지원되는 것

SageMaker는 TensorFlow 및 PyTorch 프레임워크를 위한 성능 최적화 Graviton 딥 컨테이너를 제공합니다. 이러한 컨테이너는 컴퓨터 비전, 자연어 처리, 권장 사항 및 일반적인 깊고 넓은 모델 기반 추론 사용 사례를 지원합니다. 딥 러닝 컨테이너 외에도 SageMaker는 XGBoost 및 Scikit-learn과 같은 기존 ML 프레임워크용 컨테이너도 제공합니다. 컨테이너는 c6g/m6g 및 c7g 인스턴스에서 바이너리 호환되므로 추론 애플리케이션을 한 세대에서 다른 세대로 원활하게 마이그레이션할 수 있습니다.

C6g/m6g는 fp16(반정밀도 플로트)을 지원하며 호환 모델의 경우 c5 인스턴스와 동등하거나 더 나은 성능을 제공합니다. C7g는 SIMD 너비를 두 배로 늘리고 모델 실행을 위한 가장 비용 효율적인 플랫폼인 bfloat-16(bf16)을 지원하여 ML 성능을 크게 향상시킵니다.

c6g/m6g 및 c7g 모두 SageMaker의 다른 CPU 인스턴스와 비교하여 기존 ML(예: XGBoost)에 우수한 성능을 제공합니다. c16g에서 Bfloat-7 지원을 통해 bf16 교육 또는 AMP(Automatic Mixed Precision) 교육 모델을 효율적으로 배포할 수 있습니다. Graviton의 ACL(Arm Compute Library) 백엔드는 모델 양자화 없이 빠른 수학 모드를 통해 fp16 연산자까지 가속화할 수 있는 bfloat-32 커널을 제공합니다.

권장 모범 사례

Graviton 인스턴스에서 모든 vCPU는 물리적 코어입니다. 일반 CPU 리소스(SMT와 달리)에 대한 경합이 없으며 워크로드 성능 확장은 모든 vCPU 추가에 따라 선형적입니다. 따라서 사용 사례가 허용할 때마다 배치 추론을 사용하는 것이 좋습니다. 이렇게 하면 각 물리적 코어에서 배치를 병렬 처리하여 vCPU를 효율적으로 사용할 수 있습니다. 배치 추론이 가능하지 않은 경우 OS 스레드 스케줄링 오버헤드가 추가 vCPU와 함께 제공되는 컴퓨팅 성능을 능가하지 않도록 지정된 페이로드에 대한 최적의 인스턴스 크기가 필요합니다.

TensorFlow는 기본적으로 Eigen 커널과 함께 제공되며 가장 최적화된 추론 백엔드를 얻으려면 ACL이 있는 OneDNN으로 전환하는 것이 좋습니다. 컨테이너 서비스를 시작하는 동안 OneDNN 백엔드 및 bfloat-16 빠른 수학 모드를 활성화할 수 있습니다.

docker run -p 8501:8501 --name tfserving_resnet 
--mount type=bind,source=/tmp/resnet,target=/models/resnet 
-e MODEL_NAME=resnet -e TF_ENABLE_ONEDNN_OPTS=1 
-e DNNL_DEFAULT_FPMATH_MODE=BF16 -e -t tfs:mkl_aarch64

앞의 제공 명령은 두 가지 중요한 구성이 있는 표준 resnet50 모델을 호스팅합니다.

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

다음과 같은 방법으로 추론 컨테이너에 전달할 수 있습니다.

client.create_model(
    ModelName="Your model name",
    PrimaryContainer={
    "Image": ,
    "ModelDataUrl": ,
    "Environment": {
        "SAGEMAKER_PROGRAM": "inference.py",
        "SAGEMAKER_SUBMIT_DIRECTORY": "",
        "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
        "SAGEMAKER_REGION": ,
        "TF_ENABLE_ONEDNN_OPTS": "1",
        "DNNL_DEFAULT_FPMATH_MODE": "BF16"
         }
     },
     ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
)

배포 예

이 게시물에서는 SageMaker에서 훈련된 TensorFlow 모델을 Graviton 기반 SageMaker 추론 인스턴스에 배포하는 방법을 보여줍니다.

SageMaker 노트북 인스턴스에서 코드 샘플을 실행할 수 있습니다. 아마존 세이지 메이커 스튜디오 노트북 또는 로컬 모드의 Jupyter 노트북. 로컬 모드에서 Jupyter 노트북을 사용하는 경우 SageMaker 실행 역할을 검색해야 합니다.

다음 예에서는 CIFAR-10 데이터 세트를 고려합니다. SageMaker 예제에서 노트북 예제를 따를 수 있습니다. GitHub 레포 이 게시물에 사용된 모델을 재현합니다. 훈련된 모델을 사용하고 cifar10_keras_main.py 추론을 위한 Python 스크립트.

모델은 S3 버킷에 저장됩니다. s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

XNUMXD덴탈의 cifar10_keras_main.py 추론에 사용할 수 있는 스크립트는 다음 위치에 저장됩니다.s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

우리는을 사용하여 us-east-1 ml.c7g.xlarge Graviton 기반 인스턴스에 모델을 리전하고 배포합니다. 이를 바탕으로 AWS Deep Learning Container의 URI는 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. 다음 코드로 설정합니다.
    import sagemaker
    import boto3
    import datetime
    import json
    import gzip
    import os
    
    sagemaker_session = sagemaker.Session()
    bucket = sagemaker_session.default_bucket()
    role = sagemaker.get_execution_role()
    region = sagemaker_session.boto_region_name

  2. 엔드포인트 테스트용 데이터 세트를 다운로드합니다.
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. 모델 및 엔드포인트 구성을 만들고 엔드포인트를 배포합니다.
    timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now())
    
    client = boto3.client("sagemaker")
    
    MODEL_NAME = f"graviton-model-{timestamp}"
    ENDPOINT_NAME = f"graviton-endpoint-{timestamp}"
    ENDPOINT_CONFIG_NAME = f"graviton-endpoint-config-{timestamp}"
    
    # create sagemaker model
    create_model_response = client.create_model(
        ModelName=MODEL_NAME,
        PrimaryContainer={
        "Image":  "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker ",
        "ModelDataUrl":  "s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz",
        "Environment": {
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": region
            }
        },
        ExecutionRoleArn=role
    )
    print ("create_model API response", create_model_response)

  4. 선택적으로 추론 스크립트를 다음에 추가할 수 있습니다. Environment in create_model 원래 교육 중에 SageMaker 모델에 아티팩트로 추가하지 않은 경우:
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": ,
    		
    # create sagemaker endpoint config
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=ENDPOINT_CONFIG_NAME,
        ProductionVariants=[
            {
             "VariantName": "v0",
             "ModelName": MODEL_NAME,
             "InitialInstanceCount": 1,
             "InstanceType": "ml.c7g.xlarge" 
            },
        ]
    )
    print ("ncreate_endpoint_config API response", create_endpoint_config_response)
    
    # create sagemaker endpoint
    create_endpoint_response = client.create_endpoint(
        EndpointName = ENDPOINT_NAME,
        EndpointConfigName = ENDPOINT_CONFIG_NAME,
    )
    print ("ncreate_endpoint API response", create_endpoint_response)   
    

    배포가 수행될 때까지 몇 분 정도 기다려야 합니다.

  5. 다음 코드를 사용하여 엔드포인트 상태를 확인합니다.
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    다음을 확인할 수도 있습니다. AWS 관리 콘솔 모델이 언제 배포되는지 확인합니다.

  6. 엔드포인트를 호출하도록 런타임 환경을 설정합니다.
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    이제 엔드포인트를 호출할 페이로드를 준비합니다. 모델 교육에 사용되는 것과 동일한 유형의 이미지를 사용합니다. 이들은 이전 단계에서 다운로드되었습니다.

  7. 페이로드를 텐서에 캐스팅하고 모델이 예상하는 올바른 형식을 설정합니다. 이 예에서는 하나의 예측만 요청합니다.
    input_image = x_test[0].reshape(1,32,32,3)

    모델 출력을 배열로 얻습니다.

  8. softmax를 적용하면 이 출력을 확률로 바꿀 수 있습니다.
    CONTENT_TYPE = 'application/json'
    ACCEPT = 'application/json'
    PAYLOAD = json.dumps(input_image.tolist())
    
    response = runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME, 
        ContentType=CONTENT_TYPE,
        Accept=ACCEPT,
        Body=PAYLOAD
    )
        
    print(response['Body'].read().decode())

자원 정리

이 솔루션과 관련된 서비스에는 비용이 발생합니다. 이 솔루션 사용을 마치면 다음 리소스를 정리하십시오.

client.delete_endpoint(EndpointName=ENDPOINT_NAME)
client.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME)
client.delete_model(ModelName=MODEL_NAME)

가격 대비 성능 비교

Graviton 기반 인스턴스는 x86 기반 인스턴스와 비교할 때 가장 저렴한 가격과 최고의 가격 대비 성능을 제공합니다. EC2 인스턴스와 유사하게 ml.c6g 인스턴스(Graviton 2)가 포함된 SageMaker 추론 엔드포인트는 ml.c20에 비해 5% 낮은 가격을 제공하고 Graviton 3 ml.c7g 인스턴스는 ml.c15 인스턴스보다 6% 저렴합니다. 자세한 내용은 다음을 참조하십시오. Amazon SageMaker 요금.

결론

이 게시물에서는 Graviton 기반 추론 인스턴스에 모델을 배포하는 새로 출시된 SageMaker 기능을 선보였습니다. 모범 사례에 대한 지침을 제공하고 새로운 유형의 유추 인스턴스의 가격 대비 성능 이점에 대해 간략하게 논의했습니다.

Graviton에 대한 자세한 내용은 다음을 참조하십시오. AWS 그래비톤 프로세서. Amazon EC2 콘솔에서 다음을 참조하여 AWS Graviton 기반 EC2 인스턴스를 시작할 수 있습니다. AWS Graviton 기술 안내서. 이 블로그 게시물의 샘플 코드를 사용하여 Graviton에서 추론을 위해 Sagemaker 모델 엔드포인트를 배포할 수 있습니다.


저자 소개

빅터 자라밀로빅터 자라밀로 박사, AWS Professional Services의 선임 기계 학습 엔지니어입니다. AWS 이전에는 예측 유지 관리 분야의 대학 교수이자 연구 과학자였습니다. 여가 시간에는 오토바이 타기와 DIY 오토바이 정비를 즐깁니다.

즈므나코 아우라만Zmnako Awrahman 박사, Amazon Web Services의 실습 관리자, ML SME 및 기계 학습 기술 현장 커뮤니티(TFC) 회원입니다. 그는 고객이 클라우드의 힘을 활용하여 데이터 분석 및 기계 학습을 통해 데이터에서 가치를 추출하도록 돕습니다.

수니타 나담팔리수니타 나담팔리 AWS의 소프트웨어 개발 관리자입니다. 그녀는 기계 학습, HPC 및 멀티미디어 워크로드를 위한 Graviton 소프트웨어 성능 최적화를 이끌고 있습니다. 그녀는 Arm SoC로 오픈 소스 개발 및 비용 효율적인 소프트웨어 솔루션 제공에 열정적입니다.

조나 리우조나 리우 Amazon SageMaker 팀의 소프트웨어 개발 엔지니어입니다. 그녀의 현재 작업은 개발자가 기계 학습 모델을 효율적으로 호스팅하고 추론 성능을 개선하도록 돕는 데 중점을 두고 있습니다. 그녀는 공간 데이터 분석과 AI를 사용하여 사회 문제를 해결하는 데 열정적입니다.

앨런 탄앨런 탄 SageMaker의 수석 제품 관리자로 대규모 모델 추론을 주도하고 있습니다. 그는 분석 영역에 기계 학습을 적용하는 데 열정적입니다. 그는 일 외에는 야외 활동을 즐깁니다.

타임 스탬프 :

더보기 AWS 기계 학습