AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.

원클릭 Kubeflow on AWS 배포로 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로 활성화

현재 많은 AWS 고객이 엔터프라이즈급 기계 학습(ML) 플랫폼을 구축하고 있습니다. Amazon Elastic Kubernetes 서비스 (Amazon EKS) 사용 AWS의 Kubeflow (Kubeflow의 AWS별 배포) 컴퓨터 비전, 자연어 이해, 음성 번역 및 금융 모델링을 비롯한 다양한 사용 사례에 적용됩니다.

와 더불어 오픈 소스 Kubeflow v1.6.1의 최신 릴리스, Kubeflow 커뮤니티는 엔터프라이즈 사용 사례를 위한 Kubeflow의 대규모 채택을 계속 지원합니다. 최신 릴리스에는 Kubernetes v1.22 지원, PyTorch용 Python SDK 결합, MXNet, MPI, Kubeflow의 분산 교육 오퍼레이터의 XGBoost, 모델 서비스를 위한 새로운 ClusterServingRuntime 및 ServingRuntime CRD 등과 같은 흥미로운 새 기능이 많이 포함되어 있습니다.

Kubeflow on AWS 1.6.1의 최근 출시와 함께 Kubeflow에 대한 AWS의 기여는 모든 업스트림 오픈 소스 Kubeflow 기능을 지원하고 고도로 최적화된 클라우드 네이티브 엔터프라이즈 지원 AWS 서비스와의 많은 새로운 통합을 포함합니다. 안전하고 휴대 가능하며 확장 가능한 ML 시스템.

이 게시물에서는 새로운 Kubeflow on AWS v1.6.1 기능에 대해 논의하고 다음을 제공하기 위해 하나의 플랫폼에 번들로 제공되는 세 가지 중요한 통합을 강조합니다.

이 블로그의 사용 사례는 특히 하이브리드 기계 학습 아키텍처를 구축할 수 있도록 기존 Kubernetes 워크플로에 추가할 수 있는 AWS의 Kubeflow와 SageMaker 통합에 중점을 둡니다.

AWS의 Kubeflow

AWS 1.6.1의 Kubeflow는 기존 기능 위에 다음과 같은 AWS 서비스를 추가하여 Kubeflow를 사용할 수 있는 명확한 경로를 제공합니다.

  • Kubernetes용 SageMaker Operators(ACK) 및 Kubeflow Pipelines용 SageMaker 구성 요소를 사용하여 하이브리드 ML 워크플로를 실행하기 위한 Kubeflow와 SageMaker 통합.
  • Kustomize 스크립트 및 Helm 차트를 사용하여 자동화된 배포 옵션이 개선되고 간소화되었습니다.
  • 사용 가능한 모든 것에 대해 Terraform을 사용하여 AWS의 Kubeflow에 대한 IaC(Infrastructure as Code) 원클릭 배포에 대한 지원을 추가했습니다. 배포 옵션. 이 스크립트는 다음 AWS 리소스 생성을 자동화합니다.
  • 지원 AWS 프라이빗링크 비상업적 지역 사용자가 각자의 S3 엔드포인트에 연결할 수 있도록 하는 Amazon S3용.
  • 추가 통합 Prometheus용 Amazon 관리형 서비스 (AMP) 및 아마존 매니지드 그라파나 AWS에서 Kubeflow로 지표를 모니터링합니다.
  • TensorFlow 2.10.0 및 PyTorch 1.12.1을 기반으로 하는 최신 딥 러닝 컨테이너 이미지로 Kubeflow 노트북 서버 컨테이너를 업데이트했습니다.
  • AWS DLC와 통합하여 분산 실행 훈련추론 워크로드.

다음 아키텍처 다이어그램은 Kubeflow on AWS에서 Kubeflow 제어 및 데이터 평면 구성 요소에 사용할 수 있는 모든 서비스 통합(이미 언급한 통합 포함)의 빠른 스냅샷입니다. Kubeflow 컨트롤 플레인은 클라우드에서 Kubernetes 애플리케이션을 실행하고 확장하는 데 사용되는 관리형 컨테이너 서비스인 Amazon EKS 위에 설치됩니다. 이러한 AWS 서비스 통합을 통해 Kubernetes에서 Kubeflow 컨트롤 플레인의 중요한 부분을 분리하여 안전하고 확장 가능하며 탄력적이고 비용 최적화된 설계를 제공할 수 있습니다. 이러한 서비스 통합이 오픈 소스 Kubeflow에 추가하는 가치에 대한 자세한 내용은 다음을 참조하세요. Kubeflow on AWS를 사용하여 Kubernetes에서 확장 가능한 기계 학습 시스템 구축 및 배포.

AWS 1.6.1의 Kubeflow 주요 기능이 조직에 어떻게 도움이 될 수 있는지 자세히 논의해 보겠습니다.

AWS의 Kubeflow 기능 세부 정보

