import{S as au,i as iu,s as lu,e as a,k as p,w as f,t as o,M as uu,c as i,d as t,m as d,a as l,x as _,h as r,b as c,N as vr,F as s,g as u,y as h,q as v,o as b,B as g,v as pu}from"../../chunks/vendor-1e8b365d.js";import{T as ki}from"../../chunks/Tip-62b14c6e.js";import{Y as Ei}from"../../chunks/Youtube-c2a8cc39.js";import{I as xi}from"../../chunks/IconCopyLink-483c28ba.js";import{C as w}from"../../chunks/CodeBlock-e5764662.js";import{D as du}from"../../chunks/DocNotebookDropdown-37d928d3.js";function cu(Z){let m,P,q,x,C;return{c(){m=a("p"),P=o("\u{1F6A8} Vous voyez le cadre bleu autour de \u201C6 frames\u201D dans lle "),q=a("em"),x=o("traceback"),C=o(" de Google Colab ? Il s\u2019agit d\u2019une fonctionnalit\xE9 sp\xE9ciale de Colab, qui compresse la trace en \u201Cframes\u201D. Si vous ne parvenez pas \xE0 trouver la source d\u2019une erreur, veillez \xE0 d\xE9velopper la trace compl\xE8te en cliquant sur ces deux petites fl\xE8ches.")},l($){m=i($,"P",{});var E=l(m);P=r(E,"\u{1F6A8} Vous voyez le cadre bleu autour de \u201C6 frames\u201D dans lle "),q=i(E,"EM",{});var D=l(q);x=r(D,"traceback"),D.forEach(t),C=r(E," de Google Colab ? Il s\u2019agit d\u2019une fonctionnalit\xE9 sp\xE9ciale de Colab, qui compresse la trace en \u201Cframes\u201D. Si vous ne parvenez pas \xE0 trouver la source d\u2019une erreur, veillez \xE0 d\xE9velopper la trace compl\xE8te en cliquant sur ces deux petites fl\xE8ches."),E.forEach(t)},m($,E){u($,m,E),s(m,P),s(m,q),s(q,x),s(m,C)},d($){$&&t(m)}}}function mu(Z){let m,P,q,x,C,$,E,D,V,ee,F;return{c(){m=a("p"),P=o("\u{1F4A1} Si vous rencontrez un message d\u2019erreur difficile \xE0 comprendre, copiez et collez le message dans Google ou sur "),q=a("a"),x=o("Stack Overflow"),C=o(" (oui, vraiment !). Il y a de fortes chances que vous ne soyez pas la premi\xE8re personne \xE0 rencontrer cette erreur, et c\u2019est un bon moyen de trouver des solutions que d\u2019autres membres de la communaut\xE9 ont publi\xE9es. Par exemple, en recherchant "),$=a("code"),E=o("OSError : Can't load config for"),D=o(" sur Stack Overflow donne plusieurs "),V=a("a"),ee=o("r\xE9ponses"),F=o(" qui peuvent \xEAtre utilis\xE9es comme point de d\xE9part pour r\xE9soudre le probl\xE8me."),this.h()},l(R){m=i(R,"P",{});var k=l(m);P=r(k,"\u{1F4A1} Si vous rencontrez un message d\u2019erreur difficile \xE0 comprendre, copiez et collez le message dans Google ou sur "),q=i(k,"A",{href:!0,rel:!0});var hs=l(q);x=r(hs,"Stack Overflow"),hs.forEach(t),C=r(k," (oui, vraiment !). Il y a de fortes chances que vous ne soyez pas la premi\xE8re personne \xE0 rencontrer cette erreur, et c\u2019est un bon moyen de trouver des solutions que d\u2019autres membres de la communaut\xE9 ont publi\xE9es. Par exemple, en recherchant "),$=i(k,"CODE",{});var se=l($);E=r(se,"OSError : Can't load config for"),se.forEach(t),D=r(k," sur Stack Overflow donne plusieurs "),V=i(k,"A",{href:!0,rel:!0});var vs=l(V);ee=r(vs,"r\xE9ponses"),vs.forEach(t),F=r(k," qui peuvent \xEAtre utilis\xE9es comme point de d\xE9part pour r\xE9soudre le probl\xE8me."),k.forEach(t),this.h()},h(){c(q,"href","https://stackoverflow.com/"),c(q,"rel","nofollow"),c(V,"href","https://stackoverflow.com/search?q=OSError%3A+Can%27t+load+config+for+"),c(V,"rel","nofollow")},m(R,k){u(R,m,k),s(m,P),s(m,q),s(q,x),s(m,C),s(m,$),s($,E),s(m,D),s(m,V),s(V,ee),s(m,F)},d(R){R&&t(m)}}}function fu(Z){let m,P,q,x,C;return{c(){m=a("p"),P=o("\u{1F6A8} L\u2019approche que nous adoptons ici n\u2019est pas infaillible, puisque notre coll\xE8gue peut avoir modifi\xE9 la configuration de "),q=a("code"),x=o("distilbert-base-uncased"),C=o(" avant d\u2019affiner le mod\xE8le. Dans la vie r\xE9elle, nous voudrions v\xE9rifier avec lui d\u2019abord, mais pour les besoins de cette section, nous supposerons qu\u2019il a utilis\xE9 la configuration par d\xE9faut.")},l($){m=i($,"P",{});var E=l(m);P=r(E,"\u{1F6A8} L\u2019approche que nous adoptons ici n\u2019est pas infaillible, puisque notre coll\xE8gue peut avoir modifi\xE9 la configuration de "),q=i(E,"CODE",{});var D=l(q);x=r(D,"distilbert-base-uncased"),D.forEach(t),C=r(E," avant d\u2019affiner le mod\xE8le. Dans la vie r\xE9elle, nous voudrions v\xE9rifier avec lui d\u2019abord, mais pour les besoins de cette section, nous supposerons qu\u2019il a utilis\xE9 la configuration par d\xE9faut."),E.forEach(t)},m($,E){u($,m,E),s(m,P),s(m,q),s(q,x),s(m,C)},d($){$&&t(m)}}}function _u(Z){let m,P,q,x,C,$,E,D,V,ee,F,R,k,hs,se,vs,br,Ts,gr,qr,bs,$r,wr,Vt,xe,Ft,T,kr,ye,Er,xr,te,Is,yr,jr,zr,Hs,Cr,Pr,Jt,je,Rt,gs,Dr,Bt,ze,Gt,oe,Ar,Ls,Or,Mr,Ut,Ce,Wt,re,Sr,Qs,Tr,Ir,Xt,Y,ne,Ns,Pe,Hr,Vs,Lr,Yt,ae,Qr,Fs,Nr,Vr,Kt,qs,De,Fr,$s,Jr,Rr,Zt,B,Br,Js,Gr,Ur,Rs,Wr,Xr,eo,Ae,so,Oe,to,I,Yr,Bs,Kr,Zr,Gs,en,sn,Us,tn,on,oo,Me,Se,yi,ro,y,rn,Ws,nn,an,Xs,ln,un,Ys,pn,dn,Ks,cn,mn,ws,fn,_n,Zs,hn,vn,no,ie,ao,G,bn,et,gn,qn,st,$n,wn,io,Te,lo,le,uo,ks,kn,po,Ie,He,ji,co,Es,En,mo,Le,Qe,zi,fo,xs,xn,_o,Ne,ho,Ve,vo,H,yn,tt,jn,zn,ot,Cn,Pn,rt,Dn,An,bo,Fe,go,Je,qo,j,On,nt,Mn,Sn,at,Tn,In,it,Hn,Ln,Re,lt,Qn,Nn,ys,Vn,Fn,ut,Jn,Rn,$o,Be,wo,ue,ko,pe,Bn,pt,Gn,Un,Eo,Ge,xo,de,Wn,dt,Xn,Yn,yo,Ue,jo,We,zo,js,Kn,Co,L,Xe,Zn,ct,ea,sa,ta,mt,oa,ra,ft,na,aa,J,ia,_t,la,ua,ht,pa,da,vt,ca,ma,Po,zs,fa,Do,K,ce,bt,Ye,_a,gt,ha,Ao,Q,va,qt,ba,ga,$t,qa,$a,wt,wa,ka,Oo,Ke,Mo,me,Ea,kt,xa,ya,So,Ze,To,U,ja,Cs,za,Ca,Et,Pa,Da,Io,es,Ho,ss,Lo,fe,Aa,xt,Oa,Ma,Qo,ts,No,Ps,Sa,Vo,os,Fo,A,Ta,yt,Ia,Ha,jt,La,Qa,zt,Na,Va,Ct,Fa,Ja,Jo,rs,Ro,ns,Bo,_e,Ra,Pt,Ba,Ga,Go,as,Uo,is,Wo,z,Ua,Dt,Wa,Xa,Ds,Ya,Ka,At,Za,ei,Ot,si,ti,Mt,oi,ri,St,ni,ai,Xo,ls,Yo,N,ii,Tt,li,ui,It,pi,di,us,ci,mi,Ko,ps,ds,Ci,Zo,W,fi,Ht,_i,hi,Lt,vi,bi,er,cs,sr,ms,tr,he,gi,fs,qi,$i,or;return $=new xi({}),F=new du({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/chapter8/section2.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/chapter8/section2.ipynb"}]}}),xe=new Ei({props:{id:"DQ-CpJn6Rc4"}}),je=new w({props:{code:`from huggingface_hub import notebook_login

notebook_login()`,highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`}}),ze=new w({props:{code:"huggingface-cli login",highlighted:"huggingface-cli login"}}),Ce=new w({props:{code:`from distutils.dir_util import copy_tree
from huggingface_hub import Repository, snapshot_download, create_repo, get_full_repo_name


def copy_repository_template():
    # Cloner le d\xE9p\xF4t et extraire le chemin local
    template_repo_id = "lewtun/distilbert-base-uncased-finetuned-squad-d5716d28"
    commit_hash = "be3eaffc28669d7932492681cd5f3e8905e358b4"
    template_repo_dir = snapshot_download(template_repo_id, revision=commit_hash)
    # Cr\xE9er un d\xE9p\xF4t vide sur le Hub
    model_name = template_repo_id.split("/")[1]
    create_repo(model_name, exist_ok=True)
    # Cloner le d\xE9p\xF4t vide
    new_repo_id = get_full_repo_name(model_name)
    new_repo_dir = model_name
    repo = Repository(local_dir=new_repo_dir, clone_from=new_repo_id)
    # Copier les fichiers
    copy_tree(template_repo_dir, new_repo_dir)
    # Pousser sur le Hub
    repo.push_to_hub()`,highlighted:`<span class="hljs-keyword">from</span> distutils.dir_util <span class="hljs-keyword">import</span> copy_tree
<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> Repository, snapshot_download, create_repo, get_full_repo_name


<span class="hljs-keyword">def</span> <span class="hljs-title function_">copy_repository_template</span>():
    <span class="hljs-comment"># Cloner le d\xE9p\xF4t et extraire le chemin local</span>
    template_repo_id = <span class="hljs-string">&quot;lewtun/distilbert-base-uncased-finetuned-squad-d5716d28&quot;</span>
    commit_hash = <span class="hljs-string">&quot;be3eaffc28669d7932492681cd5f3e8905e358b4&quot;</span>
    template_repo_dir = snapshot_download(template_repo_id, revision=commit_hash)
    <span class="hljs-comment"># Cr\xE9er un d\xE9p\xF4t vide sur le Hub</span>
    model_name = template_repo_id.split(<span class="hljs-string">&quot;/&quot;</span>)[<span class="hljs-number">1</span>]
    create_repo(model_name, exist_ok=<span class="hljs-literal">True</span>)
    <span class="hljs-comment"># Cloner le d\xE9p\xF4t vide</span>
    new_repo_id = get_full_repo_name(model_name)
    new_repo_dir = model_name
    repo = Repository(local_dir=new_repo_dir, clone_from=new_repo_id)
    <span class="hljs-comment"># Copier les fichiers</span>
    copy_tree(template_repo_dir, new_repo_dir)
    <span class="hljs-comment"># Pousser sur le Hub</span>
    repo.push_to_hub()`}}),Pe=new xi({}),Ae=new w({props:{code:`from transformers import pipeline

model_checkpoint = get_full_repo_name("distillbert-base-uncased-finetuned-squad-d5716d28")
reader = pipeline("question-answering", model=model_checkpoint)`,highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

model_checkpoint = get_full_repo_name(<span class="hljs-string">&quot;distillbert-base-uncased-finetuned-squad-d5716d28&quot;</span>)
reader = pipeline(<span class="hljs-string">&quot;question-answering&quot;</span>, model=model_checkpoint)`}}),Oe=new w({props:{code:`"""
OSError: Can't load config for 'lewtun/distillbert-base-uncased-finetuned-squad-d5716d28'. Make sure that:

- 'lewtun/distillbert-base-uncased-finetuned-squad-d5716d28' is a correct model identifier listed on 'https://huggingface.co/models'

- or 'lewtun/distillbert-base-uncased-finetuned-squad-d5716d28' is the correct path to a directory containing a config.json file
"""`,highlighted:`<span class="hljs-string">&quot;&quot;&quot;
OSError: Can&#x27;t load config for &#x27;lewtun/distillbert-base-uncased-finetuned-squad-d5716d28&#x27;. Make sure that:

- &#x27;lewtun/distillbert-base-uncased-finetuned-squad-d5716d28&#x27; is a correct model identifier listed on &#x27;https://huggingface.co/models&#x27;

- or &#x27;lewtun/distillbert-base-uncased-finetuned-squad-d5716d28&#x27; is the correct path to a directory containing a config.json file
&quot;&quot;&quot;</span>`}}),ie=new ki({props:{$$slots:{default:[cu]},$$scope:{ctx:Z}}}),Te=new w({props:{code:`"""
Make sure that:

- 'lewtun/distillbert-base-uncased-finetuned-squad-d5716d28' is a correct model identifier listed on 'https://huggingface.co/models'

- or 'lewtun/distillbert-base-uncased-finetuned-squad-d5716d28' is the correct path to a directory containing a config.json file
"""`,highlighted:`<span class="hljs-string">&quot;&quot;&quot;
Make sure that:

- &#x27;lewtun/distillbert-base-uncased-finetuned-squad-d5716d28&#x27; is a correct model identifier listed on &#x27;https://huggingface.co/models&#x27;

- or &#x27;lewtun/distillbert-base-uncased-finetuned-squad-d5716d28&#x27; is the correct path to a directory containing a config.json file
&quot;&quot;&quot;</span>`}}),le=new ki({props:{$$slots:{default:[mu]},$$scope:{ctx:Z}}}),Ne=new w({props:{code:`model_checkpoint = get_full_repo_name("distilbert-base-uncased-finetuned-squad-d5716d28")
reader = pipeline("question-answering", model=model_checkpoint)`,highlighted:`model_checkpoint = get_full_repo_name(<span class="hljs-string">&quot;distilbert-base-uncased-finetuned-squad-d5716d28&quot;</span>)
reader = pipeline(<span class="hljs-string">&quot;question-answering&quot;</span>, model=model_checkpoint)`}}),Ve=new w({props:{code:`"""
OSError: Can't load config for 'lewtun/distilbert-base-uncased-finetuned-squad-d5716d28'. Make sure that:

- 'lewtun/distilbert-base-uncased-finetuned-squad-d5716d28' is a correct model identifier listed on 'https://huggingface.co/models'

- or 'lewtun/distilbert-base-uncased-finetuned-squad-d5716d28' is the correct path to a directory containing a config.json file
"""`,highlighted:`<span class="hljs-string">&quot;&quot;&quot;
OSError: Can&#x27;t load config for &#x27;lewtun/distilbert-base-uncased-finetuned-squad-d5716d28&#x27;. Make sure that:

- &#x27;lewtun/distilbert-base-uncased-finetuned-squad-d5716d28&#x27; is a correct model identifier listed on &#x27;https://huggingface.co/models&#x27;

- or &#x27;lewtun/distilbert-base-uncased-finetuned-squad-d5716d28&#x27; is the correct path to a directory containing a config.json file
&quot;&quot;&quot;</span>`}}),Fe=new w({props:{code:`from huggingface_hub import list_repo_files

list_repo_files(repo_id=model_checkpoint)`,highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> list_repo_files

list_repo_files(repo_id=model_checkpoint)`}}),Je=new w({props:{code:"['.gitattributes', 'README.md', 'pytorch_model.bin', 'special_tokens_map.json', 'tokenizer_config.json', 'training_args.bin', 'vocab.txt']",highlighted:'[<span class="hljs-string">&#x27;.gitattributes&#x27;</span>, <span class="hljs-string">&#x27;README.md&#x27;</span>, <span class="hljs-string">&#x27;pytorch_model.bin&#x27;</span>, <span class="hljs-string">&#x27;special_tokens_map.json&#x27;</span>, <span class="hljs-string">&#x27;tokenizer_config.json&#x27;</span>, <span class="hljs-string">&#x27;training_args.bin&#x27;</span>, <span class="hljs-string">&#x27;vocab.txt&#x27;</span>]'}}),Be=new w({props:{code:`from transformers import AutoConfig

pretrained_checkpoint = "distilbert-base-uncased"
config = AutoConfig.from_pretrained(pretrained_checkpoint)`,highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoConfig

pretrained_checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>
config = AutoConfig.from_pretrained(pretrained_checkpoint)`}}),ue=new ki({props:{warning:!0,$$slots:{default:[fu]},$$scope:{ctx:Z}}}),Ge=new w({props:{code:'config.push_to_hub(model_checkpoint, commit_message="Add config.json")',highlighted:'config.push_to_hub(model_checkpoint, commit_message=<span class="hljs-string">&quot;Add config.json&quot;</span>)'}}),Ue=new w({props:{code:`reader = pipeline("question-answering", model=model_checkpoint, revision="main")

context = r"""
Extractive Question Answering is the task of extracting an answer from a text
given a question. An example of a question answering dataset is the SQuAD
dataset, which is entirely based on that task. If you would like to fine-tune a
model on a SQuAD task, you may leverage the
examples/pytorch/question-answering/run_squad.py script.

\u{1F917} Transformers is interoperable with the PyTorch, TensorFlow, and JAX
frameworks, so you can use your favourite tools for a wide variety of tasks!
"""

context_fr = r"""
La r\xE9ponse \xE0 des questions consiste \xE0 extraire une r\xE9ponse d'un texte
\xE0 partir d'une question. Un exemple de jeu de donn\xE9es de r\xE9ponse aux questions est le jeu de donn\xE9es SQuAD
qui est enti\xE8rement bas\xE9 sur cette t\xE2che. Si vous souhaitez affiner un mod\xE8le
mod\xE8le sur une t\xE2che SQuAD, vous pouvez utiliser le fichier
exemples/pytorch/question-answering/run_squad.py.

\u{1F917} Transformers est interop\xE9rable avec les frameworks PyTorch, TensorFlow et JAX.
de sorte que vous pouvez utiliser vos outils pr\xE9f\xE9r\xE9s pour une grande vari\xE9t\xE9 de t\xE2ches !
"""

question = "What is extractive question answering?"  # Qu'est-ce que la r\xE9ponse extractive aux questions ?
reader(question=question, context=context)`,highlighted:`reader = pipeline(<span class="hljs-string">&quot;question-answering&quot;</span>, model=model_checkpoint, revision=<span class="hljs-string">&quot;main&quot;</span>)

context = <span class="hljs-string">r&quot;&quot;&quot;
Extractive Question Answering is the task of extracting an answer from a text
given a question. An example of a question answering dataset is the SQuAD
dataset, which is entirely based on that task. If you would like to fine-tune a
model on a SQuAD task, you may leverage the
examples/pytorch/question-answering/run_squad.py script.

\u{1F917} Transformers is interoperable with the PyTorch, TensorFlow, and JAX
frameworks, so you can use your favourite tools for a wide variety of tasks!
&quot;&quot;&quot;</span>

context_fr = <span class="hljs-string">r&quot;&quot;&quot;
La r\xE9ponse \xE0 des questions consiste \xE0 extraire une r\xE9ponse d&#x27;un texte
\xE0 partir d&#x27;une question. Un exemple de jeu de donn\xE9es de r\xE9ponse aux questions est le jeu de donn\xE9es SQuAD
qui est enti\xE8rement bas\xE9 sur cette t\xE2che. Si vous souhaitez affiner un mod\xE8le
mod\xE8le sur une t\xE2che SQuAD, vous pouvez utiliser le fichier
exemples/pytorch/question-answering/run_squad.py.

\u{1F917} Transformers est interop\xE9rable avec les frameworks PyTorch, TensorFlow et JAX.
de sorte que vous pouvez utiliser vos outils pr\xE9f\xE9r\xE9s pour une grande vari\xE9t\xE9 de t\xE2ches !
&quot;&quot;&quot;</span>

question = <span class="hljs-string">&quot;What is extractive question answering?&quot;</span>  <span class="hljs-comment"># Qu&#x27;est-ce que la r\xE9ponse extractive aux questions ?</span>
reader(question=question, context=context)`}}),We=new w({props:{code:`{'score': 0.38669535517692566,
 'start': 34,
 'end': 95,
 'answer': 'the task of extracting an answer from a text given a question'} # la t\xE2che consistant \xE0 extraire une r\xE9ponse d'un texte \xE0 partir d'une question.`,highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.38669535517692566</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">34</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">95</span>,
 <span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;the task of extracting an answer from a text given a question&#x27;</span>} <span class="hljs-comment"># la t\xE2che consistant \xE0 extraire une r\xE9ponse d&#x27;un texte \xE0 partir d&#x27;une question.</span>`}}),Ye=new xi({}),Ke=new w({props:{code:`tokenizer = reader.tokenizer
model = reader.model`,highlighted:`tokenizer = reader.tokenizer
model = reader.model`}}),Ze=new w({props:{code:'question = "Which frameworks can I use?"',highlighted:'question = <span class="hljs-string">&quot;Which frameworks can I use?&quot;</span>'}}),es=new w({props:{code:`import torch

inputs = tokenizer(question, context, add_special_tokens=True)
input_ids = inputs["input_ids"][0]
outputs = model(**inputs)
answer_start_scores = outputs.start_logits
answer_end_scores = outputs.end_logits
# Obtenez le d\xE9but de r\xE9ponse le plus probable avec l'argmax du score.
answer_start = torch.argmax(answer_start_scores)
# Obtenir la fin de r\xE9ponse la plus probable avec l'argmax du score
answer_end = torch.argmax(answer_end_scores) + 1
answer = tokenizer.convert_tokens_to_string(
    tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end])
)
print(f"Question: {question}")
print(f"Answer: {answer}")`,highlighted:`<span class="hljs-keyword">import</span> torch

inputs = tokenizer(question, context, add_special_tokens=<span class="hljs-literal">True</span>)
input_ids = inputs[<span class="hljs-string">&quot;input_ids&quot;</span>][<span class="hljs-number">0</span>]
outputs = model(**inputs)
answer_start_scores = outputs.start_logits
answer_end_scores = outputs.end_logits
<span class="hljs-comment"># Obtenez le d\xE9but de r\xE9ponse le plus probable avec l&#x27;argmax du score.</span>
answer_start = torch.argmax(answer_start_scores)
<span class="hljs-comment"># Obtenir la fin de r\xE9ponse la plus probable avec l&#x27;argmax du score</span>
answer_end = torch.argmax(answer_end_scores) + <span class="hljs-number">1</span>
answer = tokenizer.convert_tokens_to_string(
    tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end])
)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Question: <span class="hljs-subst">{question}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Answer: <span class="hljs-subst">{answer}</span>&quot;</span>)`}}),ss=new w({props:{code:`"""
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/var/folders/28/k4cy5q7s2hs92xq7_h89_vgm0000gn/T/ipykernel_75743/2725838073.py in <module>
      1 inputs = tokenizer(question, text, add_special_tokens=True)
      2 input_ids = inputs["input_ids"]
----> 3 outputs = model(**inputs)
      4 answer_start_scores = outputs.start_logits
      5 answer_end_scores = outputs.end_logits

~/miniconda3/envs/huggingface/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   1049         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
   1050                 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1051             return forward_call(*input, **kwargs)
   1052         # Do not call functions when jit is used
   1053         full_backward_hooks, non_full_backward_hooks = [], []

~/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/models/distilbert/modeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, start_positions, end_positions, output_attentions, output_hidden_states, return_dict)
    723         return_dict = return_dict if return_dict is not None else self.config.use_return_dict
    724
--> 725         distilbert_output = self.distilbert(
    726             input_ids=input_ids,
    727             attention_mask=attention_mask,

~/miniconda3/envs/huggingface/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   1049         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
   1050                 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1051             return forward_call(*input, **kwargs)
   1052         # Do not call functions when jit is used
   1053         full_backward_hooks, non_full_backward_hooks = [], []

~/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/models/distilbert/modeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, output_attentions, output_hidden_states, return_dict)
    471             raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time")
    472         elif input_ids is not None:
--> 473             input_shape = input_ids.size()
    474         elif inputs_embeds is not None:
    475             input_shape = inputs_embeds.size()[:-1]

AttributeError: 'list' object has no attribute 'size'
"""`,highlighted:`<span class="hljs-string">&quot;&quot;&quot;
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/var/folders/28/k4cy5q7s2hs92xq7_h89_vgm0000gn/T/ipykernel_75743/2725838073.py in &lt;module&gt;
      1 inputs = tokenizer(question, text, add_special_tokens=True)
      2 input_ids = inputs[&quot;input_ids&quot;]
