

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

# HyperPod 관리형 계층형 체크포인트
<a name="managed-tier-checkpointing"></a>

이 섹션에서는 관리형 계층형 체크포인트의 작동 방식과 대규모 모델 훈련에 제공하는 이점을 설명합니다.

Amazon SageMaker HyperPod 관리형 계층형 체크포인트는 대규모 생성형 AI 모델을 보다 효율적으로 훈련하는 데 도움이 됩니다. 클러스터의 CPU 메모리를 포함하여 여러 스토리지 티어를 사용합니다. 이 접근 방식은 복구 시간을 줄이고 훈련 진행 중 손실을 최소화합니다. 또한 훈련 인프라에서 사용률이 낮은 메모리 리소스를 사용합니다.

관리형 계층형 체크포인트를 사용하면 체크포인트를 메모리에 더 높은 빈도로 저장할 수 있습니다. 내구성 있는 스토리지에 주기적으로 저장합니다. 이렇게 하면 훈련 프로세스 중에 성능과 신뢰성을 모두 유지할 수 있습니다.

이 가이드에서는 Amazon EKS HyperPod 클러스터에서 PyTorch 프레임워크를 사용하여 관리형 계층형 체크포인트를 설정, 구성 및 사용하는 방법을 다룹니다.

## 관리형 계층형 체크포인트 작동 방식
<a name="managed-tier-checkpointing-works"></a>

관리형 계층형 체크포인트는 다중 계층 스토리지 접근 방식을 사용합니다. CPU 메모리는 모델 체크포인트를 저장하는 기본 티어 역할을 합니다. 보조 티어에는 Amazon S3와 같은 영구 스토리지 옵션이 포함됩니다.

체크포인트를 저장하면 시스템은 클러스터 노드에 할당된 메모리 스페이스에 체크포인트를 저장합니다. 신뢰성을 높이기 위해 인접한 컴퓨팅 노드에 데이터를 자동으로 복제합니다. 이 복제 전략은 복구 작업에 대한 빠른 액세스를 제공하면서 단일 또는 다중 노드 장애로부터 보호합니다.

또한 시스템은 구성에 따라 체크포인트를 영구 스토리지에 주기적으로 저장합니다. 이렇게 하면 훈련 진행 상황을 장기적으로 유지할 수 있습니다.

주요 구성 요소에는 다음이 포함됩니다.
+ **메모리 관리 시스템**: 체크포인트 스토리지의 서비스로 분리된 메모리를 제공하는 메모리 관리 대몬
+ **HyperPod Python 라이브러리**: 분리된 스토리지 API와 인터페이스하며 티어 간에 체크포인트를 저장, 로드 및 관리하기 위한 유틸리티 제공
+ **체크포인트 복제**: 내결함성을 위해 여러 노드에 체크포인트를 자동으로 복제

시스템은 간단한 API 직접 호출을 통해 PyTorch 훈련 루프와 원활하게 통합됩니다. 기존 코드 변경은 거의 필요하지 않습니다.

## 이점
<a name="managed-tier-checkpointing-benefits"></a>

관리형 계층형 체크포인트는 대규모 모델 훈련에 몇 가지 이점을 제공합니다.
+ **사용성 개선**: 체크포인트 저장, 복제, 지속성 및 복구 관리
+ **더 빠른 체크포인트 작업**: 메모리 기반 스토리지는 디스크 기반 체크포인트 지정에 비해 더 빠른 저장 및 로드 시간을 제공하므로 복구 속도가 빨라짐
+ **내결함성**: 노드 간 자동 체크포인트 복제는 하드웨어 노드 장애로부터 보호함
+ **코드 변경 최소화**: 간단한 API 통합을 위해서는 기존 훈련 스크립트를 약간만 수정하면 됨
+ **훈련 처리량 개선**: 체크포인트 오버헤드 감소로 실제 훈련에 더 많은 시간을 할애할 수 있음

