제퍼넷 로고

Amazon SageMaker JumpStart 사전 훈련된 모델로 MLOps 사례 구현

시간

Amazon SageMaker 점프스타트 는 ML을 빠르게 시작할 수 있도록 350개가 넘는 기본 제공 알고리즘, 사전 훈련된 모델 및 사전 구축된 솔루션 템플릿을 제공하는 SageMaker의 기계 학습(ML) 허브입니다. JumpStart는 객체 감지, 텍스트 분류, 요약, 텍스트 생성 등과 같은 일반적인 ML 작업을 위해 사전 훈련된 다양한 모델에 대한 원클릭 액세스를 제공합니다. SageMaker Jumpstart는 또한 사전 훈련된 기초 모델 Stability AI의 Stable Diffusion text-to-image 모델, BLOOM, Cohere의 Generate, Amazon의 AlexaTM 등이 있습니다. UI를 사용하여 JumpStart 모델을 미세 조정하고 배포할 수 있습니다. 아마존 세이지 메이커 스튜디오 또는 SageMaker Python SDK 확장을위한 점프스타트 API. JumpStart API는 워크플로에서 JumpStart 기능의 사용을 잠금 해제하고 MLOps 파이프라인의 일부인 모델 레지스트리와 같은 도구와 SDK를 통해 SageMaker와 상호 작용하는 모든 위치와 통합합니다.

이 게시물은 JumpStart API를 사용하여 JumpStart 모델로 MLOps를 구현하는 방법에 중점을 둡니다. Amazon SageMaker 파이프 라인Amazon SageMaker 프로젝트. 모델 아티팩트를 SageMaker 모델 레지스트리단계 및 프로덕션에 대한 수동 승인으로 모델 배포를 자동화합니다. Jumpstart의 LightGBM 모델을 사용하여 고객 이탈 분류 예를 시연합니다.

JumpStart를 사용한 MLOps 패턴

기업이 조직 전체에서 기계 학습을 채택함에 따라 ML 모델을 수동으로 구축, 교육 및 배포하는 것은 혁신의 병목 현상이 됩니다. MLOps 패턴을 설정하면 ML 수명 주기의 모든 단계에 대해 반복 가능한 워크플로를 생성할 수 있으며 수동 실험 단계에서 프로덕션으로 전환하는 데 핵심입니다. MLOps는 높은 정확도로 모델을 만들고 배포하는 데 있어 데이터 과학 및 ML 팀의 생산성을 높여 기업이 더 빠르게 혁신할 수 있도록 지원합니다.

실제 데이터 및 비즈니스 사용 사례는 빠르게 변하고, Jumpstart로 MLOPs 패턴을 설정하면 여러 환경에서 모델을 신속하게 재교육, 평가, 버전 지정 및 배포할 수 있습니다. Jumpstart 모델 실험의 초기 단계에서 Studio 노트북을 사용하여 모델을 검색, 미세 조정, 배포 및 테스트할 수 있습니다. 모델, 데이터 세트 및 하이퍼파라미터가 비즈니스 사용 사례에 적합하다고 판단되면 다음 단계는 데이터를 사전 처리하고 모델을 미세 조정하고 모델 레지스트리에 등록하고 배포하는 자동 워크플로우를 생성하는 것입니다. 모델을 스테이징 및 프로덕션으로. 다음 섹션에서는 SageMaker 파이프라인 및 SageMaker 프로젝트를 사용하여 MLOps를 설정하는 방법을 보여줍니다.

JumpStart를 SageMaker 파이프라인 및 SageMaker 프로젝트와 통합

Jumpstart 모델은 SageMaker 파이프라인 및 SageMaker 프로젝트와 통합되어 CI/CD 인프라를 생성하고 모델 개발 수명 주기와 관련된 모든 단계를 자동화할 수 있습니다. SageMaker 파이프 라인 직접 SageMaker 통합을 활용하는 ML 파이프라인을 구축하기 위한 기본 워크플로 오케스트레이션 도구입니다. SageMaker 프로젝트 ML 개발 수명 주기에 CI/CD 기능을 활성화하는 데 필요한 기본 리소스를 자동으로 프로비저닝하는 MLOps 템플릿을 제공합니다.

