

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

# Hugging Face 변환기 모델 지원
<a name="model-parallel-extended-features-pytorch-hugging-face"></a>

SageMaker 모델 병렬 처리 라이브러리의 텐서 병렬 처리는 다음과 같은 Hugging Face 변환기 모델을 즉시 지원합니다.
+ GPT-2, BERT, 및 RoBERTa(SageMaker 모델 병렬 처리 라이브러리 v1.7.0 이상에서 사용 가능)
+ GPT-J(SageMaker 모델 병렬 처리 라이브러리 v1.8.0 이상에서 사용 가능)
+ GPT-Neo((SageMaker 모델 병렬 처리 라이브러리 v1.10.0 이상에서 사용 가능)

**참고**  
다른 변환기 모델의 경우 [smdistributed.modelparallel.torch.tp\_register\_with\_module()](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch_tensor_parallel.html#smdistributed.modelparallel.torch.tp_register_with_module) API를 사용해야 텐서 병렬 처리를 적용할 수 있습니다.

**참고**  
Hugging Face 변환기 모델 훈련에 텐서 병렬 처리를 사용하려면 SageMaker 모델 병렬 처리 라이브러리 v1.7.0 이상이 포함된 PyTorch용 Hugging Face 딥 러닝 컨테이너를 사용해야 합니다. 자세한 내용은 [SageMaker 모델 병렬 처리 라이브러리 릴리스 정보](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_release_notes/smd_model_parallel_change_log.html)를 참조하세요.

## 즉시 지원 모델
<a name="model-parallel-extended-features-pytorch-hugging-face-out-of-the-box"></a>

라이브러리가 즉시 지원하는 Hugging Face 변환기 모델의 경우 변환기 API를 `smdistributed` 변환기 레이어로 번역하는 후크를 수동으로 구현하지 않아도 됩니다. 컨텍스트 관리자 [smdistributed.modelparallel.torch.tensor\_parallelism()](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch_tensor_parallel.html#smdistributed.modelparallel.torch.tensor_parallelism)을 사용하고 [smdistributed.modelparallel.torch.DistributedModel()](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch.html#smdistributed.modelparallel.torch.DistributedModel)으로 모델을 래핑하여 텐서 병렬 처리를 활성화할 수 있습니다. `smp.tp_register` API를 사용하여 텐서 병렬 처리에 필요한 후크를 수동으로 등록하지 않아도 됩니다.

Hugging Face Transformer와 `smdistributed.modelparallel` 간의 `state_dict` 번역 기능은 다음과 같이 액세스할 수 있습니다.
+  `smdistributed.modelparallel.torch.nn.huggingface.gpt2.translate_state_dict_to_hf_gpt2(state_dict, max_seq_len=None)`
+  `smdistributed.modelparallel.torch.nn.huggingface.gpt2.translate_hf_state_dict_to_smdistributed_gpt2(state_dict)` 
+  `smdistributed.modelparallel.torch.nn.huggingface.bert.translate_state_dict_to_hf_bert(state_dict, max_seq_len=None)` 
+  `smdistributed.modelparallel.torch.nn.huggingface.bert.translate_hf_state_dict_to_smdistributed_bert(state_dict)` 
+  `smdistributed.modelparallel.torch.nn.huggingface.roberta.translate_state_dict_to_hf_roberta(state_dict, max_seq_len=None)` 
+  `smdistributed.modelparallel.torch.nn.huggingface.roberta.translate_hf_state_dict_to_smdistributed_roberta(state_dict)` 
+ `smdistributed.modelparallel.torch.nn.huggingface.gptj.translate_state_dict_to_hf_gptj(state_dict, max_seq_len=None)`(SageMaker 모델 병렬 처리 라이브러리 v1.8.0 이상에서 사용 가능)
+ `smdistributed.modelparallel.torch.nn.huggingface.gptj.translate_hf_gptj_state_dict_to_smdistributed_gptj`(SageMaker 모델 병렬 처리 라이브러리 v1.8.0 이상에서 사용 가능)
+ `smdistributed.modelparallel.torch.nn.huggingface.gptneo.translate_state_dict_to_hf_gptneo(state_dict, max_seq_len=None)`(SageMaker 모델 병렬 처리 라이브러리 v1.10.0 이상에서 사용 가능)
+ `smdistributed.modelparallel.torch.nn.huggingface.gptneo.translate_hf_state_dict_to_smdistributed_gptneo(state_dict)`(SageMaker 모델 병렬 처리 라이브러리 v1.10.0 이상에서 사용 가능)

**GPT-2 번역 함수 사용 예제**

다음 코드에 나와 있는 것처럼 모델을 래핑하며 시작합니다.

```
from transformers import AutoModelForCausalLM

with smp.tensor_parallelism():
    model = AutoModelForCausalLM.from_config(hf_gpt2_config)

model = smp.DistributedModel(model)
```

`DistributedModel` 객체의 `state_dict`을 고려하면 다음 코드와 같은 `translate_state_dict_to_hf_gpt2` 함수를 사용하여 원래 Hugging Face GPT-2 모델에 가중치를 로드할 수 있습니다.

```
from smdistributed.modelparallel.torch.nn.huggingface.gpt2 \
                                      import translate_state_dict_to_hf_gpt2
max_seq_len = 1024

# [... code block for training ...]

if smp.rdp_rank() == 0:
    state_dict = dist_model.state_dict()
    hf_state_dict = translate_state_dict_to_hf_gpt2(state_dict, max_seq_len)

    # can now call model.load_state_dict(hf_state_dict) to the original HF model
```

**RoBERTa 번역 함수 사용 예제**

마찬가지로, 지원되는 HuggingFace 모델 `state_dict`을 고려하면 `translate_hf_state_dict_to_smdistributed` 함수를 사용하여 `smp.DistributedModel`이 읽을 수 있는 형식으로 변환할 수 있습니다. 이는 사전 훈련된 모델을 `smp.DistributedModel`에 로드하여 모델 병렬을 미세 조정하는 전이 학습 사용 사례에 유용합니다.

```
from smdistributed.modelparallel.torch.nn.huggingface.roberta \
                                      import translate_state_dict_to_smdistributed

model = AutoModelForMaskedLM.from_config(roberta_config)
model = smp.DistributedModel(model)

pretrained_model = AutoModelForMaskedLM.from_pretrained("roberta-large")
translated_state_dict =
        translate_state_dict_to_smdistributed(pretrained_model.state_dict())

# load the translated pretrained weights into the smp.DistributedModel
model.load_state_dict(translated_state_dict)

# start fine-tuning...
```