Kubeflow 1.6.1 릴리스에서는 어떤 옵션을 선택하든 Kubeflow를 쉽게 시작할 수 있도록 다양한 유형의 고객에게 더 나은 도구를 제공하려고 노력했습니다. 이러한 도구는 좋은 시작점을 제공하며 정확한 요구 사항에 맞게 수정할 수 있습니다.

배포 옵션

다양한 고객 사용 사례에 대해 다양한 배포 옵션을 제공합니다. 여기에서 Kubeflow 배포를 통합할 AWS 서비스를 선택할 수 있습니다. 나중에 배포 옵션을 변경하기로 결정한 경우 새 배포에 대해 새로 설치하는 것이 좋습니다. 다음 배포 옵션을 사용할 수 있습니다.

최소한의 변경으로 Kubeflow를 배포하려면 다음을 고려하세요. 바닐라 배포 옵션. 사용 가능한 모든 배포 옵션은 Kustomize, Helm 또는 Terraform을 사용하여 설치할 수 있습니다.

또한 이러한 배포 옵션 위에 설치할 수 있는 다양한 애드온 배포가 있습니다.

설치 옵션

요구 사항에 가장 적합한 배포 옵션을 결정한 후 이러한 배포를 설치할 방법을 선택할 수 있습니다. 전문가와 신규 사용자 모두에게 서비스를 제공하기 위해 다양한 수준의 자동화 및 구성을 제공합니다.

옵션 1: Terraform(IaC)

이것은 EKS 클러스터와 모든 관련 AWS 인프라 리소스를 생성한 다음 Terraform을 사용하여 하나의 명령으로 Kubeflow를 모두 배포합니다. 내부적으로 EKS 청사진 및 Helm 차트를 사용합니다.

이 옵션에는 다음과 같은 이점이 있습니다.

  • 특정 Kubeflow 구성 요소 구성에 대해 걱정할 필요 없이 하나의 명령으로 Amazon EKS 및 Kubeflow를 배포할 수 있는 유연성을 기업에 제공합니다. 이는 기술 평가, 프로토타이핑 및 제품 개발 수명 주기를 가속화하여 Terraform 모듈을 사용하고 프로젝트별 요구 사항을 충족하도록 수정할 수 있는 유연성을 제공하는 데 크게 도움이 될 것입니다.
  • 오늘날 Terraform을 클라우드 전략의 중심으로 삼고 있는 많은 조직은 이제 AWS Terraform 솔루션에서 Kubeflow를 사용하여 클라우드 목표를 달성할 수 있습니다.

옵션 2: Kustomize 또는 Helm 차트:

이 옵션을 사용하면 Kubeflow를 XNUMX단계 프로세스로 배포할 수 있습니다.

  1. Amazon EKS, Amazon RDS, Amazon S3 및 Amazon Cognito와 같은 AWS 리소스를 AWS 배포에 포함된 자동화된 스크립트를 통해 또는 수동으로 생성합니다. 단계별 가이드.
  2. Helm 차트 또는 Kustomize를 사용하여 Kubeflow 배포를 설치합니다.

이 옵션에는 다음과 같은 이점이 있습니다.

  • 이 설치 옵션의 주요 목표는 Kubeflow 관련 Kubernetes 구성을 제공하는 것입니다. 따라서 기존 EKS 클러스터 또는 Amazon RDS, Amazon S3 및 Amazon Cognito와 같은 관련 AWS 리소스를 생성하거나 가져오도록 선택하고 AWS에서 Kubeflow와 함께 작동하도록 구성 및 관리할 수 있습니다.
  • 오픈 소스 Kustomize Kubeflow 매니페스트에서 AWS Kubeflow 배포로 이동하는 것이 더 쉽습니다.

다음 다이어그램은 두 옵션의 아키텍처를 보여줍니다.

AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.

SageMaker와 통합

SageMaker는 ML 워크플로 관리를 위해 특별히 설계되고 최적화된 완전관리형 서비스입니다. 차별화되지 않은 인프라 관리의 부담을 없애고 ML 모델 구축, 교육 및 추론을 위해 클러스터를 관리하기 위해 IT 및 DevOps에 투자할 필요가 없습니다.

이식성 요구 사항이나 온프레미스 표준 제한이 있는 많은 AWS 고객은 Amazon EKS를 사용하여 교육 및 추론 워크로드를 실행하는 반복 가능한 ML 파이프라인을 설정합니다. 그러나 이렇게 하려면 개발자가 사용자 지정 코드를 작성하여 기본 ML 인프라를 최적화하고 고가용성과 안정성을 제공하며 적절한 보안 및 규제 요구 사항을 준수해야 합니다. 따라서 이러한 고객은 모델 교육 및 배포를 위한 비용 최적화 및 관리형 인프라에 SageMaker를 사용하고 표준화 및 이식성을 유지하기 위해 오케스트레이션 및 ML 파이프라인에 Kubernetes를 계속 사용하기를 원합니다.