SageMaker 파이프라인 및 SageMaker 프로젝트로 Jumpstart 모델을 구축, 교육, 조정 및 배포하면 더 빠르게 반복하고 반복 가능한 메커니즘을 구축할 수 있습니다. 파이프라인의 각 단계는 계보를 추적할 수 있으며 파이프라인을 빠르게 다시 실행하기 위해 중간 단계를 캐시할 수 있습니다. 프로젝트를 사용하면 종속성 관리, 코드 리포지토리 관리, 빌드 재현성 및 아티팩트 공유를 간단하게 설정할 수 있습니다. 당신은 여러 가지를 사용할 수 있습니다 기본 제공 템플릿 or 나만의 맞춤 템플릿 만들기. SageMaker 프로젝트는 다음을 사용하여 프로비저닝됩니다. AWS 서비스 카탈로그 제품보기.

솔루션 개요

이 섹션에서는 먼저 데이터를 사전 처리하고 모델을 검색, 미세 조정 및 모델 레지스트리에 등록하는 모든 단계와 함께 고객 이탈 예제에 대한 pipeline.yaml 파일을 생성합니다. 그런 다음 미리 빌드된 MLOps 템플릿을 사용하여 ML 워크플로를 부트스트랩하고 샘플 코드로 CI/CD 파이프라인을 프로비저닝합니다. 템플릿을 생성한 후 사용 사례에 대해 생성된 pipeline.yaml을 사용하도록 템플릿에서 생성된 샘플 코드를 수정합니다. 이 예제의 코드 샘플은 다음에서 사용할 수 있습니다. GitHub의.

다음 다이어그램은 솔루션 아키텍처를 보여줍니다.

파이프라인에는 다음 단계가 포함됩니다.

  1. ML 문제 유형에 따라 JumpStart에 필요한 형식으로 데이터 세트를 전처리하고 데이터를 훈련 및 검증 데이터 세트로 분할합니다.
  2. 학습 단계를 수행하여 전이 학습을 사용하여 사전 훈련된 모델을 미세 조정합니다.
  3. 모델을 만듭니다.
  4. 모델을 등록하십시오.

다음 섹션에서는 파이프라인의 각 단계를 생성하고 전체 파이프라인을 실행하는 과정을 안내합니다. 파이프라인의 각 단계는 계보를 추적하고 파이프라인을 신속하게 다시 실행하기 위해 중간 단계를 캐시할 수 있습니다. 전체 파이프라인 및 샘플 코드는 다음에서 사용할 수 있습니다. GitHub의.

사전 조건

이 솔루션을 구현하려면 AWS 자격 증명 및 액세스 관리 (IAM) SageMaker 및 Amazon S3에 대한 연결을 허용하는 역할. IAM 역할 권한에 대한 자세한 내용은 다음을 참조하십시오. IAM의 정책 및 권한.

문 가져오기 및 매개변수 및 상수 선언

이 단계에서는 퍼블릭 S3 버킷에서 데이터 세트를 다운로드하고 훈련에 사용하는 프라이빗 S3 버킷에 업로드합니다. 또한 SageMaker 및 S3 클라이언트 개체와 데이터 세트를 S3 버킷에 업로드하고 이 S3 버킷을 훈련 작업에 제공하는 단계도 설정하고 있습니다. 전체 import 문 및 코드는 다음에서 사용할 수 있습니다. GitHub의.

sm_client = boto3.client("sagemaker")
sess = sagemaker.Session()
region = boto3.Session().region_name
bucket = sess.default_bucket()
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
local_path = "churn.txt"
s3 = boto3.client("s3")
s3.download_file(f"sagemaker-sample-files", "datasets/tabular/synthetic/churn.txt", local_path)
base_uri = f"s3://{bucket}/churn"
input_data_uri = sagemaker.s3.S3Uploader.upload( local_path=local_path, desired_s3_uri=base_uri,
)

데이터 처리 스크립트 및 처리 단계 정의

여기서는 사용자 지정 데이터 세트에서 데이터 처리를 수행하고 모델 미세 조정에 사용할 교육, 검증 및 테스트 분할을 선별하는 Python 스크립트를 제공합니다. 그만큼 preprocessing.py 예제에 사용된 파일은 다음 위치에 있습니다. GitHub의.

이 단계에서는 프로세서를 인스턴스화합니다. 처리 스크립트가 Pandas로 작성되었기 때문에 SKLearn 프로세서. 파이프라인 ProcessingStep 함수는 프로세서, 원시 데이터 세트의 입력 S3 위치 및 처리된 데이터 세트를 저장할 출력 S3 위치 인수를 사용합니다. 다음 코드를 참조하십시오.

