Skip to content

Commit

Permalink
fix: apply easier to read suggestions
Browse files Browse the repository at this point in the history
Co-authored-by: Sohyun Sim <96299403+sim-so@users.noreply.github.com>
Co-authored-by: Hyeonseo Yun <0525yhs@gmail.com>
  • Loading branch information
3 people committed Apr 25, 2023
1 parent c4adc15 commit e4d26b5
Showing 1 changed file with 22 additions and 22 deletions.
44 changes: 22 additions & 22 deletions docs/source/ko/serialization.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,19 @@ specific language governing permissions and limitations under the License.

프로덕션 환경에 🤗 Transformers 모델을 배포할 때에는 특수 런타임 하드웨어 위에 올리고 실행할 있도록 직렬화된 형식으로 내보내기를 권장합니다. 가이드에서는 🤗 Transformers 모델을 [ONNX (Open Neural Network eXchange)](http://onnx.ai)로 내보내는 방법을 안내합니다.

ONNX는 딥러닝 모델을 표현하기 위한 공통 파일 형식과 연산자들을 정의하는 오픈 표준으로써 PyTorch, TensorFlow 다양한 프레임워크에서 지원됩니다. 모델이 ONNX 형식으로 내보내지면, (보통 _중간 표현 (Intermediate Representation; IR)_이라고 불리는) 계산 그래프가 구성됩니다. 신경망을 통해 데이터가 흐르는 방식, 어떤 연산이 어느 부분에 사용되었는지를 나타냅니다.
ONNX는 딥러닝 모델을 표현하기 위한 공통 파일 형식과 연산자들을 정의하는 개방형 표준으로써 PyTorch, TensorFlow 다양한 프레임워크에서 지원됩니다. 모델을 ONNX 형식으로 내보내면, (보통 _중간 표현 (Intermediate Representation; IR)_이라고 불리는) 계산 그래프가 구성됩니다. 계산 그래프는 신경망을 통해 데이터가 흐르는 방식, 어떤 연산이 어느 부분에 사용되었는지를 나타냅니다.

표준 연산 데이터 형식을 사용하여 그래프를 노출하기 때문에 ONNX는 프레임워크 전환을 쉽게 만듭니다. 예를 들어, PyTorch에서 훈련된 모델은 ONNX 형식으로 내보낸 뒤, TensorFlow에서 가져올 있습니다. 물론 반대도 가능합니다.
표준 연산 데이터 형식을 사용하여 그래프를 노출하기 때문에 ONNX를 사용하면 프레임워크 전환이 쉬워집니다. 예를 들어, PyTorch에서 훈련된 모델은 ONNX 형식으로 내보낸 뒤, TensorFlow에서 가져올 있습니다. 물론 반대도 가능합니다.

🤗 Transformers는 모델 체크포인트를 ONNX 그래프로 변환할 있게 해주는 [`transformers.onnx`](main_classes/onnx) 패키지를 제공합니다. 이걸 가능케 하는 구성 객체는 여러 모델 아키텍처를 대상으로 미리 제작되어 있으며, 다른 아키텍처로도 쉽게 확장할 있도록 설계되었습니다.

<Tip>

🤗 Optimum에서 [`optimum.exporters.onnx` 패키지](https://huggingface.co/docs/optimum/exporters/onnx/usage_guides/export_a_model)를 사용하여 🤗 Transformers 모델을 내보낼 수도 있습니다.

내보낸 , 모델은 다음과 같이 사용될 있습니다:
모델을 내보낸 다음과 같이 사용될 있습니다:

- 양자화 그래프 최적화와 같은 기술을 통해 추론을 위해 최적화합니다.
- 양자화 그래프 최적화와 같은 기술을 통해 추론에 최적화합니다.
- [`ORTModelForXXX` 클래스](https://huggingface.co/docs/optimum/onnxruntime/package_reference/modeling_ort)를 통해 ONNX 런타임에서 실행합니다. 클래스들은 🤗 Transformers에서 사용하는 `AutoModel` API와 동일합니다.
- [최적화된 추론 파이프라인](https://huggingface.co/docs/optimum/main/en/onnxruntime/usage_guides/pipelines) 위에 실행합니다. 파이프라인은 🤗 Transformers의 [`pipeline`] 함수와 동일한 API를 갖습니다.

Expand Down Expand Up @@ -109,7 +109,7 @@ ONNX는 딥러닝 모델을 표현하기 위한 공통 파일 형식과 연산
- XLM-RoBERTa-XL
- YOLOS

다음 섹션에서는 아래를 살펴보겠습니다:
앞으로의 섹션에서는 아래 내용을 살펴보겠습니다:

* `transformers.onnx` 패키지를 사용하여 지원되는 모델 내보내기
* 지원되지 않는 아키텍처를 위해 사용자 정의 모델 내보내기
Expand All @@ -118,7 +118,7 @@ ONNX는 딥러닝 모델을 표현하기 위한 공통 파일 형식과 연산

<Tip>

모델을 내보내는 권장 방법은 이제 [`optimum.exporters.onnx`](https://huggingface.co/docs/optimum/main/en/exporters/onnx/usage_guides/export_a_model#exporting-a-model-to-onnx-using-the-cli)를 사용하는 것입니다. 걱정하지 마세요, `transformers.onnx`와 매우 유사합니다!
이제 모델을 내보낼 [`optimum.exporters.onnx`](https://huggingface.co/docs/optimum/main/en/exporters/onnx/usage_guides/export_a_model#exporting-a-model-to-onnx-using-the-cli)를 사용하도록 권장합니다. `transformers.onnx`와 매우 유사하니 걱정하지 마세요!

</Tip>

Expand Down Expand Up @@ -148,7 +148,7 @@ optional arguments:
--atol ATOL Absolute difference tolerance when validating the model.
```

미리 제작된 구성을 사용하여 체크포인트를 내보내는 것은 다음과 같이 수행할 있습니다:
다음과 같이 미리 제작된 구성을 사용하여 체크포인트를 내보낼 있습니다:

```bash
python -m transformers.onnx --model=distilbert-base-uncased onnx/
Expand All @@ -165,7 +165,7 @@ Validating ONNX model...
All good, model saved at: onnx/model.onnx
```

이렇게하면 `--model` 인자로 정의된 체크포인트의 ONNX 그래프가 내보내집니다. 예시에서는 `distilbert-base-uncased`이지만, Hugging Face Hub에서 가져왔거나 로컬에 저장된 체크포인트들 모두 가능합니다.
이렇게 `--model` 인수로 정의된 체크포인트의 ONNX 그래프를 내보냅니다. 예시에서는 `distilbert-base-uncased`이지만, Hugging Face Hub에서 가져왔거나 로컬에 저장된 체크포인트들 모두 가능합니다.

결과로 나온 `model.onnx` 파일은 ONNX 표준을 지원하는 [다양한 가속기](https://onnx.ai/supported-tools.html#deployModel) 하나에서 실행할 있습니다. 예를 들어, 다음과 같이 [ONNX Runtime](https://onnxruntime.ai/)에서 모델을 가져오고 실행할 있습니다:

Expand All @@ -191,13 +191,13 @@ All good, model saved at: onnx/model.onnx
["last_hidden_state"]
```

Hub의 TensorFlow 체크포인트의 경우 과정은 동일합니다. 예를 들어, [Keras organization](https://huggingface.co/keras-io)에서 TensorFlow 체크포인트를 내보내려면:
Hub의 TensorFlow 체크포인트의 경우에도 과정은 동일합니다. 예를 들어, 다음과 같이 [Keras organization](https://huggingface.co/keras-io)에서 TensorFlow 체크포인트를 내보낼 수 있습니다:

```bash
python -m transformers.onnx --model=keras-io/transformers-qa onnx/
```

로컬에 저장된 모델을 내보내려면 모델의 가중치 및 토크나이저 파일이 저장된 디렉토리가 필요합니다. 예를 들어, 체크포인트를 가져오고 저장하려면:
로컬에 저장된 모델을 내보내려면 모델의 가중치 및 토크나이저 파일이 저장된 디렉토리가 필요합니다. 예를 들어, 다음과 같이 체크포인트를 가져오고 저장할 수 있습니다:

<frameworkcontent> <pt>
```python
Expand All @@ -211,7 +211,7 @@ python -m transformers.onnx --model=keras-io/transformers-qa onnx/
>>> pt_model.save_pretrained("local-pt-checkpoint")
```

체크포인트를 저장한 후, `transformers.onnx` 패키지의 `--model` 인자를 원하는 디렉토리로 지정하여 ONNX로 내보낼 수 있습니다:
체크포인트를 저장한 후, `transformers.onnx` 패키지의 `--model` 인수를 원하는 디렉토리로 지정하여 ONNX로 내보낼 수 있습니다:

```bash
python -m transformers.onnx --model=local-pt-checkpoint onnx/
Expand All @@ -228,7 +228,7 @@ python -m transformers.onnx --model=local-pt-checkpoint onnx/
>>> tf_model.save_pretrained("local-tf-checkpoint")
```

체크포인트를 저장한 후, `transformers.onnx` 패키지의 `--model` 인자를 원하는 디렉토리로 지정하여 ONNX로 내보낼 수 있습니다:
체크포인트를 저장한 후, `transformers.onnx` 패키지의 `--model` 인수를 원하는 디렉토리로 지정하여 ONNX로 내보낼 수 있습니다:

```bash
python -m transformers.onnx --model=local-tf-checkpoint onnx/
Expand All @@ -239,11 +239,11 @@ python -m transformers.onnx --model=local-tf-checkpoint onnx/

<Tip>

모델을 내보내는 권장 방법은 이제 `optimum.exporters.onnx`사용하는 것입니다. 작업을 선택하는 방법을 알아보려면 [🤗 Optimum 문서](https://huggingface.co/docs/optimum/main/en/exporters/onnx/usage_guides/export_a_model#selecting-a-task)를 확인하세요.
이제 모델을 내보낼 때 `optimum.exporters.onnx`사용하도록 권장합니다. 작업을 선택하는 방법을 알아보려면 [🤗 Optimum 문서](https://huggingface.co/docs/optimum/main/en/exporters/onnx/usage_guides/export_a_model#selecting-a-task)를 확인하세요.

</Tip>

각 미리 제작된 구성에는 다른 유형의 작업에 대한 모델을 내보내도록 하는 일련의 _기능_이 포함되어 있습니다. 아래 표에 나와 있는대로 각 기능은 다른 `AutoClass`와 연관되어 있습니다.
다른 유형의 태스크에 맞춰서 모델을 내보낼 수 있도록 미리 제작된 구성마다 일련의 _기능_이 포함되어 있습니다. 아래 표에 나와 있는대로 각 기능은 다른 `AutoClass`와 연관되어 있습니다.

| Feature | Auto Class |
| ------------------------------------ | ------------------------------------ |
Expand All @@ -265,7 +265,7 @@ python -m transformers.onnx --model=local-tf-checkpoint onnx/
["default", "masked-lm", "causal-lm", "sequence-classification", "token-classification", "question-answering"]
```

그런 다음 `transformers.onnx` 패키지의 `--feature` 인자에 이러한 기능 중 하나를 전달할 수 있습니다. 예를 들어, 텍스트 분류 모델을 내보내려면 Hub에서 미세 조정된 모델을 선택하고 다음과 같이 실행할 수 있습니다:
그런 다음 `transformers.onnx` 패키지의 `--feature` 인수에 이러한 기능 중 하나를 전달할 수 있습니다. 예를 들어, 텍스트 분류 모델을 내보내려면 다음과 같이 Hub에서 미세 조정된 모델을 선택하고 실행할 수 있습니다:

```bash
python -m transformers.onnx --model=distilbert-base-uncased-finetuned-sst-2-english \
Expand Down Expand Up @@ -350,7 +350,7 @@ DistilBERT는 인코더 기반 모델이므로 해당 구성은 `OnnxConfig`를

<Tip>

`DistilBertOnnxConfig``inputs` 속성이 `OrderedDict`라는 것에 유의하세요. 이렇게하면 그래프를 따라 흐를 때 입력이 `PreTrainedModel.forward()` 메서드 속 알맞은 상대적인 위치에 있도록 보장합니다. 사용자 정의 ONNX 구성을 구현할 때도 `inputs``outputs` 속성으로 `OrderedDict`를 사용하는 것을 권장드립니다.
`DistilBertOnnxConfig``inputs` 속성이 `OrderedDict`라는 것에 유의하세요. 이렇게 하면 입력이 그래프를 따라 흐를 때 `PreTrainedModel.forward()` 메소드 속 알맞은 상대적인 위치에 있도록 보장합니다. 사용자 정의 ONNX 구성을 구현할 때도 `inputs``outputs` 속성으로 `OrderedDict`를 사용하는 것을 권장합니다.

</Tip>

Expand All @@ -377,7 +377,7 @@ ONNX 구성을 구현한 후에는 다음과 같이 기본 모델의 구성을
OrderedDict([("last_hidden_state", {0: "batch", 1: "sequence"})])
```

출력 속성이 입력과 동일한 구조임을 유의하세요. 각 출력은 이름과 차원이 `OrderedDict`의 키-값으로 저장되어 있습니다. 출력 구조는 구성을 초기화할 때 선택한 기능과 관련이 있습니다. 기본적으로 ONNX 구성은 `AutoModel` 클래스로 가져온 모델을 내보낼 때 쓰이는 `default` 기능으로 초기화됩니다. 다른 태스크를 위해 모델을 내보내려면 ONNX 구성을 초기화할 때 `task` 인수에 다른 기능을 넣으면 됩니다. 예를 들어, 앞에 시퀀스 분류를 하도록 DistilBERT를 내보내려면:
출력 속성이 입력과 동일한 구조임을 유의하세요. 각 출력은 이름과 차원이 `OrderedDict`의 키-값으로 저장되어 있습니다. 출력 구조는 구성을 초기화할 때 선택한 기능과 관련이 있습니다. 기본적으로 ONNX 구성은 `AutoModel` 클래스로 가져온 모델을 내보낼 때 쓰이는 `default` 기능으로 초기화됩니다. 다른 태스크를 위해 모델을 내보내려면 ONNX 구성을 초기화할 때 `task` 인수에 다른 기능을 넣으면 됩니다. 예를 들어, 시퀀스 분류 단계를 덧붙인 DistilBERT를 내보내려면, 이렇게 해볼 수 있습니다:

```python
>>> from transformers import AutoConfig
Expand All @@ -390,7 +390,7 @@ OrderedDict([('logits', {0: 'batch'})])

<Tip>

[`~onnx.config.OnnxConfig`]나 다른 구성 클래스에 연결된 모든 기본 속성 및 메서드는 필요에 따라 모두 재정의할 수 있습니다. 고급 예제로 [`BartOnnxConfig`]를 확인하세요.
[`~onnx.config.OnnxConfig`]나 다른 구성 클래스에 연결된 모든 기본 속성 및 메소드는 필요에 따라 모두 재정의할 수 있습니다. 고급 예제로 [`BartOnnxConfig`]를 확인하세요.

</Tip>

Expand Down Expand Up @@ -422,7 +422,7 @@ ONNX 구성을 구현했다면, 다음 단계는 모델을 내보내는 것입

<Tip>

모델 크기가 2GB보다 큰 경우 내보내기 중에 여러 추가 파일들이 생성되는 것을 볼 수 있습니다. 사실 ONNX는 모델을 저장하기 위해 [Protocol Buffers](https://developers.google.com/protocol-buffers/)를 사용하는데, 버퍼는 2GB의 크기 제한이 있기 때문에 _예상대로_의 작동입니다. 외부 데이터를 사용하여 모델을 가져오는 방법은 [ONNX 문서](https://github.com/onnx/onnx/blob/master/docs/ExternalData.md)를 참조하세요.
모델 크기가 2GB보다 큰 경우 내보내는 중에 여러 추가 파일들이 생성되는 것을 볼 수 있습니다. 사실 ONNX는 모델을 저장하기 위해 [Protocol Buffers](https://developers.google.com/protocol-buffers/)를 사용하는데, 버퍼는 2GB의 크기 제한이 있기 때문에 _자연스러운_ 일입니다. 외부 데이터를 사용하여 모델을 가져오는 방법은 [ONNX 문서](https://github.com/onnx/onnx/blob/master/docs/ExternalData.md)를 참조하세요.

</Tip>

Expand All @@ -438,14 +438,14 @@ ONNX 구성을 구현했다면, 다음 단계는 모델을 내보내는 것입
... )
```

이 함수는 [`~transformers.onnx.OnnxConfig.generate_dummy_inputs`] 메서드로 기존 및 내보낸 모델의 입력을 생성하며, 검증에 사용될 오차 범위는 구성에서 정의할 수 있습니다. 일반적으로는 1e-6에서 1e-4 범위 내에서 합의하지만, 1e-3보다 작다면 문제 없을 가능성이 높습니다.
이 함수는 [`~transformers.onnx.OnnxConfig.generate_dummy_inputs`] 메소드로 기존 및 내보낸 모델의 입력을 생성하며, 검증에 사용될 오차 범위는 구성에서 정의할 수 있습니다. 일반적으로는 1e-6에서 1e-4 범위 내에서 합의하지만, 1e-3보다 작다면 문제 없을 가능성이 높습니다.

## 🤗 Transformers에 새 구성 추가하기[[contributing-a-new-configuration-to-transformers]]

이미 만들어진 구성의 숫자를 늘리려고 노력하고 있으며, 커뮤니티의 기여를 환영합니다! 라이브러리에 당신만의 구성을 추가하려면 다음 단계를 기억해주세요:
미리 제작된 구성의 숫자를 늘리려고 노력하고 있으며, 커뮤니티의 기여를 환영합니다! 라이브러리에 당신만의 구성을 추가하려면 다음 단계를 기억해주세요:

* `configuration_<model_name>.py` 파일에 ONNX 구성을 구현하세요.
* [`~onnx.features.FeatureManager`]에 모델 아키텍처 및 해당 기능을 포함시키세요.
* [`~onnx.features.FeatureManager`]에 모델 아키텍처 및 해당 기능을 포함하세요.
* `test_onnx_v2.py`의 테스트에 모델 아키텍처를 추가하세요.

아직 감이 안 잡히신다면, [IBERT 구성](https://github.com/huggingface/transformers/pull/14868/files)이 어떻게 기여되었는지 확인해보세요.

0 comments on commit e4d26b5

Please sign in to comment.