이러한 요구 사항을 해결하기 위해 AWS에서는 다음 두 가지 옵션을 사용하여 Amazon EKS에서 SageMaker의 모델을 훈련, 조정 및 배포할 수 있습니다.

  • Kubernetes용 Amazon SageMaker ACK 연산자는 다음을 기반으로 합니다. Kubernetes용 AWS 컨트롤러 (ACK) 프레임워크. ACK는 Kubernetes 사용자가 Kubernetes API를 사용하여 데이터베이스 또는 메시지 대기열과 같은 AWS 리소스를 프로비저닝할 수 있도록 하는 Kubernetes 사용자 지정 컨트롤러를 구축하기 위한 표준화를 가져오는 AWS 전략입니다. SageMaker ACK 오퍼레이터는 Kubernetes를 컨트롤 플레인으로 사용하는 ML 개발자 및 데이터 과학자가 SageMaker 콘솔에 로그인하지 않고도 SageMaker에서 ML 모델을 훈련, 조정 및 배포할 수 있도록 지원합니다.
  • XNUMXD덴탈의 Kubeflow 파이프 라인 용 SageMaker 구성 요소, SageMaker를 Kubeflow Pipelines의 이식성 및 오케스트레이션과 통합할 수 있습니다. SageMaker 구성 요소를 사용하면 파이프라인 워크플로의 각 작업이 로컬 Kubernetes 클러스터 대신 SageMaker에서 실행됩니다. 이를 통해 Kubeflow Pipelines에서 기본 SageMaker 교육, 조정, 엔드포인트 배포 및 일괄 변환 작업을 생성하고 모니터링할 수 있으므로 데이터 처리 및 교육 작업을 포함한 전체 컴퓨팅을 Kubernetes 클러스터에서 SageMaker의 기계 학습에 최적화된 관리형 서비스로 이동할 수 있습니다.

Kubeflow on AWS v1.6.1부터 사용 가능한 모든 Kubeflow 배포 옵션은 기본적으로 하나의 플랫폼에서 두 가지 Amazon SageMaker 통합 옵션을 함께 가져옵니다. 즉, 사용자 지정 SageMaker 리소스를 제출하여 Kubeflow 노트북 서버 자체에서 또는 SageMaker 구성 요소를 사용하는 Kubeflow 파이프라인 단계에서 SageMaker ACK 연산자를 사용하여 SageMaker 작업을 제출할 수 있습니다.

SageMaker 구성 요소에는 두 가지 버전이 있습니다. 보토3 (Python용 AWS SDK용 AWS SDK) 기반 버전 1 구성 요소 및 SageMaker Operator for K8s(ACK) 기반 버전 2 구성 요소. 새로운 SageMaker 구성 요소 버전 2는 최신 SageMaker 교육 API를 지원하며 이 버전의 구성 요소에 더 많은 SageMaker 기능을 계속 추가할 예정입니다. 그러나 교육용 SageMaker 구성 요소 버전 2와 하이퍼파라미터 튜닝, 작업 처리, 호스팅 등과 같은 다른 SageMaker 기능용 버전 1을 유연하게 결합할 수 있습니다.

Prometheus 및 Grafana와의 통합

Prometheus는 Kubernetes 클러스터에서 실행되도록 구성할 수 있는 오픈 소스 메트릭 집계 도구입니다. Kubernetes 클러스터에서 실행할 때 기본 Prometheus 서버는 포드 엔드포인트를 주기적으로 스크레이핑합니다.

KFP(Kubeflow Pipelines) 및 노트북과 같은 Kubeflow 구성 요소는 실행 중인 실험 수 또는 노트북 수와 같은 구성 요소 리소스를 모니터링할 수 있도록 Prometheus 지표를 내보냅니다.

이러한 메트릭은 Kubernetes 클러스터에서 실행되는 Prometheus 서버에서 집계하고 PromQL(Prometheus 쿼리 언어)을 사용하여 쿼리할 수 있습니다. Prometheus가 지원하는 기능에 대한 자세한 내용은 프로메테우스 문서.

Kubeflow on AWS 배포는 다음 AWS 관리형 서비스와의 통합을 지원합니다.

  1. AMP(Amazon Managed Prometheus)는 프로 메테우스- 고객이 컨테이너 환경을 대규모로 안전하게 모니터링할 수 있도록 하는 컨테이너 인프라 및 컨테이너용 애플리케이션 지표에 대한 호환 모니터링 서비스입니다. AMP를 사용하면 AWS, 타사 ISV 및 IT 포트폴리오의 기타 리소스를 포함하여 가시성 시스템의 여러 데이터 소스에서 수집된 지표, 로그 및 추적을 시각화, 분석 및 경보할 수 있습니다.
  2. 오픈 소스 기반의 완전 관리형 보안 데이터 시각화 서비스인 Amazon Managed Grafana 그라 파나 고객이 여러 데이터 소스에서 애플리케이션에 대한 운영 메트릭, 로그 및 추적을 즉시 쿼리, 연관 및 시각화할 수 있도록 하는 프로젝트입니다. Amazon Managed Grafana는 자동 버전 업데이트 및 보안 패치를 통해 사용량 요구가 증가함에 따라 컴퓨팅 및 데이터베이스 인프라를 자동으로 확장하여 Grafana의 운영 관리 부담을 덜어줍니다.