----&gt; 3 outputs = model(**inputs)
      4 answer_start_scores = outputs.start_logits
      5 answer_end_scores = outputs.end_logits

~/miniconda3/envs/huggingface/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   1049         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
   1050                 or _global_forward_hooks or _global_forward_pre_hooks):
-&gt; 1051             return forward_call(*input, **kwargs)
   1052         # Do not call functions when jit is used
   1053         full_backward_hooks, non_full_backward_hooks = [], []

~/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/models/distilbert/modeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, start_positions, end_positions, output_attentions, output_hidden_states, return_dict)
    723         return_dict = return_dict if return_dict is not None else self.config.use_return_dict
    724
--&gt; 725         distilbert_output = self.distilbert(
    726             input_ids=input_ids,
    727             attention_mask=attention_mask,

~/miniconda3/envs/huggingface/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   1049         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
   1050                 or _global_forward_hooks or _global_forward_pre_hooks):
-&gt; 1051             return forward_call(*input, **kwargs)
   1052         # Do not call functions when jit is used
   1053         full_backward_hooks, non_full_backward_hooks = [], []

~/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/models/distilbert/modeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, output_attentions, output_hidden_states, return_dict)
    471             raise ValueError(&quot;You cannot specify both input_ids and inputs_embeds at the same time&quot;)
    472         elif input_ids is not None:
