import{s as Js,f as it,o as Fs,n as rt}from"../chunks/scheduler.37c15a92.js";import{S as Ls,i as zs,g as a,s as l,r as o,A as Rs,h as r,f as n,c as i,j as Sn,u as d,x as v,k as F,y as Ss,a as s,v as c,d as f,t as g,w as $,m as _,n as h}from"../chunks/index.2bf4358c.js";import{T as st}from"../chunks/Tip.363c041f.js";import{C as Bn}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as Bs}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{Q as at}from"../chunks/Question.668688bc.js";import{H as w,E as Is}from"../chunks/EditOnGithub.8916dc7c.js";function Gs(J){let u,p,q,C,b;return{c(){u=_(`N'envisagez le SFT que si vous :
- Vous avez besoin de performances supplémentaires par rapport à ce que les instructions peuvent réaliser.`),p=a("br"),q=_(`
- Vus avez un cas d'utilisation spécifique pour lequel le coût d'utilisation d'un grand modèle polyvalent l'emporte sur le coût du *finetuning* d'un modèle plus petit`),C=a("br"),b=_(`
- Vous avez besoin de formats de sortie spécialisés ou de connaissances spécifiques à un domaine que les modèles existantsne maîtrisent pas.`)},l(T){u=h(T,`N'envisagez le SFT que si vous :
- Vous avez besoin de performances supplémentaires par rapport à ce que les instructions peuvent réaliser.`),p=r(T,"BR",{}),q=h(T,`
- Vus avez un cas d'utilisation spécifique pour lequel le coût d'utilisation d'un grand modèle polyvalent l'emporte sur le coût du *finetuning* d'un modèle plus petit`),C=r(T,"BR",{}),b=h(T,`
- Vous avez besoin de formats de sortie spécialisés ou de connaissances spécifiques à un domaine que les modèles existantsne maîtrisent pas.`)},m(T,y){s(T,u,y),s(T,p,y),s(T,q,y),s(T,C,y),s(T,b,y)},p:rt,d(T){T&&(n(u),n(p),n(q),n(C),n(b))}}}function Hs(J){let u,p,q,C,b,T,y,U,M,m,j="Cette évaluation vous aidera à déterminer si le SFT est la bonne approche pour vos besoins.";return{c(){u=_("Avant de commencer à utiliser le SFT, évaluez si votre cas d'utilisation nécessite :"),p=a("br"),q=_(`
- un formatage précis des résultats`),C=a("br"),b=_(`
- des connaissances spécifiques à un domaine`),T=a("br"),y=_(`
- des schémas de réponse cohérents`),U=a("br"),M=_(`
- le respect de lignes directrices spécifiques.
`),m=a("p"),m.textContent=j},l(x){u=h(x,"Avant de commencer à utiliser le SFT, évaluez si votre cas d'utilisation nécessite :"),p=r(x,"BR",{}),q=h(x,`
- un formatage précis des résultats`),C=r(x,"BR",{}),b=h(x,`
- des connaissances spécifiques à un domaine`),T=r(x,"BR",{}),y=h(x,`
- des schémas de réponse cohérents`),U=r(x,"BR",{}),M=h(x,`
- le respect de lignes directrices spécifiques.
`),m=r(x,"P",{"data-svelte-h":!0}),v(m)!=="svelte-1w54oh5"&&(m.textContent=j)},m(x,L){s(x,u,L),s(x,p,L),s(x,q,L),s(x,C,L),s(x,b,L),s(x,T,L),s(x,y,L),s(x,U,L),s(x,M,L),s(x,m,L)},p:rt,d(x){x&&(n(u),n(p),n(q),n(C),n(b),n(T),n(y),n(U),n(M),n(m))}}}function Qs(J){let u,p,q,C,b,T,y,U;return{c(){u=_(`Commencez par des valeurs prudentes et ajustez-les en fonction du contrôle :
- Commencer avec 1-3 époques`),p=a("br"),q=_(`
- Utiliser des batchs de plus petite taille dans un premier temps`),C=a("br"),b=_(`
- Surveiller de près les métriques de validation`),T=a("br"),y=_(`
- Ajuster le taux d'apprentissage si l'entraînement est instable`),U=a("br")},l(M){u=h(M,`Commencez par des valeurs prudentes et ajustez-les en fonction du contrôle :
- Commencer avec 1-3 époques`),p=r(M,"BR",{}),q=h(M,`
- Utiliser des batchs de plus petite taille dans un premier temps`),C=r(M,"BR",{}),b=h(M,`
- Surveiller de près les métriques de validation`),T=r(M,"BR",{}),y=h(M,`
- Ajuster le taux d'apprentissage si l'entraînement est instable`),U=r(M,"BR",{})},m(M,m){s(M,u,m),s(M,p,m),s(M,q,m),s(M,C,m),s(M,b,m),s(M,T,m),s(M,y,m),s(M,U,m)},p:rt,d(M){M&&(n(u),n(p),n(q),n(C),n(b),n(T),n(y),n(U))}}}function Zs(J){let u,p,q="Hub",C;return{c(){u=_("Lorsqu'on utilise un jeu de données avec un champ « messages » (comme l'exemple ci-dessus), SFTTrainer applique automatiquement le gabarit de chat du modèle depuis le "),p=a("i"),p.textContent=q,C=_(". Cela signifie que vous n'avez pas besoin de configuration supplémentaire pour gérer les conversations de type chat : la classe Trainer formatera les messages selon le format de gabarits attendu par le modèle.")},l(b){u=h(b,"Lorsqu'on utilise un jeu de données avec un champ « messages » (comme l'exemple ci-dessus), SFTTrainer applique automatiquement le gabarit de chat du modèle depuis le "),p=r(b,"I",{"data-svelte-h":!0}),v(p)!=="svelte-fdaeut"&&(p.textContent=q),C=h(b,". Cela signifie que vous n'avez pas besoin de configuration supplémentaire pour gérer les conversations de type chat : la classe Trainer formatera les messages selon le format de gabarits attendu par le modèle.")},m(b,T){s(b,u,T),s(b,p,T),s(b,C,T)},p:rt,d(b){b&&(n(u),n(p),n(C))}}}function Vs(J){let u,p,q,C,b,T,y,U,M;return{c(){u=_("Soyez attentif à ces signes d'alerte pendant l'entraînement :"),p=a("br"),q=_(`
1. La perte de validation augmente alors que la perte d'entraînement diminue (surentraînement)`),C=a("br"),b=_(`
2. Pas d'amélioration significative des valeurs de la perte (sousentraînement)`),T=a("br"),y=_(`
3. Valeurs de perte extrêmement faibles (mémorisation potentielle)`),U=a("br"),M=_(`
4. Formatage incohérent des résultats (problèmes d'apprentissage des gabarits)`)},l(m){u=h(m,"Soyez attentif à ces signes d'alerte pendant l'entraînement :"),p=r(m,"BR",{}),q=h(m,`
1. La perte de validation augmente alors que la perte d'entraînement diminue (surentraînement)`),C=r(m,"BR",{}),b=h(m,`
2. Pas d'amélioration significative des valeurs de la perte (sousentraînement)`),T=r(m,"BR",{}),y=h(m,`
3. Valeurs de perte extrêmement faibles (mémorisation potentielle)`),U=r(m,"BR",{}),M=h(m,`
4. Formatage incohérent des résultats (problèmes d'apprentissage des gabarits)`)},m(m,j){s(m,u,j),s(m,p,j),s(m,q,j),s(m,C,j),s(m,b,j),s(m,T,j),s(m,y,j),s(m,U,j),s(m,M,j)},p:rt,d(m){m&&(n(u),n(p),n(q),n(C),n(b),n(T),n(y),n(U),n(M))}}}function Es(J){let u;return{c(){u=_("Surveillez à la fois les valeurs de perte et les sorties réelles du modèle pendant l'entraînement. Parfois, la perte peut sembler bonne alors que le modèle développe des comportements indésirables. Une évaluation qualitative régulière des réponses du modèle permet de déceler des problèmes que les mesures seules pourraient ne pas déceler.")},l(p){u=h(p,"Surveillez à la fois les valeurs de perte et les sorties réelles du modèle pendant l'entraînement. Parfois, la perte peut sembler bonne alors que le modèle développe des comportements indésirables. Une évaluation qualitative régulière des réponses du modèle permet de déceler des problèmes que les mesures seules pourraient ne pas déceler.")},m(p,q){s(p,u,q)},d(p){p&&n(u)}}}function Ps(J){let u;return{c(){u=_(`Documentez votre processus d'entraînement, y compris :
- Les caractéristiques du jeu de données
- Les paramètres d'entraînement
- Les métriques de performance
- Les limites connues.
Cette documentation sera précieuse pour les itérations futures du modèle.`)},l(p){u=h(p,`Documentez votre processus d'entraînement, y compris :
- Les caractéristiques du jeu de données
- Les paramètres d'entraînement
- Les métriques de performance
- Les limites connues.
Cette documentation sera précieuse pour les itérations futures du modèle.`)},m(p,q){s(p,u,q)},d(p){p&&n(u)}}}function ks(J){let u,p,q,C,b,T,y,U,M,m="Le <em>finetuning</em> supervisé (SFT) est un processus principalement utilisé pour adapter des modèles de langage pré-entraînés afin qu’ils suivent des instructions, engagent un dialogue et utilisent des formats de sortie spécifiques. Alors que les modèles pré-entraînés ont des capacités générales impressionnantes, le SFT permet de les transformer en modèles de type assistant qui peuvent mieux comprendre et répondre aux instructions de l’utilisateur. Pour ce faire, il faut généralement entraîner sur des jeux de données de conversations et d’instructions écrites par des humains.",j,x,L='Cette page fournit un guide étape par étape pour finetuner le modèle <a href="https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B" rel="nofollow"><code>deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B</code></a> en utilisant le <a href="https://huggingface.co/docs/trl/en/sft_trainer" rel="nofollow"><code>SFTTrainer</code></a>. En suivant ces étapes, vous pouvez adapter le modèle pour effectuer des tâches spécifiques plus efficacement.',ut,Z,pt,V,In="Avant de se lancer dans son implémentation, il est important de comprendre quand le SFT est le bon choix pour votre projet. Dans un premier temps, vous devez vous demander si l’utilisation d’un modèle existant instruit avec des instructions bien conçues suffirait pour votre cas d’utilisation. Le SFT implique des ressources de calcul et des efforts d’ingénierie considérables, et ne doit donc être envisagé que lorsque les instructions des modèles existants s’avèrent insuffisantes.",mt,R,ot,E,Gn="Si vous déterminez que le SFT est nécessaire, la décision de procéder dépend de deux facteurs principaux :",dt,P,ct,k,Hn="Le SFT permet un contrôle précis de la structure de sortie du modèle. Ceci est particulièrement utile lorsque vous avez besoin que le modèle :",ft,W,Qn="<li>Génére des réponses dans un format de gabarits de chat spécifique.</li> <li>Suivre des schémas de sortie stricts</li> <li>Maintenir un style cohérent dans les réponses</li>",gt,X,$t,Y,Zn="Lorsque l’on travaille dans des domaines spécialisés, le SFT permet d’aligner le modèle sur les impératifs propres au domaine en :",vt,A,Vn="<li>Enseignant la terminologie et les concepts du domaine</li> <li>Appliquant les normes professionnelles</li> <li>Traitant les questions techniques de manière appropriée</li> <li>Suivant les lignes directrices spécifiques à l’industrie</li>",bt,S,Tt,N,Mt,D,En="Le processus de <em>finetuning</em> supervisé nécessite un jeu de données spécifique à la tâche, structuré avec des paires entrée-sortie. Chaque paire doit comprendre",qt,O,Pn="<li>Une instruction d’entrée</li> <li>La réponse attendue du modèle</li> <li>Tout contexte ou métadonnée supplémentaire</li>",xt,K,kn="La qualité de vos données d’entraînement est cruciale pour un <em>finetuning</em> réussi. Voyons comment préparer et valider votre jeu de données :",Ct,z,Wn,yt,ee,wt,te,Xn="La configuration de <code>SFTTrainer</code> nécessite la prise en compte de plusieurs paramètres qui contrôlent le processus d`entrainement. Examinons chaque paramètre et son utilité :",_t,ne,Yn="<li><p><strong>Paramètres concernant la durée de l’entraînement</strong>:</p> <ul><li><code>num_train_epochs</code>: Contrôle la durée totale de l’entraînement</li> <li><code>max_steps</code>: Alternative aux époques, définit le nombre maximum d’étapes d’entraînement.</li> <li>Un plus grand nombre d’époques permet un meilleur apprentissage, mais risque d’entraîner un surentraînement.</li></ul></li> <li><p><strong>Paramètres concernant la taille des batchs</strong>:</p> <ul><li><code>per_device_train_batch_size</code>: Détermine l’utilisation de la mémoire et la stabilité de l’entraînement</li> <li><code>gradient_accumulation_steps</code>: Permet d’augmenter la taille des batchs</li> <li>Des lots batchs plus grands permettent d’obtenir des gradients plus stables mais nécessitent plus de mémoire</li></ul></li> <li><p><strong>Paramètres concernant le taux d’apprentissage</strong>:</p> <ul><li><code>learning_rate</code>: Contrôle les mises à jour de la taille des poids</li> <li><code>warmup_ratio</code>: Partie de l’entraînement utilisée pour l’échauffement du taux d’apprentissage</li> <li>Un taux trop élevé peut provoquer une instabilité, un taux trop faible entraîne un apprentissage lent.</li></ul></li> <li><p><strong>Paramètres de contrôle</strong>:</p> <ul><li><code>logging_steps</code>: Fréquence de l’enregistrement des métriques</li> <li><code>eval_steps</code>: Fréquence d’évaluation sur les données de validation</li> <li><code>save_steps</code>: Fréquence des sauvegardes des points de contrôle du modèle</li></ul></li>",ht,B,Ut,se,jt,le,An="Maintenant que nous comprenons les composants clés, mettons en œuvre l’entraînement avec une validation et un suivi appropriés. Nous allons utiliser la classe <code>SFTTrainer</code> de la bibliothèque <em>Transformers Reinforcement Learning</em> (TRL), qui est construite au-dessus de la bibliothèque 🤗 <em>Transformers</em>. Voici un exemple complet utilisant la bibliothèque TRL :",Jt,ie,Ft,I,Lt,ae,zt,re,Nn="SFTTrainer supporte l’empaquetage des exemples afin d’optimiser l’efficacité de l’entraînement. Cette fonctionnalité permet de regrouper plusieurs exemples courts dans la même séquence d’entrée, maximisant ainsi l’utilisation du GPU pendant l’entraînement. Pour activer cette fonctionnalité, il suffit de mettre <code>packing=True</code> dans le constructeur SFTConfig. Lorsque vous utilisez des jeux de données avec <code>max_steps</code>, soyez conscient que vous pouvez entraîner pendant plus d’époques que prévu en fonction de votre configuration d’empaquetage. Vous pouvez personnaliser la façon dont les exemples sont combinés en utilisant une fonction de formatage. C’est particulièrement utile lorsque vous travaillez avec des jeux de données qui ont plusieurs champs comme les paires question-réponse. Pour les jeux de données d’évaluation, vous pouvez désactiver l’empaquetage en réglant <code>eval_packing=False</code> dans SFTConfig. Voici un exemple basique de personnalisation de la configuration d’empaquetage :",Rt,ue,St,pe,Dn="Lorsque le jeu de données est rempli de plusieurs champs, vous pouvez définir une fonction de formatage personnalisée pour combiner les champs en une seule séquence d’entrée. Cette fonction doit prendre une liste d’exemples et renvoyer un dictionnaire contenant la séquence d’entrée condensée. Voici un exemple de fonction de formatage personnalisée :",Bt,me,It,oe,Gt,de,On="Un suivi efficace est essentiel pour un <em>finetuning</em> réussi. Voyons ce qu’il faut surveiller pendant l’entraînement :",Ht,ce,Qt,fe,Kn="La fonction de perte de l’entraînement suit généralement trois phases distinctes :",Zt,ge,es="<li>Chute brutale initiale : Adaptation rapide à la nouvelle distribution des données</li> <li>Stabilisation progressive : Le taux d’apprentissage ralentit au fur et à mesure du <em>finetuning</em> du modèle.</li> <li>Convergence : Les valeurs de la perte se stabilisent, ce qui indique que l’entraînement est terminé.</li>",Vt,$e,ts,Et,ve,Pt,be,ns="Un suivi efficace implique le traquage de paramètres quantitatifs et l’évaluation de paramètres qualitatifs. Les mesures disponibles sont les suivantes :",kt,Te,ss="<li>Perte d’entraînement</li> <li>Perte de validation</li> <li>Progression du taux d’apprentissage</li> <li>Normes du gradient</li>",Wt,G,Xt,Me,Yt,qe,ls="Au fur et à mesure que l’entraînement progresse, les courbes des pertes devraientt se stabiliser progressivement. L’indicateur clé d’un entraînement sain est un faible écart entre la perte d’entraînement et la perte de validation, ce qui suggère que le modèle apprend des schémas généralisables plutôt que de mémoriser des exemples spécifiques. Les valeurs de perte absolues varient en fonction de la tâche et de le jeu de données.",At,xe,Nt,Ce,is="Le graphique ci-dessus illustre une progression typique de l’entraînement. Remarquez que les pertes d’entraînement et de validation diminuent fortement au début, puis se stabilisent progressivement. Ce schéma indique que le modèle apprend efficacement tout en conservant sa capacité de généralisation.",Dt,ye,Ot,we,as="Plusieurs schémas dans les courbes de perte peuvent indiquer des problèmes potentiels. Nous illustrons ci-dessous les signes d’alerte courants et les solutions que nous pouvons envisager.",Kt,_e,rs,en,he,us="Si la perte de validation diminue à un rythme nettement plus lent que la perte d’entraînement, votre modèle est probablement surentraîné par rapport aux données d’entraînement. Envisagez de :",tn,Ue,ps="<li>Réduire le nombres d’étapes de l’entraînement</li> <li>Augmenter la taille du jeu de données</li> <li>Valider la qualité et la diversité du jeu de données</li>",nn,je,ms,sn,Je,os="Si la perte ne montre pas d’amélioration significative, le modèle pourrait :",ln,Fe,ds="<li>Apprendre trop lentement (essayez d’augmenter le taux d’apprentissage)</li> <li>Avoir des difficultés avec la tâche (vérifiez la qualité des données et la complexité de la tâche)</li> <li>Se heurter aux limites de l’architecture (envisager un autre modèle)</li>",an,Le,cs,rn,ze,fs="Des valeurs de perte extrêmement faibles peuvent suggérer une mémorisation plutôt qu’un apprentissage. Ceci est particulièrement inquiétant si",un,Re,gs="<li>Le modèle donne des résultats médiocres sur de nouveaux exemples similaires.</li> <li>Les résultats manquent de diversité</li> <li>Les réponses sont trop similaires aux exemples d’entraînement.</li>",pn,H,mn,Se,$s='Il convient de noter que l’interprétation des valeurs de la perte que nous décrivons ici vise le cas le plus courant, et qu’en fait, elles peuvent se comporter de diverses manières en fonction du modèle, du jeu de données, des paramètres d’entraînement, etc. Si vous souhaitez en savoir plus sur les schémas décrits, nous vous invitons à consulter cet article de blog de l’équipe de <a href="https://www.fast.ai/posts/2023-09-04-learning-jumps/" rel="nofollow">Fast AI</a>.',on,Be,dn,Ie,vs='Dans la section <a href="/fr/chapter11/4">11.4</a>, nous apprendrons à évaluer le modèle à l’aide de jeux de données d’évaluation. Pour l’instant, nous nous concentrerons sur l’évaluation qualitative du modèle.',cn,Ge,bs="Après avoir terminé le SFT, envisagez les actions de suivi suivantes :",fn,He,Ts="<li>Évaluer le modèle de manière approfondie sur des données de test conservées.</li> <li>Valider le respect des gabarits pour les différentes données d’entrée.</li> <li>Tester la rétention des connaissances spécifiques au domaine</li> <li>Contrôler les mesures de performance dans le monde réel</li>",gn,Q,$n,Qe,vn,Ze,bn,Ve,Tn,Ee,Mn,Pe,qn,ke,xn,We,Cn,Xe,yn,Ye,wn,Ae,_n,Ne,hn,De,Un,Oe,Ms="Vous avez appris à finetuner des modèles à l’aide du SFT ! Pour poursuivre votre apprentissage :",jn,Ke,qs="<li>Essayez le <em>notebook</em> avec différents paramètres</li> <li>Expérimentez avec d’autres jeux de données</li> <li>Contribuer à l’amélioration du matériel de cours</li>",Jn,et,Fn,tt,xs='<li><a href="https://huggingface.co/docs/trl" rel="nofollow">Documentation de <em>TRL</em></a></li> <li><a href="https://github.com/huggingface/trl/blob/main/trl/scripts/sft.py" rel="nofollow">Répertoire contenant des exemples de SFT</a></li> <li><a href="https://huggingface.co/docs/transformers/training" rel="nofollow">Les bonnes pratiques pour le <em>finetuning</em></a></li>',Ln,nt,zn,lt,Rn;return b=new Bs({props:{chapter:11,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter11/section3.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section3.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter11/section3.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter11/section3.ipynb"}]}}),y=new w({props:{title:"Finetuning supervisé",local:"finetuning-supervisé",headingTag:"h1"}}),Z=new w({props:{title:"Quand utiliser le SFT ?",local:"quand-utiliser-le-sft-",headingTag:"h2"}}),R=new st({props:{$$slots:{default:[Gs]},$$scope:{ctx:J}}}),P=new w({props:{title:"Contrôle des gabarits",local:"contrôle-des-gabarits",headingTag:"h3"}}),X=new w({props:{title:"Adaptation au domaine",local:"adaptation-au-domaine",headingTag:"h3"}}),S=new st({props:{$$slots:{default:[Hs]},$$scope:{ctx:J}}}),N=new w({props:{title:"Préparation du jeu de données",local:"préparation-du-jeu-de-données",headingTag:"h2"}}),ee=new w({props:{title:"Configuration de l’entraînement",local:"configuration-de-lentraînement",headingTag:"h2"}}),B=new st({props:{$$slots:{default:[Qs]},$$scope:{ctx:J}}}),se=new w({props:{title:"Implémentation avec TRL",local:"implémentation-avec-trl",headingTag:"h2"}}),ie=new Bn({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRybCUyMGltcG9ydCUyMFNGVENvbmZpZyUyQyUyMFNGVFRyYWluZXIlMEFpbXBvcnQlMjB0b3JjaCUwQSUwQSUyMyUyMEQlQzMlQTlmaW5pciUyMGwnYXBwYXJlaWwlMEFkZXZpY2UlMjAlM0QlMjAlMjJjdWRhJTIyJTIwaWYlMjB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpJTIwZWxzZSUyMCUyMmNwdSUyMiUwQSUwQSUyMyUyMENoYXJnZXIlMjBsZSUyMGpldSUyMGRlJTIwZG9ubiVDMyVBOWVzJTBBZGF0YXNldCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJIdWdnaW5nRmFjZVRCJTJGc21vbHRhbGslMjIlMkMlMjAlMjJhbGwlMjIpJTBBJTBBJTIzJTIwQ29uZmlndXJlciUyMGxlcyUyMGFyZ3VtZW50cyUyMGRlJTIwbGElMjBjbGFzc2UlMjBUcmFpbmVyJTBBdHJhaW5pbmdfYXJncyUyMCUzRCUyMFNGVENvbmZpZyglMEElMjAlMjAlMjAlMjBvdXRwdXRfZGlyJTNEJTIyLiUyRnNmdF9vdXRwdXQlMjIlMkMlMEElMjAlMjAlMjAlMjBtYXhfc3RlcHMlM0QxMDAwJTJDJTBBJTIwJTIwJTIwJTIwcGVyX2RldmljZV90cmFpbl9iYXRjaF9zaXplJTNENCUyQyUwQSUyMCUyMCUyMCUyMGxlYXJuaW5nX3JhdGUlM0Q1ZS01JTJDJTBBJTIwJTIwJTIwJTIwbG9nZ2luZ19zdGVwcyUzRDEwJTJDJTBBJTIwJTIwJTIwJTIwc2F2ZV9zdGVwcyUzRDEwMCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfc3RyYXRlZ3klM0QlMjJzdGVwcyUyMiUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfc3RlcHMlM0Q1MCUyQyUwQSklMEElMEElMjMlMjBJbml0aWFsaXNhdGlvbiUyMGRlJTIwbGElMjBjbGFzc2UlMjBUcmFpbmVyJTBBdHJhaW5lciUyMCUzRCUyMFNGVFRyYWluZXIoJTBBJTIwJTIwJTIwJTIwbW9kZWwlM0Rtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMGFyZ3MlM0R0cmFpbmluZ19hcmdzJTJDJTBBJTIwJTIwJTIwJTIwdHJhaW5fZGF0YXNldCUzRGRhdGFzZXQlNUIlMjJ0cmFpbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfZGF0YXNldCUzRGRhdGFzZXQlNUIlMjJ0ZXN0JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwcHJvY2Vzc2luZ19jbGFzcyUzRHRva2VuaXplciUyQyUwQSklMEElMEElMjMlMjBEJUMzJUE5YnV0ZXIlMjBsJ2VudHJhJUMzJUFFbmVtZW50JTBBdHJhaW5lci50cmFpbigp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset
<span class="hljs-keyword">from</span> trl <span class="hljs-keyword">import</span> SFTConfig, SFTTrainer
<span class="hljs-keyword">import</span> torch

<span class="hljs-comment"># Définir l&#x27;appareil</span>
device = <span class="hljs-string">&quot;cuda&quot;</span> <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> <span class="hljs-string">&quot;cpu&quot;</span>

<span class="hljs-comment"># Charger le jeu de données</span>
dataset = load_dataset(<span class="hljs-string">&quot;HuggingFaceTB/smoltalk&quot;</span>, <span class="hljs-string">&quot;all&quot;</span>)

<span class="hljs-comment"># Configurer les arguments de la classe Trainer</span>
training_args = SFTConfig(
    output_dir=<span class="hljs-string">&quot;./sft_output&quot;</span>,
    max_steps=<span class="hljs-number">1000</span>,
    per_device_train_batch_size=<span class="hljs-number">4</span>,
    learning_rate=<span class="hljs-number">5e-5</span>,
    logging_steps=<span class="hljs-number">10</span>,
    save_steps=<span class="hljs-number">100</span>,
    eval_strategy=<span class="hljs-string">&quot;steps&quot;</span>,
    eval_steps=<span class="hljs-number">50</span>,
)

<span class="hljs-comment"># Initialisation de la classe Trainer</span>
trainer = SFTTrainer(
    model=model,
    args=training_args,
    train_dataset=dataset[<span class="hljs-string">&quot;train&quot;</span>],
    eval_dataset=dataset[<span class="hljs-string">&quot;test&quot;</span>],
    processing_class=tokenizer,
)

<span class="hljs-comment"># Débuter l&#x27;entraînement</span>
trainer.train()`,wrap:!1}}),I=new st({props:{$$slots:{default:[Zs]},$$scope:{ctx:J}}}),ae=new w({props:{title:"Empaquetage du jeu de données",local:"empaquetage-du-jeu-de-données",headingTag:"h2"}}),ue=new Bn({props:{code:"JTIzJTIwQ29uZmlndXJhdGlvbiUwQXRyYWluaW5nX2FyZ3MlMjAlM0QlMjBTRlRDb25maWcocGFja2luZyUzRFRydWUpJTBBJTBBdHJhaW5lciUyMCUzRCUyMFNGVFRyYWluZXIobW9kZWwlM0Rtb2RlbCUyQyUyMHRyYWluX2RhdGFzZXQlM0RkYXRhc2V0JTJDJTIwYXJncyUzRHRyYWluaW5nX2FyZ3MpJTBBJTBBdHJhaW5lci50cmFpbigp",highlighted:`<span class="hljs-comment"># Configuration</span>
training_args = SFTConfig(packing=<span class="hljs-literal">True</span>)

trainer = SFTTrainer(model=model, train_dataset=dataset, args=training_args)

trainer.train()`,wrap:!1}}),me=new Bn({props:{code:"ZGVmJTIwZm9ybWF0dGluZ19mdW5jKGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwdGV4dCUyMCUzRCUyMGYlMjIlMjMlMjMlMjMlMjBRdWVzdGlvbiUzQSUyMCU3QmV4YW1wbGUlNUIncXVlc3Rpb24nJTVEJTdEJTVDbiUyMCUyMyUyMyUyMyUyMEFuc3dlciUzQSUyMCU3QmV4YW1wbGUlNUInYW5zd2VyJyU1RCU3RCUyMiUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHRleHQlMEElMEElMEF0cmFpbmluZ19hcmdzJTIwJTNEJTIwU0ZUQ29uZmlnKHBhY2tpbmclM0RUcnVlKSUwQXRyYWluZXIlMjAlM0QlMjBTRlRUcmFpbmVyKCUwQSUyMCUyMCUyMCUyMCUyMmZhY2Vib29rJTJGb3B0LTM1MG0lMjIlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMGFyZ3MlM0R0cmFpbmluZ19hcmdzJTJDJTBBJTIwJTIwJTIwJTIwZm9ybWF0dGluZ19mdW5jJTNEZm9ybWF0dGluZ19mdW5jJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">formatting_func</span>(<span class="hljs-params">example</span>):
    text = <span class="hljs-string">f&quot;### Question: <span class="hljs-subst">{example[<span class="hljs-string">&#x27;question&#x27;</span>]}</span>\\n ### Answer: <span class="hljs-subst">{example[<span class="hljs-string">&#x27;answer&#x27;</span>]}</span>&quot;</span>
    <span class="hljs-keyword">return</span> text


training_args = SFTConfig(packing=<span class="hljs-literal">True</span>)
trainer = SFTTrainer(
    <span class="hljs-string">&quot;facebook/opt-350m&quot;</span>,
    train_dataset=dataset,
    args=training_args,
    formatting_func=formatting_func,
)`,wrap:!1}}),oe=new w({props:{title:"Suivi des progrès de l’entraînement",local:"suivi-des-progrès-de-lentraînement",headingTag:"h2"}}),ce=new w({props:{title:"Comprendre les schémas de la perte",local:"comprendre-les-schémas-de-la-perte",headingTag:"h3"}}),ve=new w({props:{title:"Métriques à surveiller",local:"métriques-à-surveiller",headingTag:"h3"}}),G=new st({props:{warning:!0,$$slots:{default:[Vs]},$$scope:{ctx:J}}}),Me=new w({props:{title:"Le chemin vers la convergence",local:"le-chemin-vers-la-convergence",headingTag:"h3"}}),xe=new w({props:{title:"Suivi de la progression de l’entraînement",local:"suivi-de-la-progression-de-lentraînement",headingTag:"h3"}}),ye=new w({props:{title:"Signes d’alerte à surveiller",local:"signes-dalerte-à-surveiller",headingTag:"h3"}}),H=new st({props:{warning:!0,$$slots:{default:[Es]},$$scope:{ctx:J}}}),Be=new w({props:{title:"Évaluation après SFT",local:"évaluation-après-sft",headingTag:"h2"}}),Q=new st({props:{$$slots:{default:[Ps]},$$scope:{ctx:J}}}),Qe=new w({props:{title:"Quiz",local:"quiz",headingTag:"h2"}}),Ze=new w({props:{title:"1. Quels sont les paramètres qui déterminent la durée de l’entraînement dans le cadre du SFT ?",local:"1-quels-sont-les-paramètres-qui-déterminent-la-durée-de-lentraînement-dans-le-cadre-du-sft-",headingTag:"h3"}}),Ve=new at({props:{choices:[{text:"num_train_epochs et max_steps",explain:"C'est exact ! Ces paramètres déterminent la durée de l'entraînement du modèle, soit par le nombre d'époques, soit par le nombre total d'étapes.",correct:!0},{text:"batch_size et learning_rate",explain:"Si ces éléments ont une incidence sur l'entraînement, ils n'en contrôlent pas directement la durée."},{text:"gradient_checkpointing et warmup_ratio",explain:"Ces paramètres ont une incidence sur l'efficacité et la stabilité de l'entraînement, et non sur sa durée."}]}}),Ee=new w({props:{title:"2. Quelle schéma dans les courbes de perte indique un surentraînement potentiel ?",local:"2-quelle-schéma-dans-les-courbes-de-perte-indique-un-surentraînement-potentiel-",headingTag:"h3"}}),Pe=new at({props:{choices:[{text:"La perte de validation augmente tandis que la perte d'entraînement continue à diminuer",explain:"C'est exact ! Cette divergence entre les pertes d'entraînement et de validation est un signe classique de surentraînement.",correct:!0},{text:"Les pertes liées à l'entraînement et à la validation diminuent régulièrement",explain:"Ce schéma indique en fait un entraînement sain."},{text:"La perte d'entraînement reste constante alors que la perte de validation diminue",explain:"Il s'agit d'un schéma inhabituel qui n'indique pas un surentraînement."}]}}),ke=new w({props:{title:"3. À quoi sert la fonction gradient_accumulation_steps ?",local:"3-à-quoi-sert-la-fonction-gradientaccumulationsteps-",headingTag:"h3"}}),We=new at({props:{choices:[{text:"Pour augmenter la taille effective des batchs sans utiliser plus de mémoire",explain:"C'est exact ! Il accumule les gradients sur plusieurs passages avant de mettre à jour les poids.",correct:!0},{text:"Pour enregistrer des checkpoints pendant l'entraînement",explain:"Ceci est géré par les paramètres save_steps et save_strategy."},{text:"Pour contrôler le programme du taux d'apprentissage",explain:"Le programme du taux d'apprentissage est contrôlée par learning_rate et warmup_ratio."}]}}),Xe=new w({props:{title:"4. Que faut-il surveiller pendant l’entraînement SFT ?",local:"4-que-faut-il-surveiller-pendant-lentraînement-sft-",headingTag:"h3"}}),Ye=new at({props:{choices:[{text:"Des mesures quantitatives et des résultats qualitatifs",explain:"C'est exact ! Le contrôle des deux types de métriques permet de détecter tous les problèmes potentiels.",correct:!0},{text:"Seulement la perte d'entraînement",explain:"La perte d'entraînement ne suffit pas à garantir un bon comportement du modèle."},{text:"Seulement la qualité des sorties du modèle",explain:"Bien qu'importante, l'évaluation qualitative seule passe à côté d'une dynamique d'entraînement importante."}]}}),Ae=new w({props:{title:"5. Qu’est-ce qui indique une convergence saine pendant l’entraînement ?",local:"5-quest-ce-qui-indique-une-convergence-saine-pendant-lentraînement-",headingTag:"h3"}}),Ne=new at({props:{choices:[{text:"Un faible écart entre les pertes d'entraînement et de validation",explain:"C'est exact ! Cela indique que le modèle apprend des schémas généralisables.",correct:!0},{text:"La perte d'entraînement atteint zéro",explain:"Des valeurs de perte extrêmement faibles peuvent indiquer une mémorisation plutôt qu'un apprentissage."},{text:"Perte de validation inférieure à la perte d'entraînement",explain:"Cela serait inhabituel et pourrait indiquer des problèmes avec l'ensemble de validation."}]}}),De=new w({props:{title:"💐 Beau travail !",local:"-beau-travail-",headingTag:"h2"}}),et=new w({props:{title:"Additional Resources",local:"additional-resources",headingTag:"h2"}}),nt=new Is({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter11/3.mdx"}}),{c(){u=a("meta"),p=l(),q=a("p"),C=l(),o(b.$$.fragment),T=l(),o(y.$$.fragment),U=l(),M=a("p"),M.innerHTML=m,j=l(),x=a("p"),x.innerHTML=L,ut=l(),o(Z.$$.fragment),pt=l(),V=a("p"),V.textContent=In,mt=l(),o(R.$$.fragment),ot=l(),E=a("p"),E.textContent=Gn,dt=l(),o(P.$$.fragment),ct=l(),k=a("p"),k.textContent=Hn,ft=l(),W=a("ol"),W.innerHTML=Qn,gt=l(),o(X.$$.fragment),$t=l(),Y=a("p"),Y.textContent=Zn,vt=l(),A=a("ol"),A.innerHTML=Vn,bt=l(),o(S.$$.fragment),Tt=l(),o(N.$$.fragment),Mt=l(),D=a("p"),D.innerHTML=En,qt=l(),O=a("ol"),O.innerHTML=Pn,xt=l(),K=a("p"),K.innerHTML=kn,Ct=l(),z=a("iframe"),yt=l(),o(ee.$$.fragment),wt=l(),te=a("p"),te.innerHTML=Xn,_t=l(),ne=a("ol"),ne.innerHTML=Yn,ht=l(),o(B.$$.fragment),Ut=l(),o(se.$$.fragment),jt=l(),le=a("p"),le.innerHTML=An,Jt=l(),o(ie.$$.fragment),Ft=l(),o(I.$$.fragment),Lt=l(),o(ae.$$.fragment),zt=l(),re=a("p"),re.innerHTML=Nn,Rt=l(),o(ue.$$.fragment),St=l(),pe=a("p"),pe.textContent=Dn,Bt=l(),o(me.$$.fragment),It=l(),o(oe.$$.fragment),Gt=l(),de=a("p"),de.innerHTML=On,Ht=l(),o(ce.$$.fragment),Qt=l(),fe=a("p"),fe.textContent=Kn,Zt=l(),ge=a("ol"),ge.innerHTML=es,Vt=l(),$e=a("img"),Et=l(),o(ve.$$.fragment),Pt=l(),be=a("p"),be.textContent=ns,kt=l(),Te=a("ul"),Te.innerHTML=ss,Wt=l(),o(G.$$.fragment),Xt=l(),o(Me.$$.fragment),Yt=l(),qe=a("p"),qe.textContent=ls,At=l(),o(xe.$$.fragment),Nt=l(),Ce=a("p"),Ce.textContent=is,Dt=l(),o(ye.$$.fragment),Ot=l(),we=a("p"),we.textContent=as,Kt=l(),_e=a("img"),en=l(),he=a("p"),he.textContent=us,tn=l(),Ue=a("ul"),Ue.innerHTML=ps,nn=l(),je=a("img"),sn=l(),Je=a("p"),Je.textContent=os,ln=l(),Fe=a("ul"),Fe.innerHTML=ds,an=l(),Le=a("img"),rn=l(),ze=a("p"),ze.textContent=fs,un=l(),Re=a("ul"),Re.innerHTML=gs,pn=l(),o(H.$$.fragment),mn=l(),Se=a("p"),Se.innerHTML=$s,on=l(),o(Be.$$.fragment),dn=l(),Ie=a("p"),Ie.innerHTML=vs,cn=l(),Ge=a("p"),Ge.textContent=bs,fn=l(),He=a("ol"),He.innerHTML=Ts,gn=l(),o(Q.$$.fragment),$n=l(),o(Qe.$$.fragment),vn=l(),o(Ze.$$.fragment),bn=l(),o(Ve.$$.fragment),Tn=l(),o(Ee.$$.fragment),Mn=l(),o(Pe.$$.fragment),qn=l(),o(ke.$$.fragment),xn=l(),o(We.$$.fragment),Cn=l(),o(Xe.$$.fragment),yn=l(),o(Ye.$$.fragment),wn=l(),o(Ae.$$.fragment),_n=l(),o(Ne.$$.fragment),hn=l(),o(De.$$.fragment),Un=l(),Oe=a("p"),Oe.textContent=Ms,jn=l(),Ke=a("ol"),Ke.innerHTML=qs,Jn=l(),o(et.$$.fragment),Fn=l(),tt=a("ul"),tt.innerHTML=xs,Ln=l(),o(nt.$$.fragment),zn=l(),lt=a("p"),this.h()},l(e){const t=Rs("svelte-u9bgzb",document.head);u=r(t,"META",{name:!0,content:!0}),t.forEach(n),p=i(e),q=r(e,"P",{}),Sn(q).forEach(n),C=i(e),d(b.$$.fragment,e),T=i(e),d(y.$$.fragment,e),U=i(e),M=r(e,"P",{"data-svelte-h":!0}),v(M)!=="svelte-1nv3pve"&&(M.innerHTML=m),j=i(e),x=r(e,"P",{"data-svelte-h":!0}),v(x)!=="svelte-1c2nxem"&&(x.innerHTML=L),ut=i(e),d(Z.$$.fragment,e),pt=i(e),V=r(e,"P",{"data-svelte-h":!0}),v(V)!=="svelte-1txylwc"&&(V.textContent=In),mt=i(e),d(R.$$.fragment,e),ot=i(e),E=r(e,"P",{"data-svelte-h":!0}),v(E)!=="svelte-evvtt8"&&(E.textContent=Gn),dt=i(e),d(P.$$.fragment,e),ct=i(e),k=r(e,"P",{"data-svelte-h":!0}),v(k)!=="svelte-14anw6z"&&(k.textContent=Hn),ft=i(e),W=r(e,"OL",{"data-svelte-h":!0}),v(W)!=="svelte-1uqcg0u"&&(W.innerHTML=Qn),gt=i(e),d(X.$$.fragment,e),$t=i(e),Y=r(e,"P",{"data-svelte-h":!0}),v(Y)!=="svelte-1epzurj"&&(Y.textContent=Zn),vt=i(e),A=r(e,"OL",{"data-svelte-h":!0}),v(A)!=="svelte-722dyw"&&(A.innerHTML=Vn),bt=i(e),d(S.$$.fragment,e),Tt=i(e),d(N.$$.fragment,e),Mt=i(e),D=r(e,"P",{"data-svelte-h":!0}),v(D)!=="svelte-15mrl1u"&&(D.innerHTML=En),qt=i(e),O=r(e,"OL",{"data-svelte-h":!0}),v(O)!=="svelte-1lhgh9y"&&(O.innerHTML=Pn),xt=i(e),K=r(e,"P",{"data-svelte-h":!0}),v(K)!=="svelte-xyoyho"&&(K.innerHTML=kn),Ct=i(e),z=r(e,"IFRAME",{src:!0,frameborder:!0,width:!0,height:!0}),Sn(z).forEach(n),yt=i(e),d(ee.$$.fragment,e),wt=i(e),te=r(e,"P",{"data-svelte-h":!0}),v(te)!=="svelte-y782u5"&&(te.innerHTML=Xn),_t=i(e),ne=r(e,"OL",{"data-svelte-h":!0}),v(ne)!=="svelte-evja38"&&(ne.innerHTML=Yn),ht=i(e),d(B.$$.fragment,e),Ut=i(e),d(se.$$.fragment,e),jt=i(e),le=r(e,"P",{"data-svelte-h":!0}),v(le)!=="svelte-1h1bkrf"&&(le.innerHTML=An),Jt=i(e),d(ie.$$.fragment,e),Ft=i(e),d(I.$$.fragment,e),Lt=i(e),d(ae.$$.fragment,e),zt=i(e),re=r(e,"P",{"data-svelte-h":!0}),v(re)!=="svelte-1nwuc4a"&&(re.innerHTML=Nn),Rt=i(e),d(ue.$$.fragment,e),St=i(e),pe=r(e,"P",{"data-svelte-h":!0}),v(pe)!=="svelte-1lo446q"&&(pe.textContent=Dn),Bt=i(e),d(me.$$.fragment,e),It=i(e),d(oe.$$.fragment,e),Gt=i(e),de=r(e,"P",{"data-svelte-h":!0}),v(de)!=="svelte-18nm3n4"&&(de.innerHTML=On),Ht=i(e),d(ce.$$.fragment,e),Qt=i(e),fe=r(e,"P",{"data-svelte-h":!0}),v(fe)!=="svelte-1gdfzu6"&&(fe.textContent=Kn),Zt=i(e),ge=r(e,"OL",{"data-svelte-h":!0}),v(ge)!=="svelte-1auq1rx"&&(ge.innerHTML=es),Vt=i(e),$e=r(e,"IMG",{src:!0,alt:!0}),Et=i(e),d(ve.$$.fragment,e),Pt=i(e),be=r(e,"P",{"data-svelte-h":!0}),v(be)!=="svelte-16uzd7y"&&(be.textContent=ns),kt=i(e),Te=r(e,"UL",{"data-svelte-h":!0}),v(Te)!=="svelte-1wf4zbq"&&(Te.innerHTML=ss),Wt=i(e),d(G.$$.fragment,e),Xt=i(e),d(Me.$$.fragment,e),Yt=i(e),qe=r(e,"P",{"data-svelte-h":!0}),v(qe)!=="svelte-mhhkjr"&&(qe.textContent=ls),At=i(e),d(xe.$$.fragment,e),Nt=i(e),Ce=r(e,"P",{"data-svelte-h":!0}),v(Ce)!=="svelte-1megtcr"&&(Ce.textContent=is),Dt=i(e),d(ye.$$.fragment,e),Ot=i(e),we=r(e,"P",{"data-svelte-h":!0}),v(we)!=="svelte-phqdif"&&(we.textContent=as),Kt=i(e),_e=r(e,"IMG",{src:!0,alt:!0}),en=i(e),he=r(e,"P",{"data-svelte-h":!0}),v(he)!=="svelte-dfbexo"&&(he.textContent=us),tn=i(e),Ue=r(e,"UL",{"data-svelte-h":!0}),v(Ue)!=="svelte-eedtpy"&&(Ue.innerHTML=ps),nn=i(e),je=r(e,"IMG",{src:!0,alt:!0}),sn=i(e),Je=r(e,"P",{"data-svelte-h":!0}),v(Je)!=="svelte-imu9ld"&&(Je.textContent=os),ln=i(e),Fe=r(e,"UL",{"data-svelte-h":!0}),v(Fe)!=="svelte-slhpp0"&&(Fe.innerHTML=ds),an=i(e),Le=r(e,"IMG",{src:!0,alt:!0}),rn=i(e),ze=r(e,"P",{"data-svelte-h":!0}),v(ze)!=="svelte-1d9h6dt"&&(ze.textContent=fs),un=i(e),Re=r(e,"UL",{"data-svelte-h":!0}),v(Re)!=="svelte-1x38fet"&&(Re.innerHTML=gs),pn=i(e),d(H.$$.fragment,e),mn=i(e),Se=r(e,"P",{"data-svelte-h":!0}),v(Se)!=="svelte-o5pbtx"&&(Se.innerHTML=$s),on=i(e),d(Be.$$.fragment,e),dn=i(e),Ie=r(e,"P",{"data-svelte-h":!0}),v(Ie)!=="svelte-1oxy13q"&&(Ie.innerHTML=vs),cn=i(e),Ge=r(e,"P",{"data-svelte-h":!0}),v(Ge)!=="svelte-1e25kz9"&&(Ge.textContent=bs),fn=i(e),He=r(e,"OL",{"data-svelte-h":!0}),v(He)!=="svelte-13n03km"&&(He.innerHTML=Ts),gn=i(e),d(Q.$$.fragment,e),$n=i(e),d(Qe.$$.fragment,e),vn=i(e),d(Ze.$$.fragment,e),bn=i(e),d(Ve.$$.fragment,e),Tn=i(e),d(Ee.$$.fragment,e),Mn=i(e),d(Pe.$$.fragment,e),qn=i(e),d(ke.$$.fragment,e),xn=i(e),d(We.$$.fragment,e),Cn=i(e),d(Xe.$$.fragment,e),yn=i(e),d(Ye.$$.fragment,e),wn=i(e),d(Ae.$$.fragment,e),_n=i(e),d(Ne.$$.fragment,e),hn=i(e),d(De.$$.fragment,e),Un=i(e),Oe=r(e,"P",{"data-svelte-h":!0}),v(Oe)!=="svelte-sgtu7z"&&(Oe.textContent=Ms),jn=i(e),Ke=r(e,"OL",{"data-svelte-h":!0}),v(Ke)!=="svelte-7suqk2"&&(Ke.innerHTML=qs),Jn=i(e),d(et.$$.fragment,e),Fn=i(e),tt=r(e,"UL",{"data-svelte-h":!0}),v(tt)!=="svelte-v2a6nt"&&(tt.innerHTML=xs),Ln=i(e),d(nt.$$.fragment,e),zn=i(e),lt=r(e,"P",{}),Sn(lt).forEach(n),this.h()},h(){F(u,"name","hf:doc:metadata"),F(u,"content",Ws),it(z.src,Wn="https://huggingface.co/datasets/HuggingFaceTB/smoltalk/embed/viewer/all/train?row=0")||F(z,"src",Wn),F(z,"frameborder","0"),F(z,"width","100%"),F(z,"height","360px"),it($e.src,ts="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/nlp_course_sft_loss_graphic.png")||F($e,"src",ts),F($e,"alt","SFTTrainer Training"),it(_e.src,rs="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/sft_loss_1.png")||F(_e,"src",rs),F(_e,"alt","SFTTrainer Training"),it(je.src,ms="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/sft_loss_2.png")||F(je,"src",ms),F(je,"alt","SFTTrainer Training"),it(Le.src,cs="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/sft_loss_3.png")||F(Le,"src",cs),F(Le,"alt","SFTTrainer Training")},m(e,t){Ss(document.head,u),s(e,p,t),s(e,q,t),s(e,C,t),c(b,e,t),s(e,T,t),c(y,e,t),s(e,U,t),s(e,M,t),s(e,j,t),s(e,x,t),s(e,ut,t),c(Z,e,t),s(e,pt,t),s(e,V,t),s(e,mt,t),c(R,e,t),s(e,ot,t),s(e,E,t),s(e,dt,t),c(P,e,t),s(e,ct,t),s(e,k,t),s(e,ft,t),s(e,W,t),s(e,gt,t),c(X,e,t),s(e,$t,t),s(e,Y,t),s(e,vt,t),s(e,A,t),s(e,bt,t),c(S,e,t),s(e,Tt,t),c(N,e,t),s(e,Mt,t),s(e,D,t),s(e,qt,t),s(e,O,t),s(e,xt,t),s(e,K,t),s(e,Ct,t),s(e,z,t),s(e,yt,t),c(ee,e,t),s(e,wt,t),s(e,te,t),s(e,_t,t),s(e,ne,t),s(e,ht,t),c(B,e,t),s(e,Ut,t),c(se,e,t),s(e,jt,t),s(e,le,t),s(e,Jt,t),c(ie,e,t),s(e,Ft,t),c(I,e,t),s(e,Lt,t),c(ae,e,t),s(e,zt,t),s(e,re,t),s(e,Rt,t),c(ue,e,t),s(e,St,t),s(e,pe,t),s(e,Bt,t),c(me,e,t),s(e,It,t),c(oe,e,t),s(e,Gt,t),s(e,de,t),s(e,Ht,t),c(ce,e,t),s(e,Qt,t),s(e,fe,t),s(e,Zt,t),s(e,ge,t),s(e,Vt,t),s(e,$e,t),s(e,Et,t),c(ve,e,t),s(e,Pt,t),s(e,be,t),s(e,kt,t),s(e,Te,t),s(e,Wt,t),c(G,e,t),s(e,Xt,t),c(Me,e,t),s(e,Yt,t),s(e,qe,t),s(e,At,t),c(xe,e,t),s(e,Nt,t),s(e,Ce,t),s(e,Dt,t),c(ye,e,t),s(e,Ot,t),s(e,we,t),s(e,Kt,t),s(e,_e,t),s(e,en,t),s(e,he,t),s(e,tn,t),s(e,Ue,t),s(e,nn,t),s(e,je,t),s(e,sn,t),s(e,Je,t),s(e,ln,t),s(e,Fe,t),s(e,an,t),s(e,Le,t),s(e,rn,t),s(e,ze,t),s(e,un,t),s(e,Re,t),s(e,pn,t),c(H,e,t),s(e,mn,t),s(e,Se,t),s(e,on,t),c(Be,e,t),s(e,dn,t),s(e,Ie,t),s(e,cn,t),s(e,Ge,t),s(e,fn,t),s(e,He,t),s(e,gn,t),c(Q,e,t),s(e,$n,t),c(Qe,e,t),s(e,vn,t),c(Ze,e,t),s(e,bn,t),c(Ve,e,t),s(e,Tn,t),c(Ee,e,t),s(e,Mn,t),c(Pe,e,t),s(e,qn,t),c(ke,e,t),s(e,xn,t),c(We,e,t),s(e,Cn,t),c(Xe,e,t),s(e,yn,t),c(Ye,e,t),s(e,wn,t),c(Ae,e,t),s(e,_n,t),c(Ne,e,t),s(e,hn,t),c(De,e,t),s(e,Un,t),s(e,Oe,t),s(e,jn,t),s(e,Ke,t),s(e,Jn,t),c(et,e,t),s(e,Fn,t),s(e,tt,t),s(e,Ln,t),c(nt,e,t),s(e,zn,t),s(e,lt,t),Rn=!0},p(e,[t]){const Cs={};t&2&&(Cs.$$scope={dirty:t,ctx:e}),R.$set(Cs);const ys={};t&2&&(ys.$$scope={dirty:t,ctx:e}),S.$set(ys);const ws={};t&2&&(ws.$$scope={dirty:t,ctx:e}),B.$set(ws);const _s={};t&2&&(_s.$$scope={dirty:t,ctx:e}),I.$set(_s);const hs={};t&2&&(hs.$$scope={dirty:t,ctx:e}),G.$set(hs);const Us={};t&2&&(Us.$$scope={dirty:t,ctx:e}),H.$set(Us);const js={};t&2&&(js.$$scope={dirty:t,ctx:e}),Q.$set(js)},i(e){Rn||(f(b.$$.fragment,e),f(y.$$.fragment,e),f(Z.$$.fragment,e),f(R.$$.fragment,e),f(P.$$.fragment,e),f(X.$$.fragment,e),f(S.$$.fragment,e),f(N.$$.fragment,e),f(ee.$$.fragment,e),f(B.$$.fragment,e),f(se.$$.fragment,e),f(ie.$$.fragment,e),f(I.$$.fragment,e),f(ae.$$.fragment,e),f(ue.$$.fragment,e),f(me.$$.fragment,e),f(oe.$$.fragment,e),f(ce.$$.fragment,e),f(ve.$$.fragment,e),f(G.$$.fragment,e),f(Me.$$.fragment,e),f(xe.$$.fragment,e),f(ye.$$.fragment,e),f(H.$$.fragment,e),f(Be.$$.fragment,e),f(Q.$$.fragment,e),f(Qe.$$.fragment,e),f(Ze.$$.fragment,e),f(Ve.$$.fragment,e),f(Ee.$$.fragment,e),f(Pe.$$.fragment,e),f(ke.$$.fragment,e),f(We.$$.fragment,e),f(Xe.$$.fragment,e),f(Ye.$$.fragment,e),f(Ae.$$.fragment,e),f(Ne.$$.fragment,e),f(De.$$.fragment,e),f(et.$$.fragment,e),f(nt.$$.fragment,e),Rn=!0)},o(e){g(b.$$.fragment,e),g(y.$$.fragment,e),g(Z.$$.fragment,e),g(R.$$.fragment,e),g(P.$$.fragment,e),g(X.$$.fragment,e),g(S.$$.fragment,e),g(N.$$.fragment,e),g(ee.$$.fragment,e),g(B.$$.fragment,e),g(se.$$.fragment,e),g(ie.$$.fragment,e),g(I.$$.fragment,e),g(ae.$$.fragment,e),g(ue.$$.fragment,e),g(me.$$.fragment,e),g(oe.$$.fragment,e),g(ce.$$.fragment,e),g(ve.$$.fragment,e),g(G.$$.fragment,e),g(Me.$$.fragment,e),g(xe.$$.fragment,e),g(ye.$$.fragment,e),g(H.$$.fragment,e),g(Be.$$.fragment,e),g(Q.$$.fragment,e),g(Qe.$$.fragment,e),g(Ze.$$.fragment,e),g(Ve.$$.fragment,e),g(Ee.$$.fragment,e),g(Pe.$$.fragment,e),g(ke.$$.fragment,e),g(We.$$.fragment,e),g(Xe.$$.fragment,e),g(Ye.$$.fragment,e),g(Ae.$$.fragment,e),g(Ne.$$.fragment,e),g(De.$$.fragment,e),g(et.$$.fragment,e),g(nt.$$.fragment,e),Rn=!1},d(e){e&&(n(p),n(q),n(C),n(T),n(U),n(M),n(j),n(x),n(ut),n(pt),n(V),n(mt),n(ot),n(E),n(dt),n(ct),n(k),n(ft),n(W),n(gt),n($t),n(Y),n(vt),n(A),n(bt),n(Tt),n(Mt),n(D),n(qt),n(O),n(xt),n(K),n(Ct),n(z),n(yt),n(wt),n(te),n(_t),n(ne),n(ht),n(Ut),n(jt),n(le),n(Jt),n(Ft),n(Lt),n(zt),n(re),n(Rt),n(St),n(pe),n(Bt),n(It),n(Gt),n(de),n(Ht),n(Qt),n(fe),n(Zt),n(ge),n(Vt),n($e),n(Et),n(Pt),n(be),n(kt),n(Te),n(Wt),n(Xt),n(Yt),n(qe),n(At),n(Nt),n(Ce),n(Dt),n(Ot),n(we),n(Kt),n(_e),n(en),n(he),n(tn),n(Ue),n(nn),n(je),n(sn),n(Je),n(ln),n(Fe),n(an),n(Le),n(rn),n(ze),n(un),n(Re),n(pn),n(mn),n(Se),n(on),n(dn),n(Ie),n(cn),n(Ge),n(fn),n(He),n(gn),n($n),n(vn),n(bn),n(Tn),n(Mn),n(qn),n(xn),n(Cn),n(yn),n(wn),n(_n),n(hn),n(Un),n(Oe),n(jn),n(Ke),n(Jn),n(Fn),n(tt),n(Ln),n(zn),n(lt)),n(u),$(b,e),$(y,e),$(Z,e),$(R,e),$(P,e),$(X,e),$(S,e),$(N,e),$(ee,e),$(B,e),$(se,e),$(ie,e),$(I,e),$(ae,e),$(ue,e),$(me,e),$(oe,e),$(ce,e),$(ve,e),$(G,e),$(Me,e),$(xe,e),$(ye,e),$(H,e),$(Be,e),$(Q,e),$(Qe,e),$(Ze,e),$(Ve,e),$(Ee,e),$(Pe,e),$(ke,e),$(We,e),$(Xe,e),$(Ye,e),$(Ae,e),$(Ne,e),$(De,e),$(et,e),$(nt,e)}}}const Ws='{"title":"Finetuning supervisé","local":"finetuning-supervisé","sections":[{"title":"Quand utiliser le SFT ?","local":"quand-utiliser-le-sft-","sections":[{"title":"Contrôle des gabarits","local":"contrôle-des-gabarits","sections":[],"depth":3},{"title":"Adaptation au domaine","local":"adaptation-au-domaine","sections":[],"depth":3}],"depth":2},{"title":"Préparation du jeu de données","local":"préparation-du-jeu-de-données","sections":[],"depth":2},{"title":"Configuration de l’entraînement","local":"configuration-de-lentraînement","sections":[],"depth":2},{"title":"Implémentation avec TRL","local":"implémentation-avec-trl","sections":[],"depth":2},{"title":"Empaquetage du jeu de données","local":"empaquetage-du-jeu-de-données","sections":[],"depth":2},{"title":"Suivi des progrès de l’entraînement","local":"suivi-des-progrès-de-lentraînement","sections":[{"title":"Comprendre les schémas de la perte","local":"comprendre-les-schémas-de-la-perte","sections":[],"depth":3},{"title":"Métriques à surveiller","local":"métriques-à-surveiller","sections":[],"depth":3},{"title":"Le chemin vers la convergence","local":"le-chemin-vers-la-convergence","sections":[],"depth":3},{"title":"Suivi de la progression de l’entraînement","local":"suivi-de-la-progression-de-lentraînement","sections":[],"depth":3},{"title":"Signes d’alerte à surveiller","local":"signes-dalerte-à-surveiller","sections":[],"depth":3}],"depth":2},{"title":"Évaluation après SFT","local":"évaluation-après-sft","sections":[],"depth":2},{"title":"Quiz","local":"quiz","sections":[{"title":"1. Quels sont les paramètres qui déterminent la durée de l’entraînement dans le cadre du SFT ?","local":"1-quels-sont-les-paramètres-qui-déterminent-la-durée-de-lentraînement-dans-le-cadre-du-sft-","sections":[],"depth":3},{"title":"2. Quelle schéma dans les courbes de perte indique un surentraînement potentiel ?","local":"2-quelle-schéma-dans-les-courbes-de-perte-indique-un-surentraînement-potentiel-","sections":[],"depth":3},{"title":"3. À quoi sert la fonction gradient_accumulation_steps ?","local":"3-à-quoi-sert-la-fonction-gradientaccumulationsteps-","sections":[],"depth":3},{"title":"4. Que faut-il surveiller pendant l’entraînement SFT ?","local":"4-que-faut-il-surveiller-pendant-lentraînement-sft-","sections":[],"depth":3},{"title":"5. Qu’est-ce qui indique une convergence saine pendant l’entraînement ?","local":"5-quest-ce-qui-indique-une-convergence-saine-pendant-lentraînement-","sections":[],"depth":3}],"depth":2},{"title":"💐 Beau travail !","local":"-beau-travail-","sections":[],"depth":2},{"title":"Additional Resources","local":"additional-resources","sections":[],"depth":2}],"depth":1}';function Xs(J){return Fs(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class tl extends Ls{constructor(u){super(),zs(this,u,Xs,ks,Js,{})}}export{tl as component};