Kubeflow on AWS 배포는 Amazon Managed Service for Prometheus와 Amazon Managed Grafana의 통합을 지원하여 Prometheus 메트릭을 대규모로 안전하게 수집 및 시각화할 수 있도록 합니다.

다음 메트릭이 수집되고 시각화될 수 있습니다.

Kubeflow 클러스터에 대해 Amazon Managed Service for Prometheus 및 Amazon Managed Grafana를 구성하려면 다음을 참조하십시오. Prometheus, Amazon Managed Service for Prometheus 및 Amazon Managed Grafana를 사용하여 AWS에서 Kubeflow로 지표 모니터링.

솔루션 개요

이 사용 사례에서는 Terraform 설치 옵션을 사용하여 Kubeflow Vanilla 배포를 사용합니다. 설치가 완료되면 Kubeflow 대시보드에 로그인합니다. 대시보드에서 Kubeflow Jupyter 노트북 서버를 가동하여 SageMaker를 사용하여 이미지 분류 모델에 대한 분산 교육을 실행하고 모델 배포를 위한 SageMaker 엔드포인트를 실행하는 Kubeflow 파이프라인을 구축합니다.

사전 조건

다음 전제 조건을 충족하는지 확인하십시오.

  • 당신은이 AWS 계정.
  • 당신이에 있는지 확인하십시오 us-west-2 이 예제를 실행할 지역입니다.
  • Google 크롬을 사용하여 AWS 관리 콘솔 그리고 Kubeflow.
  • Service Quotas 콘솔을 사용하여 계정에 ml.p3.2xlarge에 대한 SageMaker Training 리소스 유형 제한이 2로 증가했는지 확인하십시오.
  • 선택적으로 다음을 사용할 수 있습니다. AWS 클라우드9, 웹 브라우저에서 모든 작업을 완료할 수 있는 클라우드 기반 통합 개발 환경(IDE)입니다. 설정 지침은 다음을 참조하십시오. Cloud9 IDE 설정. AWS Cloud18.04 설정에서 Ubuntu Server 9를 플랫폼으로 선택합니다.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.그런 다음 AWS Cloud9 환경에서 더하기 기호를 선택하고 새 터미널을 엽니다.

당신은 또한 구성 AWS 명령 줄 인터페이스 (AWS CLI) 프로필. 이를 위해서는 액세스 키 ID와 비밀 액세스 키가 필요합니다. AWS 자격 증명 및 액세스 관리 (나는) 사용자 관리 권한(기존 관리형 정책 연결) 및 프로그래밍 방식 액세스 권한이 있는 계정. 다음 코드를 참조하십시오.

aws configure --profile=kubeflow

AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: us-west-2
Default output format [None]: json

# (In Cloud9, select “Cancel” and “Permanently disable” when the AWS managed temporary credentials dialog pops up)

export AWS_PROFILE=kubeflow

cloud9이 AWS 리소스를 호출하는 데 사용할 권한을 확인합니다.

aws sts get-caller-identity

아래 출력에서 ​​AWS CLI 프로필에 구성한 관리 사용자의 arn이 표시되는지 확인합니다. 이 예에서는 "kubeflow-user"입니다.

{
    "UserId": "*******",
    "Account": "********",
    "Arn": "arn:aws:iam::*******:user/kubeflow-user"
}

AWS에 Amazon EKS 및 Kubeflow 설치

AWS에 Amazon EKS 및 Kubeflow를 설치하려면 다음 단계를 완료하십시오.

  1. AWS에 Kubeflow를 배포하기 위한 환경을 설정합니다.
    #Clone the awslabs/kubeflow-manifests and the kubeflow/manifests repositories and check out the release branches of your choosing
    export KUBEFLOW_RELEASE_VERSION=v1.6.1
    export AWS_RELEASE_VERSION=v1.6.1-aws-b1.0.0
    git clone https://github.com/awslabs/kubeflow-manifests.git && cd kubeflow-manifests
    git checkout ${AWS_RELEASE_VERSION}
    git clone --branch ${KUBEFLOW_RELEASE_VERSION} https://github.com/kubeflow/manifests.git upstream
    
    export MANIFEST_DIR=$PWD

    #Install the necessary tools with the following command:
    make install-tools
    source ~/.bash_profile

  2. Terraform을 사용하여 AWS 및 관련 AWS 리소스(예: EKS)에 Kubeflow의 바닐라 버전을 배포합니다. EKS 노드 그룹에서 사용되는 EBS 볼륨은 기본적으로 암호화되지 않습니다.
    #Define the following environment variables
    
    #Region to create the cluster in
    export CLUSTER_REGION=us-west-2
    #Name of the cluster to create
    export CLUSTER_NAME=

    cd deployments/vanilla/terraform
    
    #Save the variables to a .tfvars file
    cat < sample.auto.tfvars
    cluster_name="${CLUSTER_NAME}"
    cluster_region="${CLUSTER_REGION}"
    EOF
    
    #Run the following one-click command to deploy terraform to install EKS infrastructure and Kubeflow
    make deploy