--&gt; 473             input_shape = input_ids.size()
    474         elif inputs_embeds is not None:
    475             input_shape = inputs_embeds.size()[:-1]

AttributeError: &#x27;list&#x27; object has no attribute &#x27;size&#x27;
&quot;&quot;&quot;</span>`}}),ts=new Ei({props:{id:"rSPyvPw0p9k"}}),os=new Ei({props:{id:"5PkZ4rbHL6c"}}),rs=new w({props:{code:'inputs["input_ids"][:5]',highlighted:'inputs[<span class="hljs-string">&quot;input_ids&quot;</span>][:<span class="hljs-number">5</span>]'}}),ns=new w({props:{code:"[101, 2029, 7705, 2015, 2064]",highlighted:'[<span class="hljs-number">101</span>, <span class="hljs-number">2029</span>, <span class="hljs-number">7705</span>, <span class="hljs-number">2015</span>, <span class="hljs-number">2064</span>]'}}),as=new w({props:{code:'type(inputs["input_ids"])',highlighted:'<span class="hljs-built_in">type</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>])'}}),is=new w({props:{code:"list",highlighted:'<span class="hljs-built_in">list</span>'}}),ls=new w({props:{code:`~/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/models/distilbert/modeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, output_attentions, output_hidden_states, return_dict)
    471             raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time")
    472         elif input_ids is not None:
--> 473             input_shape = input_ids.size()
    474         elif inputs_embeds is not None:
    475             input_shape = inputs_embeds.size()[:-1]

AttributeError: 'list' object has no attribute 'size'`,highlighted:`~<span class="hljs-regexp">/miniconda3/</span>envs<span class="hljs-regexp">/huggingface/</span>lib<span class="hljs-regexp">/python3.8/</span>site-packages<span class="hljs-regexp">/transformers/m</span>odels<span class="hljs-regexp">/distilbert/m</span>odeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, output_attentions, output_hidden_states, return_dict)
    <span class="hljs-number">471</span>             raise ValueError(<span class="hljs-string">&quot;You cannot specify both input_ids and inputs_embeds at the same time&quot;</span>)
    <span class="hljs-number">472</span>         elif input_ids is not None:
--&gt; <span class="hljs-number">473</span>             input_shape = input_ids.<span class="hljs-keyword">size</span>()
    <span class="hljs-number">474</span>         elif inputs_embeds is not None:
    <span class="hljs-number">475</span>             input_shape = inputs_embeds.<span class="hljs-keyword">size</span>()[:-<span class="hljs-number">1</span>]

