

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

# SageMaker 모델 병렬 라이브러리 v2 참조
<a name="distributed-model-parallel-v2-reference"></a>

다음은 SageMaker 모델 병렬 라이브러리 v2(SMP v2)에 대한 참조입니다.

**Topics**
+ [SMP v2 코어 기능 구성 파라미터](#distributed-model-parallel-v2-reference-init-config)
+ [SMP v2 `torch.sagemaker` 패키지에 대한 참조](#model-parallel-v2-torch-sagemaker-reference)
+ [SMP v1에서 SMP v2로 업그레이드](#model-parallel-v2-upgrade-from-v1)

## SMP v2 코어 기능 구성 파라미터
<a name="distributed-model-parallel-v2-reference-init-config"></a>

다음은 [SageMaker 모델 병렬화 라이브러리 v2의 핵심 기능](model-parallel-core-features-v2.md)를 활성화하고 구성할 파라미터의 전체 목록입니다. JSON 형식으로 작성하여 SageMaker Python SDK의 PyTorch 추정기에 전달하거나 SageMaker HyperPod용 JSON 파일로 저장해야 합니다.

```
{
    "hybrid_shard_degree": Integer,
    "sm_activation_offloading": Boolean,
    "activation_loading_horizon": Integer,
    "fsdp_cache_flush_warnings": Boolean,
    "allow_empty_shards": Boolean,
    "tensor_parallel_degree": Integer,
    "context_parallel_degree": Integer,
    "expert_parallel_degree": Integer,
    "random_seed": Integer
}
```
+ `hybrid_shard_degree`(정수) - 샤딩된 병렬 처리 정도를 지정합니다. 값은 `0` 및 `world_size` 사이의 정수여야 합니다. 기본값은 `0`입니다.
  + `0`으로 설정하면 `tensor_parallel_degree`가 1일 때 스크립트의 기본 PyTorch 구현 및 API로 돌아갑니다. 그렇지 않으면 `tensor_parallel_degree` 및 `world_size`를 기반으로 가능한 가장 큰 `hybrid_shard_degree` 값을 계산합니다. 기본 PyTorch FSDP 사용 사례로 돌아갈 때 `FULL_SHARD`가 사용하는 전략인 경우 전체 GPU 클러스터에 걸쳐 샤딩됩니다. `HYBRID_SHARD` 또는 `_HYBRID_SHARD_ZERO2`가 전략인 경우 8 중 `hybrid_shard_degree`과 동일합니다. 텐서 병렬 처리가 활성화되면 수정된 `hybrid_shard_degree`를 기반으로 샤딩됩니다.
  + `1`로 설정하면 `tensor_parallel_degree`가 1일 때 스크립트의 기본 PyTorch 구현 및 `NO_SHARD`에 대한 API로 돌아갑니다. 그렇지 않으면 지정된 텐서 병렬 그룹 내에서 `NO_SHARD`와 동일합니다.
  + 2에서 `world_size` 사이의 정수로 설정하면 지정된 수의 GPU에서 샤딩이 발생합니다. FSDP 스크립트에서 `sharding_strategy`를 설정하지 않으면 `HYBRID_SHARD`로 재정의됩니다. `_HYBRID_SHARD_ZERO2`를 설정하면 지정한 `sharding_strategy`가 사용됩니다.
+ `sm_activation_offloading`(부울) - SMP 활성화 오프로드 구현을 활성화할지 여부를 지정합니다. `False`인 경우 오프로드는 기본 PyTorch 구현을 사용합니다. `True`인 경우 SMP 활성화 오프로드 구현을 사용합니다. 또한 스크립트에서 PyTorch 활성화 오프로드 래퍼(`torch.distributed.algorithms._checkpoint.checkpoint_wrapper.offload_wrapper`)를 사용해야 합니다. 자세한 내용은 [활성화 오프로딩](model-parallel-core-features-v2-pytorch-activation-offloading.md)를 참조하세요. 기본값은 `True`입니다.
+ `activation_loading_horizon`(정수) - FSDP에 대한 활성화 오프로드 기간 유형을 지정하는 정수입니다. GPU 메모리에 동시에 입력이 있을 수 있는 체크포인트 또는 오프로드된 계층의 최대 수입니다. 자세한 내용은 [활성화 오프로딩](model-parallel-core-features-v2-pytorch-activation-offloading.md)를 참조하세요. 값은 양의 정수여야 합니다. 기본값은 `2`입니다.
+ `fsdp_cache_flush_warnings`(부울) - PyTorch 메모리 관리자에서 캐시 플러시가 발생하는 경우 계산 성능이 저하될 수 있으므로 감지하고 경고합니다. 기본값은 `True`입니다.
+ `allow_empty_shards`(부울) - 텐서를 분할할 수 없는 경우 텐서를 샤딩할 때 빈 샤드를 허용할지 여부입니다. 이는 특정 시나리오에서 체크포인트 중 충돌에 대한 실험적 수정입니다. 이를 비활성화하면 원래 PyTorch 동작으로 돌아갑니다. 기본값은 `False`입니다.
+ `tensor_parallel_degree`(정수) - 텐서 병렬 처리 학위를 지정합니다. 이 값은 `1` 및 `world_size` 사이여야 합니다. 기본값은 `1`입니다. 1보다 큰 값을 전달해도 컨텍스트 병렬 처리가 자동으로 활성화되지는 않습니다. 또한 [`torch.sagemaker.transform`](#model-parallel-v2-torch-sagemaker-reference-transform) API를 사용하여 훈련 스크립트에 모델을 래핑해야 합니다. 자세한 내용은 [텐서 병렬화](model-parallel-core-features-v2-tensor-parallelism.md)를 참조하세요.
+ `context_parallel_degree`(정수) - 컨텍스트 병렬 처리 정도를 지정합니다. 값은 `1` \$1 `world_size` 사이여야 하며 `<= hybrid_shard_degree`여야 합니다. 기본값은 `1`입니다. 1보다 큰 값을 전달해도 컨텍스트 병렬 처리가 자동으로 활성화되지는 않습니다. 또한 [`torch.sagemaker.transform`](#model-parallel-v2-torch-sagemaker-reference-transform) API를 사용하여 훈련 스크립트에 모델을 래핑해야 합니다. 자세한 내용은 [컨텍스트 병렬 처리](model-parallel-core-features-v2-context-parallelism.md)를 참조하세요.
+ `expert_parallel_degree`(정수) - 전문가 병렬 처리 학위를 지정합니다. 이 값은 1 \$1 `world_size`이어야 합니다. 기본값은 `1`입니다. 1보다 큰 값을 전달해도 컨텍스트 병렬 처리가 자동으로 활성화되지는 않습니다. 또한 [`torch.sagemaker.transform`](#model-parallel-v2-torch-sagemaker-reference-transform) API를 사용하여 훈련 스크립트에 모델을 래핑해야 합니다. 자세한 내용은 [전문가 병렬 처리](model-parallel-core-features-v2-expert-parallelism.md)를 참조하세요.
+ `random_seed`(정수) - SMP 텐서 병렬 처리 또는 전문가 병렬 처리를 통해 분산 모듈에서 무작위 작업을 수행하는 시드 번호입니다. 이 시드는 텐서 병렬 또는 전문가 병렬 순위에 추가되어 각 순위의 실제 시드를 설정합니다. 각 텐서 병렬 및 전문가 병렬 순위에 고유합니다. SMP v2는 텐서 병렬 및 전문가 병렬 순위에서 생성된 난수가 각각 비텐서 병렬 및 비전문가 병렬 사례와 일치하는지 확인합니다.

## SMP v2 `torch.sagemaker` 패키지에 대한 참조
<a name="model-parallel-v2-torch-sagemaker-reference"></a>

이 섹션은 SMP v2에서 제공하는 `torch.sagemaker` 패키지에 대한 참조입니다.

**Topics**
+ [`torch.sagemaker.delayed_param.DelayedParamIniter`](#model-parallel-v2-torch-sagemaker-reference-delayed-param-init)
+ [`torch.sagemaker.distributed.checkpoint.state_dict_saver.async_save`](#model-parallel-v2-torch-sagemaker-reference-checkpoint-async-save)
+ [`torch.sagemaker.distributed.checkpoint.state_dict_saver.maybe_finalize_async_calls`](#model-parallel-v2-torch-sagemaker-reference-checkpoint-state-dict-saver)
+ [`torch.sagemaker.distributed.checkpoint.state_dict_saver.save`](#model-parallel-v2-torch-sagemaker-reference-checkpoint-save)
+ [`torch.sagemaker.distributed.checkpoint.state_dict_loader.load`](#model-parallel-v2-torch-sagemaker-reference-checkpoint-load)
+ [`torch.sagemaker.moe.moe_config.MoEConfig`](#model-parallel-v2-torch-sagemaker-reference-moe)
+ [`torch.sagemaker.nn.attn.FlashSelfAttention`](#model-parallel-v2-torch-sagemaker-reference-flashselfattention)
+ [`torch.sagemaker.nn.attn.FlashGroupedQueryAttention`](#model-parallel-v2-torch-sagemaker-reference-flashGroupedQueryAttn)
+ [`torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention`](#model-parallel-v2-torch-sagemaker-reference-llamaFlashAttn)
+ [`torch.sagemaker.transform`](#model-parallel-v2-torch-sagemaker-reference-transform)
+ [`torch.sagemaker` 유틸리티 함수 및 속성](#model-parallel-v2-torch-sagemaker-reference-utils)

### `torch.sagemaker.delayed_param.DelayedParamIniter`
<a name="model-parallel-v2-torch-sagemaker-reference-delayed-param-init"></a>

PyTorch 모델에 [지연된 파라미터 초기화](model-parallel-core-features-v2-delayed-param-init.md)을 적용하기 위한 API입니다.

```
class torch.sagemaker.delayed_param.DelayedParamIniter(
    model: nn.Module,
    init_method_using_config : Callable = None,
    verbose: bool = False,
)
```

**파라미터**
+ `model`(`nn.Module`) - SMP v2의 지연 파라미터 초기화 기능을 래핑하고 적용하는 PyTorch 모델입니다.
+ `init_method_using_config`(통화 가능) - SMP v2 또는 지원되는 [SMP 텐서 병렬 처리와 호환되는 Hugging Face 트랜스포머 모델](model-parallel-core-features-v2-tensor-parallelism.md#model-parallel-core-features-v2-tensor-parallelism-supported-models)의 텐서 병렬 구현을 사용하는 경우 이 파라미터를 기본값인 `None`으로 유지합니다. 기본적으로 `DelayedParamIniter` API는 지정된 모델을 올바르게 초기화하는 방법을 찾습니다. 다른 모델의 경우 사용자 지정 파라미터 초기화 함수를 생성하여 스크립트에 추가해야 합니다. 다음 코드 조각은 SMP v2가 [SMP 텐서 병렬 처리와 호환되는 Hugging Face 트랜스포머 모델](model-parallel-core-features-v2-tensor-parallelism.md#model-parallel-core-features-v2-tensor-parallelism-supported-models)에 구현한 기본 `init_method_using_config` 함수입니다. 자체 초기화 구성 함수를 생성하고, 스크립트에 추가하고, SMP `DelayedParamIniter` API의 `init_method_using_config` 파라미터에 전달하기 위한 참조로 다음 코드 조각을 사용합니다.

  ```
  from torch.sagemaker.utils.module_utils import empty_module_params, move_buffers_to_device
  
  # Define a custom init config function.
  def custom_init_method_using_config(module):
      d = torch.cuda.current_device()
      empty_module_params(module, device=d)
      if isinstance(module, (nn.Linear, Conv1D)):
          module.weight.data.normal_(mean=0.0, std=config.initializer_range)
          if module.bias is not None:
              module.bias.data.zero_()
      elif isinstance(module, nn.Embedding):
          module.weight.data.normal_(mean=0.0, std=config.initializer_range)
          if module.padding_idx is not None:
              module.weight.data[module.padding_idx].zero_()
      elif isinstance(module, nn.LayerNorm):
          module.weight.data.fill_(1.0)
          module.bias.data.zero_()
      elif isinstance(module, LlamaRMSNorm):
          module.weight.data.fill_(1.0)
      move_buffers_to_device(module, device=d)
  
  delayed_initer = DelayedParamIniter(model, init_method_using_config=custom_init_method_using_config)
  ```

  이전 코드 조각의 `torch.sagemaker.module_util` 함수에 대한 자세한 내용은 [`torch.sagemaker` 유틸리티 함수 및 속성](#model-parallel-v2-torch-sagemaker-reference-utils) 섹션을 참조하세요.
+ `verbose`(부울) - 초기화 및 검증 중에 더 자세한 로깅을 활성화할지 여부입니다. 기본값은 `False`입니다.

**메서드**
+ `get_param_init_fn()` – PyTorch FSDP 래퍼 클래스의 `param_init_fn` 인수에 전달할 수 있는 파라미터 초기화 함수를 반환합니다.
+ `get_post_param_init_fn()` – PyTorch FSDP 래퍼 클래스의 `post_param_init_fn` 인수에 전달할 수 있는 파라미터 초기화 함수를 반환합니다. 이는 모델에서 가중치를 묶은 경우에 필요합니다. 모델은 `tie_weights` 메서드를 구현해야 합니다. 자세한 내용은 [지연된 파라미터 초기화](model-parallel-core-features-v2-delayed-param-init.md)의 **묶인 가중치에 대한 참고**를 참조하세요.
+ `count_num_params`(`module: nn.Module, *args: Tuple[nn.Parameter]`) - 파라미터 초기화 함수에 의해 초기화되는 파라미터 수를 추적합니다. 이렇게 하면 다음 `validate_params_and_buffers_inited` 메서드를 구현하는 데 도움이 됩니다. `validate_params_and_buffers_inited` 메서드가 백엔드에서 암시적으로 이 메서드를 호출하기 때문에 일반적으로 이 함수를 명시적으로 호출할 필요가 없습니다.
+ `validate_params_and_buffers_inited`(`enabled: bool=True`) - 초기화된 파라미터 수가 모델의 총 파라미터 수와 일치하는지 검증하는 데 도움이 되는 컨텍스트 관리자입니다. 또한 모든 파라미터와 버퍼가 이제 메타 디바이스 대신 GPU 디바이스에 있는지 확인합니다. 이러한 조건이 충족되지 않으면 `AssertionErrors`가 발생합니다. 이 컨텍스트 관리자는 선택 사항이며 파라미터를 초기화하는 데 이 컨텍스트 관리자를 사용할 필요는 없습니다.

### `torch.sagemaker.distributed.checkpoint.state_dict_saver.async_save`
<a name="model-parallel-v2-torch-sagemaker-reference-checkpoint-async-save"></a>

비동기 저장을 위한 항목 API입니다. 이 메서드를 사용하여 지정된 `checkpoint_id`에 `state_dict` 비동기적으로 를 저장합니다.

```
def async_save(
    state_dict: STATE_DICT_TYPE,
    *,
    checkpoint_id: Union[str, os.PathLike, None] = None,
    storage_writer: Optional[StorageWriter] = None,
    planner: Optional[SavePlanner] = None,
    process_group: Optional[dist.ProcessGroup] = None,
    coordinator_rank: int = 0,
    queue : AsyncCallsQueue = None,
    sharded_strategy: Union[SaveShardedStrategy, Tuple[str, int], None] = None,
    wait_error_handling: bool = True,
    force_check_all_plans: bool = True,
    s3_region: Optional[str] = None,
    s3client_config: Optional[S3ClientConfig] = None
) -> None:
```

**파라미터**
+ `state_dict`(dict) – 필수. 상태는 저장할지 여부를 결정합니다.
+ `checkpoint_id`(str) - 필수 사항. 체크포인트를 저장할 스토리지 경로입니다.
+ `storage_writer`(StorageWriter) - 선택 사항입니다. 쓰기 작업을 수행하기 위한 PyTorch의 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageWriter](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageWriter) 인스턴스입니다. 이를 지정하지 않으면 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageWriter](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageWriter)의 기본 구성이 사용됩니다.
+ `planner`(SavePlanner ) - 선택 사항입니다. PyTorch의 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.SavePlanner](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.SavePlanner) 인스턴스입니다. 이를 지정하지 않으면 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.SavePlanner](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.SavePlanner)의 기본 구성이 사용됩니다.
+ `process_group`(ProcessGroup ) - 선택 사항입니다. 작업할 프로세스 그룹입니다. `None`인 경우 기본(글로벌) 프로세스 그룹이 사용됩니다.
+ `coordinator_rank`(int) - 선택 사항 `AllReduce`와 같은 집합 통신 연산자를 수행할 때 코디네이터의 순위입니다.
+ `queue`(AsyncRequestQueue) - 선택 사항입니다. 사용할 비동기 스케줄러입니다. 기본적으로 전역 파라미터 `DEFAULT_ASYNC_REQUEST_QUEUE`를 사용합니다.
+ `sharded_strategy`(PyTorchDistSaveShardedStrategy) - 선택 사항입니다. 체크포인트를 저장하는 데 사용할 샤딩된 전략입니다. 지정하지 않으면 기본적으로 `torch.sagemaker.distributed.checkpoint.state_dict_saver.PyTorchDistSaveShardedStrategy`가 사용됩니다.
+ `wait_error_handling`(bool) - 선택 사항. 모든 순위가 오류 처리를 완료할 때까지 기다릴지 여부를 지정하는 플래그입니다. 기본값은 `True`입니다.
+ `force_check_all_plans`(bool) - 선택 사항. 캐시가 적중된 경우에도 여러 순위에서 계획을 강제로 동기화할지 여부를 결정하는 플래그입니다. 기본값은 `True`입니다.
+ `s3_region`(str) - 선택 사항. S3 버킷이 위치한 리전입니다. 지정하지 않으면 리전이 `checkpoint_id`에서 추론됩니다.
+ `s3client_config`(S3ClientConfig ) - 선택 사항입니다. S3 클라이언트에 대한 구성 가능한 파라미터를 노출하는 데이터 클래스입니다. 제공되지 않으면 [S3ClientConfig](https://github.com/awslabs/s3-connector-for-pytorch/blob/main/s3torchconnector/src/s3torchconnector/_s3client/s3client_config.py#L7)의 기본 구성이 사용됩니다. 기본적으로 파라미터는 `part_size`로 설정됩니다.

### `torch.sagemaker.distributed.checkpoint.state_dict_saver.maybe_finalize_async_calls`
<a name="model-parallel-v2-torch-sagemaker-reference-checkpoint-state-dict-saver"></a>

이 함수를 사용하면 훈련 프로세스가 여러 비동기 요청을 모니터링할 수 있습니다.

```
def maybe_finalize_async_calls(
    blocking=True, 
    process_group=None
) -> List[int]:
```

**파라미터**
+ `blocking`(bool) - 선택 사항. `True`인 경우 모든 활성 요청이 완료될 때까지 기다립니다. 그렇지 않으면 이미 완료된 비동기 요청만 완료됩니다. 기본값은 `True`입니다.
+ `process_group`(ProcessGroup ) - 선택 사항입니다. 작업할 프로세스 그룹입니다. `None`로 설정하면 기본(글로벌) 프로세스 그룹이 사용됩니다.

**반환**
+ 비동기 호출의 인덱스가 포함된 목록이 성공적으로 마무리되었습니다.

### `torch.sagemaker.distributed.checkpoint.state_dict_saver.save`
<a name="model-parallel-v2-torch-sagemaker-reference-checkpoint-save"></a>

이 방법을 사용하여 `state_dict`를 지정된 `checkpoint_id`에 동기적으로 저장합니다.

```
def save(
    state_dict: STATE_DICT_TYPE,
    *,
    checkpoint_id: Union[str, os.PathLike, None] = None,
    storage_writer: Optional[StorageWriter] = None,
    planner: Optional[SavePlanner] = None,
    process_group: Optional[dist.ProcessGroup] = None,
    coordinator_rank: int = 0,
    wait_error_handling: bool = True,
    force_check_all_plans: bool = True,
    s3_region: Optional[str] = None,
    s3client_config: Optional[S3ClientConfig] = None
) -> None:
```

**파라미터**
+ `state_dict`(dict) – 필수. 상태는 저장할지 여부를 결정합니다.
+ `checkpoint_id`(str) - 필수 사항. 체크포인트를 저장할 스토리지 경로입니다.
+ `storage_writer`(StorageWriter) - 선택 사항입니다. 쓰기 작업을 수행하기 위한 PyTorch의 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageWriter](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageWriter) 인스턴스입니다. 이를 지정하지 않으면 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageWriter](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageWriter)의 기본 구성이 사용됩니다.
+ `planner`(SavePlanner ) - 선택 사항입니다. PyTorch의 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.SavePlanner](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.SavePlanner) 인스턴스입니다. 이를 지정하지 않으면 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.SavePlanner](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.SavePlanner)의 기본 구성이 사용됩니다.
+ `process_group`(ProcessGroup ) - 선택 사항입니다. 작업할 프로세스 그룹입니다. `None`인 경우 기본(글로벌) 프로세스 그룹이 사용됩니다.
+ `coordinator_rank`(int) - 선택 사항 `AllReduce`와 같은 집합 통신 연산자를 수행할 때 코디네이터의 순위입니다.
+ `wait_error_handling`(bool) - 선택 사항. 모든 순위가 오류 처리를 완료할 때까지 기다릴지 여부를 지정하는 플래그입니다. 기본값은 `True`입니다.
+ `force_check_all_plans`(bool) - 선택 사항. 캐시가 적중된 경우에도 여러 순위에서 계획을 강제로 동기화할지 여부를 결정하는 플래그입니다. 기본값은 `True`입니다.
+ `s3_region`(str) - 선택 사항. S3 버킷이 위치한 리전입니다. 지정하지 않으면 리전이 `checkpoint_id`에서 추론됩니다.
+ `s3client_config`(S3ClientConfig ) - 선택 사항입니다. S3 클라이언트에 대한 구성 가능한 파라미터를 노출하는 데이터 클래스입니다. 제공되지 않으면 [S3ClientConfig](https://github.com/awslabs/s3-connector-for-pytorch/blob/main/s3torchconnector/src/s3torchconnector/_s3client/s3client_config.py#L7)의 기본 구성이 사용됩니다. 기본적으로 `part_size` 파라미터는 64MB로 설정됩니다.

### `torch.sagemaker.distributed.checkpoint.state_dict_loader.load`
<a name="model-parallel-v2-torch-sagemaker-reference-checkpoint-load"></a>

분산 모델의 상태 사전을 로드합니다(`state_dict`).

```
def load(
    state_dict: Dict[str, Any],
    *,
    checkpoint_id: Union[str, os.PathLike, None] = None,
    storage_reader: Optional[StorageReader] = None,
    planner: Optional[LoadPlanner] = None,
    process_group: Optional[dist.ProcessGroup] = None,
    check_keys_matched: bool = True,
    coordinator_rank: int = 0,
    s3_region: Optional[str] = None,
    s3client_config: Optional[S3ClientConfig] = None
) -> None:
```

**파라미터**
+ `state_dict`(dict) – 필수. 로드할 `state_dict`.
+ `checkpoint_id`(str) - 필수 사항. 체크포인트의 ID입니다. `checkpoint_id`의 의미는 스토리지에 따라 다릅니다. 폴더 또는 파일의 경로일 수 있습니다. 스토리지가 키-값 저장소인 경우 키일 수도 있습니다.
+ `storage_reader`(StorageReader) - 선택 사항입니다. 읽기 작업을 수행하기 위한 PyTorch의 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageReader](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.StorageReader) 인스턴스입니다. 지정하지 않으면 분산 체크포인트는 `checkpoint_id`를 기반으로 리더를 자동으로 추론합니다. `checkpoint_id`도 `None`인 경우 예외 오류가 발생합니다.
+ `planner`(StorageReader) - 선택 사항입니다. PyTorch의 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.LoadPlanner](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.LoadPlanner) 인스턴스입니다. 지정되지 않은 경우 [https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.LoadPlanner](https://pytorch.org/docs/stable/distributed.checkpoint.html#torch.distributed.checkpoint.LoadPlanner)의 기본 구성이 사용됩니다.
+ `check_keys_matched`(bool) - 선택 사항. 활성화된 경우 `AllGather`를 사용하여 모든 순위의 `state_dict` 키가 일치하는지 여부를 확인합니다.
+ `s3_region`(str) - 선택 사항. S3 버킷이 위치한 리전입니다. 지정하지 않으면 리전이 `checkpoint_id`에서 추론됩니다.
+ `s3client_config`(S3ClientConfig ) - 선택 사항입니다. S3 클라이언트에 대한 구성 가능한 파라미터를 노출하는 데이터 클래스입니다. 제공되지 않으면 [S3ClientConfig](https://github.com/awslabs/s3-connector-for-pytorch/blob/main/s3torchconnector/src/s3torchconnector/_s3client/s3client_config.py#L7)의 기본 구성이 사용됩니다. 기본적으로 `part_size` 파라미터는 64MB로 설정됩니다.

### `torch.sagemaker.moe.moe_config.MoEConfig`
<a name="model-parallel-v2-torch-sagemaker-reference-moe"></a>

Mixture-of-Experts(MoE)의 SMP 구현을 설정하기 위한 구성 클래스입니다. 이 클래스를 통해 MoE 구성 값을 지정하여 [https://docs.aws.amazon.com/sagemaker/latest/dg/distributed-model-parallel-v2-reference.html#model-parallel-v2-torch-sagemaker-reference-transform](https://docs.aws.amazon.com/sagemaker/latest/dg/distributed-model-parallel-v2-reference.html#model-parallel-v2-torch-sagemaker-reference-transform) API 호출에 전달할 수 있습니다. MoE 모델 훈련을 위한 이 클래스의 사용에 대한 자세한 내용은 [전문가 병렬 처리](model-parallel-core-features-v2-expert-parallelism.md) 섹션을 참조하세요.

```
class torch.sagemaker.moe.moe_config.MoEConfig(
    smp_moe=True,
    random_seed=12345,
    moe_load_balancing="sinkhorn",
    global_token_shuffle=False,
    moe_all_to_all_dispatcher=True,
    moe_aux_loss_coeff=0.001,
    moe_z_loss_coeff=0.001
)
```

**파라미터**
+ `smp_moe`(부울) - MoE 의 SMP 구현을 사용할지 여부. 기본값은 `True`입니다.
+ `random_seed`(정수) - 전문가 병렬 분산 모듈의 임의 작업에 대한 시드 번호입니다. 이 시드는 전문가 병렬 순위에 추가되어 각 순위의 실제 시드를 설정합니다. 각 전문가 병렬 순위마다 고유합니다. 기본값은 `12345`입니다.
+ `moe_load_balancing`(문자열) - MoE 라우터의 로드 밸런싱 유형을 지정합니다. 유효한 옵션은 `aux_loss`, `sinkhorn`, `balanced` 및 `none`입니다. 기본값은 `sinkhorn`입니다.
+ `global_token_shuffle`(부울) - 동일한 EP 그룹 내의 EP 순위에서 토큰을 셔플할지 여부. 기본값은 `False`입니다.
+ `moe_all_to_all_dispatcher`(부울) - MoE 의 통신에 전체 간 디스패처를 사용할지 여부. 기본값은 `True`입니다.
+ `moe_aux_loss_coeff`(Float) - 보조 부하 분산 손실 계수입니다. 기본값은 `0.001`입니다.
+ `moe_z_loss_coeff`(플로트) - z-손실 계수. 기본값은 `0.001`입니다.

### `torch.sagemaker.nn.attn.FlashSelfAttention`
<a name="model-parallel-v2-torch-sagemaker-reference-flashselfattention"></a>

SMP v2와 함께 [FlashAttention](model-parallel-core-features-v2-flashattention.md)를 사용하기 위한 API입니다.

```
class torch.sagemaker.nn.attn.FlashSelfAttention(
   attention_dropout_prob: float = 0.0,
   scale: Optional[float] = None,
   triton_flash_attention: bool = False,
   use_alibi: bool = False,
)
```

**파라미터**
+ `attention_dropout_prob`(부동) - 주의에 적용할 드롭아웃 확률입니다. 기본값은 `0.0`입니다.
+ `scale`(부동) - 통과하면 이 스케일 인수가 softmax에 적용됩니다. `None`(기본값이기도 함)으로 설정하면 스케일 인수는 `1 / sqrt(attention_head_size)`입니다. 기본값은 `None`입니다.
+ `triton_flash_attention`(bool) - 전달되면 플래시 주의의 Triton 구현이 사용됩니다. 이는 선형 편향(ALiBi)으로 주의(다음 `use_alibi` 파라미터 참조)를 지원하는 데 필요합니다. 이 버전의 커널은 드롭아웃을 지원하지 않습니다. 기본값은 `False`입니다.
+ `use_alibi`(bool) - 전달되면 제공된 마스크를 사용하여 선형 편향(ALiBi)으로 주의가 활성화됩니다. ALiBi 사용할 때는 다음과 같이 준비된 주의 마스크가 필요합니다. 기본값은 `False`입니다.

  ```
  def generate_alibi_attn_mask(attention_mask, batch_size, seq_length, 
      num_attention_heads, alibi_bias_max=8):
      device, dtype = attention_mask.device, attention_mask.dtype
      alibi_attention_mask = torch.zeros(
          1, num_attention_heads, 1, seq_length, dtype=dtype, device=device
      )
  
      alibi_bias = torch.arange(1 - seq_length, 1, dtype=dtype, device=device).view(
          1, 1, 1, seq_length
      )
      m = torch.arange(1, num_attention_heads + 1, dtype=dtype, device=device)
      m.mul_(alibi_bias_max / num_attention_heads)
      alibi_bias = alibi_bias * (1.0 / (2 ** m.view(1, num_attention_heads, 1, 1)))
  
      alibi_attention_mask.add_(alibi_bias)
      alibi_attention_mask = alibi_attention_mask[..., :seq_length, :seq_length]
      if attention_mask is not None and attention_mask.bool().any():
          alibi_attention_mask.masked_fill(
              attention_mask.bool().view(batch_size, 1, 1, seq_length), float("-inf")
          )
  
      return alibi_attention_mask
  ```

**메서드**
+ `forward(self, qkv, attn_mask=None, causal=False, cast_dtype=None, layout="b h s d")` – 일반 PyTorch 모듈 함수입니다. `module(x)`를 호출하면 SMP는 이 함수를 자동으로 실행합니다.
  + `qkv` - 다음 형식의 `torch.Tensor`: `(batch_size x seqlen x (3 x num_heads) x head_size)` 또는 `(batch_size, (3 x num_heads) x seqlen x head_size)`, 각각이 `(batch_size x seqlen x num_heads x head_size)` 또는 `(batch_size x num_heads x seqlen x head_size)` 셰이프일 수 있는 `torch.Tensors`의의 튜플. 모양에 따라 적절한 레이아웃 arg를 전달해야 합니다.
  + `attn_mask` - `(batch_size x 1 x 1 x seqlen)` 양식의 `torch.Tensor`. 이 주의 마스크 파라미터를 활성화하려면 `triton_flash_attention=True` 및 `use_alibi=True`가 필요합니다. 이 방법을 사용하여 주의 마스크를 생성하는 방법을 알아보려면 [FlashAttention](model-parallel-core-features-v2-flashattention.md)의 코드 예제를 참조하세요. 기본값은 `None`입니다.
  + `causal` – 인수의 기본값인 `False`로 설정하면 마스크가 적용되지 않습니다. `forward`로 설정하면 `True` 메서드는 표준 하단 삼각형 마스크를 사용합니다. 기본값은 `False`입니다.
  + `cast_dtype` – 특정 `dtype`으로 설정하면 `qkv` 텐서를 `attn` 이전 `dtype`으로 캐스팅합니다. 이는 회전식 임베딩 후 `fp32`를 포함한 `q` 및 `k`를 사용하는 Hugging Face Transformer GPT-NeoX 모델과 같은 구현에 유용합니다. `None`으로 설정하면 캐스트가 적용되지 않습니다. 기본값은 `None`입니다.
  + `layout`(문자열) - 사용 가능한 값은 `b h s d` 또는 `b s h d`입니다. `attn`에 적절한 변환을 적용할 수 있도록 전달된 `qkv` 텐서의 레이아웃으로 설정해야 합니다. 기본값은 `b h s d`입니다.

**반환**

`(batch_size x num_heads x seq_len x head_size)` 셰이프가 있는 단일 `torch.Tensor`입니다.

### `torch.sagemaker.nn.attn.FlashGroupedQueryAttention`
<a name="model-parallel-v2-torch-sagemaker-reference-flashGroupedQueryAttn"></a>

SMP v2와 함께 `FlashGroupedQueryAttention`을 사용하기 위한 API입니다. API에 대한 자세한 내용은 [그룹화된 쿼리 주의에 FlashAttention 커널 사용](model-parallel-core-features-v2-flashattention.md#model-parallel-core-features-v2-flashattention-grouped-query) 섹션을 참조하세요.

```
class torch.sagemaker.nn.attn.FlashGroupedQueryAttention(
    attention_dropout_prob: float = 0.0,
    scale: Optional[float] = None,
)
```

**파라미터**
+ `attention_dropout_prob`(부동) - 주의에 적용할 드롭아웃 확률입니다. 기본값은 `0.0`입니다.
+ `scale`(부동) - 통과하면 이 스케일 인수가 softmax에 적용됩니다. `None`으로 설정하면 `1 / sqrt(attention_head_size)`가 스케일 인수로 사용됩니다. 기본값은 `None`입니다.

**메서드**
+ `forward(self, q, kv, causal=False, cast_dtype=None, layout="b s h d")` – 일반 PyTorch 모듈 함수입니다. `module(x)`를 호출하면 SMP는 이 함수를 자동으로 실행합니다.
  + `q` - `(batch_size x seqlen x num_heads x head_size)` 또는 `(batch_size x num_heads x seqlen x head_size)` 양식의 `torch.Tensor`. 모양에 따라 적절한 레이아웃 arg를 전달해야 합니다.
  + `kv` - `(batch_size x seqlen x (2 x num_heads) x head_size)` 또는 `(batch_size, (2 x num_heads) x seqlen x head_size)` 양식의 `torch.Tensor`, 또는 각각이 `(batch_size x seqlen x num_heads x head_size)` 또는 `(batch_size x num_heads x seqlen x head_size)` 셰이프일 수 있는 두 `torch.Tensor`의 튜플. 모양에 따라 적절한 `layout` 인수도 전달해야 합니다.
  + `causal` – 인수의 기본값인 `False`로 설정하면 마스크가 적용되지 않습니다. `forward`로 설정하면 `True` 메서드는 표준 하단 삼각형 마스크를 사용합니다. 기본값은 `False`입니다.
  + `cast_dtype` - 특정 dtype으로 설정하면 `qkv` 텐서를 `attn` 이전 dtype으로 캐스팅합니다. 이는 회전식 임베딩 후 `fp32`와 함께 `q,k`가 있는 Hugging Face Transformers GPT-NeoX와 같은 구현에 유용합니다. `None`으로 설정하면 캐스트가 적용되지 않습니다. 기본값은 `None`입니다.
  + 레이아웃(문자열) - 사용 가능한 값은 `"b h s d"` 또는 `"b s h d"`입니다. `attn`에 적절한 변환을 적용할 수 있도록 전달된 `qkv` 텐서의 레이아웃으로 설정해야 합니다. 기본값은 `"b h s d"`입니다.

**반환**

주의력 계산의 출력을 나타내는 단일 `torch.Tensor (batch_size x num_heads x seq_len x head_size)`을 반환합니다.

### `torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention`
<a name="model-parallel-v2-torch-sagemaker-reference-llamaFlashAttn"></a>

Llama 모델에 대한 FlashAttention을 지원하는 API입니다. 이 API는 하위 수준에서 [`torch.sagemaker.nn.attn.FlashGroupedQueryAttention`](#model-parallel-v2-torch-sagemaker-reference-flashGroupedQueryAttn) API를 사용합니다. 이 CLI를 사용하는 방법을 알아보려면 [그룹화된 쿼리 주의에 FlashAttention 커널 사용](model-parallel-core-features-v2-flashattention.md#model-parallel-core-features-v2-flashattention-grouped-query) 섹션을 참조하세요.

```
class torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention(
    config: LlamaConfig
)
```

**파라미터**
+ `config` – Llama 모델의 FlashAttention 구성입니다.

**메서드**
+ `forward(self, hidden_states, attention_mask, position_ids, past_key_value, output_attentions, use_cache)`
  + `hidden_states`(`torch.Tensor`) - `(batch_size x seq_len x num_heads x head_size)` 양식의 텐서의 숨겨진 상태입니다.
  + `attention_mask`(`torch.LongTensor`) - 패딩 토큰 인덱스에 대한 주의를 `(batch_size x seqlen)`의 형태로 수행하지 않도록 가립니다. 기본값은 `None`입니다.
  + `position_ids`(`torch.LongTensor`) - `None`이 아닌 경우 `(batch_size x seqlen)`의 형태로 위치 임베딩에서 각 입력 시퀀스 토큰의 위치 인덱스를 나타냅니다. 기본값은 `None`입니다.
  + `past_key_value`(캐시) - 미리 계산된 숨겨진 상태(자체 주의 블록 및 교차 주의 블록의 키 및 값). 기본값은 `None`입니다.
  + `output_attentions`(부울) - 모든 주의 계층의 주의 텐서를 반환할지 여부를 나타냅니다. 기본값은 `False`입니다.
  + `use_cache`(부울) - `past_key_values` 키 값 상태를 반환할지 여부를 나타냅니다. 기본값은 `False`입니다.

**반환**

주의력 계산의 출력을 나타내는 단일 `torch.Tensor (batch_size x num_heads x seq_len x head_size)`을 반환합니다.

### `torch.sagemaker.transform`
<a name="model-parallel-v2-torch-sagemaker-reference-transform"></a>

SMP v2는 Hugging Face Transformer 모델을 SMP 모델 구현으로 변환하고 SMP 텐서 병렬 처리를 활성화하기 위한 이 `torch.sagemaker.transform()` API를 제공합니다.

```
torch.sagemaker.transform(
    model: nn.Module, 
    device: Optional[torch.device] = None, 
    dtype: Optional[torch.dtype] = None, 
    config: Optional[Dict] = None, 
    load_state_dict_from_rank0: bool = False,
    cp_comm_type: str = "p2p"
)
```

SMP v2는 Hugging Face Transformer 모델의 구성을 SMP 변환기 구성으로 변환하여 [SMP 텐서 병렬 처리와 호환되는 Hugging Face 트랜스포머 모델](model-parallel-core-features-v2-tensor-parallelism.md#model-parallel-core-features-v2-tensor-parallelism-supported-models)에 대한 변환 정책을 유지합니다.

**파라미터**
+ `model`(`torch.nn.Module`) - SMP 라이브러리의 텐서 병렬 처리 기능을 변환하고 적용하는 [SMP 텐서 병렬 처리와 호환되는 Hugging Face 트랜스포머 모델](model-parallel-core-features-v2-tensor-parallelism.md#model-parallel-core-features-v2-tensor-parallelism-supported-models)의 모델입니다.
+ `device`(`torch.device`) - 전달되면 이 디바이스에 새 모델이 생성됩니다. 원본 모듈에 메타 디바이스에 파라미터가 있는 경우([지연된 파라미터 초기화](model-parallel-core-features-v2-delayed-param-init.md) 참조) 변환된 모듈도 메타 디바이스에 생성되어 여기에 전달된 인수는 무시합니다. 기본값은 `None`입니다.
+ `dtype`(`torch.dtype`) - 전달되는 경우 이 를 모델 생성을 위한 dtype 컨텍스트 관리자로 설정하고 이 dtype으로 모델을 생성합니다. `fp32`를 사용할 때 `MixedPrecision`를 사용하여 모델을 생성하려고 하므로 일반적으로 필요하지 않으며, `fp32`는 PyTorch 의 기본 dtype입니다. 기본값은 `None`입니다.
+ `config`(dict) - SMP 변환기를 구성하기 위한 사전입니다. 기본값은 `None`입니다.
+ `load_state_dict_from_rank0`(부울) - 기본적으로 이 모듈은 새 가중치를 사용하여 모델의 새 인스턴스를 생성합니다. 이 인수를 `True`로 설정하면 SMP는 0번째 순위에서 원래 PyTorch 모델의 상태 사전을 0번째 순위가 속한 텐서 병렬 그룹의 변환된 모델로 로드하려고 시도합니다. 이 값을 `True`로 설정하면 순위 0에 메타 디바이스에 파라미터가 있을 수 없습니다. 첫 번째 텐서 병렬 그룹만 이 변환 호출 후 0번째 순위의 가중치를 채웁니다. 첫 번째 텐서 병렬 그룹에서 다른 모든 프로세스로 이러한 가중치를 가져오려면 FSDP 래퍼에서 `True`를 `sync_module_states`로 설정해야 합니다. 이를 활성화하면 SMP 라이브러리가 원래 모델에서 상태 사전을 로드합니다. SMP 라이브러리는 변환하기 전에 모델의 `state_dict`를 가져와 변환된 모델의 구조와 일치하도록 변환하고, 각 텐서 병렬 순위에 대해 샤딩하고, 0번째 순위에서 0번째 순위가 속한 텐서 병렬 그룹의 다른 순위로 이 상태를 전달하고, 로드합니다. 기본값은 `False`입니다.
+ `cp_comm_type`(str) - 컨텍스트 병렬 구현을 결정하며 `context_parallel_degree`가 1보다 큰 경우에만 적용됩니다. 이 파라미터에 사용 가능한 값은 `p2p` 및 `all_gather`입니다. `p2p` 구현에서는 주의력 계산 중에 키-값(KV) 텐서 누적에 대한 피어-투-피어 전송-수신 호출을 활용하여 비동기적으로 실행하고 통신이 계산과 겹치도록 허용합니다. 반면 `all_gather` 구현은 KV 텐서 누적을 위한 `AllGather` 통신 집합 작업을 사용합니다. 기본값은 `"p2p"`입니다.

**반환 값**

PyTorch FSDP로 래핑할 수 있는 변환된 모델을 반환합니다. `load_state_dict_from_rank0`이 `True`로 설정되면 순위 0을 포함하는 텐서 병렬 그룹에는 순위 0의 원래 상태 사전에서 로드된 가중치가 있습니다. 원래 모델에서 [지연된 파라미터 초기화](model-parallel-core-features-v2-delayed-param-init.md)를 사용할 때 이러한 순위만 변환된 모델의 파라미터 및 버퍼에 대한 CPUs의 실제 텐서를 갖습니다. 나머지 순위에는 메모리를 저장하기 위한 파라미터와 버퍼가 메타 디바이스에 계속 있습니다.

### `torch.sagemaker` 유틸리티 함수 및 속성
<a name="model-parallel-v2-torch-sagemaker-reference-utils"></a>

**torch.sagemaker 유틸리티 함수**
+ `torch.sagemaker.init(config: Optional[Union[str, Dict[str, Any]]] = None) -> None` – SMP를 사용하여 PyTorch 훈련 작업을 초기화합니다.
+ `torch.sagemaker.is_initialized() -> bool` - 훈련 작업이 SMP로 초기화되었는지 확인합니다. 작업이 SMP로 초기화되는 동안 네이티브 PyTorch로 되돌아가면 다음 속성 목록에 표시된 대로 일부 **속성**은 관련이 없으며 `None`이 됩니다.
+ `torch.sagemaker.utils.module_utils.empty_module_params(module: nn.Module, device: Optional[torch.device] = None, recurse: bool = False) -> nn.Module` - 지정된 `device`에 빈 파라미터가 있는 경우 생성하며, 지정된 경우 모든 중첩 모듈에 대해 반복될 수 있습니다.
+ `torch.sagemaker.utils.module_utils.move_buffers_to_device(module: nn.Module, device: torch.device, recurse: bool = False) -> nn.Module` - 모듈 버퍼를 지정된 `device`로 이동하며, 지정된 경우 모든 중첩 모듈에 대해 반복될 수 있습니다.

**속성**

`torch.sagemaker.state`는 `torch.sagemaker.init`를 사용하여 SMP를 초기화한 후 여러 유용한 속성을 보유합니다.
+ `torch.sagemaker.state.hybrid_shard_degree`(int) - 샤딩된 데이터 병렬 처리 정도로, SMP 구성의 사용자 입력에서 `torch.sagemaker.init()`로 전달된 사본입니다. 자세한 내용은 [SageMaker 모델 병렬 처리 라이브러리 v2 사용](model-parallel-use-api-v2.md)를 참조하세요.
+ `torch.sagemaker.state.rank`(int) - `[0, world_size)` 범위의 디바이스에 대한 전역 순위입니다.
+ `torch.sagemaker.state.rep_rank_process_group`(`torch.distributed.ProcessGroup`) - 복제 순위가 동일한 모든 디바이스를 포함하는 프로세스 그룹입니다. `torch.sagemaker.state.tp_process_group`의 미묘하지만 근본적인 차이점을 참조하세요. 네이티브 PyTorch로 되돌리면 `None`을 반환합니다.
+ `torch.sagemaker.state.tensor_parallel_degree`(int) - 텐서 병렬 처리 정도, SMP 구성의 사용자 입력에서 `torch.sagemaker.init()`로 전달된 사본입니다. 자세한 내용은 [SageMaker 모델 병렬 처리 라이브러리 v2 사용](model-parallel-use-api-v2.md)를 참조하세요.
+ `torch.sagemaker.state.tp_size`(int) - `torch.sagemaker.state.tensor_parallel_degree`에 대한 별칭입니다.
+ `torch.sagemaker.state.tp_rank`(int) - 텐서 병렬 처리 정도 및 순위 매커니즘에 따라 결정되는 `[0, tp_size)` 범위의 디바이스에 대한 텐서 병렬 처리 순위입니다.
+ `torch.sagemaker.state.tp_process_group`(`torch.distributed.ProcessGroup`) - 다른 차원에서 동일한 순위(예: 샤딩된 데이터 병렬 처리 및 복제)이지만 고유한 텐서 병렬 순위를 가진 모든 디바이스를 포함하는 텐서 병렬 프로세스 그룹입니다. 네이티브 PyTorch 로 되돌리면 `None`를 반환합니다.
+ `torch.sagemaker.state.world_size`(int) - 훈련에 사용된 총 디바이스 수입니다.

## SMP v1에서 SMP v2로 업그레이드
<a name="model-parallel-v2-upgrade-from-v1"></a>

SMP v1에서 SMP v2로 이동하려면 스크립트를 변경하여 SMP v1 APIs를 제거하고 SMP v2 APIs. SMP v1 스크립트에서 시작하는 대신 PyTorch FSDP 스크립트에서 시작하고 [SageMaker 모델 병렬 처리 라이브러리 v2 사용](model-parallel-use-api-v2.md)의 지침을 따르는 것이 좋습니다.

SMP v1 *모델*을 SMP v2로 가져오려면 SMP v1에서 전체 모델 상태 사전을 수집하고 모델 상태 사전에서 번역 함수를 적용하여 이를 Hugging Face Transformers 모델 체크포인트 형식으로 변환해야 합니다. 그런 다음 SMP v2에서 [SMP를 사용한 체크포인트 지정](model-parallel-core-features-v2-checkpoints.md)에 설명된 대로 Hugging Face Transformers 모델 체크포인트를 로드한 다음 SMP v2와 함께 PyTorch 체크포인트 APIs를 계속 사용할 수 있습니다. PyTorch FSDP 모델에서 SMP를 사용하려면 SMP v2로 이동하여 훈련 스크립트를 변경하여 PyTorch FSDP 및 기타 최신 기능을 사용해야 합니다.

```
import smdistributed.modelparallel.torch as smp

# Create model
model = ...
model = smp.DistributedModel(model)

# Run training
...

# Save v1 full checkpoint
if smp.rdp_rank() == 0:
    model_dict = model.state_dict(gather_to_rank0=True) # save the full model
    # Get the corresponding translation function in smp v1 and translate
    if model_type == "gpt_neox":
        from smdistributed.modelparallel.torch.nn.huggingface.gptneox import translate_state_dict_to_hf_gptneox
        translated_state_dict = translate_state_dict_to_hf_gptneox(state_dict, max_seq_len=None)
    
    # Save the checkpoint
    checkpoint_path = "checkpoint.pt"
    if smp.rank() == 0:
        smp.save(
            {"model_state_dict": translated_state_dict},
            checkpoint_path,
            partial=False,
        )
```

SMP v1에서 사용 가능한 번역 함수를 찾으려면 [Hugging Face 변환기 모델 지원](model-parallel-extended-features-pytorch-hugging-face.md) 섹션을 참조하세요.

SMP v2에서 모델 체크포인트 저장 및 로드에 대한 지침은 [SMP를 사용한 체크포인트 지정](model-parallel-core-features-v2-checkpoints.md) 섹션을 참조하세요.