Kubeflow 권한 설정

  1. 다음을 사용하여 SageMaker, S3 및 IAM API 호출을 만들기 위해 노트북 포드 및 파이프라인 구성 요소 포드에 권한을 추가합니다. kubeflow_iam_permissions.sh 스크립트.
    export NAMESPACE=kubeflow-user-example-com
    
    wget https://raw.githubusercontent.com/aws-samples/eks-kubeflow-cloudformation-quick-start/9e46662d97e1be7edb0be7fc31166e545655636a/utils/kubeflow_iam_permissions.sh
    chmod +x kubeflow_iam_permissions.sh
    ./kubeflow_iam_permissions.sh $NAMESPACE $CLUSTER_NAME $CLUSTER_REGION

  2. 다음을 사용하여 SageMaker 교육 작업이 S3 서비스의 교육 데이터 세트에 액세스할 수 있도록 SageMaker 실행 역할을 생성합니다. sagemaker_role.sh 스크립트.
    wget https://raw.githubusercontent.com/aws-samples/eks-kubeflow-cloudformation-quick-start/9e46662d97e1be7edb0be7fc31166e545655636a/utils/sagemaker_role.sh
    chmod +x sagemaker_role.sh
    ./sagemaker_role.sh

Kubeflow 대시보드에 액세스

Kubeflow 대시보드에 액세스하려면 다음 단계를 완료하세요.

  1. 아래 명령을 실행하여 공용 인터넷에 URL을 노출하지 않고 Cloud9 환경에서 로컬로 Kubeflow 대시보드를 실행할 수 있습니다.
    # Configure Kubecontext
    $(terraform output -raw configure_kubectl)
    
    cd ${MANIFEST_DIR}
    make port-forward

  2. 왼쪽 메뉴에서 실행중인 애플리케이션 미리보기.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.
  3. Kubeflow 대시보드 모서리에 있는 아이콘을 선택하여 Chrome에서 별도의 탭으로 엽니다.
  4. 기본 자격 증명을 입력합니다(user@example.com/12341234) Kubeflow 대시보드에 로그인합니다.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.

AWS 환경에서 Kubeflow 설정

Kubeflow 대시보드에 로그인한 후 올바른 네임스페이스(kubeflow-user-example-com) 선택했습니다. Kubeflow on AWS 환경을 설정하려면 다음 단계를 완료하십시오.

  1. Kubeflow 대시보드에서 다음을 선택합니다. 노트북 탐색 창에서
  2. 왼쪽 메뉴에서 새로운 노트.
  3. 럭셔리 성함, 입력 aws-nb.
  4. 럭셔리 Jupyter Docket 이미지, 이미지를 선택 jupyter-pytorch:1.12.0-cpu-py38-ubuntu20.04-ec2-2022-09-20 (사용 가능한 최신 jupyter-pytorch DLC 이미지).
  5. 럭셔리 CPU, 입력 1.
  6. 럭셔리 메모리, 입력 5.
  7. 럭셔리 GPU, 그대로 두다 없음.
  8. 변경하지 마십시오. 작업 공간데이터 볼륨 섹션을 참조하십시오.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.
  9. 선택 Kubeflow Pipelines에 대한 액세스 허용 FBI 증오 범죄 보고서 구성 섹션을 클릭하고 시작을 선택합니다.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.
  10. 노트북이 성공적으로 생성되었는지 확인합니다(몇 분 정도 소요될 수 있음).AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.
  11. 왼쪽 메뉴에서 연결하기 JupyterLab에 로그인합니다.
  12. 다음을 입력하여 저장소 복제 https://github.com/aws-samples/eks-kubeflow-cloudformation-quick-start.git FBI 증오 범죄 보고서 리포지토리 복제 입력란입니다.
  13. 왼쪽 메뉴에서 복제.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.

분산 학습 예제 실행

Jupyter 노트북을 설정한 후 폴더에서 다음 상위 수준 단계를 사용하여 전체 데모를 실행할 수 있습니다. eks-kubeflow-cloudformation-quick-start/workshop/pytorch-distributed-training 복제된 저장소에서:

  1. PyTorch 분산 데이터 병렬(DDP) 학습 스크립트 실행 – PyTorch DDP 교육 스크립트 참조 cifar10-distributed-gpu-final.py, 다중 노드 CPU 및 GPU 클러스터에서 교육을 배포하기 위한 샘플 컨벌루션 신경망 및 논리가 포함되어 있습니다.
  2. Kubeflow 파이프라인 생성 – 노트북 실행 STEP1.0_create_pipeline_k8s_sagemaker.ipynb SageMaker에서 모델을 실행하고 배포하는 파이프라인을 생성합니다. SageMaker 라이브러리를 첫 번째 노트북 셀의 일부로 설치하고 나머지 노트북 셀을 실행하기 전에 커널을 다시 시작해야 합니다.
  3. SageMaker 엔드포인트 호출 – 노트북 실행 STEP1.1_invoke_sagemaker_endpoint.ipynb 이전 노트북에서 생성된 SageMaker 모델 추론 엔드포인트를 호출하고 테스트합니다.

