SageMaker 설정하기
W&B Launch를 사용하여 제공되거나 사용자 지정 알고리즘을 사용하여 기계학습 모델을 트레이닝하기 위해 Amazon SageMaker에 런치 작업을 제출할 수 있습니다. SageMaker는 컴퓨팅 리소스를 생성하고 해제하는 작업을 관리하므로, EKS 클러스터가 없는 팀에게 좋은 선택이 될 수 있습니다.
Amazon SageMaker에 연결된 W&B Launch 큐로 전송된 런치 작업은 CreateTrainingJob API를 사용하여 SageMaker 트레이닝 작업으로 실행됩니다. CreateTrainingJob
API에 전송할 인수를 제어하려면 런치 큐 설정을 사용하십시오.
Amazon SageMaker는 트레이닝 작업을 실행하기 위해 도커 이미지를 사용합니다. SageMaker가 가져오는 이미지는 Amazon Elastic Container Registry(ECR)에 저장되어야 합니다. 이는 트레이닝에 사용하는 이미지가 ECR에 저장되어야 함을 의미합니다.
이 가이드는 SageMaker 트레이닝 작업을 실행하는 방법을 보여줍니다. Amazon SageMaker에서 모델을 추론에 배포하는 방법에 대한 정보는 이 예제 런치 작업을 참조하십시오.
사전 요구사항
시작하기 전에 다음 사전 요구사항을 충족하는지 확인하십시오:
- 런치 에이전트가 도커 이미지를 대신 빌드하게 할지 결정합니다.
- AWS 리소스를 설정하고 S3, ECR 및 SageMaker IAM 역할에 대한 정보를 수집합니다.
- 런치 에이전트를 위한 IAM 역할을 생성합니다.
런치 에이전트가 도커 이미지를 빌드하게 할지 결정하기
W&B Launch 에이전트가 도커 이미지를 대신 빌드하게 할지 결정하십시오. 선택할 수 있는 두 가지 옵션이 있습니다:
- 런치 에이전트가 도커 이미지를 빌드하고, Amazon ECR에 이미지를 푸시하며, SageMaker 트레이닝 작업을 대신 제출하도록 허용합니다. 이 옵션은 트레이닝 코드를 빠르게 반복하는 ML 엔지니어에게 일부 단순성을 제공할 수 있습니다.
- 런치 에이전트가 트레이닝 또는 추론 스크립트가 포함된 기존 도커 이미지를 사용합니다. 이 옵션은 기존 CI 시스템과 잘 작동합니다. 이 옵션을 선택한 경우, 도커 이미지를 Amazon ECR에 있는 컨테이너 레지스트리에 수동으로 업로드해야 합니다.
AWS 리소스 설정하기
선호하는 AWS 리전에서 다음 AWS 리소스가 구성되어 있는지 확인하십시오:
- 컨테이너 이미지를 저장하기 위한 ECR 리포지토리.
- SageMaker 트레이닝 작업의 입력 및 출력을 저장하기 위한 하나 이상의 S3 버킷.
- SageMaker가 트레이닝 작업을 실행하고 Amazon ECR 및 Amazon S3와 상호 작용할 수 있도록 허용하는 Amazon SageMaker용 IAM 역할.
이 리소스의 ARN을 기록해 두십시오. SageMaker용 큐 구성을 정의할 때 ARN이 필요합니다.
런치 에이전트를 위한 IAM 역할 생성하기
런치 에이전트가 Amazon SageMaker 트레이닝 작업을 생성할 수 있도록 권한이 필요합니다. 아래 절차를 따라 IAM 역할을 생성하십시오:
- AWS의 IAM 화면에서 새 역할을 생성합니다.
- 신뢰할 수 있는 엔터티에서 AWS 계정을 선택합니다(또는 조직의 정책에 적합한 다른 옵션 선택).
- 권한 화면을 스크롤하고 다음을 클릭합니다.
- 역할에 이름과 설명을 지정합니다.
- 역할 생성을 선택합니다.
- 권한 추가에서 인라인 정책 생성을 선택합니다.
- JSON 정책 편집기로 전환한 다음, 다음 정책을 붙여넣습니다.
<>
로 묶인 값은 자신의 값으로 대체하십시오:
- 에이전트가 도커 이미지를 빌드하고 제출
- 에이전트가 사전 빌드된 도커 이미지를 제출
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:DescribeLogStreams",
"SageMaker:AddTags",
"SageMaker:CreateTrainingJob",
"SageMaker:DescribeTrainingJob"
],
"Resource": "arn:aws:SageMaker:<region>:<account-id>:*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<account-id>:role/<큐-설정에서-RoleArn>"
},
{
"Effect": "Allow",
"Action": "kms:CreateGrant",
"Resource": "<KMS-키-ARN>",
"Condition": {
"StringEquals": {
"kms:ViaService": "SageMaker.<region>.amazonaws.com",
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:DescribeLogStreams",
"SageMaker:AddTags",
"SageMaker:CreateTrainingJob",
"SageMaker:DescribeTrainingJob"
],
"Resource": "arn:aws:SageMaker:<region>:<account-id>:*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<account-id>:role/<큐-설정에서-RoleArn>"
},
{
"Effect": "Allow",
"Action": [
"ecr:CreateRepository",
"ecr:UploadLayerPart",
"ecr:PutImage",
"ecr:CompleteLayerUpload",
"ecr:InitiateLayerUpload",
"ecr:DescribeRepositories",
"ecr:DescribeImages",
"ecr:BatchCheckLayerAvailability",
"ecr:BatchDeleteImage"
],
"Resource": "arn:aws:ecr:<region>:<account-id>:repository/<리포지토리>"
},
{
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "kms:CreateGrant",
"Resource": "<KMS-키-ARN>",
"Condition": {
"StringEquals": {
"kms:ViaService": "SageMaker.<region>.amazonaws.com",
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
- 다음을 클릭합니다.
- 역할의 ARN을 기록해 둡니다. 런치 에이전트를 설정할 때 ARN을 지정해야 합니다.
IAM 역할을 생성하는 방법에 대한 자세한 내용은 AWS Identity and Access Management Documentation을 참조하십시오.
- 이미지를 빌드하려는 경우 추가 필요한 권한에 대해서는 고급 에이전트 설정을 참조하십시오.
- SageMaker 큐에 연결된 ResourceConfig에 VolumeKmsKeyId가 지정되어 있고 관련 역할에 이 작업을 허용하는 정책이 없는 경우에만
kms:CreateGrant
권한이 필요합니다.
SageMaker를 위한 큐 구성하기
다음으로, W&B 앱에서 SageMaker를 컴퓨팅 리소스로 사용하는 큐를 생성하십시오:
- Launch App으로 이동합니다.
- 큐 생성 버튼을 클릭합니다.
- 큐를 생성할 엔터티를 선택합니다.
- 이름 필드에 큐의 이름을 제공합니다.
- 리소스로 SageMaker를 선택합니다.
- 설정 필드에서 SageMaker 작업에 대한 정보를 제공합니다. 기본적으로 W&B는 YAML 및 JSON
CreateTrainingJob
요청 본문을 채웁니다:
{
"RoleArn": "<필수>",
"ResourceConfig": {
"InstanceType": "ml.m4.xlarge",
"InstanceCount": 1,
"VolumeSizeInGB": 2
},
"OutputDataConfig": {
"S3OutputPath": "<필수>"
},
"StoppingCondition": {
"MaxRuntimeInSeconds": 3600
}
}
최소한 다음을 지정해야 합니다:
RoleArn
: SageMaker 실행 IAM 역할의 ARN(사전 요구사항 참조). 런치 에이전트 IAM 역할과 혼동하지 마십시오.OutputDataConfig.S3OutputPath
: SageMaker 출력이 저장될 Amazon S3 URI.ResourceConfig
: 리소스 구성의 필수 사양. 리소스 구성 옵션은 여기에 설명되어 있습니다.StoppingCondition
: 트레이닝 작업의 중지 조건 사양이 필요합니다. 옵션은 여기에 설명되어 있습니다.
- 큐 생성 버튼을 클릭합니다.
런치 에이전트 설정하기
다음 섹션에서는 에이전트를 배포할 위치와 해당 위치에 따라 에이전트를 어떻게 구성해야 하는지 설명합니다.
Amazon SageMaker 큐에 대한 런치 에이전트 배포에는 여러 옵션이 있습니다: 로컬 기계, EC2 인스턴스 또는 EKS 클러스터에 배포할 수 있습니다. 에이전트를 배포하는 위치에 따라 런치 에이전트를 적절하게 구성합니다.
런치 에이전트를 실행할 위치 결정하기
프로덕션 워크로드와 이미 EKS 클러스터를 보유한 고객의 경우, 이 Helm 차트를 사용하여 EKS 클러스터에 런치 에이전트를 배포하는 것이 W&B에서 권장합니다.
현재 EKS 클러스터가 없는 프로덕션 워크로드의 경우, EC2 인스턴스가 좋은 옵션일 수 있습니다. 런치 에이전트 인스턴스가 항상 실행되지만, t2.micro
크기의 EC2 인스턴스는 비교적 저렴하므로 에이전트에는 그 이상이 필요하지 않습니다.
실험적이거나 개인적인 사용 사례의 경우, 로컬 기계에서 런치 에이전트를 실행하는 것이 시작하는 데 빠른 방법일 수 있습니다.
사용 사례에 따라 다음 탭의 지침을 따라 런치 에이전트를 올바르게 구성하십시오:
- EKS
- EC2
- 로컬 기계
W&B는 W&B 관리 helm 차트를 사용하여 EKS 클러스터에 에이전트를 설치하는 것을 강력히 권장합니다.
Amazon EC2 대시보드로 이동하여 다음 단계를 완료하십시오:
- 인스턴스 시작을 클릭합니다.
- 이름 필드에 이름을 제공합니다. 선택적으로 태그를 추가합니다.
- 인스턴스 유형에서 EC2 컨테이너에 대한 인스턴스 유형을 선택합니다. 1vCPU와 1GiB의 메모리(예: t2.micro) 이상이 필요하지 않습니다.
- 키 쌍(로그인) 필드 내에서 조직에 대한 키 쌍을 생성합니다. 이 키 쌍을 사용하여 나중에 SSH 클라이언트로 EC2 인스턴스에 연결합니다.
- 네트워크 설정 내에서 조직에 적합한 보안 그룹을 선택합니다.
- 고급 세부 정보를 확장합니다. IAM 인스턴스 프로필에서 위에서 생성한 런치 에이전트 IAM 역할을 선택합니다.
- 요약 필드를 검토합니다. 맞으면 인스턴스 시작을 선택하십시오.
AWS의 EC2 대시보드 왼쪽 패널에서 인스턴스로 이동합니다. 생성한 EC2 인스턴스가 실행 중인지 확인합니다(인스턴스 상태 열 참조). EC2 인스턴스가 실행 중임을 확인한 후 로컬 기계의 터미널로 이동하여 다음을 완료하십시오:
- 연결을 선택합니다.
- SSH 클라이언트 탭을 선택하고 설명된 지침을 따라
- Within your EC2 instance, install the following packages:
sudo yum install python311 -y && python3 -m ensurepip --upgrade && pip3 install wandb && pip3 install wandb[launch]
- Next, install and start Docker within your EC2 instance:
sudo yum update -y
sudo yum install -y docker python3
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -a -G docker ec2-user
newgrp docker
Use the AWS config files located at ~/.aws/config and ~/.aws/credentials to associate a role with an agent that is polling on a local machine. Provide the IAM role ARN that you created for the launch agent in the previous step.
[profile SageMaker-agent]
role_arn = arn:aws:iam::<account-id>:role/<agent-role-name>
source_profile = default
[default]
aws_access_key_id=<access-key-id>
aws_secret_access_key=<secret-access-key>
aws_session_token=<session-token>
Note that session tokens have a max length of 1 hour or 3 days depending on the principal they are associated with.
Configure a launch agent
Configure the launch agent with a YAML config file named launch-config.yaml
.
By default, W&B will check for the config file in ~/.config/wandb/launch-config.yaml
. You can optionally specify a different directory when you activate the launch agent with the -c
flag.
The following YAML snippet demonstrates how to specify the core config agent options:
max_jobs: -1
queues:
- <queue-name>
environment:
type: aws
region: <your-region>
registry:
type: ecr
uri: <ecr-repo-arn>
builder:
type: docker
Now start the agent with wandb launch-agent
(Optional) Push your launch job Docker image to Amazon ECR
This section applies only if your launch agent uses existing Docker images that contain your training or inference logic. There are two options on how your launch agent behaves.
Upload your Docker image that contains your launch job to your Amazon ECR repo. Your Docker image needs to be in your ECR registry before you submit new launch jobs if you are using image-based jobs.