View a markdown version of this page

생성형 AI 추론 배포 권장 사항 가져오기 - Amazon SageMaker AI

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

생성형 AI 추론 배포 권장 사항 가져오기

AI 추천 작업은 모델 및 워크로드 특성을 분석하여 비용, 지연 시간 또는 처리량에 최적화된 배포 구성을 생성합니다. 이 서비스는 인스턴스 유형을 평가하고, 추측 디코딩과 같은 최적화를 적용하고, 실제 GPU 인프라에서 각 구성을 벤치마킹합니다.

사전 조건

권장 작업을 생성하기 전에 다음이 필요합니다.

  • SafeTensor 가중치를 사용하여 HuggingFace 체크포인트 형식으로 Amazon S3에 저장된 모델 아티팩트

  • 권장 사항 출력을 위한 Amazon S3 버킷

  • 모델 아티팩트 및 출력 버킷에 대한 SageMaker AI 액세스 권한을 부여하는 AWS Identity and Access Management(IAM) 실행 역할 SageMaker

1단계: 권장 작업 생성

권장 작업은 모델을 분석하고 배포 권장 사항을 생성합니다. 모델 위치, 출력 위치, 워크로드 구성 및 성능 목표를 지정합니다.

Python(boto3)

response = client.create_ai_recommendation_job( AIRecommendationJobName="my-recommendation-job", ModelSource={ "S3": { "S3Uri": "s3://DOC-EXAMPLE-BUCKET/models/my-model/", } }, OutputConfig={ "S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/recommendations/" }, PerformanceTarget={ "Constraints": [ {"Metric": "ttft-ms"} ] }, AIWorkloadConfigIdentifier="my-recommendation-workload", RoleArn="arn:aws:iam::111122223333:role/ExampleRole", ) print(response["AIRecommendationJobArn"])

AWS CLI

aws sagemaker create-ai-recommendation-job \ --ai-recommendation-job-name "my-recommendation-job" \ --model-source '{"S3": {"S3Uri": "s3://DOC-EXAMPLE-BUCKET/models/my-model/"}}' \ --output-config '{"S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/recommendations/"}' \ --performance-target '{"Constraints": [{"Metric": "ttft-ms"}]}' \ --ai-workload-config-identifier "my-recommendation-workload" \ --role-arn "arn:aws:iam::111122223333:role/ExampleRole" \ --region us-west-2

다음 파라미터를 지정할 수도 있습니다.

ComputeSpec

인스턴스 유형을 평가하도록 제한합니다(최대 3개). 예: {"InstanceTypes": ["ml.g5.12xlarge", "ml.p4d.24xlarge"]}

OptimizeModel

투기 디코딩과 같은 모델 최적화를 허용true하려면 로 설정합니다.

InferenceSpecification

추론 프레임워크를 지정합니다. 유효한 값: LMI, VLLM.

2단계: 작업 상태 모니터링

작업 상태가 터미널 상태에 도달할 때까지 폴링합니다.

Python(boto3)

import time while True: response = client.describe_ai_recommendation_job( AIRecommendationJobName="my-recommendation-job" ) status = response["AIRecommendationJobStatus"] print(f"Status: {status}") if status in ("Completed", "Failed", "Stopped"): break time.sleep(30)

AWS CLI

aws sagemaker describe-ai-recommendation-job \ --ai-recommendation-job-name "my-recommendation-job" \ --region us-west-2

3단계: 권장 사항 검토

작업이 완료되면 설명 응답에 Recommendations 배열이 포함됩니다. 각 권장 사항에는 다음 정보가 포함된 배포 준비 구성이 포함되어 있습니다.

DeploymentConfiguration

컨테이너 이미지 URI, 인스턴스 유형, 인스턴스 수 및 환경 변수. 이 구성을 사용하여 SageMaker AI 엔드포인트에 직접 배포할 수 있습니다.

ExpectedPerformance

TTFT(Time to First Token), P90 및 P99의 요청 지연 시간, 초당 토큰 처리량, 요청 처리량을 포함한 검증된 성능 지표.

OptimizationDetails

투기 디코딩 또는 커널 튜닝과 같은 최적화 기술을 구성 파라미터와 함께 적용했습니다.

다음과 같은 최적화 기법을 적용할 수 있습니다.

추론 디코딩

투기 디코딩은 한 번에 하나의 토큰이 아닌 여러 토큰을 병렬로 처리하여 텍스트 생성 속도를 높입니다. 경량 투기기는 한 단계로 여러 후보 토큰을 제안한 다음 기본 모델은 하나의 순방향 패스로 함께 검증하여 자체 배포에 동의하는 후보를 유지하고 나머지는 폐기합니다. speculator는 기본 모델의 데이터 배포에 맞게 훈련되어 더 많은 제안이 수락되며, 이는 전달 패스당 생성된 더 유용한 토큰으로 직접 변환됩니다. 기본 모델의 출력 분포는 보존되므로 응답 품질은 변경되지 않습니다. 그 결과 초당 출력 토큰이 높고 토큰 간 지연 시간(ITL)이 짧아져 처리량 지표가 향상됩니다.

커널 튜닝

커널 튜닝은 모델 실행 그래프를 구문 분석하여 관심 및 융합된 연산자 커널과 같이 튜닝에 적합한 성능에 중요한 커널을 식별하는 것으로 시작됩니다. 그런 다음 시작 및 타일링 파라미터가 조정되어 구현이 대상 GPU 하드웨어 및 동시성과 같은 예상 트래픽 패턴과 더 잘 매칭됩니다. 이러한 파라미터는 메모리 재사용, 캐시 로캘 및 병렬 처리에 영향을 미치므로 실행 효율성이 향상됩니다. 데이터 로드 및 컴퓨팅에 사용되는 파이프라인 단계 수도 조정되므로 메모리 이동과 컴퓨팅을 겹치는 데 도움이 됩니다. 커널 튜닝은 모델, 하드웨어 및 서비스 워크로드의 특정 조합에 대해 이러한 파라미터를 튜닝하여 GPU가 완전히 활용되도록 하여 처리량과 지연 시간을 개선합니다.

다음과 같은 성능 대상 지표를 사용할 수 있습니다.

ttft-ms

밀리초 단위의 첫 번째 토큰까지의 시간입니다.

throughput

초당 토큰 수.

cost

배포 구성의 시간당 비용입니다.

ExpectedPerformance 응답의 각 지표에는 통계 측정값을 나타내는 Stat 필드, 및 선택적 Value가 포함됩니다Unit. 일반적인 통계에는 average, , p50, p90, p95, p99max가 포함됩니다min.

권장 사항 리소스 관리

다음 작업을 사용하여 권장 작업 및 워크로드 구성을 관리합니다.

# List recommendation jobs response = client.list_ai_recommendation_jobs(MaxResults=10) for job in response["AIRecommendationJobs"]: print(f"{job['AIRecommendationJobName']} - {job['AIRecommendationJobStatus']}") # Stop a running job client.stop_ai_recommendation_job( AIRecommendationJobName="my-recommendation-job" ) # Delete a job (must be in a terminal state) client.delete_ai_recommendation_job( AIRecommendationJobName="my-recommendation-job" ) # List workload configurations response = client.list_ai_workload_configs(MaxResults=10) for config in response["AIWorkloadConfigs"]: print(f"{config['AIWorkloadConfigName']} - {config['AIWorkloadConfigArn']}") # Delete a workload configuration client.delete_ai_workload_config( AIWorkloadConfigName="my-recommendation-workload" )