다음 섹션에서는 이러한 각 단계에 대해 자세히 설명합니다.

PyTorch DDP 교육 스크립트 실행

분산 훈련의 일부로 CIFAR10 데이터 세트에서 작동하는 간단한 컨볼루션 신경망으로 생성된 분류 모델을 훈련합니다. 훈련 스크립트 cifar10-distributed-gpu-final.py 오픈 소스 라이브러리만 포함하고 GPU 장치 또는 CPU 인스턴스의 Kubernetes 및 SageMaker 교육 클러스터 모두에서 실행하도록 호환됩니다. 노트북 예제를 실행하기 전에 교육 스크립트의 몇 가지 중요한 측면을 살펴보겠습니다.

우리는을 사용하여 torch.distributed 클러스터의 노드 간 다중 프로세스 병렬 처리를 위한 PyTorch 지원 및 통신 기본 요소가 포함된 모듈:

...
import torch
import torch.distributed as dist
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.utils.data
import torch.utils.data.distributed
import torchvision
from torchvision import datasets, transforms
...

컨볼루션, 최대 풀링 및 선형 레이어의 조합을 사용하여 간단한 이미지 분류 모델을 만듭니다. relu 활성화 함수는 모델 훈련의 순방향 패스에 적용됩니다.

# Define models
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x

훈련 클러스터에 GPU가 있는 경우 스크립트는 CUDA 장치에서 훈련을 실행하고 장치 변수는 기본 CUDA 장치를 유지합니다.

device = "cuda" if torch.cuda.is_available() else "cpu"
...

PyTorch를 사용하여 분산 교육을 실행하기 전에 DistributedDataParallel 여러 노드에서 분산 처리를 실행하려면 다음을 호출하여 분산 환경을 초기화해야 합니다. init_process_group. 이것은 훈련 클러스터의 각 머신에서 초기화됩니다.

dist.init_process_group(backend=args.backend, rank=host_rank, world_size=world_size)
...

분류기 모델을 인스턴스화하고 모델을 대상 장치에 복사합니다. 분산 교육이 여러 노드에서 실행되도록 활성화된 경우 DistributedDataParallel 클래스는 모델 개체 주변의 래퍼 개체로 사용되어 여러 컴퓨터에서 동기식 분산 교육을 허용합니다. 입력 데이터는 배치 차원에서 분할되고 모델의 복제본은 각 시스템과 각 장치에 배치됩니다. 다음 코드를 참조하십시오.

model = Net().to(device)

if is_distributed:
model = torch.nn.parallel.DistributedDataParallel(model)

...

Kubeflow 파이프라인 생성

노트북은 다음을 사용합니다. Kubeflow 파이프 라인 SDK ML 워크플로 파이프라인을 지정하고 실행하기 위해 제공된 Python 패키지 세트. 이 SDK의 일부로 DSL(도메인 특정 언어) 패키지 데코레이터를 사용합니다. dsl.pipeline, 파이프라인을 반환하도록 Python 함수를 장식합니다.