# Processing step for feature engineering
framework_version = "0.23-1"
sklearn_processor = SKLearnProcessor( framework_version=framework_version, instance_type="ml.m5.xlarge", instance_count=1, base_job_name="sklearn-churn-process", role=role, sagemaker_session=sagemaker_session,
) step_process = ProcessingStep( name="JumpstartDataProcessing", # choose any name processor=sklearn_processor, inputs=[ ProcessingInput(source=input_data_uri, destination="/opt/ml/processing/input"), ], outputs=[ ProcessingOutput(output_name="train", source="/opt/ml/processing/train", destination=f"s3://{bucket}/output/train"), ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation",destination=f"s3://{bucket}/output/validation"), ProcessingOutput(output_name="test", source="/opt/ml/processing/test",destination=f"s3://{bucket}/output/test"), ], code=os.path.join(BASE_DIR, "preprocessing.py"),
) 

미세 조정을 위한 파이프라인 단계 정의

다음으로 모델을 검색하는 파이프라인 단계와 미세 조정된 모델을 배포하기 위한 학습 스크립트를 제공합니다. Jumpstart에 대한 모델 아티팩트는 다음 위치에 tarball로 저장됩니다. 아마존 단순 스토리지 서비스 (Amazon S3) 버킷. 각 모델은 버전이 지정되며 모델 URI를 검색하는 데 사용할 수 있는 고유 ID를 포함합니다. URI를 검색하려면 다음이 필요합니다.

  • 모델_ID – JumpStart 모델의 고유 식별자입니다.
  • 모델 버전 – 모델 사양의 버전입니다. 최신 버전을 사용하려면 *를 입력합니다. 필수 매개변수입니다.

를 선택 model_idversion 인사말 선행 학습된 모델 테이블, 뿐만 아니라 모델 범위. 이 경우 모델 범위로 "훈련"을 사용하여 시작합니다. 유틸리티 함수를 사용하여 계속 진행하는 데 필요한 세 구성 요소 각각의 URI를 검색합니다. 인스턴스 유형을 선택하십시오. 이 모델의 경우 GPU 또는 GPU가 아닌 인스턴스를 사용할 수 있습니다. 이 예제의 모델은 ml.m5.4xlarge 인스턴스 유형을 사용합니다. 다음 코드를 참조하십시오.

# Estimator Instance count and instance type.
instance_count = 1
instance_type = "ml.m5.4xlarge"
model_id, model_version = "lightgbm-classification-model", "*"
training_instance_type = "ml.m5.4xlarge"
# Retrieve the docker image
train_image_uri = image_uris.retrieve( region=None, framework=None, model_id=model_id, model_version=model_version, image_scope="training", instance_type=training_instance_type,
)
# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")
# Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training") #Set S3 URIs
training_dataset_s3_path = f"s3://{bucket}/output/"
output_prefix = "jumpstart-example-tabular-training"
s3_output_location = f"s3://{bucket}/{output_prefix}/output" # Get the default JumpStart hyperparameters
default_hyperparameters = hyperparameters.retrieve_default( model_id=model_id, model_version=model_version,
)

다음으로 모델 리소스 URI를 사용하여 Estimator 사용자 지정 교육 데이터 세트에서 교육합니다. 사용자 지정 교육 데이터 세트의 S3 경로를 지정해야 합니다. 그만큼 Estimator 수업에는 entry_point 매개변수. 점프스타트 사용 transfer_learning.py. 이 값을 설정하지 않으면 학습 작업이 실행되지 않습니다. 모델이 교육 데이터 세트에 맞는 동안 교육 작업의 진행 상황을 반영하는 콘솔 출력을 볼 수 있습니다. 이것은 다음을 포함하여 훈련 작업에 대한 더 많은 컨텍스트를 제공합니다. transfer_learning.py 스크립트. 그런 다음 SageMaker LightGBM 분류 추정기와 Pipelines TrainingStep 함수를 사용하여 미세 조정 단계를 인스턴스화합니다.

ic_estimator = Estimator( role=role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=default_hyperparameters, output_path=s3_output_location, sagemaker_session=sagemaker_session, training=training_dataset_s3_path,
)
xgb_input_content_type = None training_step = TrainingStep( name="JumpStartFineTraining", estimator=ic_estimator, inputs={ "train": TrainingInput( s3_data=step_process.properties.ProcessingOutputConfig.Outputs["train"].S3Output.S3Uri, content_type="text/csv", ), "validation": TrainingInput( s3_data=step_process.properties.ProcessingOutputConfig.Outputs["validation"].S3Output.S3Uri, content_type="text/csv", ), }
)

모델에 대한 추론 컨테이너 및 스크립트를 검색하는 파이프라인 단계를 정의합니다.

