diff --git a/docs/source/ko/_toctree.yml b/docs/source/ko/_toctree.yml index d200b3b7e9c..5b7f1b2dfe0 100644 --- a/docs/source/ko/_toctree.yml +++ b/docs/source/ko/_toctree.yml @@ -153,8 +153,8 @@ title: (λ²ˆμ—­μ€‘) How to add a pipeline to πŸ€— Transformers? - local: testing title: ν…ŒμŠ€νŠΈ - - local: in_translation - title: (λ²ˆμ—­μ€‘) Checks on a Pull Request + - local: pr_checks + title: Pull Request에 λŒ€ν•œ 검사 title: (λ²ˆμ—­μ€‘) κΈ°μ—¬ν•˜κΈ° - sections: diff --git a/docs/source/ko/pr_checks.md b/docs/source/ko/pr_checks.md new file mode 100644 index 00000000000..1d155cd1fb9 --- /dev/null +++ b/docs/source/ko/pr_checks.md @@ -0,0 +1,200 @@ + + +# Pull Request에 λŒ€ν•œ 검사 [[checks-on-a-pull-request]] + +πŸ€— Transformersμ—μ„œ Pull Requestλ₯Ό μ—΄ λ•Œ, 기쑴에 μžˆλŠ” 것을 λ§κ°€λœ¨λ¦¬μ§€ μ•ŠλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μƒλ‹Ήν•œ 수의 검사가 μ‹€ν–‰λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ²€μ‚¬λŠ” λ‹€μŒκ³Ό 같은 λ„€ κ°€μ§€ μœ ν˜•μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€: +- 일반적인 ν…ŒμŠ€νŠΈ +- λ¬Έμ„œ λΉŒλ“œ +- μ½”λ“œ 및 λ¬Έμ„œ μŠ€νƒ€μΌ +- 일반 μ €μž₯μ†Œ 일관성 + +이 λ¬Έμ„œμ—μ„œλŠ” μ΄λŸ¬ν•œ λ‹€μ–‘ν•œ 검사와 κ·Έ 이유λ₯Ό μ„€λͺ…ν•˜κ³ , PRμ—μ„œ ν•˜λ‚˜ μ΄μƒμ˜ 검사가 μ‹€νŒ¨ν•œ 경우 λ‘œμ»¬μ—μ„œ μ–΄λ–»κ²Œ λ””λ²„κ·Έν•˜λŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. + +참고둜, μ΄λŸ¬ν•œ 검사λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ 개발 μ„€μΉ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€: + +```bash +pip install transformers[dev] +``` + +λ˜λŠ” Transformers μ €μž₯μ†Œ 내에 νŽΈμ§‘ κ°€λŠ₯ν•œ μ„€μΉ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€: + +```bash +pip install -e .[dev] +``` + +Transformers의 선택적 쒅속성 μˆ˜κ°€ 많이 λŠ˜μ–΄λ‚¬κΈ° λ•Œλ¬Έμ— 개발 μ„€μΉ˜λ₯Ό μ‹€νŒ¨ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 개발 μ„€μΉ˜κ°€ μ‹€νŒ¨ν•˜λŠ” 경우, μž‘μ—… 쀑인 Deep Learning ν”„λ ˆμž„μ›Œν¬ (PyTorch, TensorFlow 및/λ˜λŠ” Flax)λ₯Ό μ„€μΉ˜ν•˜κ³  λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ„Έμš”. + +```bash +pip install transformers[quality] +``` + +νŽΈμ§‘ κ°€λŠ₯ν•œ μ„€μΉ˜μ˜ κ²½μš°λŠ” λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ„Έμš”. + +```bash +pip install -e .[quality] +``` + + +## ν…ŒμŠ€νŠΈ [[tests]] + +`ci/circleci: run_tests_`둜 μ‹œμž‘ν•˜λŠ” λͺ¨λ“  μž‘μ—…μ€ Transformers ν…ŒμŠ€νŠΈ λͺ¨μŒμ˜ 일뢀λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μž‘μ—…μ€ νŠΉμ • ν™˜κ²½μ—μ„œ 일뢀 λΌμ΄λΈŒλŸ¬λ¦¬μ— 쀑점을 λ‘‘λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ `ci/circleci: run_tests_pipelines_tf`λŠ” TensorFlow만 μ„€μΉ˜λœ ν™˜κ²½μ—μ„œ νŒŒμ΄ν”„λΌμΈ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. + +ν…ŒμŠ€νŠΈ λͺ¨λ“ˆμ—μ„œ μ‹€μ œλ‘œ λ³€κ²½ 사항이 없을 λ•Œ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄, ν…ŒμŠ€νŠΈ λͺ¨μŒμ˜ μΌλΆ€λ§Œ μ‹€ν–‰λ©λ‹ˆλ‹€. 라이브러리의 λ³€κ²½ 전후에 λŒ€ν•œ 차이λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ μœ ν‹Έλ¦¬ν‹°κ°€ μ‹€ν–‰λ˜κ³ , ν•΄λ‹Ή 차이에 영ν–₯을 λ°›λŠ” ν…ŒμŠ€νŠΈκ°€ μ„ νƒλ©λ‹ˆλ‹€. 이 μœ ν‹Έλ¦¬ν‹°λŠ” λ‘œμ»¬μ—μ„œ λ‹€μŒκ³Ό 같이 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€: + +```bash +python utils/tests_fetcher.py +``` + +Transformers μ €μž₯μ†Œμ˜ μ΅œμƒλ‹¨μ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€. 이 μœ ν‹Έλ¦¬ν‹°λŠ” λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€: + +1. λ³€κ²½ 사항이 μžˆλŠ” νŒŒμΌλ§ˆλ‹€ λ³€κ²½ 사항이 μ½”λ“œμΈμ§€ 주석 λ˜λŠ” λ¬Έμ„œ λ¬Έμžμ—΄μΈμ§€ ν™•μΈν•©λ‹ˆλ‹€. μ‹€μ œ μ½”λ“œ 변경이 μžˆλŠ” 파일만 μœ μ§€λ©λ‹ˆλ‹€. +2. μ†ŒμŠ€ μ½”λ“œ 파일의 각 νŒŒμΌμ— λŒ€ν•΄ μž¬κ·€μ μœΌλ‘œ 영ν–₯을 μ£ΌλŠ” λͺ¨λ“  νŒŒμΌμ„ μ œκ³΅ν•˜λŠ” λ‚΄λΆ€ 맡을 μž‘μ„±ν•©λ‹ˆλ‹€. λͺ¨λ“ˆ Bκ°€ λͺ¨λ“ˆ Aλ₯Ό κ°€μ Έμ˜€λ©΄ λͺ¨λ“ˆ AλŠ” λͺ¨λ“ˆ B에 영ν–₯을 μ€λ‹ˆλ‹€. μž¬κ·€μ μΈ 영ν–₯μ—λŠ” 각 λͺ¨λ“ˆμ΄ 이전 λͺ¨λ“ˆμ„ κ°€μ Έμ˜€λŠ” λͺ¨λ“ˆ 체인이 ν•„μš”ν•©λ‹ˆλ‹€. +3. 단계 1μ—μ„œ μˆ˜μ§‘ν•œ νŒŒμΌμ— 이 맡을 μ μš©ν•˜μ—¬ PR에 영ν–₯을 λ°›λŠ” λͺ¨λΈ 파일 λͺ©λ‘μ„ μ–»μŠ΅λ‹ˆλ‹€. +4. 각 νŒŒμΌμ„ ν•΄λ‹Ήν•˜λŠ” ν…ŒμŠ€νŠΈ νŒŒμΌμ— λ§€ν•‘ν•˜κ³  μ‹€ν–‰ν•  ν…ŒμŠ€νŠΈ λͺ©λ‘μ„ κ°€μ Έμ˜΅λ‹ˆλ‹€. + +λ‘œμ»¬μ—μ„œ 슀크립트λ₯Ό μ‹€ν–‰ν•˜λ©΄ 단계 1, 3 및 4의 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜μ—¬ μ‹€ν–‰λ˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν¬λ¦½νŠΈλŠ” λ˜ν•œ `test_list.txt`λΌλŠ” νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ μ‹€ν–‰ν•  ν…ŒμŠ€νŠΈ λͺ©λ‘μ„ ν¬ν•¨ν•˜λ©°, λ‹€μŒ λͺ…λ ΉμœΌλ‘œ ν•΄λ‹Ή ν…ŒμŠ€νŠΈλ₯Ό λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€: + +```bash +python -m pytest -n 8 --dist=loadfile -rA -s $(cat test_list.txt) +``` + +잘λͺ»λœ 사항이 λˆ„λ½λ˜μ—ˆμ„ 경우, 전체 ν…ŒμŠ€νŠΈ λͺ¨μŒλ„ 맀일 μ‹€ν–‰λ©λ‹ˆλ‹€. + +## λ¬Έμ„œ λΉŒλ“œ [[documentation-build]] + +`build_pr_documentation` μž‘μ—…μ€ λ¬Έμ„œλ₯Ό λΉŒλ“œν•˜κ³  미리 보기λ₯Ό μƒμ„±ν•˜μ—¬ PR이 λ³‘ν•©λœ ν›„ λͺ¨λ“  것이 μ œλŒ€λ‘œ λ³΄μ΄λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. λ‘œλ΄‡μ€ PR에 λ¬Έμ„œ 미리보기 링크λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. PRμ—μ„œ λ§Œλ“  λ³€κ²½ 사항은 μžλ™μœΌλ‘œ 미리보기에 μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€. λ¬Έμ„œ λΉŒλ“œμ— μ‹€νŒ¨ν•œ 경우 **μ„ΈλΆ€ 정보**λ₯Ό ν΄λ¦­ν•˜μ—¬ μ–΄λ””μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 였λ₯˜λŠ” 주둜 `toctree`에 λˆ„λ½λœ 파일과 같이 κ°„λ‹¨ν•œ 였λ₯˜μž…λ‹ˆλ‹€. + +λ‘œμ»¬μ—μ„œ λ¬Έμ„œλ₯Ό λΉŒλ“œν•˜κ±°λ‚˜ 미리 λ³Ό 경우, docs ν΄λ”μ˜ [`README.md`](https://github.com/huggingface/transformers/tree/main/docs)λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. + +## μ½”λ“œ 및 λ¬Έμ„œ μŠ€νƒ€μΌ [[code-and-documentation-style]] + +`black`κ³Ό `ruff`λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  μ†ŒμŠ€ 파일, 예제 및 ν…ŒμŠ€νŠΈμ— μ½”λ“œ ν˜•μ‹μ„ μ μš©ν•©λ‹ˆλ‹€. λ˜ν•œ, `utils/style_doc.py`μ—μ„œ λ¬Έμ„œ λ¬Έμžμ—΄κ³Ό `rst` 파일의 ν˜•μ‹, 그리고 Transformers의 `__init__.py` νŒŒμΌμ—μ„œ μ‹€ν–‰λ˜λŠ” μ§€μ—°λœ μž„ν¬νŠΈμ˜ μˆœμ„œμ— λŒ€ν•œ μ‚¬μš©μž μ •μ˜ 도ꡬ가 μžˆμŠ΅λ‹ˆλ‹€. 이 λͺ¨λ“  것은 λ‹€μŒμ„ μ‹€ν–‰ν•¨μœΌλ‘œμ¨ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€: + +```bash +make style +``` + +CIλŠ” μ΄λŸ¬ν•œ 사항이 `ci/circleci: check_code_quality` 검사 λ‚΄μ—μ„œ μ μš©λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. λ˜ν•œ `ruff`도 μ‹€ν–‰λ˜λ©°, μ •μ˜λ˜μ§€ μ•Šμ€ λ³€μˆ˜λ‚˜ μ‚¬μš©λ˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό λ°œκ²¬ν•˜λ©΄ κ²½κ³ ν•©λ‹ˆλ‹€. 이 검사λ₯Ό λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜λ €λ©΄ λ‹€μŒμ„ μ‚¬μš©ν•˜μ„Έμš”: + +```bash +make quality +``` + +이 μž‘μ—…μ€ λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ  수 μžˆμœΌλ―€λ‘œ ν˜„μž¬ λΈŒλžœμΉ˜μ—μ„œ μˆ˜μ •ν•œ νŒŒμΌμ— λŒ€ν•΄μ„œλ§Œ λ™μΌν•œ μž‘μ—…μ„ μ‹€ν–‰ν•˜λ €λ©΄ λ‹€μŒμ„ μ‹€ν–‰ν•˜μ„Έμš”. + +```bash +make fixup +``` + +이 λͺ…령은 ν˜„μž¬ λΈŒλžœμΉ˜μ—μ„œ μˆ˜μ •ν•œ νŒŒμΌμ— λŒ€ν•œ λͺ¨λ“  좔가적인 검사도 μ‹€ν–‰ν•©λ‹ˆλ‹€. 이제 이듀을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. + +## μ €μž₯μ†Œ 일관성 [[repository-consistency]] + +μ΄λŠ” PR이 μ €μž₯μ†Œλ₯Ό 정상적인 μƒνƒœλ‘œ μœ μ§€ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” λͺ¨λ“  ν…ŒμŠ€νŠΈλ₯Ό λͺ¨μ€ 것이며, `ci/circleci: check_repository_consistency` κ²€μ‚¬μ—μ„œ μˆ˜ν–‰λ©λ‹ˆλ‹€. λ‹€μŒμ„ μ‹€ν–‰ν•¨μœΌλ‘œμ¨ λ‘œμ»¬μ—μ„œ 이 검사λ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. + +```bash +make repo-consistency +``` + +이 κ²€μ‚¬λŠ” λ‹€μŒμ„ ν™•μΈν•©λ‹ˆλ‹€. + +- init에 μΆ”κ°€λœ λͺ¨λ“  객체가 λ¬Έμ„œν™”λ˜μ—ˆλŠ”μ§€ (`utils/check_repo.py`μ—μ„œ μˆ˜ν–‰) +- `__init__.py` 파일의 두 μ„Ήμ…˜μ— λ™μΌν•œ λ‚΄μš©μ΄ μžˆλŠ”μ§€ (`utils/check_inits.py`μ—μ„œ μˆ˜ν–‰) +- λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ λ³΅μ‚¬λœ μ½”λ“œκ°€ 원본과 μΌμΉ˜ν•˜λŠ”μ§€ (`utils/check_copies.py`μ—μ„œ μˆ˜ν–‰) +- λͺ¨λ“  ꡬ성 ν΄λž˜μŠ€μ— docstring에 μ–ΈκΈ‰λœ μœ νš¨ν•œ μ²΄ν¬ν¬μΈνŠΈκ°€ 적어도 ν•˜λ‚˜ μžˆλŠ”μ§€ (`utils/check_config_docstrings.py`μ—μ„œ μˆ˜ν–‰) +- λͺ¨λ“  ꡬ성 ν΄λž˜μŠ€κ°€ ν•΄λ‹Ήν•˜λŠ” λͺ¨λΈλ§ νŒŒμΌμ—μ„œ μ‚¬μš©λ˜λŠ” μ†μ„±λ§Œ ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€ (`utils/check_config_attributes.py`μ—μ„œ μˆ˜ν–‰) +- README와 λ¬Έμ„œ 인덱슀의 λ²ˆμ—­μ΄ 메인 README와 λ™μΌν•œ λͺ¨λΈ λͺ©λ‘μ„ κ°€μ§€κ³  μžˆλŠ”μ§€ (`utils/check_copies.py`μ—μ„œ μˆ˜ν–‰) +- λ¬Έμ„œμ˜ μžλ™ μƒμ„±λœ ν…Œμ΄λΈ”μ΄ μ΅œμ‹  μƒνƒœμΈμ§€ (`utils/check_table.py`μ—μ„œ μˆ˜ν–‰) +- λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” 선택적 쒅속성이 μ„€μΉ˜λ˜μ§€ μ•Šμ•˜λ”λΌλ„ λͺ¨λ“  객체가 μ‚¬μš© κ°€λŠ₯ν•œμ§€ (`utils/check_dummies.py`μ—μ„œ μˆ˜ν–‰) + +μ΄λŸ¬ν•œ 검사가 μ‹€νŒ¨ν•˜λŠ” 경우, 처음 두 κ°€μ§€ ν•­λͺ©μ€ μˆ˜λ™μœΌλ‘œ μˆ˜μ •ν•΄μ•Ό ν•˜λ©°, λ‚˜λ¨Έμ§€ λ„€ κ°€μ§€ ν•­λͺ©μ€ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ—¬ μžλ™μœΌλ‘œ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. + +```bash +make fix-copies +``` + +좔가적인 κ²€μ‚¬λŠ” μƒˆλ‘œμš΄ λͺ¨λΈμ„ μΆ”κ°€ν•˜λŠ” PR에 λŒ€ν•œ κ²ƒμœΌλ‘œ, 주둜 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€: + +- μΆ”κ°€λœ λͺ¨λ“  λͺ¨λΈμ΄ Auto-mapping에 μžˆλŠ”μ§€ (`utils/check_repo.py`μ—μ„œ μˆ˜ν–‰) + +- λͺ¨λ“  λͺ¨λΈμ΄ μ˜¬λ°”λ₯΄κ²Œ ν…ŒμŠ€νŠΈλ˜μ—ˆλŠ”μ§€ (`utils/check_repo.py`μ—μ„œ μˆ˜ν–‰) + + + +### 볡사본 확인 [[check-copies]] + +Transformers λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λͺ¨λΈ μ½”λ“œμ— λŒ€ν•΄ 맀우 μ™„κ³ ν•˜λ©°, 각 λͺ¨λΈμ€ λ‹€λ₯Έ λͺ¨λΈμ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³  μ™„μ „νžˆ 단일 파일둜 κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜κΈ° μœ„ν•΄ νŠΉμ • λͺ¨λΈμ˜ μ½”λ“œ 볡사본이 원본과 μΌκ΄€λœ μƒνƒœλ‘œ μœ μ§€λ˜λŠ”μ§€ ν™•μΈν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 버그 μˆ˜μ •μ΄ ν•„μš”ν•œ 경우 λ‹€λ₯Έ λͺ¨λΈμ— 영ν–₯을 μ£ΌλŠ” λͺ¨λ“  λͺ¨λΈμ„ λ³Ό 수 있으며 μˆ˜μ •μ„ μ μš©ν• μ§€ μˆ˜μ •λœ 사본을 μ‚­μ œν• μ§€ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. + + + +파일이 λ‹€λ₯Έ 파일의 μ™„μ „ν•œ 사본인 경우 ν•΄λ‹Ή νŒŒμΌμ„ `utils/check_copies.py`의 `FULL_COPIES` μƒμˆ˜μ— 등둝해야 ν•©λ‹ˆλ‹€. + + + +이 λ©”μ»€λ‹ˆμ¦˜μ€ `# Copied from xxx` ν˜•μ‹μ˜ 주석을 기반으둜 ν•©λ‹ˆλ‹€. `xxx`μ—λŠ” μ•„λž˜μ— λ³΅μ‚¬λ˜λŠ” 클래슀 λ˜λŠ” ν•¨μˆ˜μ˜ 전체 κ²½λ‘œκ°€ ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ `RobertaSelfOutput`은 `BertSelfOutput` 클래슀의 λ³΅μ‚¬λ³Έμž…λ‹ˆλ‹€. λ”°λΌμ„œ [μ—¬κΈ°](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L289)μ—μ„œ 주석이 μžˆμŠ΅λ‹ˆλ‹€: + + +```py +# Copied from transformers.models.bert.modeling_bert.BertSelfOutput +``` + +클래슀 전체에 μˆ˜μ •μ„ μ μš©ν•˜λŠ” λŒ€μ‹ μ— 볡사본과 κ΄€λ ¨μžˆλŠ” λ©”μ„œλ“œμ— μ μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ [μ—¬κΈ°](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L598)μ—μ„œ `RobertaPreTrainedModel._init_weights`κ°€ `BertPreTrainedModel`의 λ™μΌν•œ λ©”μ„œλ“œμ—μ„œ λ³΅μ‚¬λœ 것을 λ³Ό 수 있으며 ν•΄λ‹Ή 주석이 μžˆμŠ΅λ‹ˆλ‹€: + +```py +# Copied from transformers.models.bert.modeling_bert.BertPreTrainedModel._init_weights +``` + +볡사본이 μ΄λ¦„λ§Œ λ‹€λ₯Έ κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€: 예λ₯Ό λ“€μ–΄ `RobertaAttention`μ—μ„œ `BertSelfAttention` λŒ€μ‹  `RobertaSelfAttention`을 μ‚¬μš©ν•˜μ§€λ§Œ κ·Έ μ™Έμ—λŠ” μ½”λ“œκ°€ μ™„μ „νžˆ λ™μΌν•©λ‹ˆλ‹€: 이 λ•Œ `# Copied from`은 `Copied from xxx with foo->bar`와 같은 κ°„λ‹¨ν•œ λ¬Έμžμ—΄ λŒ€μ²΄λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. μ΄λŠ” λͺ¨λ“  `foo` μΈμŠ€ν„΄μŠ€λ₯Ό `bar`둜 λ°”κΏ”μ„œ μ½”λ“œλ₯Ό λ³΅μ‚¬ν•©λ‹ˆλ‹€. [μ—¬κΈ°](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L304C1-L304C86)μ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€: + +```py +# Copied from transformers.models.bert.modeling_bert.BertAttention with Bert->Roberta +``` + +ν™”μ‚΄ν‘œ μ£Όλ³€μ—λŠ” 곡백이 μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€(곡백이 λŒ€μ²΄ νŒ¨ν„΄μ˜ 일뢀인 κ²½μš°λŠ” μ˜ˆμ™Έμž…λ‹ˆλ‹€). + +λŒ€μ²΄ νŒ¨ν„΄μ„ μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ—¬ μ—¬λŸ¬ νŒ¨ν„΄μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ `CamemberForMaskedLM`은 두 κ°€μ§€ λŒ€μ²΄ 사항을 κ°€μ§„ `RobertaForMaskedLM`의 λ³΅μ‚¬λ³Έμž…λ‹ˆλ‹€: `Roberta`λ₯Ό `Camembert`둜 λŒ€μ²΄ν•˜κ³  `ROBERTA`λ₯Ό `CAMEMBERT`둜 λŒ€μ²΄ν•©λ‹ˆλ‹€. [μ—¬κΈ°](https://github.com/huggingface/transformers/blob/15082a9dc6950ecae63a0d3e5060b2fc7f15050a/src/transformers/models/camembert/modeling_camembert.py#L929)μ—μ„œ 이것이 μ£Όμ„μœΌλ‘œ μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€: + +```py +# Copied from transformers.models.roberta.modeling_roberta.RobertaForMaskedLM with Roberta->Camembert, ROBERTA->CAMEMBERT +``` + +μˆœμ„œκ°€ μ€‘μš”ν•œ 경우(이전 μˆ˜μ •κ³Ό μΆ©λŒν•  수 μžˆλŠ” 경우) μˆ˜μ •μ€ μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€. + + + +μƒˆ 변경이 μ„œμ‹μ„ λ³€κ²½ν•˜λŠ” 경우(짧은 이름을 맀우 κΈ΄ μ΄λ¦„μœΌλ‘œ λ°”κΎΈλŠ” 경우) μžλ™ μ„œμ‹ μ§€μ •κΈ°λ₯Ό μ μš©ν•œ ν›„ 볡사본이 κ²€μ‚¬λ©λ‹ˆλ‹€. + + + +νŒ¨ν„΄μ˜ λŒ€μ†Œλ¬Έμžκ°€ λ‹€λ₯Έ 경우(λŒ€λ¬Έμžμ™€ μ†Œλ¬Έμžκ°€ 혼용된 λŒ€μ²΄ 양식) `all-casing` μ˜΅μ…˜μ„ μΆ”κ°€ν•˜λŠ” 방법도 μžˆμŠ΅λ‹ˆλ‹€. [μ—¬κΈ°](https://github.com/huggingface/transformers/blob/15082a9dc6950ecae63a0d3e5060b2fc7f15050a/src/transformers/models/mobilebert/modeling_mobilebert.py#L1237)μ—μ„œ `MobileBertForSequenceClassification`μ—μ„œ μ‚¬μš©λœ μ˜ˆμ‹œλ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€: + +```py +# Copied from transformers.models.bert.modeling_bert.BertForSequenceClassification with Bert->MobileBert all-casing +``` + +이 경우, μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 λ³΅μ‚¬λ©λ‹ˆλ‹€: +- `MobileBert`μ—μ„œ `Bert`둜(예: `MobileBertModel`을 initμ—μ„œ μ‚¬μš©ν•  λ•Œ) +- `mobilebert`μ—μ„œ `bert`둜(예: `self.mobilebert`λ₯Ό μ •μ˜ν•  λ•Œ) +- `MOBILEBERT`μ—μ„œ `BERT`둜(`MOBILEBERT_INPUTS_DOCSTRING` μƒμˆ˜μ—μ„œ)