기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Kubeflow 파이프라인 설치
Kubeflow 파이프라인(KFP)
기존 Amazon Elastic Kubernetes Service(Amazon EKS)에 Kubeflow 파이프라인(KFP)을 배포하거나 새 Amazon EKS 클러스터를 생성할 수 있습니다. 게이트웨이 노드를 사용하여 클러스터와 상호 작용하세요. 게이트웨이 노드는 로컬 머신 또는 Amazon EC2 인스턴스일 수 있습니다.
다음 섹션에서는 이러한 리소스를 설정하고 구성하는 단계를 안내합니다.
설치 옵션 선택
Kubeflow Pipelines은 AWS 또는 독립 실행형 설치에서 Kubeflow의 전체 배포의 핵심 구성 요소로 사용할 수 있습니다.
사용 사례에 해당하는 옵션을 선택합니다.
-
Kubeflow 파이프라인 외에 다른 Kubeflow 구성 요소를 사용하려면 전체 Kubeflow의AWS 배포
배포를 선택합니다. -
Kubeflow의 다른 구성 요소 없이 Kubeflow 파이프라인을 사용하려면 Kubeflow 파이프라인을 독립형으로 설치해야 합니다.
에 Kubeflow의 전체 릴리스를 설치하려면 배포 가이드의 Kubeflow에서 바닐라 AWS
이 섹션에서는 사용자에게 역할을 생성하고 역할에 대한 정책을 정의할 권한이 있다고 가정합니다.
게이트웨이 노드 설정
로컬 머신 또는 Amazon EC2 인스턴스를 게이트웨이 노드로 사용할 수 있습니다. 게이트웨이 노드는 Amazon EKS 클러스터를 생성하고 Kubeflow 파이프라인 UI에 액세스하는 데 사용됩니다.
노드를 새로 설정하려면 다음 단계를 완료합니다.
-
게이트웨이 노드를 생성합니다.
기존 Amazon EC2 인스턴스를 사용하거나 DLAMI 시작 및 구성의 단계를 사용하여 최신 Ubuntu 18.04 DLAMI 버전으로 새 인스턴스를 생성할 수 있습니다.
-
IAM 역할을 생성하여 게이트웨이 노드에 AWS 리소스에 대한 액세스 권한을 부여합니다.
CloudWatch,, IAM, Amazon EC2, Amazon S3, Amazon EKS 리소스에 대한 권한이 있는 AWS CloudFormation IAM 역할을 생성합니다.
다음 정책을 IAM 역할에 연결합니다.
-
CloudWatchLogsFullAccess
-
IAMFullAccess
-
AmazonS3FullAccess
-
AmazonEC2FullAccess
-
AmazonEKSAdminPolicy(Amazon EKS ID 기반 정책 예시의 스키마를 사용하여 이 정책 생성)
IAM 역할에 IAM 권한 추가에 대한 자세한 내용은 IAM 자격 증명 권한 추가 및 제거를 참조하세요.
-
-
다음 도구 및 클라이언트를 설치합니다.
Amazon EKS 클러스터 및 KFP 사용자 인터페이스(UI) 에 액세스할 수 있도록 게이트웨이 노드에 다음 도구 및 리소스를 설치하고 구성합니다.
-
AWS CLI: AWS 서비스 작업을 위한 명령줄 도구입니다. AWS CLI 구성 정보는 AWS CLI구성을 참조하세요.
-
aws-iam-Authenticator 버전 0.1.31 이상: AWS IAM 자격 증명을 사용하여 Kubernetes 클러스터에 인증하는 도구입니다.
-
eksctl
버전 0.15 이상: Amazon EKS 클러스터 작업을 위한 명령줄 도구입니다. -
kubectl
: Kubernetes 클러스터 작업을 위한 명령줄 도구입니다. 버전은 마이너 버전이 하나까지만 차이나는 Kubernetes 버전과 일치해야 합니다. -
pip install boto3
-
Amazon EKS 클러스터 설정
-
기존 Amazon EKS 클러스터가 없는 경우 게이트웨이 노드의 명령줄에서 다음 단계를 실행하고, 그렇지 않으면 이 단계를 건너뜁니다.
-
다음 명령을 실행하여 버전 1.17 이상의 Amazon EKS 클러스터를 생성합니다.
<clustername>
를 클러스터 이름으로 바꿉니다.eksctl create cluster --name
<clustername>
--region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1 -
클러스터 생성이 완료되면 클러스터의 노드를 나열하여 클러스터에 액세스할 수 있는지 확인합니다.
kubectl get nodes
-
-
다음 명령을 사용하여 현재
kubectl
컨텍스트가 클러스터를 가리키는지 확인합니다. 현재 컨텍스트는 출력에 별표(*)로 표시됩니다.kubectl config get-contexts CURRENT NAME CLUSTER *
<username>
@<clustername>
.us-east-1.eksctl.io<clustername>
.us-east-1.eksctl.io -
원하는 클러스터가 현재 기본값으로 구성되지 않은 경우 다음 명령을 사용하여 기본값을 업데이트합니다.
aws eks update-kubeconfig --name
<clustername>
--region us-east-1
Kubeflow 파이프라인 설치
게이트웨이 노드의 터미널에서 다음 단계를 실행하여 클러스터에 Kubeflow 파이프라인을 설치합니다.
-
모든 cert-manager 구성 요소
를 설치합니다. kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
-
Kubeflow 파이프라인 설치
export PIPELINE_VERSION=2.0.0-alpha.5 kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/cluster-scoped-resources?ref=$KFP_VERSION" kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/dev?ref=$KFP_VERSION"
-
Kubeflow 파이프라인 서비스 및 기타 관련 리소스가 실행 중인지 확인합니다.
kubectl -n kubeflow get all | grep pipeline
출력은 다음과 같아야 합니다.
pod/ml-pipeline-6b88c67994-kdtjv 1/1 Running 0 2d pod/ml-pipeline-persistenceagent-64d74dfdbf-66stk 1/1 Running 0 2d pod/ml-pipeline-scheduledworkflow-65bdf46db7-5x9qj 1/1 Running 0 2d pod/ml-pipeline-ui-66cc4cffb6-cmsdb 1/1 Running 0 2d pod/ml-pipeline-viewer-crd-6db65ccc4-wqlzj 1/1 Running 0 2d pod/ml-pipeline-visualizationserver-9c47576f4-bqmx4 1/1 Running 0 2d service/ml-pipeline ClusterIP 10.100.170.170 <none> 8888/TCP,8887/TCP 2d service/ml-pipeline-ui ClusterIP 10.100.38.71 <none> 80/TCP 2d service/ml-pipeline-visualizationserver ClusterIP 10.100.61.47 <none> 8888/TCP 2d deployment.apps/ml-pipeline 1/1 1 1 2d deployment.apps/ml-pipeline-persistenceagent 1/1 1 1 2d deployment.apps/ml-pipeline-scheduledworkflow 1/1 1 1 2d deployment.apps/ml-pipeline-ui 1/1 1 1 2d deployment.apps/ml-pipeline-viewer-crd 1/1 1 1 2d deployment.apps/ml-pipeline-visualizationserver 1/1 1 1 2d replicaset.apps/ml-pipeline-6b88c67994 1 1 1 2d replicaset.apps/ml-pipeline-persistenceagent-64d74dfdbf 1 1 1 2d replicaset.apps/ml-pipeline-scheduledworkflow-65bdf46db7 1 1 1 2d replicaset.apps/ml-pipeline-ui-66cc4cffb6 1 1 1 2d replicaset.apps/ml-pipeline-viewer-crd-6db65ccc4 1 1 1 2d replicaset.apps/ml-pipeline-visualizationserver-9c47576f4 1 1 1 2d
SageMaker AI에 액세스하도록 파이프라인 권한 구성
이 섹션에서는 Kubeflow 파이프라인 포드에 SageMaker AI 서비스에 대한 액세스 권한을 부여하는 IAM 실행 역할을 생성합니다.
SageMaker AI 구성 요소 버전 2에 대한 구성
Kubeflow 파이프라인용 SageMaker AI 구성 요소 버전 2를 실행하려면 Kubernetes용 SageMaker AI 운영자
중요
Kubeflow 파이프라인 독립 실행형 배포를 사용하는 경우 이 섹션을 따르세요. Kubeflow 버전 1.6.0-aws-b1.0.0 이상의 AWS 배포를 사용하는 경우 SageMaker AI 구성 요소 버전 2가 이미 설정되어 있습니다.
-
SageMaker AI 구성 요소 버전 2를 사용하려면 Kubernetes용 SageMaker AI Operator를 설치합니다.
ACK SageMaker AI 컨트롤러를 사용한 Machine Learning 자습
서의 설정 섹션을 따릅니다. -
Kubeflow 파이프라인 포드에서 사용하는 실행 역할(서비스 계정)에 대한 RBAC 권한을 구성합니다. Kubeflow 파이프라인 독립형 배포에서는 파이프라인 실행이
pipeline-runner
서비스 계정을 사용하여 네임스페이스kubeflow
에서 실행됩니다.-
서비스 계정에 SageMaker AI 사용자 지정 리소스를 관리할 수 있는 권한을 부여하는 RoleBinding
을 생성합니다. cat > manage_sagemaker_cr.yaml <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: manage-sagemaker-cr namespace: kubeflow subjects: - kind: ServiceAccount name: pipeline-runner namespace: kubeflow roleRef: kind: ClusterRole name: ack-sagemaker-controller apiGroup: rbac.authorization.k8s.io EOF
kubectl apply -f manage_sagemaker_cr.yaml
-
다음을 실행하여 롤바인딩이 생성되었는지 확인합니다.
kubectl get rolebinding manage-sagemaker-cr -n kubeflow -o yaml
-
SageMaker AI 구성 요소 버전 1에 대한 구성
Kubeflow 파이프라인용 SageMaker AI 구성 요소 버전 1을 실행하려면 Kubeflow 파이프라인 포드가 SageMaker AI에 액세스해야 합니다.
중요
AWS 배포 시 전체 Kubeflow를 사용하는지 아니면 Kubeflow Pilepines를 독립적으로 사용하는지이 섹션을 따르세요.
Kubeflow 파이프라인 포드에 SageMaker AI에 대한 액세스 권한을 부여하는 IAM 실행 역할을 생성하려면 다음 단계를 따르세요.
-
클러스터 이름(예: my-cluster-name) 및 클러스터 리전(예: us-east-1)을 내보냅니다.
export CLUSTER_NAME=
my-cluster-name
export CLUSTER_REGION=us-east-1
-
설치에 따라 네임스페이스와 서비스 계정 이름을 내보냅니다.
-
AWS 설치 시 전체 Kubeflow의 경우 프로필
namespace
(예: kubeflow-user-example-com)과 기본 편집기를 서비스 계정으로 내보냅니다.export NAMESPACE=
kubeflow-user-example-com
export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor -
독립형 파이프라인 배포의 경우 kubeflow를
namespace
로, pipeline-runner를 서비스 계정으로 내보냅니다.export NAMESPACE=kubeflow export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
-
-
다음 명령을 사용하여 Amazon EKS용 IAM OIDC 공급자를 생성합니다.
eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${CLUSTER_REGION} --approve
-
KFP 포드가 AWS 서비스에 액세스할 수 있도록 IAM 실행 역할을 생성합니다(SageMaker AI, CloudWatch).
eksctl create iamserviceaccount \ --name ${KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT} \ --namespace ${NAMESPACE} --cluster ${CLUSTER_NAME} \ --region ${CLUSTER_REGION} \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \ --override-existing-serviceaccounts \ --approve
SageMaker AI 구성 요소 버전 1에 액세스하도록 파이프라인 권한이 구성되면 Kubeflow on AWS 설명서의 Kubeflow
KFP UI(Kubeflow 대시보드) 액세스
Kubeflow 파이프라인 UI는 클러스터에서 실험, 작업 및 실행을 관리하고 추적하는 데 사용됩니다. 게이트웨이 노드에서 Kubeflow 파이프라인 UI에 액세스하는 방법에 대한 지침은 이 섹션의 배포 옵션에 적용되는 단계를 따르세요.
AWS 웹 사이트의 Kubeflow
포트 포워딩을 사용하면 다음 단계에 따라 게이트웨이 노드에서 Kubeflow 파이프라인 UI에 액세스할 수 있습니다.
KFP UI 서비스로의 포트 포워딩 설정
게이트웨이 노드의 명령줄에서 다음 명령을 실행합니다.
-
다음 명령을 사용하여 KFP UI 서비스가 실행 중인지 확인합니다.
kubectl -n kubeflow get service ml-pipeline-ui NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ml-pipeline-ui ClusterIP 10.100.38.71 <none> 80/TCP 2d22h
-
다음 명령을 실행하여 KFP UI 서비스에 포트 포워딩을 설정합니다. 그러면 KFP UI가 게이트웨이 노드의 포트 8080으로 전달되고 브라우저에서 KFP UI에 액세스할 수 있습니다.
kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80
활동이 없으면 원격 시스템에서 포워딩되는 포트가 끊깁니다. 대시보드에서 로그나 업데이트를 가져올 수 없는 경우 이 명령을 다시 실행하세요. 명령에서 오류가 반환되는 경우 사용하려는 포트에서 이미 실행 중인 프로세스가 없는지 확인합니다.
KFP UI 서비스 액세스
KFP UI에 액세스하는 방법은 게이트웨이 노드 유형에 따라 다릅니다.
-
로컬 머신을 게이트웨이 노드로 사용:
-
다음과 같이 브라우저에서 대시보드에 액세스합니다.
http://localhost:8080
-
파이프라인을 선택하여 파이프라인 UI에 액세스합니다.
-
-
Amazon EC2 인스턴스를 게이트웨이 노드로 사용:
-
로컬 머신의 브라우저에서 Kubeflow 대시보드에 액세스하려면 Amazon EC2 인스턴스에 SSH 터널을 설정해야 합니다.
로컬 머신의 새 터미널 세션에서 다음을 실행합니다.
<public-DNS-of-gateway-node>
를 Amazon EC2 콘솔에 있는 인스턴스의 IP 주소로 바꿉니다. 공개 DNS를 사용할 수도 있습니다.<path_to_key>
를 게이트웨이 노드에 액세스하는 데 사용되는 pem 키 경로로 바꿉니다.public_DNS_address=
<public-DNS-of-gateway-node>
key=<path_to_key>
on Ubuntu: ssh -i ${key} -L 9000:localhost:8080 ubuntu@${public_DNS_address} or on Amazon Linux: ssh -i ${key} -L 9000:localhost:8080 ec2-user@${public_DNS_address} -
브라우저에서 대시보드에 액세스합니다.
http://localhost:9000
-
파이프라인을 선택하여 KFP UI에 액세스합니다.
-
(선택 사항) SageMaker AI 노트북 인스턴스에 Amazon EKS에 대한 액세스 권한을 부여하고 노트북에서 KFP 파이프라인을 실행합니다.
SageMaker 노트북은 Jupyter Notebook 애플리케이션을 실행하는 완전 관리형 Amazon EC2 컴퓨팅 인스턴스입니다. 노트북 인스턴스를 사용하여 Jupyter notebook을 만들고 관리한 다음 AWS SDK for Python (Boto3) 또는 KFP CLI를 사용하여 KFP 파이프라인을 정의, 컴파일, 배포 및 실행할 수 있습니다.
-
SageMaker 노트북 인스턴스 생성의 단계에 따라 노트북 인스턴스를 생성한 다음
S3FullAccess
정책을 해당 IAM 실행 역할에 연결합니다. -
게이트웨이 노드의 명령줄에서 다음 명령을 실행하여 생성한 노트북 인스턴스의 IAM 역할 ARN을 검색합니다.
<instance-name>
을 인스턴스의 이름으로 바꿉니다.aws sagemaker describe-notebook-instance --notebook-instance-name
<instance-name>
--region<region>
--output text --query 'RoleArn'이 명령은 IAM 역할 ARN을
arn:aws:iam::<account-id>:role/<role-name>
형식으로 출력합니다. ARN을 기록해 둡니다. -
이 명령을 실행하여 다음 정책(Amazon SageMakerFullAccess, AmazonSWorkerNodePolicy, AmazonS3FullAccess)을 이 IAM 역할에 연결합니다.
<role-name>
을 ARN의<role-name>
으로 바꿉니다.aws iam attach-role-policy --role-name
<role-name>
--policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess aws iam attach-role-policy --role-name<role-name>
--policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy aws iam attach-role-policy --role-name<role-name>
--policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess -
Amazon EKS 클러스터는 IAM 역할을 사용하여 클러스터에 대한 액세스를 제어합니다. 규칙은
aws-auth
라는 구성 맵에 구현됩니다.eksctl
은aws-auth
구성 맵을 읽고 편집하는 명령을 제공합니다. 클러스터에 액세스할 수 있는 사용자만 이 구성 맵을 편집할 수 있습니다.system:masters
는 클러스터에 대한 수퍼 사용자 권한이 있는 기본 사용자 그룹 중 하나입니다. 이 그룹에 사용자를 추가하거나 더 제한적인 권한을 가진 그룹을 생성합니다. -
다음 명령을 실행하여 클러스터에 역할을 바인딩합니다.
<IAM-Role-arn>
을 IAM 역할의 ARN으로 바꿉니다.<your_username>
은 고유한 사용자 이름이 될 수 있습니다.eksctl create iamidentitymapping \ --cluster
<cluster-name>
\ --arn<IAM-Role-arn>
\ --group system:masters \ --username<your-username>
\ --region<region>
-
SageMaker AI 인스턴스에서 Jupyter 노트북을 열고 다음 명령을 실행하여 클러스터에 액세스할 수 있는지 확인합니다.
aws eks --region
<region>
update-kubeconfig --name<cluster-name>
kubectl -n kubeflow get all | grep pipeline