Kubeflow 파이프라인은 SageMaker ACK 연산자를 사용하여 SageMaker에 교육을 제출하기 위해 SageMaker 구성 요소 V2를 사용합니다. SageMaker 모델 생성 및 모델 배포는 Boto1 기반 SageMaker 구성 요소인 SageMaker 구성 요소 V3을 사용합니다. 이 예에서는 두 구성 요소의 조합을 사용하여 선택의 유연성을 보여줍니다.

  1. 다음 코드를 사용하여 SageMaker 구성 요소를 로드합니다.
    # Loads SageMaker training components v2 for Kubeflow pipeline from the URL
    sagemaker_train_ack_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/d4aaa03035f221351ebe72fbd74fcfccaf25bb66/components/aws/sagemaker/TrainingJob/component.yaml')
    
    # Loads SageMaker components v1 for Kubeflow pipeline from the URL
    sagemaker_model_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/cb36f87b727df0578f4c1e3fe9c24a30bb59e5a2/components/aws/sagemaker/model/component.yaml')
    sagemaker_deploy_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/cb36f87b727df0578f4c1e3fe9c24a30bb59e5a2/components/aws/sagemaker/deploy/component.yaml')

    다음 코드에서는 두 가지를 사용하여 SageMaker 분산 교육을 실행하는 Kubeflow 파이프라인을 생성합니다. ml.p3.2xlarge 인스턴스:

    # Create Kubeflow Pipeline using Amazon SageMaker Service
    @dsl.pipeline(name="PyTorch Training pipeline", description="Sample training job test")
    def pytorch_cnn_pipeline(region=target_region,
    train_image=aws_dlc_sagemaker_train_image,
    serving_image=aws_dlc_sagemaker_serving_image,
    learning_rate='0.01',
    pytorch_backend='gloo',
    training_job_name=pytorch_distributed_jobname,
    instance_type='ml.p3.2xlarge',
    instance_count='2',
    network_isolation='False',
    traffic_encryption='False',
    ):
    
    # Step to run training on SageMaker using SageMaker Components V2 for Pipeline.
    training = sagemaker_train_ack_op(
    region=region,
    algorithm_specification=(f'{{ '
    f'"trainingImage": "{train_image}",'
    '"trainingInputMode": "File"'
    f'}}'),
    training_job_name=training_job_name,
    hyper_parameters=(f'{{ '
    f'"backend": "{pytorch_backend}",'
    '"batch-size": "64",'
    '"epochs": "10",'
    f'"lr": "{learning_rate}",'
    '"model-type": "custom",'
    '"sagemaker_container_log_level": "20",'
    '"sagemaker_program": "cifar10-distributed-gpu-final.py",'
    f'"sagemaker_region": "{region}",'
    f'"sagemaker_submit_directory": "{source_s3}"'
    f'}}'),
    resource_config=(f'{{ '
    f'"instanceType": "{instance_type}",'
    f'"instanceCount": {instance_count},'
    '"volumeSizeInGB": 50'
    f'}}'),
    input_data_config=training_input(datasets),
    output_data_config=training_output(bucket_name),
    enable_network_isolation=network_isolation,
    enable_inter_container_traffic_encryption=traffic_encryption,
    role_arn=role,
    stopping_condition={"maxRuntimeInSeconds": 3600}
    )
    
    model_artifact_url = get_s3_model_artifact_op(
    training.outputs["model_artifacts"]
    ).output
    
    # This step creates SageMaker Model which refers to model artifacts and inference script to deserialize the input image
    create_model = sagemaker_model_op(
    region=region,
    model_name=training_job_name,
    image=serving_image,
    model_artifact_url=model_artifact_url,
    network_isolation=network_isolation,
    environment=(f'{{ '
    '"SAGEMAKER_CONTAINER_LOG_LEVEL": "20",'
    '"SAGEMAKER_PROGRAM": "inference.py",'
    f'"SAGEMAKER_REGION": "{region}",'
    f'"SAGEMAKER_SUBMIT_DIRECTORY": "{model_artifact_url}"'
    f'}}'),
    role=role
    )
    
    # This step creates SageMaker Endpoint which will be called to run inference
    prediction = sagemaker_deploy_op(
    region=region,
    model_name_1=create_model.output,
    instance_type_1='ml.c5.xlarge'
    )
    
    #Disable pipeline cache
    training.execution_options.caching_strategy.max_cache_staleness = "P0D"

    파이프라인이 정의되면 Kubeflow Pipelines SDK를 사용하여 파이프라인을 Argo YAML 사양으로 컴파일할 수 있습니다. kfp.compiler 패키지. 파이프라인 서비스 엔드포인트를 호출하고 노트북에서 바로 적절한 인증 헤더를 전달하는 Kubeflow Pipelines SDK 클라이언트를 사용하여 이 파이프라인을 실행할 수 있습니다. 다음 코드를 참조하십시오.

    # DSL Compiler that compiles pipeline functions into workflow yaml.
    kfp.compiler.Compiler().compile(pytorch_cnn_pipeline, "pytorch_cnn_pipeline.yaml")
    
    # Connect to Kubeflow Pipelines using the Kubeflow Pipelines SDK client
    client = kfp.Client()
    
    experiment = client.create_experiment(name="ml_workflow")
    
    # Run a specified pipeline
    my_run = client.run_pipeline(experiment.id, "pytorch_cnn_pipeline", "pytorch_cnn_pipeline.yaml")
    
    # Please click “Run details” link generated below this cell to view your pipeline. You can click every pipeline step to see logs.

  2. 선택 실행 세부 정보 Kubeflow 파이프라인을 보려면 마지막 셀 아래의 링크를 클릭하십시오. 다음 스크린샷은 SageMaker 교육 및 배포 구성 요소에 대한 파이프라인 세부 정보를 보여줍니다.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.
  3. 교육 작업 단계를 선택하고 로그 탭에서 CloudWatch 로그 링크를 선택하여 SageMaker 로그에 액세스합니다.
    다음 스크린샷은 3.2개의 ml.pXNUMXxlarge 인스턴스 각각에 대한 CloudWatch 로그를 보여줍니다.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.
  4. 로그를 보려면 그룹을 선택하십시오.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.
  5. 다음을 선택하여 SageMaker 엔드포인트를 캡처합니다. Sagemaker – 모델 배포 단계 및 복사 endpoint_name 출력 아티팩트 값.AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.

SageMaker 엔드포인트 호출

노트북 STEP1.1_invoke_sagemaker_endpoint.ipynb 이전 단계에서 생성된 SageMaker 추론 엔드포인트를 호출합니다. 끝점 이름을 업데이트해야 합니다.