미세 조정된 모델 아티팩트를 SageMaker 엔드포인트에 배포하려면 추론 스크립트와 추론 컨테이너가 필요합니다. 그런 다음 SageMaker를 초기화합니다. Model 에 배포할 수 있는 Endpoint. 추론 스크립트를 모델의 진입점으로 전달합니다.

deploy_image_uri = image_uris.retrieve( region=None, framework=None, image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,
)
model = Model( image_uri=deploy_image_uri, entry_point="inference.py", source_dir= Inference_dir, model_data=training_step.properties.ModelArtifacts.S3ModelArtifacts, sagemaker_session=sagemaker_session, name="JumpStartRegisterModel", role=role,
)

모델 레지스트리에 대한 파이프라인 단계 정의

다음 코드는 파이프라인 모델 단계를 사용하여 SageMaker 모델 레지스트리 내에 모델을 등록합니다. 승인 상태를 다음으로 설정할 수 있습니다. Approved or PendingManualApproval. PendingManualApproval Studio IDE에서 수동 승인이 필요합니다.

approval_status="Approved"
step_register = RegisterModel(
name="JumpStartRegisterModel",
model=model,
content_types=["text/csv"],
response_types=["text/csv"],
inference_instances=["ml.t2.medium", "ml.m5.4xlarge"],
transform_instances=["ml.m5.4xlarge"],
model_package_group_name=model_package_group_name,
approval_status=approval_status,
model_metrics=model_metrics,
)

파이프라인 정의

구성 요소 단계를 모두 정의한 후 이를 Pipelines 객체로 어셈블할 수 있습니다. 파이프라인은 단계 간의 종속성을 기반으로 주문 순서를 자동으로 유추하므로 파이프라인의 순서를 지정할 필요가 없습니다. 다음 코드를 참조하십시오.

# Create a unique pipeline name with flow export name
pipeline_name = "sm-jumpstart-churn-prediction-pipeline" # Combine pipeline steps
pipeline_steps = [step_process,training_step,step_register] pipeline = Pipeline(
name=pipeline_name,
parameters=[processing_instance_count,instance_type, instance_count,input_data],
steps=pipeline_steps,
sagemaker_session=sess
)

SageMaker 프로젝트로 배포 템플릿 실행

파이프라인 단계를 생성한 후 다음 스크린샷과 같이 Studio 콘솔에서 MLOps 프로젝트 템플릿을 시작할 수 있습니다.

프로젝트 페이지에서 사전 구성된 SageMaker MLOps 템플릿을 시작할 수 있습니다. 이 예에서는 다음을 선택합니다. 모델 구축, 교육 및 배포를위한 MLOps 템플릿.

이 템플릿은 다음 아키텍처를 만듭니다.

다음 AWS 서비스 및 리소스가 생성됩니다.

  • 두 개의 저장소가 추가됩니다. AWS 코드 커밋:
    • 첫 번째 리포지토리는 다음과 함께 다단계 모델 구축 파이프라인을 생성하는 코드를 제공합니다. 빌드 사양 파일에 의해 사용됨 AWS 코드 파이프라인AWS 코드빌드 파이프 라인을 자동으로 실행합니다.
    • 두 번째 리포지토리에는 모델 배포를 위한 코드 및 구성 파일이 포함되어 있습니다. 이 리포지토리는 또한 CodePipeline 및 CodeBuild를 사용합니다. AWS 클라우드 포메이션 스테이징 및 프로덕션을위한 모델 엔드 포인트를 생성하기위한 템플릿.
  • 두 개의 CodePipeline 파이프 라인 :
    • XNUMXD덴탈의 ModelBuild 파이프 라인은 새로운 커밋이 발생할 때마다 파이프 라인을 자동으로 트리거하고 실행합니다. ModelBuild CodeCommit 리포지토리.
    • XNUMXD덴탈의 ModelDeploy 새 모델 버전이 SageMaker 모델 레지스트리에 추가되고 상태가 다음으로 표시될 때마다 파이프라인이 자동으로 트리거됩니다. Approved. 등록 된 모델 Pending or Rejected 상태는 배포되지 않습니다.
  • 파이프라인에서 생성된 출력 모델 아티팩트에 대해 S3 버킷이 생성됩니다.

사용자 지정 사용 사례에 대한 샘플 코드 수정

시작된 템플릿에서 샘플 코드를 수정하려면 먼저 CodeCommit 리포지토리를 로컬 Studio 인스턴스에 복제해야 합니다. 프로젝트 목록에서 방금 만든 프로젝트를 선택합니다. 에 저장소 탭에서 하이퍼링크를 선택하여 CodeCommit 리포지토리를 로컬로 복제할 수 있습니다.

