import{s as Or,o as Dr,n as Yr}from"../chunks/scheduler.56730f09.js";import{S as Kr,i as eo,g as r,s as i,u as c,A as to,h as o,f as t,c as s,j as d,v as h,y as a,k as f,o as p,a as n,w as v,d as w,t as T,x as _}from"../chunks/index.ba464511.js";import{T as Vr}from"../chunks/Tip.70442610.js";import{I as Q}from"../chunks/IconCopyLink.89bde88e.js";import{C as V}from"../chunks/CodeBlock.2302fd0d.js";function lo(ut){let m,$="사용하려는 모델이 이미 해당하는 TensorFlow 아키텍처가 있는지 확실하지 않나요?",b,x,C='선택한 모델(<a href="https://huggingface.co/bert-base-uncased/blob/main/config.json#L14" rel="nofollow">예</a>)의 <code>config.json</code>의 <code>model_type</code> 필드를 확인해보세요. 🤗 Transformers의 해당 모델 폴더에는 “modeling_tf”로 시작하는 파일이 있는 경우, 해당 모델에는 해당 TensorFlow 아키텍처(<a href="https://github.com/huggingface/transformers/tree/main/src/transformers/models/bert" rel="nofollow">예</a>)가 있다는 의미입니다.';return{c(){m=r("p"),m.textContent=$,b=i(),x=r("p"),x.innerHTML=C},l(u){m=o(u,"P",{"data-svelte-h":!0}),a(m)!=="svelte-3qj6xw"&&(m.textContent=$),b=s(u),x=o(u,"P",{"data-svelte-h":!0}),a(x)!=="svelte-nfcl4l"&&(x.innerHTML=C)},m(u,y){n(u,m,y),n(u,b,y),n(u,x,y)},p:Yr,d(u){u&&(t(m),t(b),t(x))}}}function no(ut){let m,$=`TensorFlow 모델 아키텍처에 작업을 시작하기 전에 해당 작업이 진행 중인지 확인하세요.
<code>BrandNewBert</code>를 검색하여
<a href="https://github.com/huggingface/transformers/pulls?q=is%3Apr" rel="nofollow">pull request GitHub 페이지</a>에서 TensorFlow 관련 pull request가 없는지 확인할 수 있습니다.`;return{c(){m=r("p"),m.innerHTML=$},l(b){m=o(b,"P",{"data-svelte-h":!0}),a(m)!=="svelte-1fa0y6q"&&(m.innerHTML=$)},m(b,x){n(b,m,x)},p:Yr,d(b){b&&t(m)}}}function ro(ut){let m,$,b,x,C,u,y,Y,dn,ct,_n="어떻게 🤗 Transformers 모델을 TensorFlow로 변환하나요?",kt,O,bn='🤗 Transformers에서처럼 사용할 수 있는 여러 가지 프레임워크가 있다는 것은 애플리케이션을 설계할 때 그들의 강점을 유연하게 이용할 수 있다는 장점이 있지만, 모델 별로 호환성을 추가해야 한다는 단점 또한 존재한다는 것을 의미합니다. 좋은 소식은 기존 모델에 TensorFlow 호환성을 추가하는 것이 <a href="add_new_model">처음부터 새로운 모델을 추가하는 것</a>보다도 간단하다는 것입니다!',Nt,D,xn="만약 대규모 TensorFlow 모델을 더 깊이 이해하려거나, 오픈 소스에 큰 기여를 하려거나, 선택한 모델에 Tensorflow를 활용하려한다면, 이 안내서는 여러분께 도움이 될 것입니다.",Ut,K,Cn=`이 가이드는 Hugging Face 팀의 최소한의 감독 아래에서 🤗 Transformers에서 사용되는 TensorFlow 모델 가중치와/또는 아키텍처를 기여할 수 있는 커뮤니티 구성원인 여러분을 대상으로 합니다.
새로운 모델을 작성하는 것은 쉬운 일이 아니지만, 이 가이드를 통해 조금 덜 힘들고 훨씬 쉬운 작업으로 만들 수 있습니다.
모두의 경험을 모으는 것은 이 작업을 점차적으로 더 쉽게 만드는 데 굉장히 중요하기 때문에, 이 가이드를 개선시킬만한 제안이 떠오르면 공유하시는걸 적극적으로 권장합니다!`,Bt,ee,$n="더 깊이 알아보기 전에, 🤗 Transformers를 처음 접하는 경우 다음 자료를 확인하는 것이 좋습니다:",Jt,te,yn='<li><a href="add_new_model#general-overview-of-transformers">🤗 Transformers의 일반 개요</a></li> <li><a href="https://huggingface.co/blog/tensorflow-philosophy" rel="nofollow">Hugging Face의 TensorFlow 철학</a></li>',Rt,le,Mn="이 가이드의 나머지 부분에서는 새로운 TensorFlow 모델 아키텍처를 추가하는 데 필요한 단계, Pytorch를 TensorFlow 모델 가중치로 변환하는 절차 및 ML 프레임워크 간의 불일치를 효율적으로 디버깅하는 방법을 알게 될 것입니다. 시작해봅시다!",Zt,N,St,M,U,Ct,ne,mn,ht,Ln="TensorFlow 모델 아키텍처 코드 추가하는 단계별 가이드",Et,re,gn=`대규모 아키텍처를 가진 모델을 설계하는 방법에는 여러가지가 있으며, 해당 설계를 구현하는 방법도 여러 가지입니다.
그러나 우리는 <a href="add_new_model#general-overview-of-transformers">🤗 Transformers 일반 개요</a>에서 언급한 대로 일관된 설계 선택에 따라야지만 🤗 Transformers를 사용하기 편할 것이라는 확고한 의견을 가지고 있습니다.
우리의 경험을 통해 TensorFlow 모델을 추가하는 데 관련된 중요한 몇 가지 사항을 알려 드릴 수 있습니다:`,jt,oe,Hn="<li>이미 있는걸 다시 개발하려 하지 마세요! 최소한 2개의 이미 구현된 모델을 대개 참조해야 합니다. 구현하려는 모델과 기능상 동일한 Pytorch 모델 하나와 같은 문제 유형을 풀고 있는 다른 TensorFlow 모델 하나를 살펴보세요.</li> <li>우수한 모델 구현은 시간이 지나도 남아있습니다. 이것은 코드가 아름답다는 이유가 아니라 코드가 명확하고 디버깅 및 개선이 쉽기 때문입니다. TensorFlow 구현에서 다른 모델들과 패턴을 똑같이 하고 Pytorch 구현과의 불일치를 최소화하여 메인테이너의 업무를 쉽게 한다면, 기여한 코드가 오래도록 유지될 수 있습니다.</li> <li>필요하다면 도움을 요청하세요! 🤗 Transformers 팀은 여러분을 돕기 위해 있으며, 여러분이 직면한 동일한 문제에 대한 해결책을 이미 찾은 경우도 있을 수 있습니다.</li>",At,ie,Fn="TensorFlow 모델 아키텍처를 추가하는 데 필요한 단계를 개략적으로 써보면:",Gt,se,Pn="<li>변환하려는 모델 선택</li> <li>transformers 개발 환경 준비</li> <li>(선택 사항) 이론적 측면 및 기존 구현 이해</li> <li>모델 아키텍처 구현</li> <li>모델 테스트 구현</li> <li>PR (pull request) 제출</li> <li>(선택 사항) 데모 빌드 및 공유</li>",It,L,B,$t,ae,un,vt,kn="1.-3. 모델 기여 준비",Xt,fe,Nn="<strong>1. 변환하려는 모델 선택</strong>",qt,pe,Un=`우선 기본 사항부터 시작해 보겠습니다. 먼저 변환하려는 아키텍처를 알아야 합니다.
특정 아키텍처에 대한 관심 없는 경우, 🤗 Transformers 팀에게 제안을 요청하는 것은 여러분의 영향력을 극대화하는 좋은 방법입니다.
우리는 TensorFlow에서 빠져 있는 가장 유명한 아키텍처로 이끌어 드리겠습니다.
TensorFlow에서 사용할 모델이 이미 🤗 Transformers에 TensorFlow 아키텍처 구현이 있지만 가중치가 없는 경우,
이 페이지의 <a href="#adding-tensorflow-weights-to-hub">가중치 추가 섹션</a>으로 바로 이동하셔도 됩니다.`,Wt,de,Bn='간단히 말해서, 이 안내서의 나머지 부분은 TensorFlow 버전의 <em>BrandNewBert</em>(<a href="add_new_model">가이드</a>와 동일한 예제)를 기여하려고 결정했다고 가정합니다.',zt,J,Qt,me,Jn="<strong>2. transformers 개발 환경 준비</strong>",Vt,ue,Rn="모델 아키텍처를 선택한 후, 관련 작업을 수행할 의도를 미리 알리기 위해 Draft PR을 여세요. 아래 지침대로 하시면 환경을 설정하고 Draft PR을 열 수 있습니다.",Yt,ce,Zn='<li>‘Fork’ 버튼을 클릭하여 <a href="https://github.com/huggingface/transformers" rel="nofollow">리포지터리</a>를 포크하세요. 이렇게 하면 GitHub 사용자 계정에 코드의 사본이 생성됩니다.</li>',Ot,R,Sn="<li><code>transformers</code> 포크를 로컬 디스크에 클론하고 원본 리포지터리를 원격 리포지터리로 추가하세요.</li>",Dt,he,Kt,Z,En="<li>개발 환경을 설정하세요. 예를 들어, 다음 명령을 실행하여 개발 환경을 설정할 수 있습니다.</li>",el,ve,tl,we,jn="운영 체제에 따라서 Transformers의 선택적 종속성이 증가하면서 위 명령이 실패할 수도 있습니다. 그런 경우 TensorFlow를 설치한 후 다음을 실행하세요.",ll,Te,nl,_e,An="<strong>참고:</strong> CUDA를 설치할 필요는 없습니다. 새로운 모델이 CPU에서 작동하도록 만드는 것만으로 충분합니다.",rl,S,Gn="<li>메인 브랜치에서 만드려는 기능이 잘 표현되는 이름으로 브랜치를 만듭니다.</li>",ol,be,il,E,In="<li>메인 브랜치의 현재 상태를 페치(fetch)하고 리베이스하세요.</li>",sl,xe,al,j,Xn="<li><p><code>transformers/src/models/brandnewbert/</code>에 <code>modeling_tf_brandnewbert.py</code>라는 빈 <code>.py</code> 파일을 추가하세요. 이 파일이 TensorFlow 모델 파일이 될 것입니다.</p></li> <li><p>변경 사항을 계정에 푸시하세요.</p></li>",fl,Ce,pl,A,qn="<li>만족스러운 경우 GitHub에서 포크된 웹 페이지로 이동합니다. “Pull request”를 클릭합니다. Hugging Face 팀의 GitHub ID를 리뷰어로 추가해서, 앞으로의 변경 사항에 대해 Hugging Face 팀이 알림을 받을 수 있도록 합니다.</li>",dl,G,Wn="<li>GitHub Pull Requests 페이지의 오른쪽에 있는 “Convert to draft”를 클릭하여 PR을 초안으로 변경하세요.</li>",ml,$e,zn="이제 🤗 Transformers에서 <em>BrandNewBert</em>를 TensorFlow로 변환할 개발 환경을 설정했습니다.",ul,ye,Qn="<strong>3. (선택 사항) 이론적 측면 및 기존 구현 이해</strong>",cl,Me,Vn='<em>BrandNewBert</em>처럼 자세한 글이 있다면 시간을 내어 논문을 읽는걸 추천드립니다. 이해하기 어려운 부분이 많을 수 있습니다. 그렇다고 해서 걱정하지 마세요! 목표는 논문의 심도있는 이론적 이해가 아니라 TensorFlow를 사용하여 🤗 Transformers에 모델을 효과적으로 다시 구현하는 데 필요한 필수 정보를 추출하는 것입니다. 많은 시간을 이론적 이해에 투자할 필요는 없지만 실용적인 측면에서 현재 존재하는 모델 문서 페이지(e.g. <a href="model_doc/bert">model docs for BERT</a>)에 집중하는 것이 좋습니다.',hl,Le,Yn="모델의 기본 사항을 이해한 후, 기존 구현을 이해하는 것이 중요합니다. 이는 작업 중인 모델에 대한 실제 구현이 여러분의 기대와 일치함을 확인하고, TensorFlow 측면에서의 기술적 문제를 예상할 수 있습니다.",vl,ge,On='막대한 양의 정보를 처음으로 학습할 때 압도당하는 것은 자연스러운 일입니다. 이 단계에서 모델의 모든 측면을 이해해야 하는 필요는 전혀 없습니다. 그러나 우리는 Hugging Face의 <a href="https://discuss.huggingface.co/" rel="nofollow">포럼</a>을 통해 질문이 있는 경우 대답을 구할 것을 권장합니다.',wl,g,I,yt,He,cn,wt,Dn="4. 모델 구현",Tl,Fe,Kn=`이제 드디어 코딩을 시작할 시간입니다. 우리의 제안된 시작점은 PyTorch 파일 자체입니다: <code>modeling_brand_new_bert.py</code>의 내용을
<code>src/transformers/models/brand_new_bert/</code> 내부의
<code>modeling_tf_brand_new_bert.py</code>에 복사합니다. 이 섹션의 목표는 파일을 수정하고 🤗 Transformers의 import 구조를 업데이트하여 <code>TFBrandNewBert</code> 및 <code>TFBrandNewBert.from_pretrained(model_repo, from_pt=True)</code>가 성공적으로 작동하는 TensorFlow <em>BrandNewBert</em> 모델을 가져올 수 있도록 하는 것입니다.`,_l,Pe,er="유감스럽게도, PyTorch 모델을 TensorFlow로 변환하는 규칙은 없습니다. 그러나 프로세스를 가능한한 원활하게 만들기 위해 다음 팁을 따를 수 있습니다.",bl,ke,tr=`<li>모든 클래스 이름 앞에 <code>TF</code>를 붙입니다(예: <code>BrandNewBert</code>는 <code>TFBrandNewBert</code>가 됩니다).</li> <li>대부분의 PyTorch 작업에는 직접적인 TensorFlow 대체가 있습니다. 예를 들어, <code>torch.nn.Linear</code>는 <code>tf.keras.layers.Dense</code>에 해당하고, <code>torch.nn.Dropout</code>은 <code>tf.keras.layers.Dropout</code>에 해당합니다. 특정 작업에 대해 확신이 없는 경우 <a href="https://www.tensorflow.org/api_docs/python/tf" rel="nofollow">TensorFlow 문서</a>나 <a href="https://pytorch.org/docs/stable/" rel="nofollow">PyTorch 문서</a>를 참조할 수 있습니다.</li> <li>🤗 Transformers 코드베이스에서 패턴을 찾으세요. 직접적인 대체가 없는 특정 작업을 만나면 다른 사람이 이미 동일한 문제를 해결한 경우가 많습니다.</li> <li>기본적으로 PyTorch와 동일한 변수 이름과 구조를 유지하세요. 이렇게 하면 디버깅과 문제 추적, 그리고 문제 해결 추가가 더 쉬워집니다.</li> <li>일부 레이어는 각 프레임워크마다 다른 기본값을 가지고 있습니다. 대표적인 예로 배치 정규화 레이어의 epsilon은 <a href="https://pytorch.org/docs/stable/generated/torch.nn.BatchNorm2d.html#torch.nn.BatchNorm2d" rel="nofollow">PyTorch</a>에서 <code>1e-5</code>이고 <a href="https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization" rel="nofollow">TensorFlow</a>에서 <code>1e-3</code>입니다. 문서를 모두 확인하세요!</li> <li>PyTorch의 <code>nn.Parameter</code> 변수는 일반적으로 TF 레이어의 <code>build()</code> 내에서 초기화해야 합니다. 다음 예를 참조하세요: <a href="https://github.com/huggingface/transformers/blob/655f72a6896c0533b1bdee519ed65a059c2425ac/src/transformers/models/vit_mae/modeling_vit_mae.py#L212" rel="nofollow">PyTorch</a> /
<a href="https://github.com/huggingface/transformers/blob/655f72a6896c0533b1bdee519ed65a059c2425ac/src/transformers/models/vit_mae/modeling_tf_vit_mae.py#L220" rel="nofollow">TensorFlow</a></li> <li>PyTorch 모델의 함수 상단에 <code>#copied from ...</code>가 있는 경우, TensorFlow 모델에 TensorFlow 아키텍처가 있다면 TensorFlow 모델이 해당 함수를 복사한 아키텍처에서 사용할 수 있습니다.</li> <li>TensorFlow 함수에서 <code>name</code> 속성을 올바르게 할당하는 것은 <code>from_pt=True</code> 가중치 교차 로딩을 수행하는 데 중요합니다. <code>name</code>은 대부분 PyTorch 코드의 해당 변수의 이름입니다. <code>name</code>이 제대로 설정되지 않으면 모델 가중치를 로드할 때 오류 메시지에서 확인할 수 있습니다.</li> <li>기본 모델 클래스인 <code>BrandNewBertModel</code>의 로직은 실제로 Keras 레이어 서브클래스(<a href="https://github.com/huggingface/transformers/blob/4fd32a1f499e45f009c2c0dea4d81c321cba7e02/src/transformers/models/bert/modeling_tf_bert.py#L719" rel="nofollow">예시</a>)인 <code>TFBrandNewBertMainLayer</code>에 있습니다. <code>TFBrandNewBertModel</code>은 이 레이어를 감싸기만 하는 래퍼 역할을 합니다.</li> <li>Keras 모델은 사전 훈련된 가중치를 로드하기 위해 빌드되어야 합니다. 따라서 <code>TFBrandNewBertPreTrainedModel</code>은 모델의 입력 예제인 <code>dummy_inputs</code>(<a href="https://github.com/huggingface/transformers/blob/4fd32a1f499e45f009c2c0dea4d81c321cba7e02/src/transformers/models/bert/modeling_tf_bert.py#L916" rel="nofollow">예시</a>) 유지해야 합니다.</li> <li>도움이 필요한 경우 도움을 요청하세요. 우리는 여기 있어서 도움을 드리기 위해 있는 것입니다! 🤗</li>`,xl,Ne,lr='모델 파일 자체 외에도 모델 클래스 및 관련 문서 페이지에 대한 포인터를 추가해야 합니다. 이 부분은 다른 PR(<a href="https://github.com/huggingface/transformers/pull/18020/files" rel="nofollow">예시</a>)의 패턴을 따라 완전히 완료할 수 있습니다. 다음은 필요한 수동 변경 목록입니다.',Cl,Ue,nr="<li><code>src/transformers/__init__.py</code>에 <em>BrandNewBert</em>의 모든 공개 클래스를 포함합니다.</li> <li><code>src/transformers/models/auto/modeling_tf_auto.py</code>에서 <em>BrandNewBert</em> 클래스를 해당 Auto 클래스에 추가합니다.</li> <li><code>src/transformers/utils/dummy_tf_objects.py</code>에 <em>BrandNewBert</em>와 관련된 레이지 로딩 클래스를 추가합니다.</li> <li><code>src/transformers/models/brand_new_bert/__init__.py</code>에서 공개 클래스에 대한 import 구조를 업데이트합니다.</li> <li><code>docs/source/en/model_doc/brand_new_bert.md</code>에서 <em>BrandNewBert</em>의 공개 메서드에 대한 문서 포인터를 추가합니다.</li> <li><code>docs/source/en/model_doc/brand_new_bert.md</code>의 <em>BrandNewBert</em> 기여자 목록에 자신을 추가합니다.</li> <li>마지막으로 ✅ 녹색 체크박스를 TensorFlow 열 docs/source/en/index.md 안 BrandNewBert에 추가합니다.</li>",$l,Be,rr="구현이 만족하면 다음 체크리스트를 실행하여 모델 아키텍처가 준비되었는지 확인하세요.",yl,Je,or="<li>훈련 시간에 다르게 동작하는 <code>training</code> 인수로 불리는 모든 레이어(예: Dropout)는 최상위 클래스에서 전파됩니다.</li> <li>#copied from …가능할 때마다 사용했습니다.</li> <li><code>TFBrandNewBertMainLayer</code>와 그것을 사용하는 모든 클래스는 <code>call</code>함수로 <code>@unpack_inputs</code>와 함께 데코레이터 됩니다.</li> <li><code>TFBrandNewBertMainLayer</code>는 <code>@keras_serializable</code>로 데코레이터 됩니다.</li> <li>TensorFlow 모델은 <code>TFBrandNewBert.from_pretrained(model_repo, from_pt=True)</code>를 사용하여 PyTorch 가중치에서 로드할 수 있습니다.</li> <li>예상 입력 형식을 사용하여 TensorFlow 모델을 호출할 수 있습니다.</li>",Ml,H,X,Mt,Re,hn,Tt,ir="5. 모델 테스트 구현",Ll,Ze,sr="TensorFlow 모델 아키텍처를 구현하는 데 성공했습니다! 이제 TensorFlow 모델을 테스트하는 구현을 작성할 차례입니다. 이를 통해 모델이 예상대로 작동하는지 확인할 수 있습니다. 이전에 우리는 <code>test_modeling_brand_new_bert.py</code> 파일을 <code>tests/models/brand_new_bert/ into test_modeling_tf_brand_new_bert.py</code>에 복사한 뒤, TensorFlow로 교체하는 것이 좋습니다. 지금은, 모든 <code>.from_pretrained()</code>을 <code>from_pt=True</code>를 사용하여 존재하는 Pytorch 가중치를 가져오도록 해야합니다.",gl,Se,ar="완료하셨으면, 이제 진실의 순간이 찾아왔습니다: 테스트를 실행해 보세요! 😬",Hl,Ee,Fl,je,fr="오류가 많이 나타날 것이지만 괜찮습니다! 기계 학습 모델을 디버깅하는 것은 악명높게 어려우며 성공의 핵심 요소는 인내심입니다 (<code>breakpoint()</code>도 필요합니다). 우리의 경험상으로는 ML 프레임워크 사이의 미묘한 불일치로 인해 가장 어려운 문제가 발생합니다. 이에 대한 몇 가지 지침이 이 가이드의 끝 부분에 있습니다. 다른 경우에는 일반 테스트가 직접 모델에 적용되지 않을 수 있으며, 이 경우 모델 테스트 클래스 레벨에서 재정의를 제안합니다. 문제가 무엇이든지 상관없이 문제가 있으면 당신이 고립되었다면 draft pull request에서 도움을 요청하는 것이 좋습니다.",Pl,Ae,pr="모든 테스트가 통과되면 축하합니다. 이제 모델을 🤗 Transformers 라이브러리에 추가할 준비가 거의 완료된 것입니다! 🎉",kl,Ge,dr='테스트를 추가하는 방법에 대한 자세한 내용은 <a href="https://huggingface.co/transformers/contributing.html#running-tests" rel="nofollow">🤗 Transformers의 테스트 가이드</a>를 참조하세요.',Nl,F,q,Lt,Ie,vn,_t,mr="6.-7. 모든 사용자가 당신의 모델을 사용할 수 있게 하기",Ul,Xe,ur="<strong>6. 풀 요청 제출하기</strong>",Bl,qe,cr="구현과 테스트가 완료되면 풀 요청을 제출할 시간입니다. 코드를 푸시하기 전에 코드 서식 맞추기 유틸리티인 <code>make fixup</code> 🪄 를 실행하세요. 이렇게 하면 자동으로 서식 오류를 수정하며 자동 검사가 실패하는 것을 방지할 수 있습니다.",Jl,We,hr="이제 드래프트 풀 요청을 실제 풀 요청으로 변환하는 시간입니다. “리뷰 준비됨” 버튼을 클릭하고 Joao (<code>@gante</code>)와 Matt (<code>@Rocketknight1</code>)를 리뷰어로 추가하세요. 모델 풀 요청에는 적어도 3명의 리뷰어가 필요하지만, 그들이 당신의 모델에 적절한 추가 리뷰어를 찾을 것입니다.",Rl,ze,vr="모든 리뷰어들이 PR 상태에 만족하면 마지막으로 <code>.from_pretrained()</code> 호출에서 <code>from_pt=True</code> 플래그를 제거하는 것입니다. TensorFlow 가중치가 없기 때문에 이를 추가해야 합니다! 이를 수행하는 방법은 아래 섹션의 지침을 확인하세요.",Zl,Qe,wr="마침내 TensorFlow 가중치가 병합되고, 적어도 3명의 리뷰어 승인을 받았으며 모든 CI 검사가 통과되었다면, 로컬로 테스트를 한 번 더 확인하세요.",Sl,Ve,El,Ye,Tr="그리고 우리는 당신의 PR을 병합할 것입니다! 마일스톤 달성을 축하드립니다! 🎉",jl,Oe,_r="<strong>7. (선택 사항) 데모를 만들고 세상과 공유하기</strong>",Al,De,br="오픈 소스의 가장 어려운 부분 중 하나는 발견입니다. 다른 사용자들이 당신의 멋진 TensorFlow 기여를 어떻게 알 수 있을까요? 물론 적절한 커뮤니케이션으로 가능합니다! 📣",Gl,Ke,xr="커뮤니티와 모델을 공유하는 두 가지 주요 방법이 있습니다:",Il,et,Cr='<li>데모 만들기. Gradio 데모, 노트북 및 모델을 자랑하는 다른 재미있는 방법을 포함합니다. <a href="https://huggingface.co/docs/transformers/community" rel="nofollow">커뮤니티 기반 데모</a>에 노트북을 추가하는 것을 적극 권장합니다.</li> <li>Twitter와 LinkedIn과 같은 소셜 미디어에 이야기 공유하기. 당신의 작업에 자랑스러워하고 커뮤니티와 당신의 업적을 공유해야 합니다. 이제 당신의 모델은 전 세계의 수천 명의 엔지니어와 연구원들에 의해 사용될 수 있습니다 🌍! 우리는 당신의 게시물을 리트윗하고 커뮤니티와 함께 당신의 작업을 공유하는 데 도움이 될 것입니다.</li>',Xl,P,W,gt,tt,wn,bt,$r="🤗 허브에 TensorFlow 가중치 추가하기",ql,lt,yr="TensorFlow 모델 아키텍처가 🤗 Transformers에서 사용 가능하다고 가정하고, PyTorch 가중치를 TensorFlow 가중치로 변환하는 것은 쉽습니다!",Wl,nt,Mr="다음은 그 방법입니다:",zl,rt,Lr='<li>터미널에서 Hugging Face 계정으로 로그인되어 있는지 확인하십시오. <code>huggingface-cli login</code> 명령어를 사용하여 로그인할 수 있습니다. (액세스 토큰은 <a href="https://huggingface.co/settings/tokens" rel="nofollow">여기</a>에서 찾을 수 있습니다.)</li> <li><code>transformers-cli pt-to-tf --model-name foo/bar</code>를 실행하십시오. 여기서 <code>foo/bar</code>는 변환하려는 PyTorch 가중치가 있는 모델 저장소의 이름입니다.</li> <li>방금 만든 🤗 허브 PR에서 <code>@joaogante</code>와 <code>@Rocketknight1</code>을 태그합니다.</li>',Ql,ot,gr="그게 다입니다! 🎉",Vl,k,z,Ht,it,Tn,xt,Hr="ML 프레임워크 간 디버깅 🐛",Yl,st,Fr="새로운 아키텍처를 추가하거나 기존 아키텍처에 대한 TensorFlow 가중치를 생성할 때, PyTorch와 TensorFlow 간의 불일치로 인한 오류가 발생할 수 있습니다. 심지어 두 프레임워크의 모델 아키텍처 코드가 동일해 보일 수도 있습니다. 무슨 일이 벌어지고 있는 걸까요? 🤔",Ol,at,Pr="먼저, 이러한 불일치를 이해하는 이유에 대해 이야기해 보겠습니다. 많은 커뮤니티 멤버들은 🤗 Transformers 모델을 그대로 사용하고, 우리의 모델이 예상대로 작동할 것이라고 믿습니다. 두 프레임워크 간에 큰 불일치가 있으면 모델이 적어도 하나의 프레임워크에 대한 참조 구현을 따르지 않음을 의미합니다. 이는 모델이 의도한 대로 작동하지 않을 수 있음을 나타냅니다. 이는 아예 실행되지 않는 모델보다 나쁠 수 있습니다! 따라서 우리는 모든 모델의 프레임워크 불일치를 <code>1e-5</code>보다 작게 유지하는 것을 목표로 합니다.",Dl,ft,kr="기타 숫자 문제와 마찬가지로, 세세한 문제가 있습니다. 그리고 세세함에 집중하는 공정에서 필수 요소는 인내심입니다. 이러한 종류의 문제가 발생할 때 권장되는 작업 흐름은 다음과 같습니다:",Kl,pt,Nr="<li>불일치의 원인을 찾아보십시오. 변환 중인 모델은 아마도 특정 지점까지 거의 동일한 내부 변수를 가지고 있을 것입니다. 두 프레임워크의 아키텍처에 <code>breakpoint()</code> 문을 넣고, 위에서 아래로 숫자 변수의 값을 비교하여 문제의 근원을 찾아냅니다.</li> <li>이제 문제의 근원을 찾았으므로 🤗 Transformers 팀에 연락하세요. 우리는 비슷한 문제를 이전에 겪었을 수 있으며 빠르게 해결책을 제공할 수 있습니다. 예외적인 경우에는 StackOverflow와 GitHub 이슈와 같은 인기있는 페이지를 확인하십시오.</li> <li>더 이상 해결책이 없는 경우, 더 깊이 들어가야 합니다. 좋은 소식은 문제의 원인을 찾았으므로 나머지 모델을 추상화하고 문제가 있는 명령어에 초점을 맞출 수 있습니다! 나쁜 소식은 해당 명령어의 소스 구현에 대해 알아봐야 한다는 것입니다. 일부 경우에는 참조 구현에 문제가 있을 수도 있으니 업스트림 저장소에서 이슈를 열기를 꺼리지 마십시오.</li>",en,dt,Ur="어떤 경우에는 🤗 Transformers 팀과의 토론을 통해 불일치를 수정할 수 없을 수도 있습니다. 모델의 출력 레이어에서 불일치가 매우 작지만 숨겨진 상태에서 크게 나타날 수 있기 때문입니다. 이 경우 모델을 배포하는 것을 우선시하기 위해 불일치를 무시하기로 결정할 수도 있습니다. 위에서 언급한 <code>pt-to-tf</code> CLI에는 가중치 변환 시 오류 메시지를 무시하는 <code>--max-error</code> 플래그가 있습니다.",tn,Ft,ln;return Y=new Q({}),N=new Vr({props:{$$slots:{default:[lo]},$$scope:{ctx:ut}}}),ne=new Q({}),ae=new Q({}),J=new Vr({props:{$$slots:{default:[no]},$$scope:{ctx:ut}}}),he=new V({props:{code:"Z2l0JTIwY2xvbmUlMjBodHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkYlNUJ5b3VyJTIwR2l0aHViJTIwaGFuZGxlJTVEJTJGdHJhbnNmb3JtZXJzLmdpdCUwQWNkJTIwdHJhbnNmb3JtZXJzJTBBZ2l0JTIwcmVtb3RlJTIwYWRkJTIwdXBzdHJlYW0lMjBodHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZodWdnaW5nZmFjZSUyRnRyYW5zZm9ybWVycy5naXQ=",highlighted:`git <span class="hljs-built_in">clone</span> https://github.com/[your Github handle]/transformers.git
<span class="hljs-built_in">cd</span> transformers
git remote add upstream https://github.com/huggingface/transformers.git`,wrap:!1}}),ve=new V({props:{code:"cHl0aG9uJTIwLW0lMjB2ZW52JTIwLmVudiUwQXNvdXJjZSUyMC5lbnYlMkZiaW4lMkZhY3RpdmF0ZSUwQXBpcCUyMGluc3RhbGwlMjAtZSUyMCUyMi4lNUJkZXYlNUQlMjI=",highlighted:`python -m venv .<span class="hljs-built_in">env</span>
<span class="hljs-built_in">source</span> .<span class="hljs-built_in">env</span>/bin/activate
pip install -e <span class="hljs-string">&quot;.[dev]&quot;</span>`,wrap:!1}}),Te=new V({props:{code:"cGlwJTIwaW5zdGFsbCUyMC1lJTIwJTIyLiU1QnF1YWxpdHklNUQlMjI=",highlighted:'pip install -e <span class="hljs-string">&quot;.[quality]&quot;</span>',wrap:!1}}),be=new V({props:{code:"Z2l0JTIwY2hlY2tvdXQlMjAtYiUyMGFkZF90Zl9icmFuZF9uZXdfYmVydA==",highlighted:"git checkout -b add_tf_brand_new_bert",wrap:!1}}),xe=new V({props:{code:"Z2l0JTIwZmV0Y2glMjB1cHN0cmVhbSUwQWdpdCUyMHJlYmFzZSUyMHVwc3RyZWFtJTJGbWFpbg==",highlighted:`git fetch upstream
git rebase upstream/main`,wrap:!1}}),Ce=new V({props:{code:"Z2l0JTIwYWRkJTIwLiUwQWdpdCUyMGNvbW1pdCUyMC1tJTIwJTIyaW5pdGlhbCUyMGNvbW1pdCUyMiUwQWdpdCUyMHB1c2glMjAtdSUyMG9yaWdpbiUyMGFkZF90Zl9icmFuZF9uZXdfYmVydA==",highlighted:`git add .
git commit -m <span class="hljs-string">&quot;initial commit&quot;</span>
git push -u origin add_tf_brand_new_bert`,wrap:!1}}),He=new Q({}),Re=new Q({}),Ee=new V({props:{code:"TlZJRElBX1RGMzJfT1ZFUlJJREUlM0QwJTIwUlVOX1NMT1clM0QxJTIwUlVOX1BUX1RGX0NST1NTX1RFU1RTJTNEMSUyMCU1QyUwQXB5LnRlc3QlMjAtdnYlMjB0ZXN0cyUyRm1vZGVscyUyRmJyYW5kX25ld19iZXJ0JTJGdGVzdF9tb2RlbGluZ190Zl9icmFuZF9uZXdfYmVydC5weQ==",highlighted:`NVIDIA_TF32_OVERRIDE=0 RUN_SLOW=1 RUN_PT_TF_CROSS_TESTS=1 \\
py.test -vv tests/models/brand_new_bert/test_modeling_tf_brand_new_bert.py`,wrap:!1}}),Ie=new Q({}),Ve=new V({props:{code:"TlZJRElBX1RGMzJfT1ZFUlJJREUlM0QwJTIwUlVOX1NMT1clM0QxJTIwUlVOX1BUX1RGX0NST1NTX1RFU1RTJTNEMSUyMCU1QyUwQXB5LnRlc3QlMjAtdnYlMjB0ZXN0cyUyRm1vZGVscyUyRmJyYW5kX25ld19iZXJ0JTJGdGVzdF9tb2RlbGluZ190Zl9icmFuZF9uZXdfYmVydC5weQ==",highlighted:`NVIDIA_TF32_OVERRIDE=0 RUN_SLOW=1 RUN_PT_TF_CROSS_TESTS=1 \\
py.test -vv tests/models/brand_new_bert/test_modeling_tf_brand_new_bert.py`,wrap:!1}}),tt=new Q({}),it=new Q({}),{c(){m=r("meta"),$=i(),b=r("p"),x=i(),C=r("h1"),u=r("a"),y=r("span"),c(Y.$$.fragment),dn=i(),ct=r("span"),ct.textContent=_n,kt=i(),O=r("p"),O.innerHTML=bn,Nt=i(),D=r("p"),D.textContent=xn,Ut=i(),K=r("p"),K.textContent=Cn,Bt=i(),ee=r("p"),ee.textContent=$n,Jt=i(),te=r("ul"),te.innerHTML=yn,Rt=i(),le=r("p"),le.textContent=Mn,Zt=i(),c(N.$$.fragment),St=i(),M=r("h2"),U=r("a"),Ct=r("span"),c(ne.$$.fragment),mn=i(),ht=r("span"),ht.textContent=Ln,Et=i(),re=r("p"),re.innerHTML=gn,jt=i(),oe=r("ul"),oe.innerHTML=Hn,At=i(),ie=r("p"),ie.textContent=Fn,Gt=i(),se=r("ol"),se.innerHTML=Pn,It=i(),L=r("h3"),B=r("a"),$t=r("span"),c(ae.$$.fragment),un=i(),vt=r("span"),vt.textContent=kn,Xt=i(),fe=r("p"),fe.innerHTML=Nn,qt=i(),pe=r("p"),pe.innerHTML=Un,Wt=i(),de=r("p"),de.innerHTML=Bn,zt=i(),c(J.$$.fragment),Qt=i(),me=r("p"),me.innerHTML=Jn,Vt=i(),ue=r("p"),ue.textContent=Rn,Yt=i(),ce=r("ol"),ce.innerHTML=Zn,Ot=i(),R=r("ol"),R.innerHTML=Sn,Dt=i(),c(he.$$.fragment),Kt=i(),Z=r("ol"),Z.innerHTML=En,el=i(),c(ve.$$.fragment),tl=i(),we=r("p"),we.textContent=jn,ll=i(),c(Te.$$.fragment),nl=i(),_e=r("p"),_e.innerHTML=An,rl=i(),S=r("ol"),S.innerHTML=Gn,ol=i(),c(be.$$.fragment),il=i(),E=r("ol"),E.innerHTML=In,sl=i(),c(xe.$$.fragment),al=i(),j=r("ol"),j.innerHTML=Xn,fl=i(),c(Ce.$$.fragment),pl=i(),A=r("ol"),A.innerHTML=qn,dl=i(),G=r("ol"),G.innerHTML=Wn,ml=i(),$e=r("p"),$e.innerHTML=zn,ul=i(),ye=r("p"),ye.innerHTML=Qn,cl=i(),Me=r("p"),Me.innerHTML=Vn,hl=i(),Le=r("p"),Le.textContent=Yn,vl=i(),ge=r("p"),ge.innerHTML=On,wl=i(),g=r("h3"),I=r("a"),yt=r("span"),c(He.$$.fragment),cn=i(),wt=r("span"),wt.textContent=Dn,Tl=i(),Fe=r("p"),Fe.innerHTML=Kn,_l=i(),Pe=r("p"),Pe.textContent=er,bl=i(),ke=r("ul"),ke.innerHTML=tr,xl=i(),Ne=r("p"),Ne.innerHTML=lr,Cl=i(),Ue=r("ul"),Ue.innerHTML=nr,$l=i(),Be=r("p"),Be.textContent=rr,yl=i(),Je=r("ol"),Je.innerHTML=or,Ml=i(),H=r("h3"),X=r("a"),Mt=r("span"),c(Re.$$.fragment),hn=i(),Tt=r("span"),Tt.textContent=ir,Ll=i(),Ze=r("p"),Ze.innerHTML=sr,gl=i(),Se=r("p"),Se.textContent=ar,Hl=i(),c(Ee.$$.fragment),Fl=i(),je=r("p"),je.innerHTML=fr,Pl=i(),Ae=r("p"),Ae.textContent=pr,kl=i(),Ge=r("p"),Ge.innerHTML=dr,Nl=i(),F=r("h3"),q=r("a"),Lt=r("span"),c(Ie.$$.fragment),vn=i(),_t=r("span"),_t.textContent=mr,Ul=i(),Xe=r("p"),Xe.innerHTML=ur,Bl=i(),qe=r("p"),qe.innerHTML=cr,Jl=i(),We=r("p"),We.innerHTML=hr,Rl=i(),ze=r("p"),ze.innerHTML=vr,Zl=i(),Qe=r("p"),Qe.textContent=wr,Sl=i(),c(Ve.$$.fragment),El=i(),Ye=r("p"),Ye.textContent=Tr,jl=i(),Oe=r("p"),Oe.innerHTML=_r,Al=i(),De=r("p"),De.textContent=br,Gl=i(),Ke=r("p"),Ke.textContent=xr,Il=i(),et=r("ul"),et.innerHTML=Cr,Xl=i(),P=r("h2"),W=r("a"),gt=r("span"),c(tt.$$.fragment),wn=i(),bt=r("span"),bt.textContent=$r,ql=i(),lt=r("p"),lt.textContent=yr,Wl=i(),nt=r("p"),nt.textContent=Mr,zl=i(),rt=r("ol"),rt.innerHTML=Lr,Ql=i(),ot=r("p"),ot.textContent=gr,Vl=i(),k=r("h2"),z=r("a"),Ht=r("span"),c(it.$$.fragment),Tn=i(),xt=r("span"),xt.textContent=Hr,Yl=i(),st=r("p"),st.textContent=Fr,Ol=i(),at=r("p"),at.innerHTML=Pr,Dl=i(),ft=r("p"),ft.textContent=kr,Kl=i(),pt=r("ol"),pt.innerHTML=Nr,en=i(),dt=r("p"),dt.innerHTML=Ur,tn=i(),Ft=r("p"),this.h()},l(e){const l=to("svelte-1phssyn",document.head);m=o(l,"META",{name:!0,content:!0}),l.forEach(t),$=s(e),b=o(e,"P",{}),d(b).forEach(t),x=s(e),C=o(e,"H1",{class:!0});var mt=d(C);u=o(mt,"A",{id:!0,class:!0,href:!0});var Pt=d(u);y=o(Pt,"SPAN",{});var Br=d(y);h(Y.$$.fragment,Br),Br.forEach(t),Pt.forEach(t),dn=s(mt),ct=o(mt,"SPAN",{"data-svelte-h":!0}),a(ct)!=="svelte-1akel9"&&(ct.textContent=_n),mt.forEach(t),kt=s(e),O=o(e,"P",{"data-svelte-h":!0}),a(O)!=="svelte-pc1847"&&(O.innerHTML=bn),Nt=s(e),D=o(e,"P",{"data-svelte-h":!0}),a(D)!=="svelte-184tw5z"&&(D.textContent=xn),Ut=s(e),K=o(e,"P",{"data-svelte-h":!0}),a(K)!=="svelte-1p2eo9z"&&(K.textContent=Cn),Bt=s(e),ee=o(e,"P",{"data-svelte-h":!0}),a(ee)!=="svelte-1l10c7p"&&(ee.textContent=$n),Jt=s(e),te=o(e,"UL",{"data-svelte-h":!0}),a(te)!=="svelte-hx31j7"&&(te.innerHTML=yn),Rt=s(e),le=o(e,"P",{"data-svelte-h":!0}),a(le)!=="svelte-1xa2pog"&&(le.textContent=Mn),Zt=s(e),h(N.$$.fragment,e),St=s(e),M=o(e,"H2",{class:!0});var nn=d(M);U=o(nn,"A",{id:!0,class:!0,href:!0});var Jr=d(U);Ct=o(Jr,"SPAN",{});var Rr=d(Ct);h(ne.$$.fragment,Rr),Rr.forEach(t),Jr.forEach(t),mn=s(nn),ht=o(nn,"SPAN",{"data-svelte-h":!0}),a(ht)!=="svelte-1iehqvz"&&(ht.textContent=Ln),nn.forEach(t),Et=s(e),re=o(e,"P",{"data-svelte-h":!0}),a(re)!=="svelte-tfgird"&&(re.innerHTML=gn),jt=s(e),oe=o(e,"UL",{"data-svelte-h":!0}),a(oe)!=="svelte-14kyici"&&(oe.innerHTML=Hn),At=s(e),ie=o(e,"P",{"data-svelte-h":!0}),a(ie)!=="svelte-vqf3qg"&&(ie.textContent=Fn),Gt=s(e),se=o(e,"OL",{"data-svelte-h":!0}),a(se)!=="svelte-1o36xb8"&&(se.innerHTML=Pn),It=s(e),L=o(e,"H3",{class:!0});var rn=d(L);B=o(rn,"A",{id:!0,class:!0,href:!0});var Zr=d(B);$t=o(Zr,"SPAN",{});var Sr=d($t);h(ae.$$.fragment,Sr),Sr.forEach(t),Zr.forEach(t),un=s(rn),vt=o(rn,"SPAN",{"data-svelte-h":!0}),a(vt)!=="svelte-l9ko4w"&&(vt.textContent=kn),rn.forEach(t),Xt=s(e),fe=o(e,"P",{"data-svelte-h":!0}),a(fe)!=="svelte-1hwvfn1"&&(fe.innerHTML=Nn),qt=s(e),pe=o(e,"P",{"data-svelte-h":!0}),a(pe)!=="svelte-m563if"&&(pe.innerHTML=Un),Wt=s(e),de=o(e,"P",{"data-svelte-h":!0}),a(de)!=="svelte-9oow74"&&(de.innerHTML=Bn),zt=s(e),h(J.$$.fragment,e),Qt=s(e),me=o(e,"P",{"data-svelte-h":!0}),a(me)!=="svelte-1mvi4km"&&(me.innerHTML=Jn),Vt=s(e),ue=o(e,"P",{"data-svelte-h":!0}),a(ue)!=="svelte-9yzsmk"&&(ue.textContent=Rn),Yt=s(e),ce=o(e,"OL",{"data-svelte-h":!0}),a(ce)!=="svelte-180ez9q"&&(ce.innerHTML=Zn),Ot=s(e),R=o(e,"OL",{start:!0,"data-svelte-h":!0}),a(R)!=="svelte-g0tmm0"&&(R.innerHTML=Sn),Dt=s(e),h(he.$$.fragment,e),Kt=s(e),Z=o(e,"OL",{start:!0,"data-svelte-h":!0}),a(Z)!=="svelte-1gesorp"&&(Z.innerHTML=En),el=s(e),h(ve.$$.fragment,e),tl=s(e),we=o(e,"P",{"data-svelte-h":!0}),a(we)!=="svelte-c0n6zn"&&(we.textContent=jn),ll=s(e),h(Te.$$.fragment,e),nl=s(e),_e=o(e,"P",{"data-svelte-h":!0}),a(_e)!=="svelte-14w124n"&&(_e.innerHTML=An),rl=s(e),S=o(e,"OL",{start:!0,"data-svelte-h":!0}),a(S)!=="svelte-os4dh0"&&(S.innerHTML=Gn),ol=s(e),h(be.$$.fragment,e),il=s(e),E=o(e,"OL",{start:!0,"data-svelte-h":!0}),a(E)!=="svelte-pgu4br"&&(E.innerHTML=In),sl=s(e),h(xe.$$.fragment,e),al=s(e),j=o(e,"OL",{start:!0,"data-svelte-h":!0}),a(j)!=="svelte-13pokgv"&&(j.innerHTML=Xn),fl=s(e),h(Ce.$$.fragment,e),pl=s(e),A=o(e,"OL",{start:!0,"data-svelte-h":!0}),a(A)!=="svelte-fijiso"&&(A.innerHTML=qn),dl=s(e),G=o(e,"OL",{start:!0,"data-svelte-h":!0}),a(G)!=="svelte-922ss6"&&(G.innerHTML=Wn),ml=s(e),$e=o(e,"P",{"data-svelte-h":!0}),a($e)!=="svelte-42rhoq"&&($e.innerHTML=zn),ul=s(e),ye=o(e,"P",{"data-svelte-h":!0}),a(ye)!=="svelte-giuhsk"&&(ye.innerHTML=Qn),cl=s(e),Me=o(e,"P",{"data-svelte-h":!0}),a(Me)!=="svelte-xudcbo"&&(Me.innerHTML=Vn),hl=s(e),Le=o(e,"P",{"data-svelte-h":!0}),a(Le)!=="svelte-1puokrv"&&(Le.textContent=Yn),vl=s(e),ge=o(e,"P",{"data-svelte-h":!0}),a(ge)!=="svelte-177yss8"&&(ge.innerHTML=On),wl=s(e),g=o(e,"H3",{class:!0});var on=d(g);I=o(on,"A",{id:!0,class:!0,href:!0});var Er=d(I);yt=o(Er,"SPAN",{});var jr=d(yt);h(He.$$.fragment,jr),jr.forEach(t),Er.forEach(t),cn=s(on),wt=o(on,"SPAN",{"data-svelte-h":!0}),a(wt)!=="svelte-8lwpp1"&&(wt.textContent=Dn),on.forEach(t),Tl=s(e),Fe=o(e,"P",{"data-svelte-h":!0}),a(Fe)!=="svelte-1sm5nvy"&&(Fe.innerHTML=Kn),_l=s(e),Pe=o(e,"P",{"data-svelte-h":!0}),a(Pe)!=="svelte-1mz97li"&&(Pe.textContent=er),bl=s(e),ke=o(e,"UL",{"data-svelte-h":!0}),a(ke)!=="svelte-6huii3"&&(ke.innerHTML=tr),xl=s(e),Ne=o(e,"P",{"data-svelte-h":!0}),a(Ne)!=="svelte-1n6edi5"&&(Ne.innerHTML=lr),Cl=s(e),Ue=o(e,"UL",{"data-svelte-h":!0}),a(Ue)!=="svelte-1k7spix"&&(Ue.innerHTML=nr),$l=s(e),Be=o(e,"P",{"data-svelte-h":!0}),a(Be)!=="svelte-1bwihfe"&&(Be.textContent=rr),yl=s(e),Je=o(e,"OL",{"data-svelte-h":!0}),a(Je)!=="svelte-1tmly2"&&(Je.innerHTML=or),Ml=s(e),H=o(e,"H3",{class:!0});var sn=d(H);X=o(sn,"A",{id:!0,class:!0,href:!0});var Ar=d(X);Mt=o(Ar,"SPAN",{});var Gr=d(Mt);h(Re.$$.fragment,Gr),Gr.forEach(t),Ar.forEach(t),hn=s(sn),Tt=o(sn,"SPAN",{"data-svelte-h":!0}),a(Tt)!=="svelte-twlb9m"&&(Tt.textContent=ir),sn.forEach(t),Ll=s(e),Ze=o(e,"P",{"data-svelte-h":!0}),a(Ze)!=="svelte-6icd2x"&&(Ze.innerHTML=sr),gl=s(e),Se=o(e,"P",{"data-svelte-h":!0}),a(Se)!=="svelte-1h2zelm"&&(Se.textContent=ar),Hl=s(e),h(Ee.$$.fragment,e),Fl=s(e),je=o(e,"P",{"data-svelte-h":!0}),a(je)!=="svelte-o8vvf4"&&(je.innerHTML=fr),Pl=s(e),Ae=o(e,"P",{"data-svelte-h":!0}),a(Ae)!=="svelte-1tb12nc"&&(Ae.textContent=pr),kl=s(e),Ge=o(e,"P",{"data-svelte-h":!0}),a(Ge)!=="svelte-1q6zuc3"&&(Ge.innerHTML=dr),Nl=s(e),F=o(e,"H3",{class:!0});var an=d(F);q=o(an,"A",{id:!0,class:!0,href:!0});var Ir=d(q);Lt=o(Ir,"SPAN",{});var Xr=d(Lt);h(Ie.$$.fragment,Xr),Xr.forEach(t),Ir.forEach(t),vn=s(an),_t=o(an,"SPAN",{"data-svelte-h":!0}),a(_t)!=="svelte-dwj916"&&(_t.textContent=mr),an.forEach(t),Ul=s(e),Xe=o(e,"P",{"data-svelte-h":!0}),a(Xe)!=="svelte-4xhfae"&&(Xe.innerHTML=ur),Bl=s(e),qe=o(e,"P",{"data-svelte-h":!0}),a(qe)!=="svelte-fryjf3"&&(qe.innerHTML=cr),Jl=s(e),We=o(e,"P",{"data-svelte-h":!0}),a(We)!=="svelte-c30ixx"&&(We.innerHTML=hr),Rl=s(e),ze=o(e,"P",{"data-svelte-h":!0}),a(ze)!=="svelte-y67rcy"&&(ze.innerHTML=vr),Zl=s(e),Qe=o(e,"P",{"data-svelte-h":!0}),a(Qe)!=="svelte-4xnyav"&&(Qe.textContent=wr),Sl=s(e),h(Ve.$$.fragment,e),El=s(e),Ye=o(e,"P",{"data-svelte-h":!0}),a(Ye)!=="svelte-1pkgs3v"&&(Ye.textContent=Tr),jl=s(e),Oe=o(e,"P",{"data-svelte-h":!0}),a(Oe)!=="svelte-iwdb9f"&&(Oe.innerHTML=_r),Al=s(e),De=o(e,"P",{"data-svelte-h":!0}),a(De)!=="svelte-1r45q8v"&&(De.textContent=br),Gl=s(e),Ke=o(e,"P",{"data-svelte-h":!0}),a(Ke)!=="svelte-qwa7fs"&&(Ke.textContent=xr),Il=s(e),et=o(e,"UL",{"data-svelte-h":!0}),a(et)!=="svelte-ugsnhb"&&(et.innerHTML=Cr),Xl=s(e),P=o(e,"H2",{class:!0});var fn=d(P);W=o(fn,"A",{id:!0,class:!0,href:!0});var qr=d(W);gt=o(qr,"SPAN",{});var Wr=d(gt);h(tt.$$.fragment,Wr),Wr.forEach(t),qr.forEach(t),wn=s(fn),bt=o(fn,"SPAN",{"data-svelte-h":!0}),a(bt)!=="svelte-pxvo52"&&(bt.textContent=$r),fn.forEach(t),ql=s(e),lt=o(e,"P",{"data-svelte-h":!0}),a(lt)!=="svelte-123xves"&&(lt.textContent=yr),Wl=s(e),nt=o(e,"P",{"data-svelte-h":!0}),a(nt)!=="svelte-1liigzj"&&(nt.textContent=Mr),zl=s(e),rt=o(e,"OL",{"data-svelte-h":!0}),a(rt)!=="svelte-15w2vrf"&&(rt.innerHTML=Lr),Ql=s(e),ot=o(e,"P",{"data-svelte-h":!0}),a(ot)!=="svelte-17lurjl"&&(ot.textContent=gr),Vl=s(e),k=o(e,"H2",{class:!0});var pn=d(k);z=o(pn,"A",{id:!0,class:!0,href:!0});var zr=d(z);Ht=o(zr,"SPAN",{});var Qr=d(Ht);h(it.$$.fragment,Qr),Qr.forEach(t),zr.forEach(t),Tn=s(pn),xt=o(pn,"SPAN",{"data-svelte-h":!0}),a(xt)!=="svelte-6d4g9l"&&(xt.textContent=Hr),pn.forEach(t),Yl=s(e),st=o(e,"P",{"data-svelte-h":!0}),a(st)!=="svelte-ddk0e0"&&(st.textContent=Fr),Ol=s(e),at=o(e,"P",{"data-svelte-h":!0}),a(at)!=="svelte-1bjq1zi"&&(at.innerHTML=Pr),Dl=s(e),ft=o(e,"P",{"data-svelte-h":!0}),a(ft)!=="svelte-1rb1f8c"&&(ft.textContent=kr),Kl=s(e),pt=o(e,"OL",{"data-svelte-h":!0}),a(pt)!=="svelte-1ugrdp0"&&(pt.innerHTML=Nr),en=s(e),dt=o(e,"P",{"data-svelte-h":!0}),a(dt)!=="svelte-1lsrh78"&&(dt.innerHTML=Ur),tn=s(e),Ft=o(e,"P",{}),d(Ft).forEach(t),this.h()},h(){f(m,"name","hf:doc:metadata"),f(m,"content",JSON.stringify(oo)),f(u,"id","how-to-convert-a-transformers-model-to-tensorflow"),f(u,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(u,"href","#how-to-convert-a-transformers-model-to-tensorflow"),f(C,"class","relative group"),f(U,"id","step-by-step-guide-to add-tensorFlow-model-architecture-code"),f(U,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(U,"href","#step-by-step-guide-to add-tensorFlow-model-architecture-code"),f(M,"class","relative group"),f(B,"id","1.-3.-prepare-your-model-contribution"),f(B,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(B,"href","#1.-3.-prepare-your-model-contribution"),f(L,"class","relative group"),f(R,"start","2"),f(Z,"start","3"),f(S,"start","4"),f(E,"start","5"),f(j,"start","6"),f(A,"start","8"),f(G,"start","9"),f(I,"id","4-model-implementation"),f(I,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(I,"href","#4-model-implementation"),f(g,"class","relative group"),f(X,"id","5-add-model-tests"),f(X,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(X,"href","#5-add-model-tests"),f(H,"class","relative group"),f(q,"id","6.-7.-ensure-everyone -can-use-your-model"),f(q,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(q,"href","#6.-7.-ensure-everyone -can-use-your-model"),f(F,"class","relative group"),f(W,"id","adding-tensorFlow-weights-to-🤗-hub"),f(W,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(W,"href","#adding-tensorFlow-weights-to-🤗-hub"),f(P,"class","relative group"),f(z,"id","debugging-mismatches-across-ml-frameworks"),f(z,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(z,"href","#debugging-mismatches-across-ml-frameworks"),f(k,"class","relative group")},m(e,l){p(document.head,m),n(e,$,l),n(e,b,l),n(e,x,l),n(e,C,l),p(C,u),p(u,y),v(Y,y,null),p(C,dn),p(C,ct),n(e,kt,l),n(e,O,l),n(e,Nt,l),n(e,D,l),n(e,Ut,l),n(e,K,l),n(e,Bt,l),n(e,ee,l),n(e,Jt,l),n(e,te,l),n(e,Rt,l),n(e,le,l),n(e,Zt,l),v(N,e,l),n(e,St,l),n(e,M,l),p(M,U),p(U,Ct),v(ne,Ct,null),p(M,mn),p(M,ht),n(e,Et,l),n(e,re,l),n(e,jt,l),n(e,oe,l),n(e,At,l),n(e,ie,l),n(e,Gt,l),n(e,se,l),n(e,It,l),n(e,L,l),p(L,B),p(B,$t),v(ae,$t,null),p(L,un),p(L,vt),n(e,Xt,l),n(e,fe,l),n(e,qt,l),n(e,pe,l),n(e,Wt,l),n(e,de,l),n(e,zt,l),v(J,e,l),n(e,Qt,l),n(e,me,l),n(e,Vt,l),n(e,ue,l),n(e,Yt,l),n(e,ce,l),n(e,Ot,l),n(e,R,l),n(e,Dt,l),v(he,e,l),n(e,Kt,l),n(e,Z,l),n(e,el,l),v(ve,e,l),n(e,tl,l),n(e,we,l),n(e,ll,l),v(Te,e,l),n(e,nl,l),n(e,_e,l),n(e,rl,l),n(e,S,l),n(e,ol,l),v(be,e,l),n(e,il,l),n(e,E,l),n(e,sl,l),v(xe,e,l),n(e,al,l),n(e,j,l),n(e,fl,l),v(Ce,e,l),n(e,pl,l),n(e,A,l),n(e,dl,l),n(e,G,l),n(e,ml,l),n(e,$e,l),n(e,ul,l),n(e,ye,l),n(e,cl,l),n(e,Me,l),n(e,hl,l),n(e,Le,l),n(e,vl,l),n(e,ge,l),n(e,wl,l),n(e,g,l),p(g,I),p(I,yt),v(He,yt,null),p(g,cn),p(g,wt),n(e,Tl,l),n(e,Fe,l),n(e,_l,l),n(e,Pe,l),n(e,bl,l),n(e,ke,l),n(e,xl,l),n(e,Ne,l),n(e,Cl,l),n(e,Ue,l),n(e,$l,l),n(e,Be,l),n(e,yl,l),n(e,Je,l),n(e,Ml,l),n(e,H,l),p(H,X),p(X,Mt),v(Re,Mt,null),p(H,hn),p(H,Tt),n(e,Ll,l),n(e,Ze,l),n(e,gl,l),n(e,Se,l),n(e,Hl,l),v(Ee,e,l),n(e,Fl,l),n(e,je,l),n(e,Pl,l),n(e,Ae,l),n(e,kl,l),n(e,Ge,l),n(e,Nl,l),n(e,F,l),p(F,q),p(q,Lt),v(Ie,Lt,null),p(F,vn),p(F,_t),n(e,Ul,l),n(e,Xe,l),n(e,Bl,l),n(e,qe,l),n(e,Jl,l),n(e,We,l),n(e,Rl,l),n(e,ze,l),n(e,Zl,l),n(e,Qe,l),n(e,Sl,l),v(Ve,e,l),n(e,El,l),n(e,Ye,l),n(e,jl,l),n(e,Oe,l),n(e,Al,l),n(e,De,l),n(e,Gl,l),n(e,Ke,l),n(e,Il,l),n(e,et,l),n(e,Xl,l),n(e,P,l),p(P,W),p(W,gt),v(tt,gt,null),p(P,wn),p(P,bt),n(e,ql,l),n(e,lt,l),n(e,Wl,l),n(e,nt,l),n(e,zl,l),n(e,rt,l),n(e,Ql,l),n(e,ot,l),n(e,Vl,l),n(e,k,l),p(k,z),p(z,Ht),v(it,Ht,null),p(k,Tn),p(k,xt),n(e,Yl,l),n(e,st,l),n(e,Ol,l),n(e,at,l),n(e,Dl,l),n(e,ft,l),n(e,Kl,l),n(e,pt,l),n(e,en,l),n(e,dt,l),n(e,tn,l),n(e,Ft,l),ln=!0},p(e,[l]){const mt={};l&2&&(mt.$$scope={dirty:l,ctx:e}),N.$set(mt);const Pt={};l&2&&(Pt.$$scope={dirty:l,ctx:e}),J.$set(Pt)},i(e){ln||(w(Y.$$.fragment,e),w(N.$$.fragment,e),w(ne.$$.fragment,e),w(ae.$$.fragment,e),w(J.$$.fragment,e),w(he.$$.fragment,e),w(ve.$$.fragment,e),w(Te.$$.fragment,e),w(be.$$.fragment,e),w(xe.$$.fragment,e),w(Ce.$$.fragment,e),w(He.$$.fragment,e),w(Re.$$.fragment,e),w(Ee.$$.fragment,e),w(Ie.$$.fragment,e),w(Ve.$$.fragment,e),w(tt.$$.fragment,e),w(it.$$.fragment,e),ln=!0)},o(e){T(Y.$$.fragment,e),T(N.$$.fragment,e),T(ne.$$.fragment,e),T(ae.$$.fragment,e),T(J.$$.fragment,e),T(he.$$.fragment,e),T(ve.$$.fragment,e),T(Te.$$.fragment,e),T(be.$$.fragment,e),T(xe.$$.fragment,e),T(Ce.$$.fragment,e),T(He.$$.fragment,e),T(Re.$$.fragment,e),T(Ee.$$.fragment,e),T(Ie.$$.fragment,e),T(Ve.$$.fragment,e),T(tt.$$.fragment,e),T(it.$$.fragment,e),ln=!1},d(e){e&&(t($),t(b),t(x),t(C),t(kt),t(O),t(Nt),t(D),t(Ut),t(K),t(Bt),t(ee),t(Jt),t(te),t(Rt),t(le),t(Zt),t(St),t(M),t(Et),t(re),t(jt),t(oe),t(At),t(ie),t(Gt),t(se),t(It),t(L),t(Xt),t(fe),t(qt),t(pe),t(Wt),t(de),t(zt),t(Qt),t(me),t(Vt),t(ue),t(Yt),t(ce),t(Ot),t(R),t(Dt),t(Kt),t(Z),t(el),t(tl),t(we),t(ll),t(nl),t(_e),t(rl),t(S),t(ol),t(il),t(E),t(sl),t(al),t(j),t(fl),t(pl),t(A),t(dl),t(G),t(ml),t($e),t(ul),t(ye),t(cl),t(Me),t(hl),t(Le),t(vl),t(ge),t(wl),t(g),t(Tl),t(Fe),t(_l),t(Pe),t(bl),t(ke),t(xl),t(Ne),t(Cl),t(Ue),t($l),t(Be),t(yl),t(Je),t(Ml),t(H),t(Ll),t(Ze),t(gl),t(Se),t(Hl),t(Fl),t(je),t(Pl),t(Ae),t(kl),t(Ge),t(Nl),t(F),t(Ul),t(Xe),t(Bl),t(qe),t(Jl),t(We),t(Rl),t(ze),t(Zl),t(Qe),t(Sl),t(El),t(Ye),t(jl),t(Oe),t(Al),t(De),t(Gl),t(Ke),t(Il),t(et),t(Xl),t(P),t(ql),t(lt),t(Wl),t(nt),t(zl),t(rt),t(Ql),t(ot),t(Vl),t(k),t(Yl),t(st),t(Ol),t(at),t(Dl),t(ft),t(Kl),t(pt),t(en),t(dt),t(tn),t(Ft)),t(m),_(Y),_(N,e),_(ne),_(ae),_(J,e),_(he,e),_(ve,e),_(Te,e),_(be,e),_(xe,e),_(Ce,e),_(He),_(Re),_(Ee,e),_(Ie),_(Ve,e),_(tt),_(it)}}}const oo={local:"how-to-convert-a-transformers-model-to-tensorflow",sections:[{local:"step-by-step-guide-to add-tensorFlow-model-architecture-code",sections:[{local:"1.-3.-prepare-your-model-contribution",title:"1.-3. 모델 기여 준비 "},{local:"4-model-implementation",title:"4. 모델 구현 "},{local:"5-add-model-tests",title:"5. 모델 테스트 구현 "},{local:"6.-7.-ensure-everyone -can-use-your-model",title:"6.-7. 모든 사용자가 당신의 모델을 사용할 수 있게 하기 "}],title:"TensorFlow 모델 아키텍처 코드 추가하는 단계별 가이드 "},{local:"adding-tensorFlow-weights-to-🤗-hub",title:"🤗 허브에 TensorFlow 가중치 추가하기 "},{local:"debugging-mismatches-across-ml-frameworks",title:"ML 프레임워크 간 디버깅 🐛"}],title:"어떻게 🤗 Transformers 모델을 TensorFlow로 변환하나요? "};function io(ut){return Dr(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class uo extends Kr{constructor(m){super(),eo(this,m,io,ro,Or,{})}}export{uo as component};