# Invoke SageMaker Endpoint. * Ensure you update the endpoint
# You can grab the SageMaker Endpoint name by either 1) going to the pipeline visualization of Kubeflow console and click the component for deployment, or 2) Go to SageMaker console and go to the list of endpoints, and then substitute the name to the EndpointName='...' in this cell.

endpointName=''

response = client.invoke_endpoint(EndpointName=endpointName,
ContentType='application/x-image',
Body=payload)

pred = json.loads(response['Body'].read().decode())

output_vector_list=pred['score']

# Get outout vector of 10 classes
output_vector = output_vector_list[0]

# Find the class with highest probability
max=output_vector[0]
index = 0
for i in range(1,len(output_vector)):
if output_vector[i] > max:
max = output_vector[i]
index = i

print(f'Index of the maximum value is : {index}')

labels = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']

print(labels[index])

정리

자원을 정리하려면 다음 단계를 완료하십시오.

  1. AWS Cloud9에서 다음 명령을 실행하여 AWS 리소스를 삭제합니다.
    cd ${MANIFEST_DIR}/deployments/vanilla/terraform
    make delete

  2. IAM 역할 삭제 "sagemakerrole” 다음 AWS CLI 명령 사용:
    aws iam detach-role-policy --role-name sagemakerrole --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
    aws iam detach-role-policy --role-name sagemakerrole --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
    aws iam delete-role --role-name sagemakerrole

  3. 다음 AWS CLI 명령을 사용하여 SageMaker 엔드포인트를 삭제합니다.
    aws sagemaker delete-endpoint --endpoint-name  --region us-west-2

요약

이 게시물에서는 엔터프라이즈급 AI 및 ML 사용 사례의 요구 사항을 해결하기 위해 기본 AWS 관리 서비스 통합을 통해 AWS 1.6.1의 Kubeflow가 제공하는 가치를 강조했습니다. 여러 배포 옵션 중에서 선택하여 Terraform, Kustomize 또는 Helm을 사용하여 다양한 서비스 통합으로 AWS에 Kubeflow를 설치할 수 있습니다. 이 게시물의 사용 사례는 SageMaker 관리 교육 클러스터를 사용하여 이미지 분류 모델에 대한 분산 교육을 실행하고 모델 배포를 위한 SageMaker 엔드포인트를 사용하는 SageMaker와의 Kubeflow 통합을 보여주었습니다.

우리는 또한 샘플 파이프라인 예 최신 SageMaker 구성 요소를 사용합니다. Kubeflow 대시보드에서 직접 실행할 수 있습니다. 이 파이프라인에는 아마존 S3 데이터SageMaker 실행 IAM 역할 필수 입력으로.

AWS에서 Kubeflow를 시작하려면 다음에서 사용 가능한 AWS 통합 배포 옵션을 참조하십시오. AWS의 Kubeflow. 당신은 따라갈 수 있습니다 AWS 랩 리포지토리 Kubeflow에 대한 모든 AWS 기여를 추적합니다. 당신은 또한 우리를 찾을 수 있습니다 Kubeflow #AWS Slack 채널; 귀하의 피드백은 Kubeflow 프로젝트에 기여할 다음 기능의 우선 순위를 정하는 데 도움이 됩니다.


저자 소개

AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.칸월짓 쿠르미 Amazon Web Services의 수석 솔루션 아키텍트입니다. 그는 AWS 고객과 협력하여 AWS를 사용할 때 솔루션의 가치를 향상시키는 데 도움이 되는 지침과 기술 지원을 제공합니다. Kanwaljit은 컨테이너화 및 기계 학습 애플리케이션으로 고객을 돕는 것을 전문으로 합니다.

AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.카르티크 칼라마디 Amazon AI의 소프트웨어 개발 엔지니어입니다. 현재 Kubeflow 및 k8s용 AWS SageMaker 컨트롤러와 같은 기계 학습 Kubernetes 오픈 소스 프로젝트에 집중하고 있습니다. 여가 시간에는 Unity 엔진을 사용하여 PC 게임을 하고 VR을 만지작거리는 것을 좋아합니다.

AWS 배포 PlatoBlockchain Data Intelligence에서 클릭 한 번으로 Kubeflow를 사용하여 Amazon EKS 및 Amazon SageMaker에서 하이브리드 ML 워크플로를 활성화합니다. 수직 검색. 일체 포함.라훌 카르세 Amazon Web Services의 소프트웨어 개발 엔지니어입니다. 그의 작업은 AWS 서비스를 컨테이너화된 오픈 소스 ML Ops 플랫폼과 통합하여 확장성, 안정성 및 보안을 개선하는 데 중점을 두고 있습니다. 기능에 대한 고객 요청에 집중하는 것 외에도 Rahul은 현장에서 최신 기술 개발을 실험하는 것을 즐깁니다.

타임 스탬프 :

더보기 AWS 기계 학습