이전 단계에서 리포지토리를 복제한 후 템플릿에서 생성된 시드 코드를 수정할 수 있습니다. 사용자 정의를 만들 수 있습니다. pipeline.yaml 필요한 단계가 포함된 파일. 이 예에서는 다음으로 이동하여 파이프라인을 사용자 지정할 수 있습니다. pipelines 폴더에있는 ModelBuild 저장소. 에서 pipelines 디렉토리에서 찾을 수 있습니다. abalone 시드 파이프라인 코드가 포함된 폴더. abalone 디렉토리의 내용을 GitHub 폴더. 이름 바꾸기 abalone ~에 디렉토리 customer_churn.

또한 내부 경로를 수정해야 합니다. 코드빌드-buildspec.yml, 샘플 리포지토리에 표시된 대로:

run-pipeline --module-name pipelines.customer_churn.pipeline 

XNUMXD덴탈의 ModelDeploy 폴더에는 배포 파이프라인을 위한 CloudFormation 템플릿이 있습니다. 모델 레지스트리에서 새 모델을 사용할 수 있으므로 스테이징 엔드포인트에 배포됩니다. 수동 승인 후 모델이 프로덕션에 배포됩니다. 변경 사항을 CodeCommit에 커밋하면 새 파이프라인 실행이 트리거됩니다. Studio IDE에서 직접 커밋할 수 있습니다.

빌드 단계는 모델 레지스트리에 모델을 등록합니다. 새 모델을 사용할 수 있으면 스테이징 배포 프로세스가 트리거됩니다. 스테이징이 성공적으로 배포된 후 프로덕션 엔드포인트에 모델을 배포하려면 수동 승인이 필요합니다. 다음 스크린샷은 파이프라인 단계를 보여줍니다.

수동 승인이 제공되면 프로덕션 엔드포인트가 성공적으로 생성되었음을 확인할 수 있습니다. 이 시점에서 프로덕션 엔드포인트는 추론할 준비가 되었습니다.

정리

지속적인 요금 청구를 피하려면 SageMaker 콘솔을 통해 추론 엔드포인트 및 엔드포인트 구성을 삭제하십시오. CloudFormation 스택을 삭제하여 리소스를 정리할 수도 있습니다.

결론

Jumpstart는 컴퓨터 비전 및 자연어 처리 사용 사례를 포함하여 일반적인 ML 작업을 위한 수백 개의 사전 학습된 모델을 제공합니다. 이 게시물에서는 SageMaker 파이프라인 및 SageMaker 프로젝트를 사용하여 종단 간 CI/CD로 JumpStart의 기능을 생산하는 방법을 보여 주었습니다. 데이터 사전 처리, 모델 교육 및 등록을 위한 단계로 파이프라인을 생성하는 방법을 보여 주었습니다. 또한 소스 코드에 대한 변경이 어떻게 필요한 승인 프로세스와 함께 전체 모델 구축 및 배포 프로세스를 트리거할 수 있는지 보여주었습니다. 이 패턴은 다른 모든 JumpStart 모델 및 솔루션으로 확장될 수 있습니다.


저자 소개

비벡 강가사니 Amazon Web Services의 선임 기계 학습 솔루션 아키텍트입니다. 그는 기계 학습 스타트업과 협력하여 AWS에서 AI/ML 애플리케이션을 구축하고 배포합니다. 그는 현재 MLOps, ML 추론 및 로우 코드 ML을 위한 솔루션 제공에 주력하고 있습니다. 그는 자연어 처리 및 컴퓨터 비전을 포함한 다양한 영역의 프로젝트에 참여했습니다.

라훌 수레카 인도에 본사를 둔 AWS의 엔터프라이즈 솔루션 아키텍트입니다. Rahul은 여러 산업 부문에서 대규모 비즈니스 혁신 프로그램을 설계하고 주도하는 데 22년 이상의 경험을 가지고 있습니다. 관심 분야는 데이터 및 분석, 스트리밍, AI/ML 애플리케이션입니다.

다비드 갈리텔리 EMEA 지역의 AI/ML 전문 솔루션 설계자입니다. 그는 브뤼셀에 거주하며 베네룩스 전역의 고객과 긴밀하게 협력하고 있습니다. 그는 아주 어렸을 때부터 개발자였으며 ​​7세에 코딩을 시작했습니다. 그는 대학에서 AI/ML을 배우기 시작했고 그때부터 사랑에 빠졌습니다.

spot_img

VC 카페

VC 카페

최신 인텔리전스

spot_img