AttributeError: <span class="hljs-string">&#x27;list&#x27;</span> object has no attribute <span class="hljs-string">&#x27;size&#x27;</span>`}}),cs=new w({props:{code:`inputs = tokenizer(question, context, add_special_tokens=True, return_tensors="pt")
input_ids = inputs["input_ids"][0]
outputs = model(**inputs)
answer_start_scores = outputs.start_logits
answer_end_scores = outputs.end_logits
# Obtenez le d\xE9but de r\xE9ponse le plus probable avec l'argmax du score.
answer_start = torch.argmax(answer_start_scores)
# Obtenir la fin de r\xE9ponse la plus probable avec l'argmax du score
answer_end = torch.argmax(answer_end_scores) + 1
answer = tokenizer.convert_tokens_to_string(
    tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end])
)
print(f"Question: {question}")
print(f"Answer: {answer}")`,highlighted:`inputs = tokenizer(question, context, add_special_tokens=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
input_ids = inputs[<span class="hljs-string">&quot;input_ids&quot;</span>][<span class="hljs-number">0</span>]
outputs = model(**inputs)
answer_start_scores = outputs.start_logits
answer_end_scores = outputs.end_logits
<span class="hljs-comment"># Obtenez le d\xE9but de r\xE9ponse le plus probable avec l&#x27;argmax du score.</span>
answer_start = torch.argmax(answer_start_scores)
<span class="hljs-comment"># Obtenir la fin de r\xE9ponse la plus probable avec l&#x27;argmax du score</span>
answer_end = torch.argmax(answer_end_scores) + <span class="hljs-number">1</span>
answer = tokenizer.convert_tokens_to_string(
    tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end])
)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Question: <span class="hljs-subst">{question}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Answer: <span class="hljs-subst">{answer}</span>&quot;</span>)`}}),ms=new w({props:{code:`"""
Question: Which frameworks can I use? # Quels frameworks puis-je utiliser ?
Answer: pytorch, tensorflow, and jax # pytorch, tensorflow et jax
"""`,highlighted:`<span class="hljs-string">&quot;&quot;&quot;
Question: Which frameworks can I use? # Quels frameworks puis-je utiliser ?
Answer: pytorch, tensorflow, and jax # pytorch, tensorflow et jax
&quot;&quot;&quot;</span>`}}),{c(){m=a("meta"),P=p(),q=a("h1"),x=a("a"),C=a("span"),f($.$$.fragment),E=p(),D=a("span"),V=o("Que faire lorsque vous obtenez une erreur"),ee=p(),f(F.$$.fragment),R=p(),k=a("p"),hs=o("Dans cette section, nous allons examiner certaines erreurs courantes qui peuvent se produire lorsque vous essayez de g\xE9n\xE9rer des pr\xE9dictions \xE0 partir de votre "),se=a("em"),vs=o("transformer"),br=o(" fra\xEEchement "),Ts=a("em"),gr=o("tun\xE9"),qr=o(". Cela vous pr\xE9parera pour la "),bs=a("a"),$r=o("section 4"),wr=o(", o\xF9 nous explorerons comment d\xE9boguer la phase d\u2019entra\xEEnement elle-m\xEAme."),Vt=p(),f(xe.$$.fragment),Ft=p(),T=a("p"),kr=o("Nous avons pr\xE9par\xE9 un "),ye=a("a"),Er=o("d\xE9p\xF4t de mod\xE8les"),xr=o(" pour cette section, et si vous voulez ex\xE9cuter le code de ce chapitre, vous devrez d\u2019abord copier le mod\xE8le dans votre compte sur le "),te=a("a"),Is=a("em"),yr=o("Hub"),jr=o(" d\u2019Hugging Face"),zr=o(". Pour ce faire, connectez-vous d\u2019abord en ex\xE9cutant l\u2019une ou l\u2019autre des commandes suivantes dans un "),Hs=a("em"),Cr=o("notebook"),Pr=o(" Jupyter :"),Jt=p(),f(je.$$.fragment),Rt=p(),gs=a("p"),Dr=o("ou ce qui suit dans votre terminal pr\xE9f\xE9r\xE9 :"),Bt=p(),f(ze.$$.fragment),Gt=p(),oe=a("p"),Ar=o("Cela vous demandera d\u2019entrer votre nom d\u2019utilisateur et votre mot de passe, et enregistrera un jeton sous "),Ls=a("em"),Or=o("~/.cache/huggingface/"),Mr=o(". Une fois que vous vous \xEAtes connect\xE9, vous pouvez copier le d\xE9p\xF4t de mod\xE8les avec la fonction suivante :"),Ut=p(),f(Ce.$$.fragment),Wt=p(),re=a("p"),Sr=o("Maintenant, lorsque vous appelez "),Qs=a("code"),Tr=o("copy_repository_template()"),Ir=o(", cela va cr\xE9er une copie du d\xE9p\xF4t de mod\xE8les sous votre compte."),Xt=p(),Y=a("h2"),ne=a("a"),Ns=a("span"),f(Pe.$$.fragment),Hr=p(),Vs=a("span"),Lr=o("D\xE9boguer le pipeline \xE0 partir de \u{1F917} *Transformers*"),Yt=p(),ae=a("p"),Qr=o("Pour donner le coup d\u2019envoi de notre voyage dans le monde merveilleux du d\xE9bogage des "),Fs=a("em"),Nr=o("transformers"),Vr=o(", consid\xE9rez le sc\xE9nario suivant : vous travaillez avec un coll\xE8gue sur un projet de r\xE9ponse \xE0 des questions pour aider les clients d\u2019un site de commerce \xE9lectronique \xE0 trouver des r\xE9ponses sur des produits de consommation. Votre coll\xE8gue vous envoie un message du genre :"),Kt=p(),qs=a("blockquote"),De=a("p"),Fr=o("Bonjour ! Je viens de r\xE9aliser une exp\xE9rience en utilisant les techniques du "),$s=a("a"),Jr=o("chapitre 7"),Rr=o(" du cours d\u2019Hugging Face et j\u2019ai obtenu d\u2019excellents r\xE9sultats sur SQuAD ! Je pense que nous pouvons utiliser ce mod\xE8le comme point de d\xE9part pour notre projet. L\u2019ID du mod\xE8le sur le Hub est \u201Clewtun/distillbert-base-uncased-finetuned-squad-d5716d28\u201D. N\u2019h\xE9sitez pas \xE0 le tester :)"),Zt=p(),B=a("p"),Br=o("et la premi\xE8re chose \xE0 laquelle on pense est de charger le mod\xE8le en utilisant la "),Js=a("code"),Gr=o("pipeline"),Ur=o(" de \u{1F917} "),Rs=a("em"),Wr=o("Transformers"),Xr=o(" :"),eo=p(),f(Ae.$$.fragment),so=p(),f(Oe.$$.fragment),to=p(),I=a("p"),Yr=o("Oh non, quelque chose semble avoir mal tourn\xE9 ! Si vous \xEAtes novice en programmation, ce genre d\u2019erreurs peut sembler un peu cryptique au d\xE9but (qu\u2019est-ce qu\u2019un "),Bs=a("code"),Kr=o("OSError"),Zr=o(" ?!). L\u2019erreur affich\xE9e ici n\u2019est que la derni\xE8re partie d\u2019un rapport d\u2019erreur beaucoup plus large appel\xE9 "),Gs=a("em"),en=o("Python traceback"),sn=o(" (alias "),Us=a("em"),tn=o("stack trace"),on=o("). Par exemple, si vous ex\xE9cutez ce code sur Google Colab, vous devriez voir quelque chose comme la capture d\u2019\xE9cran suivante :"),oo=p(),Me=a("div"),Se=a("img"),ro=p(),y=a("p"),rn=o("Il y a beaucoup d\u2019informations dans ces rapports, nous allons donc en parcourir ensemble les \xE9l\xE9ments cl\xE9s. La premi\xE8re chose \xE0 noter est que les rapports de tra\xE7age doivent \xEAtre lus "),Ws=a("em"),nn=o("de bas en haut"),an=o(". Cela peut sembler bizarre si vous avez l\u2019habitude de lire du texte anglais de haut en bas, mais cela refl\xE8te le fait que le "),Xs=a("em"),ln=o("traceback"),un=o(" montre la s\xE9quence d\u2019appels de fonction que la "),Ys=a("code"),pn=o("pipeline"),dn=o(" fait lors du t\xE9l\xE9chargement du mod\xE8le et du "),Ks=a("em"),cn=o("tokenizer"),mn=o(". Consultez le "),ws=a("a"),fn=o("Chapitre 2"),_n=o(" pour plus de d\xE9tails sur la fa\xE7on dont le "),Zs=a("code"),hn=o("pipeline"),vn=o(" fonctionne sous le capot."),no=p(),f(ie.$$.fragment),ao=p(),G=a("p"),bn=o("Cela signifie que la derni\xE8re ligne de la trace indique le dernier message d\u2019erreur et donne le nom de l\u2019exception qui a \xE9t\xE9 lev\xE9e. Dans ce cas, le type d\u2019exception est "),et=a("code"),gn=o("OSError"),qn=o(", ce qui indique une erreur li\xE9e au syst\xE8me. Si nous lisons le message d\u2019erreur qui l\u2019accompagne, nous pouvons voir qu\u2019il semble y avoir un probl\xE8me avec le fichier "),st=a("em"),$n=o("config.json"),wn=o(" du mod\xE8le, et deux suggestions nous sont donn\xE9es pour le r\xE9soudre :"),io=p(),f(Te.$$.fragment),lo=p(),f(le.$$.fragment),uo=p(),ks=a("p"),kn=o("La premi\xE8re suggestion nous demande de v\xE9rifier si l\u2019identifiant du mod\xE8le est effectivement correct, la premi\xE8re chose \xE0 faire est donc de copier l\u2019identifiant et de le coller dans la barre de recherche du Hub :"),po=p(),Ie=a("div"),He=a("img"),co=p(),Es=a("p"),En=o("Hmm, il semble en effet que le mod\xE8le de notre coll\xE8gue ne soit pas sur le Hub\u2026 Mais il y a une faute de frappe dans le nom du mod\xE8le ! DistilBERT n\u2019a qu\u2019un seul \u201Cl\u201D dans son nom, alors corrigeons cela et cherchons \u201Clewtun/distilbert-base-uncased-finetuned-squad-d5716d28\u201D \xE0 la place :"),mo=p(),Le=a("div"),Qe=a("img"),fo=p(),xs=a("p"),xn=o("Ok, \xE7a a march\xE9. Maintenant essayons de t\xE9l\xE9charger \xE0 nouveau le mod\xE8le avec l\u2019ID correct du mod\xE8le :"),_o=p(),f(Ne.$$.fragment),ho=p(),f(Ve.$$.fragment),vo=p(),H=a("p"),yn=o("Argh, encore un \xE9chec. Bienvenue dans la vie quotidienne d\u2019un ing\xE9nieur en apprentissage machine ! Puisque nous avons corrig\xE9 l\u2019ID du mod\xE8le, le probl\xE8me doit se situer dans le r\xE9f\xE9rentiel lui-m\xEAme. Une fa\xE7on rapide d\u2019acc\xE9der au contenu d\u2019un d\xE9p\xF4t sur le \u{1F917} "),tt=a("em"),jn=o("Hub"),zn=o(" est via la fonction "),ot=a("code"),Cn=o("list_repo_files()"),Pn=o(" de la biblioth\xE8que "),rt=a("code"),Dn=o("huggingface_hub"),An=o(" :"),bo=p(),f(Fe.$$.fragment),go=p(),f(Je.$$.fragment),qo=p(),j=a("p"),On=o("Int\xE9ressant. Il ne semble pas y avoir de fichier "),nt=a("em"),Mn=o("config.json"),Sn=o(" dans le r\xE9f\xE9rentiel ! Pas \xE9tonnant que notre "),at=a("code"),Tn=o("pipeline"),In=o(" n\u2019ait pas pu charger le mod\xE8le ; notre coll\xE8gue a d\xFB oublier de pousser ce fichier vers le "),it=a("em"),Hn=o("Hub"),Ln=o(" apr\xE8s l\u2019avoir mis au point. Dans ce cas, le probl\xE8me semble assez simple \xE0 r\xE9soudre : nous pouvons lui demander d\u2019ajouter le fichier, ou, puisque nous pouvons voir \xE0 partir de l\u2019ID du mod\xE8le que le mod\xE8le pr\xE9-entra\xEEn\xE9 utilis\xE9 est "),Re=a("a"),lt=a("code"),Qn=o("distilbert-base-uncased"),Nn=o(", nous pouvons t\xE9l\xE9charger la configuration de ce mod\xE8le et la pousser dans notre d\xE9p\xF4t pour voir si cela r\xE9sout le probl\xE8me. Essayons cela. En utilisant les techniques apprises dans le "),ys=a("a"),Vn=o("Chapitre 2"),Fn=o(", nous pouvons t\xE9l\xE9charger la configuration du mod\xE8le avec la classe "),ut=a("code"),Jn=o("AutoConfig"),Rn=o(" :"),$o=p(),f(Be.$$.fragment),wo=p(),f(ue.$$.fragment),ko=p(),pe=a("p"),Bn=o("Nous pouvons ensuite le pousser vers notre d\xE9p\xF4t de mod\xE8les avec la fonction "),pt=a("code"),Gn=o("push_to_hub()"),Un=o(" de la configuration :"),Eo=p(),f(Ge.$$.fragment),xo=p(),de=a("p"),Wn=o("Maintenant, nous pouvons tester si cela a fonctionn\xE9 en chargeant le mod\xE8le depuis le dernier commit de la branche "),dt=a("code"),Xn=o("main"),Yn=o(" :"),yo=p(),f(Ue.$$.fragment),jo=p(),f(We.$$.fragment),zo=p(),js=a("p"),Kn=o("Woohoo, \xE7a a march\xE9 ! R\xE9capitulons ce que vous venez d\u2019apprendre :"),Co=p(),L=a("ul"),Xe=a("li"),Zn=o("les messages d\u2019erreur en Python sont appel\xE9s "),ct=a("em"),ea=o("tracebacks"),sa=o(" et sont lus de bas en haut. La derni\xE8re ligne du message d\u2019erreur contient g\xE9n\xE9ralement les informations dont vous avez besoin pour localiser la source du probl\xE8me,"),ta=p(),mt=a("li"),oa=o("si la derni\xE8re ligne ne contient pas suffisamment d\u2019informations, remontez dans la traceback et voyez si vous pouvez identifier o\xF9 l\u2019erreur se produit dans le code source,"),ra=p(),ft=a("li"),na=o("si aucun des messages d\u2019erreur ne peut vous aider \xE0 d\xE9boguer le probl\xE8me, essayez de rechercher en ligne une solution \xE0 un probl\xE8me similaire."),aa=p(),J=a("li"),ia=o("l\u2019"),_t=a("code"),la=o("huggingface_hub"),ua=o(`,
// \u{1F917} `),ht=a("em"),pa=o("Hub"),da=o(` ?
fournit une suite d\u2019outils que vous pouvez utiliser pour interagir avec et d\xE9boguer les d\xE9p\xF4ts sur le `),vt=a("em"),ca=o("Hub"),ma=o("."),Po=p(),zs=a("p"),fa=o("Maintenant que vous savez comment d\xE9boguer un pipeline, examinons un exemple plus d\xE9licat dans la passe avant du mod\xE8le lui-m\xEAme."),Do=p(),K=a("h2"),ce=a("a"),bt=a("span"),f(Ye.$$.fragment),_a=p(),gt=a("span"),ha=o("D\xE9boguer la passe avant de votre mod\xE8le"),Ao=p(),Q=a("p"),va=o("Bien que le "),qt=a("code"),ba=o("pipeline"),ga=o(" soit parfait pour la plupart des applications o\xF9 vous devez g\xE9n\xE9rer rapidement des pr\xE9dictions, vous aurez parfois besoin d\u2019acc\xE9der aux logits du mod\xE8le (par exemple, si vous avez un post-traitement personnalis\xE9 que vous souhaitez appliquer). Pour voir ce qui peut mal tourner dans ce cas, commen\xE7ons par r\xE9cup\xE9rer le mod\xE8le et le "),$t=a("em"),qa=o("tokenizer"),$a=o(" de notre "),wt=a("code"),wa=o("pipeline"),ka=o(" :"),Oo=p(),f(Ke.$$.fragment),Mo=p(),me=a("p"),Ea=o("Ensuite, nous avons besoin d\u2019une question, alors voyons si nos "),kt=a("em"),xa=o("frameworks"),ya=o(" pr\xE9f\xE9r\xE9s sont support\xE9s :"),So=p(),f(Ze.$$.fragment),To=p(),U=a("p"),ja=o("Comme nous l\u2019avons vu dans le "),Cs=a("a"),za=o("Chapitre 7"),Ca=o(", les \xE9tapes habituelles que nous devons suivre sont la tok\xE9nisation des entr\xE9es, l\u2019extraction des logits des "),Et=a("em"),Pa=o("tokens"),Da=o(" de d\xE9but et de fin, puis le d\xE9codage de l\u2019empan de r\xE9ponse :"),Io=p(),f(es.$$.fragment),Ho=p(),f(ss.$$.fragment),Lo=p(),fe=a("p"),Aa=o("Oh l\xE0 l\xE0, il semble que nous ayons un bug dans notre code ! Mais nous n\u2019avons pas peur d\u2019un petit d\xE9bogage. Vous pouvez utiliser le d\xE9bogueur Python dans un "),xt=a("em"),Oa=o("notebook"),Ma=o(" :"),Qo=p(),f(ts.$$.fragment),No=p(),Ps=a("p"),Sa=o("ou dans un terminal :"),Vo=p(),f(os.$$.fragment),Fo=p(),A=a("p"),Ta=o("Ici, la lecture du message d\u2019erreur nous indique que l\u2019objet "),yt=a("code"),Ia=o("'list' n'a pas d'attribut 'size'"),Ha=o(", et nous pouvons voir une fl\xE8che "),jt=a("code"),La=o("-->"),Qa=o(" pointant vers la ligne o\xF9 le probl\xE8me a \xE9t\xE9 soulev\xE9 dans "),zt=a("code"),Na=o("model(**inputs)"),Va=o(". Vous pouvez d\xE9boguer ceci de mani\xE8re interactive en utilisant le d\xE9bogueur Python, mais pour l\u2019instant nous allons simplement imprimer une tranche de "),Ct=a("code"),Fa=o("inputs"),Ja=o(" pour voir ce que nous avons :"),Jo=p(),f(rs.$$.fragment),Ro=p(),f(ns.$$.fragment),Bo=p(),_e=a("p"),Ra=o("Cela ressemble certainement \xE0 une "),Pt=a("code"),Ba=o("list"),Ga=o(" ordinaire de Python, mais v\xE9rifions le type :"),Go=p(),f(as.$$.fragment),Uo=p(),f(is.$$.fragment),Wo=p(),z=a("p"),Ua=o("Oui, c\u2019est bien une "),Dt=a("code"),Wa=o("list"),Xa=o(" Python. Alors, qu\u2019est-ce qui a mal tourn\xE9 ? Rappelez-vous du "),Ds=a("a"),Ya=o("Chapitre 2"),Ka=o(" que les classes "),At=a("code"),Za=o("AutoModelForXxx"),ei=o(" dans \u{1F917} Transformers op\xE8rent sur des "),Ot=a("em"),si=o("tenseurs"),ti=o(" (soit dans PyTorch ou TensorFlow), et une op\xE9ration commune est d\u2019extraire les dimensions d\u2019un tenseur en utilisant "),Mt=a("code"),oi=o("Tensor.size()"),ri=o(" dans, disons, PyTorch. Jetons un autre coup d\u2019oeil \xE0 la "),St=a("em"),ni=o("traceback"),ai=o(", pour voir quelle ligne a d\xE9clench\xE9 l\u2019exception :"),Xo=p(),f(ls.$$.fragment),Yo=p(),N=a("p"),ii=o("Il semble que notre code ait essay\xE9 d\u2019appeler "),Tt=a("code"),li=o("input_ids.size()"),ui=o(", mais cela ne fonctionne clairement pas pour une "),It=a("code"),pi=o("liste"),di=o(" Python, qui est juste un conteneur. Comment pouvons-nous r\xE9soudre ce probl\xE8me ? La recherche du message d\u2019erreur sur Stack Overflow donne quelques "),us=a("a"),ci=o("r\xE9ponses"),mi=o(" pertinentes. En cliquant sur la premi\xE8re, une question similaire \xE0 la n\xF4tre s\u2019affiche, avec la r\xE9ponse indiqu\xE9e dans la capture d\u2019\xE9cran ci-dessous :"),Ko=p(),ps=a("div"),ds=a("img"),Zo=p(),W=a("p"),fi=o("La r\xE9ponse recommande d\u2019ajouter "),Ht=a("code"),_i=o("return_tensors='pt'"),hi=o(" au "),Lt=a("em"),vi=o("tokenizer"),bi=o(", voyons donc si cela fonctionne pour nous :"),er=p(),f(cs.$$.fragment),sr=p(),f(ms.$$.fragment),tr=p(),he=a("p"),gi=o("Super, \xE7a a march\xE9 ! Voil\xE0 un excellent exemple de l\u2019utilit\xE9 de Stack Overflow : en identifiant un probl\xE8me similaire, nous avons pu b\xE9n\xE9ficier de l\u2019exp\xE9rience d\u2019autres membres de la communaut\xE9. Cependant, une recherche de ce type ne donne pas toujours une r\xE9ponse pertinente, alors que faire dans ce cas ? Heureusement, il existe une communaut\xE9 accueillante de d\xE9veloppeurs sur le "),fs=a("a"),qi=o("forum d\u2019Hugging Face"),$i=o(" qui peut vous aider ! Dans la prochaine section, nous verrons comment r\xE9diger de bonnes questions de forum qui ont des chances d\u2019obtenir une r\xE9ponse."),this.h()},l(e){const n=uu('[data-svelte="svelte-1phssyn"]',document.head);m=i(n,"META",{name:!0,content:!0}),n.forEach(t),P=d(e),q=i(e,"H1",{class:!0});var _s=l(q);x=i(_s,"A",{id:!0,class:!0,href:!0});var Qt=l(x);C=i(Qt,"SPAN",{});var Nt=l(C);_($.$$.fragment,Nt),Nt.forEach(t),Qt.forEach(t),E=d(_s),D=i(_s,"SPAN",{});var Pi=l(D);V=r(Pi,"Que faire lorsque vous obtenez une erreur"),Pi.forEach(t),_s.forEach(t),ee=d(e),_(F.$$.fragment,e),R=d(e),k=i(e,"P",{});var ve=l(k);hs=r(ve,"Dans cette section, nous allons examiner certaines erreurs courantes qui peuvent se produire lorsque vous essayez de g\xE9n\xE9rer des pr\xE9dictions \xE0 partir de votre "),se=i(ve,"EM",{});var Di=l(se);vs=r(Di,"transformer"),Di.forEach(t),br=r(ve," fra\xEEchement "),Ts=i(ve,"EM",{});var Ai=l(Ts);gr=r(Ai,"tun\xE9"),Ai.forEach(t),qr=r(ve,". Cela vous pr\xE9parera pour la "),bs=i(ve,"A",{href:!0});var Oi=l(bs);$r=r(Oi,"section 4"),Oi.forEach(t),wr=r(ve,", o\xF9 nous explorerons comment d\xE9boguer la phase d\u2019entra\xEEnement elle-m\xEAme."),ve.forEach(t),Vt=d(e),_(xe.$$.fragment,e),Ft=d(e),T=i(e,"P",{});var be=l(T);kr=r(be,"Nous avons pr\xE9par\xE9 un "),ye=i(be,"A",{href:!0,rel:!0});var Mi=l(ye);Er=r(Mi,"d\xE9p\xF4t de mod\xE8les"),Mi.forEach(t),xr=r(be," pour cette section, et si vous voulez ex\xE9cuter le code de ce chapitre, vous devrez d\u2019abord copier le mod\xE8le dans votre compte sur le "),te=i(be,"A",{href:!0,rel:!0});var wi=l(te);Is=i(wi,"EM",{});var Si=l(Is);yr=r(Si,"Hub"),Si.forEach(t),jr=r(wi," d\u2019Hugging Face"),wi.forEach(t),zr=r(be,". Pour ce faire, connectez-vous d\u2019abord en ex\xE9cutant l\u2019une ou l\u2019autre des commandes suivantes dans un "),Hs=i(be,"EM",{});var Ti=l(Hs);Cr=r(Ti,"notebook"),Ti.forEach(t),Pr=r(be," Jupyter :"),be.forEach(t),Jt=d(e),_(je.$$.fragment,e),Rt=d(e),gs=i(e,"P",{});var Ii=l(gs);Dr=r(Ii,"ou ce qui suit dans votre terminal pr\xE9f\xE9r\xE9 :"),Ii.forEach(t),Bt=d(e),_(ze.$$.fragment,e),Gt=d(e),oe=i(e,"P",{});var rr=l(oe);Ar=r(rr,"Cela vous demandera d\u2019entrer votre nom d\u2019utilisateur et votre mot de passe, et enregistrera un jeton sous "),Ls=i(rr,"EM",{});var Hi=l(Ls);Or=r(Hi,"~/.cache/huggingface/"),Hi.forEach(t),Mr=r(rr,". Une fois que vous vous \xEAtes connect\xE9, vous pouvez copier le d\xE9p\xF4t de mod\xE8les avec la fonction suivante :"),rr.forEach(t),Ut=d(e),_(Ce.$$.fragment,e),Wt=d(e),re=i(e,"P",{});var nr=l(re);Sr=r(nr,"Maintenant, lorsque vous appelez "),Qs=i(nr,"CODE",{});var Li=l(Qs);Tr=r(Li,"copy_repository_template()"),Li.forEach(t),Ir=r(nr,", cela va cr\xE9er une copie du d\xE9p\xF4t de mod\xE8les sous votre compte."),nr.forEach(t),Xt=d(e),Y=i(e,"H2",{class:!0});var ar=l(Y);ne=i(ar,"A",{id:!0,class:!0,href:!0});var Qi=l(ne);Ns=i(Qi,"SPAN",{});var Ni=l(Ns);_(Pe.$$.fragment,Ni),Ni.forEach(t),Qi.forEach(t),Hr=d(ar),Vs=i(ar,"SPAN",{});var Vi=l(Vs);Lr=r(Vi,"D\xE9boguer le pipeline \xE0 partir de \u{1F917} *Transformers*"),Vi.forEach(t),ar.forEach(t),Yt=d(e),ae=i(e,"P",{});var ir=l(ae);Qr=r(ir,"Pour donner le coup d\u2019envoi de notre voyage dans le monde merveilleux du d\xE9bogage des "),Fs=i(ir,"EM",{});var Fi=l(Fs);Nr=r(Fi,"transformers"),Fi.forEach(t),Vr=r(ir,", consid\xE9rez le sc\xE9nario suivant : vous travaillez avec un coll\xE8gue sur un projet de r\xE9ponse \xE0 des questions pour aider les clients d\u2019un site de commerce \xE9lectronique \xE0 trouver des r\xE9ponses sur des produits de consommation. Votre coll\xE8gue vous envoie un message du genre :"),ir.forEach(t),Kt=d(e),qs=i(e,"BLOCKQUOTE",{});var Ji=l(qs);De=i(Ji,"P",{});var lr=l(De);Fr=r(lr,"Bonjour ! Je viens de r\xE9aliser une exp\xE9rience en utilisant les techniques du "),$s=i(lr,"A",{href:!0});var Ri=l($s);Jr=r(Ri,"chapitre 7"),Ri.forEach(t),Rr=r(lr," du cours d\u2019Hugging Face et j\u2019ai obtenu d\u2019excellents r\xE9sultats sur SQuAD ! Je pense que nous pouvons utiliser ce mod\xE8le comme point de d\xE9part pour notre projet. L\u2019ID du mod\xE8le sur le Hub est \u201Clewtun/distillbert-base-uncased-finetuned-squad-d5716d28\u201D. N\u2019h\xE9sitez pas \xE0 le tester :)"),lr.forEach(t),Ji.forEach(t),Zt=d(e),B=i(e,"P",{});var As=l(B);Br=r(As,"et la premi\xE8re chose \xE0 laquelle on pense est de charger le mod\xE8le en utilisant la "),Js=i(As,"CODE",{});var Bi=l(Js);Gr=r(Bi,"pipeline"),Bi.forEach(t),Ur=r(As," de \u{1F917} "),Rs=i(As,"EM",{});var Gi=l(Rs);Wr=r(Gi,"Transformers"),Gi.forEach(t),Xr=r(As," :"),As.forEach(t),eo=d(e),_(Ae.$$.fragment,e),so=d(e),_(Oe.$$.fragment,e),to=d(e),I=i(e,"P",{});var ge=l(I);Yr=r(ge,"Oh non, quelque chose semble avoir mal tourn\xE9 ! Si vous \xEAtes novice en programmation, ce genre d\u2019erreurs peut sembler un peu cryptique au d\xE9but (qu\u2019est-ce qu\u2019un "),Bs=i(ge,"CODE",{});var Ui=l(Bs);Kr=r(Ui,"OSError"),Ui.forEach(t),Zr=r(ge," ?!). L\u2019erreur affich\xE9e ici n\u2019est que la derni\xE8re partie d\u2019un rapport d\u2019erreur beaucoup plus large appel\xE9 "),Gs=i(ge,"EM",{});var Wi=l(Gs);en=r(Wi,"Python traceback"),Wi.forEach(t),sn=r(ge," (alias "),Us=i(ge,"EM",{});var Xi=l(Us);tn=r(Xi,"stack trace"),Xi.forEach(t),on=r(ge,"). Par exemple, si vous ex\xE9cutez ce code sur Google Colab, vous devriez voir quelque chose comme la capture d\u2019\xE9cran suivante :"),ge.forEach(t),oo=d(e),Me=i(e,"DIV",{class:!0});var Yi=l(Me);Se=i(Yi,"IMG",{src:!0,alt:!0,width:!0}),Yi.forEach(t),ro=d(e),y=i(e,"P",{});var O=l(y);rn=r(O,"Il y a beaucoup d\u2019informations dans ces rapports, nous allons donc en parcourir ensemble les \xE9l\xE9ments cl\xE9s. La premi\xE8re chose \xE0 noter est que les rapports de tra\xE7age doivent \xEAtre lus "),Ws=i(O,"EM",{});var Ki=l(Ws);nn=r(Ki,"de bas en haut"),Ki.forEach(t),an=r(O,". Cela peut sembler bizarre si vous avez l\u2019habitude de lire du texte anglais de haut en bas, mais cela refl\xE8te le fait que le "),Xs=i(O,"EM",{});var Zi=l(Xs);ln=r(Zi,"traceback"),Zi.forEach(t),un=r(O," montre la s\xE9quence d\u2019appels de fonction que la "),Ys=i(O,"CODE",{});var el=l(Ys);pn=r(el,"pipeline"),el.forEach(t),dn=r(O," fait lors du t\xE9l\xE9chargement du mod\xE8le et du "),Ks=i(O,"EM",{});var sl=l(Ks);cn=r(sl,"tokenizer"),sl.forEach(t),mn=r(O,". Consultez le "),ws=i(O,"A",{href:!0});var tl=l(ws);fn=r(tl,"Chapitre 2"),tl.forEach(t),_n=r(O," pour plus de d\xE9tails sur la fa\xE7on dont le "),Zs=i(O,"CODE",{});var ol=l(Zs);hn=r(ol,"pipeline"),ol.forEach(t),vn=r(O," fonctionne sous le capot."),O.forEach(t),no=d(e),_(ie.$$.fragment,e),ao=d(e),G=i(e,"P",{});var Os=l(G);bn=r(Os,"Cela signifie que la derni\xE8re ligne de la trace indique le dernier message d\u2019erreur et donne le nom de l\u2019exception qui a \xE9t\xE9 lev\xE9e. Dans ce cas, le type d\u2019exception est "),et=i(Os,"CODE",{});var rl=l(et);gn=r(rl,"OSError"),rl.forEach(t),qn=r(Os,", ce qui indique une erreur li\xE9e au syst\xE8me. Si nous lisons le message d\u2019erreur qui l\u2019accompagne, nous pouvons voir qu\u2019il semble y avoir un probl\xE8me avec le fichier "),st=i(Os,"EM",{});var nl=l(st);$n=r(nl,"config.json"),nl.forEach(t),wn=r(Os," du mod\xE8le, et deux suggestions nous sont donn\xE9es pour le r\xE9soudre :"),Os.forEach(t),io=d(e),_(Te.$$.fragment,e),lo=d(e),_(le.$$.fragment,e),uo=d(e),ks=i(e,"P",{});var al=l(ks);kn=r(al,"La premi\xE8re suggestion nous demande de v\xE9rifier si l\u2019identifiant du mod\xE8le est effectivement correct, la premi\xE8re chose \xE0 faire est donc de copier l\u2019identifiant et de le coller dans la barre de recherche du Hub :"),al.forEach(t),po=d(e),Ie=i(e,"DIV",{class:!0});var il=l(Ie);He=i(il,"IMG",{src:!0,alt:!0,width:!0}),il.forEach(t),co=d(e),Es=i(e,"P",{});var ll=l(Es);En=r(ll,"Hmm, il semble en effet que le mod\xE8le de notre coll\xE8gue ne soit pas sur le Hub\u2026 Mais il y a une faute de frappe dans le nom du mod\xE8le ! DistilBERT n\u2019a qu\u2019un seul \u201Cl\u201D dans son nom, alors corrigeons cela et cherchons \u201Clewtun/distilbert-base-uncased-finetuned-squad-d5716d28\u201D \xE0 la place :"),ll.forEach(t),mo=d(e),Le=i(e,"DIV",{class:!0});var ul=l(Le);Qe=i(ul,"IMG",{src:!0,alt:!0,width:!0}),ul.forEach(t),fo=d(e),xs=i(e,"P",{});var pl=l(xs);xn=r(pl,"Ok, \xE7a a march\xE9. Maintenant essayons de t\xE9l\xE9charger \xE0 nouveau le mod\xE8le avec l\u2019ID correct du mod\xE8le :"),pl.forEach(t),_o=d(e),_(Ne.$$.fragment,e),ho=d(e),_(Ve.$$.fragment,e),vo=d(e),H=i(e,"P",{});var qe=l(H);yn=r(qe,"Argh, encore un \xE9chec. Bienvenue dans la vie quotidienne d\u2019un ing\xE9nieur en apprentissage machine ! Puisque nous avons corrig\xE9 l\u2019ID du mod\xE8le, le probl\xE8me doit se situer dans le r\xE9f\xE9rentiel lui-m\xEAme. Une fa\xE7on rapide d\u2019acc\xE9der au contenu d\u2019un d\xE9p\xF4t sur le \u{1F917} "),tt=i(qe,"EM",{});var dl=l(tt);jn=r(dl,"Hub"),dl.forEach(t),zn=r(qe," est via la fonction "),ot=i(qe,"CODE",{});var cl=l(ot);Cn=r(cl,"list_repo_files()"),cl.forEach(t),Pn=r(qe," de la biblioth\xE8que "),rt=i(qe,"CODE",{});var ml=l(rt);Dn=r(ml,"huggingface_hub"),ml.forEach(t),An=r(qe," :"),qe.forEach(t),bo=d(e),_(Fe.$$.fragment,e),go=d(e),_(Je.$$.fragment,e),qo=d(e),j=i(e,"P",{});var M=l(j);On=r(M,"Int\xE9ressant. Il ne semble pas y avoir de fichier "),nt=i(M,"EM",{});var fl=l(nt);Mn=r(fl,"config.json"),fl.forEach(t),Sn=r(M," dans le r\xE9f\xE9rentiel ! Pas \xE9tonnant que notre "),at=i(M,"CODE",{});var _l=l(at);Tn=r(_l,"pipeline"),_l.forEach(t),In=r(M," n\u2019ait pas pu charger le mod\xE8le ; notre coll\xE8gue a d\xFB oublier de pousser ce fichier vers le "),it=i(M,"EM",{});var hl=l(it);Hn=r(hl,"Hub"),hl.forEach(t),Ln=r(M," apr\xE8s l\u2019avoir mis au point. Dans ce cas, le probl\xE8me semble assez simple \xE0 r\xE9soudre : nous pouvons lui demander d\u2019ajouter le fichier, ou, puisque nous pouvons voir \xE0 partir de l\u2019ID du mod\xE8le que le mod\xE8le pr\xE9-entra\xEEn\xE9 utilis\xE9 est "),Re=i(M,"A",{href:!0,rel:!0});var vl=l(Re);lt=i(vl,"CODE",{});var bl=l(lt);Qn=r(bl,"distilbert-base-uncased"),bl.forEach(t),vl.forEach(t),Nn=r(M,", nous pouvons t\xE9l\xE9charger la configuration de ce mod\xE8le et la pousser dans notre d\xE9p\xF4t pour voir si cela r\xE9sout le probl\xE8me. Essayons cela. En utilisant les techniques apprises dans le "),ys=i(M,"A",{href:!0});var gl=l(ys);Vn=r(gl,"Chapitre 2"),gl.forEach(t),Fn=r(M,", nous pouvons t\xE9l\xE9charger la configuration du mod\xE8le avec la classe "),ut=i(M,"CODE",{});var ql=l(ut);Jn=r(ql,"AutoConfig"),ql.forEach(t),Rn=r(M," :"),M.forEach(t),$o=d(e),_(Be.$$.fragment,e),wo=d(e),_(ue.$$.fragment,e),ko=d(e),pe=i(e,"P",{});var ur=l(pe);Bn=r(ur,"Nous pouvons ensuite le pousser vers notre d\xE9p\xF4t de mod\xE8les avec la fonction "),pt=i(ur,"CODE",{});var $l=l(pt);Gn=r($l,"push_to_hub()"),$l.forEach(t),Un=r(ur," de la configuration :"),ur.forEach(t),Eo=d(e),_(Ge.$$.fragment,e),xo=d(e),de=i(e,"P",{});var pr=l(de);Wn=r(pr,"Maintenant, nous pouvons tester si cela a fonctionn\xE9 en chargeant le mod\xE8le depuis le dernier commit de la branche "),dt=i(pr,"CODE",{});var wl=l(dt);Xn=r(wl,"main"),wl.forEach(t),Yn=r(pr," :"),pr.forEach(t),yo=d(e),_(Ue.$$.fragment,e),jo=d(e),_(We.$$.fragment,e),zo=d(e),js=i(e,"P",{});var kl=l(js);Kn=r(kl,"Woohoo, \xE7a a march\xE9 ! R\xE9capitulons ce que vous venez d\u2019apprendre :"),kl.forEach(t),Co=d(e),L=i(e,"UL",{});var $e=l(L);Xe=i($e,"LI",{});var dr=l(Xe);Zn=r(dr,"les messages d\u2019erreur en Python sont appel\xE9s "),ct=i(dr,"EM",{});var El=l(ct);ea=r(El,"tracebacks"),El.forEach(t),sa=r(dr," et sont lus de bas en haut. La derni\xE8re ligne du message d\u2019erreur contient g\xE9n\xE9ralement les informations dont vous avez besoin pour localiser la source du probl\xE8me,"),dr.forEach(t),ta=d($e),mt=i($e,"LI",{});var xl=l(mt);oa=r(xl,"si la derni\xE8re ligne ne contient pas suffisamment d\u2019informations, remontez dans la traceback et voyez si vous pouvez identifier o\xF9 l\u2019erreur se produit dans le code source,"),xl.forEach(t),ra=d($e),ft=i($e,"LI",{});var yl=l(ft);na=r(yl,"si aucun des messages d\u2019erreur ne peut vous aider \xE0 d\xE9boguer le probl\xE8me, essayez de rechercher en ligne une solution \xE0 un probl\xE8me similaire."),yl.forEach(t),aa=d($e),J=i($e,"LI",{});var we=l(J);ia=r(we,"l\u2019"),_t=i(we,"CODE",{});var jl=l(_t);la=r(jl,"huggingface_hub"),jl.forEach(t),ua=r(we,`,
// \u{1F917} `),ht=i(we,"EM",{});var zl=l(ht);pa=r(zl,"Hub"),zl.forEach(t),da=r(we,` ?
fournit une suite d\u2019outils que vous pouvez utiliser pour interagir avec et d\xE9boguer les d\xE9p\xF4ts sur le `),vt=i(we,"EM",{});var Cl=l(vt);ca=r(Cl,"Hub"),Cl.forEach(t),ma=r(we,"."),we.forEach(t),$e.forEach(t),Po=d(e),zs=i(e,"P",{});var Pl=l(zs);fa=r(Pl,"Maintenant que vous savez comment d\xE9boguer un pipeline, examinons un exemple plus d\xE9licat dans la passe avant du mod\xE8le lui-m\xEAme."),Pl.forEach(t),Do=d(e),K=i(e,"H2",{class:!0});var cr=l(K);ce=i(cr,"A",{id:!0,class:!0,href:!0});var Dl=l(ce);bt=i(Dl,"SPAN",{});var Al=l(bt);_(Ye.$$.fragment,Al),Al.forEach(t),Dl.forEach(t),_a=d(cr),gt=i(cr,"SPAN",{});var Ol=l(gt);ha=r(Ol,"D\xE9boguer la passe avant de votre mod\xE8le"),Ol.forEach(t),cr.forEach(t),Ao=d(e),Q=i(e,"P",{});var ke=l(Q);va=r(ke,"Bien que le "),qt=i(ke,"CODE",{});var Ml=l(qt);ba=r(Ml,"pipeline"),Ml.forEach(t),ga=r(ke," soit parfait pour la plupart des applications o\xF9 vous devez g\xE9n\xE9rer rapidement des pr\xE9dictions, vous aurez parfois besoin d\u2019acc\xE9der aux logits du mod\xE8le (par exemple, si vous avez un post-traitement personnalis\xE9 que vous souhaitez appliquer). Pour voir ce qui peut mal tourner dans ce cas, commen\xE7ons par r\xE9cup\xE9rer le mod\xE8le et le "),$t=i(ke,"EM",{});var Sl=l($t);qa=r(Sl,"tokenizer"),Sl.forEach(t),$a=r(ke," de notre "),wt=i(ke,"CODE",{});var Tl=l(wt);wa=r(Tl,"pipeline"),Tl.forEach(t),ka=r(ke," :"),ke.forEach(t),Oo=d(e),_(Ke.$$.fragment,e),Mo=d(e),me=i(e,"P",{});var mr=l(me);Ea=r(mr,"Ensuite, nous avons besoin d\u2019une question, alors voyons si nos "),kt=i(mr,"EM",{});var Il=l(kt);xa=r(Il,"frameworks"),Il.forEach(t),ya=r(mr," pr\xE9f\xE9r\xE9s sont support\xE9s :"),mr.forEach(t),So=d(e),_(Ze.$$.fragment,e),To=d(e),U=i(e,"P",{});var Ms=l(U);ja=r(Ms,"Comme nous l\u2019avons vu dans le "),Cs=i(Ms,"A",{href:!0});var Hl=l(Cs);za=r(Hl,"Chapitre 7"),Hl.forEach(t),Ca=r(Ms,", les \xE9tapes habituelles que nous devons suivre sont la tok\xE9nisation des entr\xE9es, l\u2019extraction des logits des "),Et=i(Ms,"EM",{});var Ll=l(Et);Pa=r(Ll,"tokens"),Ll.forEach(t),Da=r(Ms," de d\xE9but et de fin, puis le d\xE9codage de l\u2019empan de r\xE9ponse :"),Ms.forEach(t),Io=d(e),_(es.$$.fragment,e),Ho=d(e),_(ss.$$.fragment,e),Lo=d(e),fe=i(e,"P",{});var fr=l(fe);Aa=r(fr,"Oh l\xE0 l\xE0, il semble que nous ayons un bug dans notre code ! Mais nous n\u2019avons pas peur d\u2019un petit d\xE9bogage. Vous pouvez utiliser le d\xE9bogueur Python dans un "),xt=i(fr,"EM",{});var Ql=l(xt);Oa=r(Ql,"notebook"),Ql.forEach(t),Ma=r(fr," :"),fr.forEach(t),Qo=d(e),_(ts.$$.fragment,e),No=d(e),Ps=i(e,"P",{});var Nl=l(Ps);Sa=r(Nl,"ou dans un terminal :"),Nl.forEach(t),Vo=d(e),_(os.$$.fragment,e),Fo=d(e),A=i(e,"P",{});var X=l(A);Ta=r(X,"Ici, la lecture du message d\u2019erreur nous indique que l\u2019objet "),yt=i(X,"CODE",{});var Vl=l(yt);Ia=r(Vl,"'list' n'a pas d'attribut 'size'"),Vl.forEach(t),Ha=r(X,", et nous pouvons voir une fl\xE8che "),jt=i(X,"CODE",{});var Fl=l(jt);La=r(Fl,"-->"),Fl.forEach(t),Qa=r(X," pointant vers la ligne o\xF9 le probl\xE8me a \xE9t\xE9 soulev\xE9 dans "),zt=i(X,"CODE",{});var Jl=l(zt);Na=r(Jl,"model(**inputs)"),Jl.forEach(t),Va=r(X,". Vous pouvez d\xE9boguer ceci de mani\xE8re interactive en utilisant le d\xE9bogueur Python, mais pour l\u2019instant nous allons simplement imprimer une tranche de "),Ct=i(X,"CODE",{});var Rl=l(Ct);Fa=r(Rl,"inputs"),Rl.forEach(t),Ja=r(X," pour voir ce que nous avons :"),X.forEach(t),Jo=d(e),_(rs.$$.fragment,e),Ro=d(e),_(ns.$$.fragment,e),Bo=d(e),_e=i(e,"P",{});var _r=l(_e);Ra=r(_r,"Cela ressemble certainement \xE0 une "),Pt=i(_r,"CODE",{});var Bl=l(Pt);Ba=r(Bl,"list"),Bl.forEach(t),Ga=r(_r," ordinaire de Python, mais v\xE9rifions le type :"),_r.forEach(t),Go=d(e),_(as.$$.fragment,e),Uo=d(e),_(is.$$.fragment,e),Wo=d(e),z=i(e,"P",{});var S=l(z);Ua=r(S,"Oui, c\u2019est bien une "),Dt=i(S,"CODE",{});var Gl=l(Dt);Wa=r(Gl,"list"),Gl.forEach(t),Xa=r(S," Python. Alors, qu\u2019est-ce qui a mal tourn\xE9 ? Rappelez-vous du "),Ds=i(S,"A",{href:!0});var Ul=l(Ds);Ya=r(Ul,"Chapitre 2"),Ul.forEach(t),Ka=r(S," que les classes "),At=i(S,"CODE",{});var Wl=l(At);Za=r(Wl,"AutoModelForXxx"),Wl.forEach(t),ei=r(S," dans \u{1F917} Transformers op\xE8rent sur des "),Ot=i(S,"EM",{});var Xl=l(Ot);si=r(Xl,"tenseurs"),Xl.forEach(t),ti=r(S," (soit dans PyTorch ou TensorFlow), et une op\xE9ration commune est d\u2019extraire les dimensions d\u2019un tenseur en utilisant "),Mt=i(S,"CODE",{});var Yl=l(Mt);oi=r(Yl,"Tensor.size()"),Yl.forEach(t),ri=r(S," dans, disons, PyTorch. Jetons un autre coup d\u2019oeil \xE0 la "),St=i(S,"EM",{});var Kl=l(St);ni=r(Kl,"traceback"),Kl.forEach(t),ai=r(S,", pour voir quelle ligne a d\xE9clench\xE9 l\u2019exception :"),S.forEach(t),Xo=d(e),_(ls.$$.fragment,e),Yo=d(e),N=i(e,"P",{});var Ee=l(N);ii=r(Ee,"Il semble que notre code ait essay\xE9 d\u2019appeler "),Tt=i(Ee,"CODE",{});var Zl=l(Tt);li=r(Zl,"input_ids.size()"),Zl.forEach(t),ui=r(Ee,", mais cela ne fonctionne clairement pas pour une "),It=i(Ee,"CODE",{});var eu=l(It);pi=r(eu,"liste"),eu.forEach(t),di=r(Ee," Python, qui est juste un conteneur. Comment pouvons-nous r\xE9soudre ce probl\xE8me ? La recherche du message d\u2019erreur sur Stack Overflow donne quelques "),us=i(Ee,"A",{href:!0,rel:!0});var su=l(us);ci=r(su,"r\xE9ponses"),su.forEach(t),mi=r(Ee," pertinentes. En cliquant sur la premi\xE8re, une question similaire \xE0 la n\xF4tre s\u2019affiche, avec la r\xE9ponse indiqu\xE9e dans la capture d\u2019\xE9cran ci-dessous :"),Ee.forEach(t),Ko=d(e),ps=i(e,"DIV",{class:!0});var tu=l(ps);ds=i(tu,"IMG",{src:!0,alt:!0,width:!0}),tu.forEach(t),Zo=d(e),W=i(e,"P",{});var Ss=l(W);fi=r(Ss,"La r\xE9ponse recommande d\u2019ajouter "),Ht=i(Ss,"CODE",{});var ou=l(Ht);_i=r(ou,"return_tensors='pt'"),ou.forEach(t),hi=r(Ss," au "),Lt=i(Ss,"EM",{});var ru=l(Lt);vi=r(ru,"tokenizer"),ru.forEach(t),bi=r(Ss,", voyons donc si cela fonctionne pour nous :"),Ss.forEach(t),er=d(e),_(cs.$$.fragment,e),sr=d(e),_(ms.$$.fragment,e),tr=d(e),he=i(e,"P",{});var hr=l(he);gi=r(hr,"Super, \xE7a a march\xE9 ! Voil\xE0 un excellent exemple de l\u2019utilit\xE9 de Stack Overflow : en identifiant un probl\xE8me similaire, nous avons pu b\xE9n\xE9ficier de l\u2019exp\xE9rience d\u2019autres membres de la communaut\xE9. Cependant, une recherche de ce type ne donne pas toujours une r\xE9ponse pertinente, alors que faire dans ce cas ? Heureusement, il existe une communaut\xE9 accueillante de d\xE9veloppeurs sur le "),fs=i(hr,"A",{href:!0,rel:!0});var nu=l(fs);qi=r(nu,"forum d\u2019Hugging Face"),nu.forEach(t),$i=r(hr," qui peut vous aider ! Dans la prochaine section, nous verrons comment r\xE9diger de bonnes questions de forum qui ont des chances d\u2019obtenir une r\xE9ponse."),hr.forEach(t),this.h()},h(){c(m,"name","hf:doc:metadata"),c(m,"content",JSON.stringify(hu)),c(x,"id","que-faire-lorsque-vous-obtenez-une-erreur"),c(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"),c(x,"href","#que-faire-lorsque-vous-obtenez-une-erreur"),c(q,"class","relative group"),c(bs,"href","/course/chapter8/fr/section4"),c(ye,"href","https://huggingface.co/lewtun/distilbert-base-uncased-finetuned-squad-d5716d28"),c(ye,"rel","nofollow"),c(te,"href","https://huggingface.co"),c(te,"rel","nofollow"),c(ne,"id","dboguer-le-pipeline-partir-de-transformers"),c(ne,"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"),c(ne,"href","#dboguer-le-pipeline-partir-de-transformers"),c(Y,"class","relative group"),c($s,"href","/course/fr/chapiter7/7"),vr(Se.src,yi="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter8/traceback.png")||c(Se,"src",yi),c(Se,"alt","A Python traceback."),c(Se,"width","100%"),c(Me,"class","flex justify-center"),c(ws,"href","/course/fr/chapter2"),vr(He.src,ji="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter8/wrong-model-id.png")||c(He,"src",ji),c(He,"alt","The wrong model name."),c(He,"width","100%"),c(Ie,"class","flex justify-center"),vr(Qe.src,zi="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter8/true-model-id.png")||c(Qe,"src",zi),c(Qe,"alt","The right model name."),c(Qe,"width","100%"),c(Le,"class","flex justify-center"),c(Re,"href","https://huggingface.co/distilbert-base-uncased"),c(Re,"rel","nofollow"),c(ys,"href","/course/fr/chapter2"),c(ce,"id","dboguer-la-passe-avant-de-votre-modle"),c(ce,"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"),c(ce,"href","#dboguer-la-passe-avant-de-votre-modle"),c(K,"class","relative group"),c(Cs,"href","/course/fr/chapter7"),c(Ds,"href","/course/fr/chapter2"),c(us,"href","https://stackoverflow.com/search?q=AttributeError%3A+%27list%27+object+has+no+attribute+%27size%27&s=c15ec54c-63cb-481d-a749-408920073e8f"),c(us,"rel","nofollow"),vr(ds.src,Ci="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter8/stack-overflow.png")||c(ds,"src",Ci),c(ds,"alt","An answer from Stack Overflow."),c(ds,"width","100%"),c(ps,"class","flex justify-center"),c(fs,"href","https://discuss.huggingface.co/"),c(fs,"rel","nofollow")},m(e,n){s(document.head,m),u(e,P,n),u(e,q,n),s(q,x),s(x,C),h($,C,null),s(q,E),s(q,D),s(D,V),u(e,ee,n),h(F,e,n),u(e,R,n),u(e,k,n),s(k,hs),s(k,se),s(se,vs),s(k,br),s(k,Ts),s(Ts,gr),s(k,qr),s(k,bs),s(bs,$r),s(k,wr),u(e,Vt,n),h(xe,e,n),u(e,Ft,n),u(e,T,n),s(T,kr),s(T,ye),s(ye,Er),s(T,xr),s(T,te),s(te,Is),s(Is,yr),s(te,jr),s(T,zr),s(T,Hs),s(Hs,Cr),s(T,Pr),u(e,Jt,n),h(je,e,n),u(e,Rt,n),u(e,gs,n),s(gs,Dr),u(e,Bt,n),h(ze,e,n),u(e,Gt,n),u(e,oe,n),s(oe,Ar),s(oe,Ls),s(Ls,Or),s(oe,Mr),u(e,Ut,n),h(Ce,e,n),u(e,Wt,n),u(e,re,n),s(re,Sr),s(re,Qs),s(Qs,Tr),s(re,Ir),u(e,Xt,n),u(e,Y,n),s(Y,ne),s(ne,Ns),h(Pe,Ns,null),s(Y,Hr),s(Y,Vs),s(Vs,Lr),u(e,Yt,n),u(e,ae,n),s(ae,Qr),s(ae,Fs),s(Fs,Nr),s(ae,Vr),u(e,Kt,n),u(e,qs,n),s(qs,De),s(De,Fr),s(De,$s),s($s,Jr),s(De,Rr),u(e,Zt,n),u(e,B,n),s(B,Br),s(B,Js),s(Js,Gr),s(B,Ur),s(B,Rs),s(Rs,Wr),s(B,Xr),u(e,eo,n),h(Ae,e,n),u(e,so,n),h(Oe,e,n),u(e,to,n),u(e,I,n),s(I,Yr),s(I,Bs),s(Bs,Kr),s(I,Zr),s(I,Gs),s(Gs,en),s(I,sn),s(I,Us),s(Us,tn),s(I,on),u(e,oo,n),u(e,Me,n),s(Me,Se),u(e,ro,n),u(e,y,n),s(y,rn),s(y,Ws),s(Ws,nn),s(y,an),s(y,Xs),s(Xs,ln),s(y,un),s(y,Ys),s(Ys,pn),s(y,dn),s(y,Ks),s(Ks,cn),s(y,mn),s(y,ws),s(ws,fn),s(y,_n),s(y,Zs),s(Zs,hn),s(y,vn),u(e,no,n),h(ie,e,n),u(e,ao,n),u(e,G,n),s(G,bn),s(G,et),s(et,gn),s(G,qn),s(G,st),s(st,$n),s(G,wn),u(e,io,n),h(Te,e,n),u(e,lo,n),h(le,e,n),u(e,uo,n),u(e,ks,n),s(ks,kn),u(e,po,n),u(e,Ie,n),s(Ie,He),u(e,co,n),u(e,Es,n),s(Es,En),u(e,mo,n),u(e,Le,n),s(Le,Qe),u(e,fo,n),u(e,xs,n),s(xs,xn),u(e,_o,n),h(Ne,e,n),u(e,ho,n),h(Ve,e,n),u(e,vo,n),u(e,H,n),s(H,yn),s(H,tt),s(tt,jn),s(H,zn),s(H,ot),s(ot,Cn),s(H,Pn),s(H,rt),s(rt,Dn),s(H,An),u(e,bo,n),h(Fe,e,n),u(e,go,n),h(Je,e,n),u(e,qo,n),u(e,j,n),s(j,On),s(j,nt),s(nt,Mn),s(j,Sn),s(j,at),s(at,Tn),s(j,In),s(j,it),s(it,Hn),s(j,Ln),s(j,Re),s(Re,lt),s(lt,Qn),s(j,Nn),s(j,ys),s(ys,Vn),s(j,Fn),s(j,ut),s(ut,Jn),s(j,Rn),u(e,$o,n),h(Be,e,n),u(e,wo,n),h(ue,e,n),u(e,ko,n),u(e,pe,n),s(pe,Bn),s(pe,pt),s(pt,Gn),s(pe,Un),u(e,Eo,n),h(Ge,e,n),u(e,xo,n),u(e,de,n),s(de,Wn),s(de,dt),s(dt,Xn),s(de,Yn),u(e,yo,n),h(Ue,e,n),u(e,jo,n),h(We,e,n),u(e,zo,n),u(e,js,n),s(js,Kn),u(e,Co,n),u(e,L,n),s(L,Xe),s(Xe,Zn),s(Xe,ct),s(ct,ea),s(Xe,sa),s(L,ta),s(L,mt),s(mt,oa),s(L,ra),s(L,ft),s(ft,na),s(L,aa),s(L,J),s(J,ia),s(J,_t),s(_t,la),s(J,ua),s(J,ht),s(ht,pa),s(J,da),s(J,vt),s(vt,ca),s(J,ma),u(e,Po,n),u(e,zs,n),s(zs,fa),u(e,Do,n),u(e,K,n),s(K,ce),s(ce,bt),h(Ye,bt,null),s(K,_a),s(K,gt),s(gt,ha),u(e,Ao,n),u(e,Q,n),s(Q,va),s(Q,qt),s(qt,ba),s(Q,ga),s(Q,$t),s($t,qa),s(Q,$a),s(Q,wt),s(wt,wa),s(Q,ka),u(e,Oo,n),h(Ke,e,n),u(e,Mo,n),u(e,me,n),s(me,Ea),s(me,kt),s(kt,xa),s(me,ya),u(e,So,n),h(Ze,e,n),u(e,To,n),u(e,U,n),s(U,ja),s(U,Cs),s(Cs,za),s(U,Ca),s(U,Et),s(Et,Pa),s(U,Da),u(e,Io,n),h(es,e,n),u(e,Ho,n),h(ss,e,n),u(e,Lo,n),u(e,fe,n),s(fe,Aa),s(fe,xt),s(xt,Oa),s(fe,Ma),u(e,Qo,n),h(ts,e,n),u(e,No,n),u(e,Ps,n),s(Ps,Sa),u(e,Vo,n),h(os,e,n),u(e,Fo,n),u(e,A,n),s(A,Ta),s(A,yt),s(yt,Ia),s(A,Ha),s(A,jt),s(jt,La),s(A,Qa),s(A,zt),s(zt,Na),s(A,Va),s(A,Ct),s(Ct,Fa),s(A,Ja),u(e,Jo,n),h(rs,e,n),u(e,Ro,n),h(ns,e,n),u(e,Bo,n),u(e,_e,n),s(_e,Ra),s(_e,Pt),s(Pt,Ba),s(_e,Ga),u(e,Go,n),h(as,e,n),u(e,Uo,n),h(is,e,n),u(e,Wo,n),u(e,z,n),s(z,Ua),s(z,Dt),s(Dt,Wa),s(z,Xa),s(z,Ds),s(Ds,Ya),s(z,Ka),s(z,At),s(At,Za),s(z,ei),s(z,Ot),s(Ot,si),s(z,ti),s(z,Mt),s(Mt,oi),s(z,ri),s(z,St),s(St,ni),s(z,ai),u(e,Xo,n),h(ls,e,n),u(e,Yo,n),u(e,N,n),s(N,ii),s(N,Tt),s(Tt,li),s(N,ui),s(N,It),s(It,pi),s(N,di),s(N,us),s(us,ci),s(N,mi),u(e,Ko,n),u(e,ps,n),s(ps,ds),u(e,Zo,n),u(e,W,n),s(W,fi),s(W,Ht),s(Ht,_i),s(W,hi),s(W,Lt),s(Lt,vi),s(W,bi),u(e,er,n),h(cs,e,n),u(e,sr,n),h(ms,e,n),u(e,tr,n),u(e,he,n),s(he,gi),s(he,fs),s(fs,qi),s(he,$i),or=!0},p(e,[n]){const _s={};n&2&&(_s.$$scope={dirty:n,ctx:e}),ie.$set(_s);const Qt={};n&2&&(Qt.$$scope={dirty:n,ctx:e}),le.$set(Qt);const Nt={};n&2&&(Nt.$$scope={dirty:n,ctx:e}),ue.$set(Nt)},i(e){or||(v($.$$.fragment,e),v(F.$$.fragment,e),v(xe.$$.fragment,e),v(je.$$.fragment,e),v(ze.$$.fragment,e),v(Ce.$$.fragment,e),v(Pe.$$.fragment,e),v(Ae.$$.fragment,e),v(Oe.$$.fragment,e),v(ie.$$.fragment,e),v(Te.$$.fragment,e),v(le.$$.fragment,e),v(Ne.$$.fragment,e),v(Ve.$$.fragment,e),v(Fe.$$.fragment,e),v(Je.$$.fragment,e),v(Be.$$.fragment,e),v(ue.$$.fragment,e),v(Ge.$$.fragment,e),v(Ue.$$.fragment,e),v(We.$$.fragment,e),v(Ye.$$.fragment,e),v(Ke.$$.fragment,e),v(Ze.$$.fragment,e),v(es.$$.fragment,e),v(ss.$$.fragment,e),v(ts.$$.fragment,e),v(os.$$.fragment,e),v(rs.$$.fragment,e),v(ns.$$.fragment,e),v(as.$$.fragment,e),v(is.$$.fragment,e),v(ls.$$.fragment,e),v(cs.$$.fragment,e),v(ms.$$.fragment,e),or=!0)},o(e){b($.$$.fragment,e),b(F.$$.fragment,e),b(xe.$$.fragment,e),b(je.$$.fragment,e),b(ze.$$.fragment,e),b(Ce.$$.fragment,e),b(Pe.$$.fragment,e),b(Ae.$$.fragment,e),b(Oe.$$.fragment,e),b(ie.$$.fragment,e),b(Te.$$.fragment,e),b(le.$$.fragment,e),b(Ne.$$.fragment,e),b(Ve.$$.fragment,e),b(Fe.$$.fragment,e),b(Je.$$.fragment,e),b(Be.$$.fragment,e),b(ue.$$.fragment,e),b(Ge.$$.fragment,e),b(Ue.$$.fragment,e),b(We.$$.fragment,e),b(Ye.$$.fragment,e),b(Ke.$$.fragment,e),b(Ze.$$.fragment,e),b(es.$$.fragment,e),b(ss.$$.fragment,e),b(ts.$$.fragment,e),b(os.$$.fragment,e),b(rs.$$.fragment,e),b(ns.$$.fragment,e),b(as.$$.fragment,e),b(is.$$.fragment,e),b(ls.$$.fragment,e),b(cs.$$.fragment,e),b(ms.$$.fragment,e),or=!1},d(e){t(m),e&&t(P),e&&t(q),g($),e&&t(ee),g(F,e),e&&t(R),e&&t(k),e&&t(Vt),g(xe,e),e&&t(Ft),e&&t(T),e&&t(Jt),g(je,e),e&&t(Rt),e&&t(gs),e&&t(Bt),g(ze,e),e&&t(Gt),e&&t(oe),e&&t(Ut),g(Ce,e),e&&t(Wt),e&&t(re),e&&t(Xt),e&&t(Y),g(Pe),e&&t(Yt),e&&t(ae),e&&t(Kt),e&&t(qs),e&&t(Zt),e&&t(B),e&&t(eo),g(Ae,e),e&&t(so),g(Oe,e),e&&t(to),e&&t(I),e&&t(oo),e&&t(Me),e&&t(ro),e&&t(y),e&&t(no),g(ie,e),e&&t(ao),e&&t(G),e&&t(io),g(Te,e),e&&t(lo),g(le,e),e&&t(uo),e&&t(ks),e&&t(po),e&&t(Ie),e&&t(co),e&&t(Es),e&&t(mo),e&&t(Le),e&&t(fo),e&&t(xs),e&&t(_o),g(Ne,e),e&&t(ho),g(Ve,e),e&&t(vo),e&&t(H),e&&t(bo),g(Fe,e),e&&t(go),g(Je,e),e&&t(qo),e&&t(j),e&&t($o),g(Be,e),e&&t(wo),g(ue,e),e&&t(ko),e&&t(pe),e&&t(Eo),g(Ge,e),e&&t(xo),e&&t(de),e&&t(yo),g(Ue,e),e&&t(jo),g(We,e),e&&t(zo),e&&t(js),e&&t(Co),e&&t(L),e&&t(Po),e&&t(zs),e&&t(Do),e&&t(K),g(Ye),e&&t(Ao),e&&t(Q),e&&t(Oo),g(Ke,e),e&&t(Mo),e&&t(me),e&&t(So),g(Ze,e),e&&t(To),e&&t(U),e&&t(Io),g(es,e),e&&t(Ho),g(ss,e),e&&t(Lo),e&&t(fe),e&&t(Qo),g(ts,e),e&&t(No),e&&t(Ps),e&&t(Vo),g(os,e),e&&t(Fo),e&&t(A),e&&t(Jo),g(rs,e),e&&t(Ro),g(ns,e),e&&t(Bo),e&&t(_e),e&&t(Go),g(as,e),e&&t(Uo),g(is,e),e&&t(Wo),e&&t(z),e&&t(Xo),g(ls,e),e&&t(Yo),e&&t(N),e&&t(Ko),e&&t(ps),e&&t(Zo),e&&t(W),e&&t(er),g(cs,e),e&&t(sr),g(ms,e),e&&t(tr),e&&t(he)}}}const hu={local:"que-faire-lorsque-vous-obtenez-une-erreur",sections:[{local:"dboguer-le-pipeline-partir-de-transformers",title:"D\xE9boguer le pipeline \xE0 partir de \u{1F917} *Transformers*"},{local:"dboguer-la-passe-avant-de-votre-modle",title:"D\xE9boguer la passe avant de votre mod\xE8le"}],title:"Que faire lorsque vous obtenez une erreur"};function vu(Z){return pu(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Eu extends au{constructor(m){super();iu(this,m,vu,_u,lu,{})}}export{Eu as default,hu as metadata};