**Topics**
+ [관리형 계층형 체크포인트 작동 방식](#managed-tier-checkpointing-works)
+ [이점](#managed-tier-checkpointing-benefits)
+ [관리형 계층형 체크포인트 설정](managed-tier-checkpointing-setup.md)
+ [관리형 계층형 체크포인트 제거](managed-tier-checkpointing-remove.md)
+ [관리형 계층형 체크포인트에 대한 보안 고려 사항](managed-tier-security-considerations.md)

# 관리형 계층형 체크포인트 설정
<a name="managed-tier-checkpointing-setup"></a>

이 섹션에는 Amazon SageMaker HyperPod에 대한 관리형 계층형 체크포인트 설정 프로세스가 포함되어 있습니다. 클러스터에서 기능을 활성화하고 훈련 코드에서 체크포인트 지정을 구현하는 방법을 알아봅니다.

**Topics**
+ [사전 조건](#managed-tier-checkpointing-setup-prerequisites)
+ [1단계: 클러스터에 대한 관리형 계층형 체크포인트 활성화](#managed-tier-checkpointing-setup-step-enable-for-cluster)
+ [2단계: 훈련 이미지에 Python 라이브러리 설치](#managed-tier-checkpointing-setup-step-install-library)
+ [3단계: 훈련 루프에 체크포인트 저장](#managed-tier-checkpointing-setup-step-save-checkpoint-in-loop)
+ [4단계: 복구를 위한 로드 체크포인트](#managed-tier-checkpointing-setup-step-load-checkpoint)
+ [관리형 계층형 체크포인트 작업 검증](#managed-tier-checkpointing-setup-validation)

## 사전 조건
<a name="managed-tier-checkpointing-setup-prerequisites"></a>

관리형 계층형 체크포인트를 설정하기 전에 다음을 확인하세요.
+ 체크포인트 할당에 사용할 수 있는 CPU 메모리가 충분한 Amazon EKS HyperPod 클러스터가 있어야 합니다.
+ PyTorch 훈련 워크로드 및 DCP 작업(둘 다 지원됨)이 있어야 합니다.
+ 다음을 포함한 클러스터 관리를 위한 적절한 IAM 권한이 있어야 합니다.
  + 훈련 포드가 체크포인트를 읽고 쓰고 지표를 푸시할 수 있는 Amazon CloudWatch 및 Amazon S3 쓰기 권한이 있어야 합니다.
  + 이러한 권한은 [EKS OIDC 설정](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)을 통해 구성할 수 있습니다.

## 1단계: 클러스터에 대한 관리형 계층형 체크포인트 활성화
<a name="managed-tier-checkpointing-setup-step-enable-for-cluster"></a>

**중요**  
관리형 계층형 체크포인트를 사용하려면 옵트인해야 합니다.

클러스터를 생성하거나 업데이트할 때 HyperPod APIs 통해 관리형 계층형 체크포인트를 활성화합니다. `TieredStorageConfig` 파라미터를 지정하면 서비스가 메모리 관리 시스템을 자동으로 설치합니다.

새 클러스터의 경우를 사용할 수 있습니다[https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-cluster.html) AWS CLI.

```
aws sagemaker create-cluster \
    --cluster-name cluster-name \
    --orchestrator "Eks={ClusterArn=eks-cluster-arn}" \
    --instance-groups '{
        "InstanceGroupName": "instance-group-name",
        "InstanceType": "instance-type",
        "InstanceCount": instance-count,
        "LifeCycleConfig": {
            "SourceS3Uri": "s3-path-to-lifecycle-scripts",
            "OnCreate": "lifecycle-script-name"
        },
        "ExecutionRole": "instance-group-iam-role",
        "ThreadsPerCore": threads-per-core,
        "InstanceStorageConfigs": [
            { "EbsVolumeConfig": {"VolumeSizeInGB": volume-size} }
        ]
    }' \
    --vpc-config '{
        "SecurityGroupIds": ["security-group-ids"],
        "Subnets": ["subnets"]
    }' \
    --tiered-storage-config '{
        "Mode": "Enable"
    }'
```

`InstanceMemoryAllocationPercentage` 파라미터는 체크포인트 지정에 할당할 클러스터 메모리의 `percentage`(int)를 지정합니다. 범위는 20\$1100입니다.

## 2단계: 훈련 이미지에 Python 라이브러리 설치
<a name="managed-tier-checkpointing-setup-step-install-library"></a>

[Amazon SageMaker 체크포인트 라이브러리](https://pypi.org/project/amzn-sagemaker-checkpointing/)와 해당 종속성을 Dockerfile에 추가하여 훈련 이미지에 설치합니다.

```
# Add this line to your training image Dockerfile
RUN pip install amzn-sagemaker-checkpointing s3torchconnector tenacity torch boto3 s3torchconnector
```

## 3단계: 훈련 루프에 체크포인트 저장
<a name="managed-tier-checkpointing-setup-step-save-checkpoint-in-loop"></a>

훈련 루프에서 PyTorch DCP를 사용하여 체크포인트를 비동기적으로 저장할 수 있습니다. 다음은 이를 수행하는 방법에 대한 예제입니다.

```
import torch
import torch.distributed as dist
from torch.distributed.checkpoint import async_save, load
from amzn_sagemaker_checkpointing.checkpointing.filesystem.filesystem import (
    SageMakerTieredStorageWriter,
    SageMakerTieredStorageReader
)

# Initialize distributed training
dist.init_process_group(backend="nccl")

# Configure checkpointing
checkpoint_config = SageMakerCheckpointConfig(
    # Unique ID for your training job 
    # Allowed characters in ID include: alphanumeric, hyphens, and underscores
    namespace=os.environ.get('TRAINING_JOB_NAME', f'job-{int(time.time())}'),

    # Number of distributed processes/available GPUs
    world_size=dist.get_world_size(),

    # S3 storage location, required for SageMakerTieredStorageReader for read fallbacks
    # Required for SageMakerTieredStorageWriter when save_to_s3 is True
    s3_tier_base_path="s3://my-bucket/checkpoints"
)

# Your model and optimizer
model = MyModel()
optimizer = torch.optim.AdamW(model.parameters())

# Training loop
future = None
in_memory_ckpt_freq = 10
s3_ckpt_freq = 50

for training_step in range(1000):
    # ... training code ...
    
    # Save checkpoint
    if (training_step % in_memory_ckpt_freq == 0 or 
        training_step % s3_ckpt_freq == 0):
        # Create state dictionary
        state_dict = {
            "model": model.state_dict(),
            "optimizer": optimizer.state_dict(),
            "step": training_step,
            "epoch": epoch
        }
        
        # Create storage writer for current step
        checkpoint_config.save_to_s3 = training_step % s3_ckpt_freq == 0
        storage_writer = SageMakerTieredStorageWriter(
            checkpoint_config=checkpoint_config,
            step=training_step
        )

        # wait for previous checkpoint to get completed
        if future is not None:
            exc = future.exception()
            if exc:
                print(f"Failure in saving previous checkpoint:{str(exc)}")
                # Handle failures as required
            else:
                result = future.result()
                # Process results from save, if required
        
        # Async save checkpoint using PyTorch DCP
        future = async_save(state_dict=state_dict, storage_writer=storage_writer)
        
        # Continue training while checkpoint saves in background
```

## 4단계: 복구를 위한 로드 체크포인트
<a name="managed-tier-checkpointing-setup-step-load-checkpoint"></a>

다음은 체크포인트를 로드하는 예제입니다.

```
# Create state dictionary template
state_dict = {
    "model": model.state_dict(),
    "optimizer": optimizer.state_dict(),
    "step": 0,
    "epoch": 0
}

# Load latest checkpoint
storage_reader = SageMakerTieredStorageReader(checkpoint_config=checkpoint_config)
load(state_dict, storage_reader=storage_reader)

# Load specific checkpoint step
storage_reader = SageMakerTieredStorageReader(
    checkpoint_config=checkpoint_config, 
    step=500 # Or don't pass step if you have to load the latest available step.
)
try:
    load(state_dict, storage_reader=storage_reader)
except BaseException as e:
    print(f"Checkpoint load failed: {str(e)}")
    # Add additional exception handling
```

## 관리형 계층형 체크포인트 작업 검증
<a name="managed-tier-checkpointing-setup-validation"></a>

로그를 사용하여 관리형 계층형 체크포인트 작업을 검증할 수 있습니다.

**사용자 지정 로깅(선택 사항)**

사용자 지정 로거를 라이브러리에 전달하여 체크포인트 지정 로그를 다른 로그와 통합할 수 있습니다. 예를 들어 라이브러리의 모든 로그가 훈련 로거에도 수집되도록 훈련 코드에 사용자 지정 로거를 추가할 수 있습니다.

**향상된 서비스 로깅(선택 사항)**

디버깅 및 서비스 가시성을 높이기 위해 포드 내에서 호스트의 경로 `/var/logs/sagemaker_checkpointing`으로 체크포인트 로그 경로 `/var/log/sagemaker_checkpointing`을 탑재할 수 있습니다. 이렇게 하면 라이브러리에 한정된 로그만 별도로 수집됩니다. 이를 통해 서비스 팀은 디버깅 및 지원에 대한 향상된 가시성을 확보할 수 있습니다.

# 관리형 계층형 체크포인트 제거
<a name="managed-tier-checkpointing-remove"></a>

이 섹션에서는 더 이상 필요하지 않을 때 관리형 계층형 체크포인트를 비활성화하는 방법을 설명합니다.

관리형 계층형 체크포인트를 비활성화하려면 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) AWS CLI 를 사용하여 클러스터 구성을 업데이트합니다.

```
aws sagemaker update-cluster \
    --cluster-name cluster-name \
    --tiered-storage-config '{ "Mode": "Disable" }'
```

이렇게 하면 클러스터에서 메모리 관리 대몬이 제거됩니다. 대몬은 표준 Kubernetes DaemonSet로 구현되며 표준 Kubernetes 수명 주기 관리를 따릅니다.

# 관리형 계층형 체크포인트에 대한 보안 고려 사항
<a name="managed-tier-security-considerations"></a>

이 섹션에서는 관리형 계층형 체크포인트를 사용할 때의 중요한 보안 고려 사항을 다룹니다. 여기에는 Python 피클 사용, Amazon S3 암호화 및 네트워크 엔드포인트 보안이 포함됩니다.

**Python 피클 사용**

관리형 계층형 체크포인트는 Python의 피클 모듈을 사용하여 Amazon S3에 저장된 체크포인트 데이터를 역직렬화합니다. 이 구현은 보안에 중요한 영향을 미칩니다.
+ **확장 신뢰 경계**: Amazon S3에서 관리형 계층형 체크포인트를 사용하는 경우 Amazon S3 버킷은 클러스터의 신뢰 경계의 일부가 됩니다.
+ **코드 실행 위험**: Python의 피클 모듈은 역직렬화 중에 임의의 코드를 실행할 수 있습니다. 권한이 없는 사용자가 체크포인트 Amazon S3 버킷에 대한 쓰기 액세스 권한을 얻는 경우 관리형 계층형 체크포인트에 의해 로드될 때 실행되는 악성 피클 데이터를 생성할 수 있습니다.

**Amazon S3 스토리지 모범 사례**

Amazon S3 스토리지에서 관리형 계층형 체크포인트를 사용하는 경우:
+ **Amazon S3 버킷 액세스 제한**: 훈련 클러스터와 연결된 승인된 사용자 및 역할만 체크포인트 지정에 사용되는 Amazon S3 버킷에 액세스할 수 있도록 합니다.
+ **버킷 정책 구현**: 무단 액세스 또는 수정을 방지하기 위해 적절한 버킷 정책을 구성합니다.
+ **액세스 패턴 검증**: 체크포인트 Amazon S3 버킷에 대한 액세스 패턴을 검증하기 위한 로깅을 구현합니다.
+ **버킷 이름 검증**: 잠재적인 버킷 하이재킹을 방지하려면 버킷 이름 선택 시 주의합니다.

**네트워크 엔드포인트**

관리형 계층형 체크포인트를 사용하면 9200/TCP, 9209/UDP, 9210/UDP, 9219/UDP, 9220/UDP, 9229/UDP, 9230/UDP, 9239/UDP, 9240/UDP 포트의 각 컴퓨팅 노드에서 네트워크 엔드포인트를 사용할 수 있습니다. 이러한 포트는 체크포인트 지정 서비스가 작동하고 데이터 동기화를 유지하는 데 필요합니다.

기본적으로 SageMaker의 네트워크 구성은 보안을 위해 이러한 엔드포인트에 대한 액세스를 제한합니다. 이러한 기본 제약 사항을 유지하는 것이 좋습니다.

노드 및 VPC에 대한 네트워크 설정을 구성할 때는 VPCs, 보안 그룹 및 ACLs 대한 AWS 모범 사례를 따르십시오. 자세한 내용은 다음을 참조하세요.
+ [Amazon SageMaker HyperPod 사전 조건](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-prerequisites.html#sagemaker-hyperpod-prerequisites-optional-vpcCluster)
+ [VPC 보안 모범 사례](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-best-practices.html)