Buckets:
| import{s as jt,o as Ct,n as vt}from"../chunks/scheduler.37c15a92.js";import{S as Rt,i as Zt,g as o,s as i,r as p,A as _t,h as s,f as a,c as n,j as Ut,u,x as m,k as ht,y as It,a as l,v as c,d,t as f,w as M,m as Lt,n as Ft}from"../chunks/index.2bf4358c.js";import{T as Oe}from"../chunks/Tip.363c041f.js";import{C as me}from"../chunks/CodeBlock.4e987730.js";import{C as Vt}from"../chunks/CourseFloatingBanner.6add7356.js";import{H as J,E as Et}from"../chunks/getInferenceSnippets.24b50994.js";function At(g){let r;return{c(){r=Lt("Când implementați metode PEFT, începeți cu valori mici ale rangului (4-8) pentru LoRA și monitorizați pierderea antrenamentului. Folosiți seturi de validare pentru a preveni supraadaptarea și comparați rezultatele cu liniile de bază de fine-tuning complet când este posibil. Eficacitatea diferitelor metode poate varia în funcție de sarcină, așa că experimentarea este cheia.")},l(b){r=Ft(b,"Când implementați metode PEFT, începeți cu valori mici ale rangului (4-8) pentru LoRA și monitorizați pierderea antrenamentului. Folosiți seturi de validare pentru a preveni supraadaptarea și comparați rezultatele cu liniile de bază de fine-tuning complet când este posibil. Eficacitatea diferitelor metode poate varia în funcție de sarcină, așa că experimentarea este cheia.")},m(b,T){l(b,r,T)},d(b){b&&a(r)}}}function zt(g){let r,b="✏️ <strong>Încercați!</strong> Construiți pe modelul dumneavoastră ajustat fin din secțiunea anterioară, dar faceți fine-tuning cu LoRA. Folosiți setul de date <code>HuggingFaceTB/smoltalk</code> pentru a face fine-tuning la un model <code>deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B</code>, folosind configurația LoRA pe care am definit-o mai sus.";return{c(){r=o("p"),r.innerHTML=b},l(T){r=s(T,"P",{"data-svelte-h":!0}),m(r)!=="svelte-escxzo"&&(r.innerHTML=b)},m(T,y){l(T,r,y)},p:vt,d(T){T&&a(r)}}}function Gt(g){let r,b="✏️ <strong>Încercați!</strong> Îmbinați greutățile adaptorului înapoi în modelul de bază. Folosiți setul de date <code>HuggingFaceTB/smoltalk</code> pentru a face fine-tuning la un model <code>deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B</code>, folosind configurația LoRA pe care am definit-o mai sus.";return{c(){r=o("p"),r.innerHTML=b},l(T){r=s(T,"P",{"data-svelte-h":!0}),m(r)!=="svelte-o5pamm"&&(r.innerHTML=b)},m(T,y){l(T,r,y)},p:vt,d(T){T&&a(r)}}}function Wt(g){let r,b,T,y,h,pe,v,ue,j,Ke="Fine-tuningul modelelor mari de limbaj este un proces intensiv în resurse. LoRA este o tehnică care ne permite să facem fine-tuning la modele mari de limbaj cu un număr mic de parametri. Funcționează prin adăugarea și optimizarea unor matrice mai mici la greutățile atenției, reducând de obicei parametrii antrenabili cu aproximativ 90%.",ce,C,de,R,et='LoRA (Adaptarea de rang scăzut) este o tehnică de fine-tuning eficientă din punct de vedere al parametrilor care îngheață greutățile modelului pre-antrenat și injectează matrice de descompunere de rang antrenabile în straturile modelului. În loc să antreneze toți parametrii modelului în timpul fine-tuningului, LoRA descompune actualizările greutăților în matrice mai mici prin descompunere de rang scăzut, reducând semnificativ numărul de parametri antrenabili menținând în același timp performanța modelului. De exemplu, când este aplicat la GPT-3 175B, LoRA a redus parametrii antrenabili de 10.000 de ori și cerințele de memorie GPU de 3 ori comparativ cu fine-tuningul complet. Puteți citi mai multe despre LoRA în <a href="https://arxiv.org/pdf/2106.09685" rel="nofollow">lucrarea LoRA</a>.',fe,Z,tt="LoRA funcționează prin adăugarea de perechi de matrice de descompunere de rang la straturile transformer, concentrându-se de obicei pe greutățile atenției. În timpul inferenței, aceste greutăți ale adaptorului pot fi îmbinate cu modelul de bază, rezultând în nicio latență suplimentară. LoRA este deosebit de util pentru adaptarea modelelor mari de limbaj la sarcini sau domenii specifice menținând în același timp cerințele de resurse gestionabile.",Me,_,Te,I,at="<li><p><strong>Eficiența memoriei</strong>:</p> <ul><li>Doar parametrii adaptorului sunt stocați în memoria GPU</li> <li>Greutățile modelului de bază rămân înghețate și pot fi încărcate la precizie mai mică</li> <li>Permite fine-tuningul modelelor mari pe GPU-uri de consum</li></ul></li> <li><p><strong>Caracteristici de antrenare</strong>:</p> <ul><li>Integrare nativă PEFT/LoRA cu configurare minimă</li> <li>Suport pentru QLoRA (LoRA cuantificat) pentru eficiență de memorie și mai bună</li></ul></li> <li><p><strong>Gestionarea adaptorului</strong>:</p> <ul><li>Salvarea greutăților adaptorului în timpul punctelor de verificare</li> <li>Funcționalități pentru îmbinarea adaptorilor înapoi în modelul de bază</li></ul></li>",be,L,Je,F,lt='<a href="https://github.com/huggingface/peft" rel="nofollow">PEFT</a> este o bibliotecă care oferă o interfață unificată pentru încărcarea și gestionarea metodelor PEFT, inclusiv LoRA. Vă permite să încărcați și să comutați cu ușurință între diferite metode PEFT, făcând mai ușor să experimentați cu diferite tehnici de fine-tuning.',ge,V,it="Adaptorii pot fi încărcați pe un model pre-antrenat cu <code>load_adapter()</code>, care este util pentru a încerca adaptori diferiți ale căror greutăți nu sunt îmbinate. Setați greutățile adaptorului activ cu funcția <code>set_adapter()</code>. Pentru a reveni la modelul de bază, ați putea folosi unload() pentru a descărca toate modulele LoRA. Acest lucru face ușor să comutați între greutăți specifice sarcinilor diferite.",ye,E,we,A,nt='<img src="https://github.com/huggingface/smol-course/raw/main/3_parameter_efficient_finetuning/images/lora_adapter.png" alt="lora_load_adapter"/>',$e,z,Ue,G,rt='<a href="https://huggingface.co/docs/trl/sft_trainer" rel="nofollow">SFTTrainer</a> din <code>trl</code> oferă integrare cu adaptorii LoRA prin biblioteca <a href="https://huggingface.co/docs/peft/en/index" rel="nofollow">PEFT</a>. Aceasta înseamnă că putem face fine-tuning la un model în același mod ca și cu SFT, dar folosim LoRA pentru a reduce numărul de parametri pe care trebuie să îi antrenăm.',he,W,ot="Vom folosi clasa <code>LoRAConfig</code> din PEFT în exemplul nostru. Configurarea necesită doar câțiva pași de configurare:",ve,k,st="<li>Definiți configurația LoRA (rang, alfa, dropout)</li> <li>Creați SFTTrainer cu configurația PEFT</li> <li>Antrenați și salvați greutățile adaptorului</li>",je,B,Ce,x,mt="Să parcurgem configurația LoRA și parametrii cheie.",Re,H,pt="<thead><tr><th>Parametru</th> <th>Descriere</th></tr></thead> <tbody><tr><td><code>r</code> (rang)</td> <td>Dimensiunea matricelor de rang scăzut folosite pentru actualizările greutăților. De obicei între 4-32. Valori mai mici oferă mai multă compresie dar potențial mai puțină expresivitate.</td></tr> <tr><td><code>lora_alpha</code></td> <td>Factor de scalare pentru straturile LoRA, de obicei setat la 2x valoarea rangului. Valori mai mari rezultă în efecte de adaptare mai puternice.</td></tr> <tr><td><code>lora_dropout</code></td> <td>Probabilitatea dropout pentru straturile LoRA, de obicei 0.05-0.1. Valori mai mari ajută la prevenirea supraadaptării în timpul antrenamentului.</td></tr> <tr><td><code>bias</code></td> <td>Controlează antrenarea termenilor de bias. Opțiunile sunt “none”, “all” sau “lora_only”. “none” este cel mai comun pentru eficiența memoriei.</td></tr> <tr><td><code>target_modules</code></td> <td>Specifică la care module ale modelului să aplice LoRA. Poate fi “all-linear” sau module specifice precum “q_proj,v_proj”. Mai multe module permit o adaptabilitate mai mare dar cresc utilizarea memoriei.</td></tr></tbody>",Ze,w,_e,Q,Ie,S,ut="Metodele PEFT pot fi combinate cu TRL pentru fine-tuning pentru a reduce cerințele de memorie. Putem trece <code>LoraConfig</code> la model când îl încărcăm.",Le,X,Fe,Y,ct="Mai sus, am folosit <code>device_map="auto"</code> pentru a atribui automat modelul la dispozitivul corect. De asemenea, puteți atribui manual modelul la un dispozitiv specific folosind <code>device_map={"": device_index}</code>.",Ve,P,dt="Vom avea nevoie, de asemenea, să definim <code>SFTTrainer</code> cu configurația LoRA.",Ee,N,Ae,$,ze,D,Ge,q,ft="După antrenarea cu LoRA, s-ar putea să doriți să îmbinați greutățile adaptorului înapoi în modelul de bază pentru implementare mai ușoară. Aceasta creează un singur model cu greutățile combinate, eliminând necesitatea de a încărca adaptorii separat în timpul inferenței.",We,O,Mt="Procesul de îmbinare necesită atenție la gestionarea memoriei și precizie. Deoarece va trebui să încărcați atât modelul de bază, cât și greutățile adaptorului simultan, asigurați-vă că există memorie GPU/CPU suficientă disponibilă. Folosirea <code>device_map="auto"</code> în <code>transformers</code> va găsi dispozitivul corect pentru model bazat pe hardware-ul dumneavoastră.",ke,K,Tt="Mențineți precizia consistentă (de ex. float16) pe tot parcursul procesului, potrivind precizia folosită în timpul antrenamentului și salvând modelul îmbinat în același format pentru implementare.",Be,ee,xe,te,bt="După antrenarea unui adaptor LoRA, puteți îmbina greutățile adaptorului înapoi în modelul de bază. Iată cum să faceți acest lucru:",He,ae,Qe,le,Jt="Dacă întâmpinați discrepanțe de dimensiune în modelul salvat, asigurați-vă că salvați și tokenizer-ul:",Se,ie,Xe,U,Ye,ne,Pe,re,gt='<li><a href="https://arxiv.org/pdf/2106.09685" rel="nofollow">LoRA: Adaptarea de rang scăzut a modelelor mari de limbaj</a></li> <li><a href="https://huggingface.co/docs/peft" rel="nofollow">Documentația PEFT</a></li> <li><a href="https://huggingface.co/blog/peft" rel="nofollow">Articolul de blog Hugging Face despre PEFT</a></li>',Ne,oe,De,se,qe;return h=new Vt({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/course/en/chapter11/section4.ipynb"}]}}),v=new J({props:{title:"LoRA (Adaptarea de rang scăzut)",local:"lora-adaptarea-de-rang-scăzut",headingTag:"h1"}}),C=new J({props:{title:"Înțelegerea LoRA",local:"înțelegerea-lora",headingTag:"h2"}}),_=new J({props:{title:"Avantajele cheie ale LoRA",local:"avantajele-cheie-ale-lora",headingTag:"h2"}}),L=new J({props:{title:"Încărcarea adaptorilor LoRA cu PEFT",local:"încărcarea-adaptorilor-lora-cu-peft",headingTag:"h2"}}),E=new me({props:{code:"ZnJvbSUyMHBlZnQlMjBpbXBvcnQlMjBQZWZ0TW9kZWwlMkMlMjBQZWZ0Q29uZmlnJTBBJTBBY29uZmlnJTIwJTNEJTIwUGVmdENvbmZpZy5mcm9tX3ByZXRyYWluZWQoJTIyeWJlbGthZGElMkZvcHQtMzUwbS1sb3JhJTIyKSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yQ2F1c2FsTE0uZnJvbV9wcmV0cmFpbmVkKGNvbmZpZy5iYXNlX21vZGVsX25hbWVfb3JfcGF0aCklMEFsb3JhX21vZGVsJTIwJTNEJTIwUGVmdE1vZGVsLmZyb21fcHJldHJhaW5lZChtb2RlbCUyQyUyMCUyMnliZWxrYWRhJTJGb3B0LTM1MG0tbG9yYSUyMik=",highlighted:`<span class="hljs-keyword">from</span> peft <span class="hljs-keyword">import</span> PeftModel, PeftConfig | |
| config = PeftConfig.from_pretrained(<span class="hljs-string">"ybelkada/opt-350m-lora"</span>) | |
| model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path) | |
| lora_model = PeftModel.from_pretrained(model, <span class="hljs-string">"ybelkada/opt-350m-lora"</span>)`,wrap:!1}}),z=new J({props:{title:"Fine-tuning LLM folosind trl și SFTTrainer cu LoRA",local:"fine-tuning-llm-folosind-trl-și-sfttrainer-cu-lora",headingTag:"h2"}}),B=new J({props:{title:"Configurația LoRA",local:"configurația-lora",headingTag:"h2"}}),w=new Oe({props:{$$slots:{default:[At]},$$scope:{ctx:g}}}),Q=new J({props:{title:"Folosirea TRL cu PEFT",local:"folosirea-trl-cu-peft",headingTag:"h2"}}),X=new me({props:{code:"ZnJvbSUyMHBlZnQlMjBpbXBvcnQlMjBMb3JhQ29uZmlnJTBBJTBBJTIzJTIwVE9ETyUzQSUyMENvbmZpZ3VyYSVDOCU5QmklMjBwYXJhbWV0cmlpJTIwTG9SQSUwQSUyMyUyMHIlM0ElMjBkaW1lbnNpdW5lYSUyMHJhbmd1bHVpJTIwcGVudHJ1JTIwbWF0cmljZWxlJTIwZGUlMjBhY3R1YWxpemFyZSUyMExvUkElMjAobWFpJTIwbWljJUM0JTgzJTIwJTNEJTIwbWFpJTIwbXVsdCVDNCU4MyUyMGNvbXByZXNpZSklMEFyYW5rX2RpbWVuc2lvbiUyMCUzRCUyMDYlMEElMjMlMjBsb3JhX2FscGhhJTNBJTIwZmFjdG9yJTIwZGUlMjBzY2FsYXJlJTIwcGVudHJ1JTIwc3RyYXR1cmlsZSUyMExvUkElMjAobWFpJTIwbWFyZSUyMCUzRCUyMGFkYXB0YXJlJTIwbWFpJTIwcHV0ZXJuaWMlQzQlODMpJTBBbG9yYV9hbHBoYSUyMCUzRCUyMDglMEElMjMlMjBsb3JhX2Ryb3BvdXQlM0ElMjBwcm9iYWJpbGl0YXRlYSUyMGRyb3BvdXQlMjBwZW50cnUlMjBzdHJhdHVyaWxlJTIwTG9SQSUyMChhanV0JUM0JTgzJTIwbGElMjBwcmV2ZW5pcmVhJTIwc3VwcmFhZGFwdCVDNCU4M3JpaSklMEFsb3JhX2Ryb3BvdXQlMjAlM0QlMjAwLjA1JTBBJTBBcGVmdF9jb25maWclMjAlM0QlMjBMb3JhQ29uZmlnKCUwQSUyMCUyMCUyMCUyMHIlM0RyYW5rX2RpbWVuc2lvbiUyQyUyMCUyMCUyMyUyMERpbWVuc2l1bmVhJTIwcmFuZ3VsdWklMjAtJTIwZGUlMjBvYmljZWklMjAlQzMlQUVudHJlJTIwNC0zMiUwQSUyMCUyMCUyMCUyMGxvcmFfYWxwaGElM0Rsb3JhX2FscGhhJTJDJTIwJTIwJTIzJTIwRmFjdG9yJTIwZGUlMjBzY2FsYXJlJTIwTG9SQSUyMC0lMjBkZSUyMG9iaWNlaSUyMDJ4JTIwcmFuZ3VsJTBBJTIwJTIwJTIwJTIwbG9yYV9kcm9wb3V0JTNEbG9yYV9kcm9wb3V0JTJDJTIwJTIwJTIzJTIwUHJvYmFiaWxpdGF0ZWElMjBkcm9wb3V0JTIwcGVudHJ1JTIwc3RyYXR1cmlsZSUyMExvUkElMEElMjAlMjAlMjAlMjBiaWFzJTNEJTIybm9uZSUyMiUyQyUyMCUyMCUyMyUyMFRpcHVsJTIwYmlhcyUyMHBlbnRydSUyMExvUkEuJTIwYmlhcy11cmlsZSUyMGNvcmVzcHVueiVDNCU4M3RvYXJlJTIwdm9yJTIwZmklMjBhY3R1YWxpemF0ZSUyMCVDMyVBRW4lMjB0aW1wdWwlMjBhbnRyZW5hbWVudHVsdWkuJTBBJTIwJTIwJTIwJTIwdGFyZ2V0X21vZHVsZXMlM0QlMjJhbGwtbGluZWFyJTIyJTJDJTIwJTIwJTIzJTIwTGElMjBjYXJlJTIwbW9kdWxlJTIwcyVDNCU4MyUyMGFwbGljZSUyMExvUkElMEElMjAlMjAlMjAlMjB0YXNrX3R5cGUlM0QlMjJDQVVTQUxfTE0lMjIlMkMlMjAlMjAlMjMlMjBUaXB1bCUyMHNhcmNpbmlpJTIwcGVudHJ1JTIwYXJoaXRlY3R1cmElMjBtb2RlbHVsdWklMEEp",highlighted:`<span class="hljs-keyword">from</span> peft <span class="hljs-keyword">import</span> LoraConfig | |
| <span class="hljs-comment"># <span class="hljs-doctag">TODO:</span> Configurați parametrii LoRA</span> | |
| <span class="hljs-comment"># r: dimensiunea rangului pentru matricele de actualizare LoRA (mai mică = mai multă compresie)</span> | |
| rank_dimension = <span class="hljs-number">6</span> | |
| <span class="hljs-comment"># lora_alpha: factor de scalare pentru straturile LoRA (mai mare = adaptare mai puternică)</span> | |
| lora_alpha = <span class="hljs-number">8</span> | |
| <span class="hljs-comment"># lora_dropout: probabilitatea dropout pentru straturile LoRA (ajută la prevenirea supraadaptării)</span> | |
| lora_dropout = <span class="hljs-number">0.05</span> | |
| peft_config = LoraConfig( | |
| r=rank_dimension, <span class="hljs-comment"># Dimensiunea rangului - de obicei între 4-32</span> | |
| lora_alpha=lora_alpha, <span class="hljs-comment"># Factor de scalare LoRA - de obicei 2x rangul</span> | |
| lora_dropout=lora_dropout, <span class="hljs-comment"># Probabilitatea dropout pentru straturile LoRA</span> | |
| bias=<span class="hljs-string">"none"</span>, <span class="hljs-comment"># Tipul bias pentru LoRA. bias-urile corespunzătoare vor fi actualizate în timpul antrenamentului.</span> | |
| target_modules=<span class="hljs-string">"all-linear"</span>, <span class="hljs-comment"># La care module să aplice LoRA</span> | |
| task_type=<span class="hljs-string">"CAUSAL_LM"</span>, <span class="hljs-comment"># Tipul sarcinii pentru arhitectura modelului</span> | |
| )`,wrap:!1}}),N=new me({props:{code:"JTIzJTIwQ3JlYSVDOCU5QmklMjBTRlRUcmFpbmVyJTIwY3UlMjBjb25maWd1cmElQzglOUJpYSUyMExvUkElMEF0cmFpbmVyJTIwJTNEJTIwU0ZUVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTJDJTBBJTIwJTIwJTIwJTIwYXJncyUzRGFyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEZGF0YXNldCU1QiUyMnRyYWluJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwcGVmdF9jb25maWclM0RwZWZ0X2NvbmZpZyUyQyUyMCUyMCUyMyUyMENvbmZpZ3VyYSVDOCU5QmlhJTIwTG9SQSUwQSUyMCUyMCUyMCUyMG1heF9zZXFfbGVuZ3RoJTNEbWF4X3NlcV9sZW5ndGglMkMlMjAlMjAlMjMlMjBMdW5naW1lYSUyMG1heGltJUM0JTgzJTIwYSUyMHNlY3ZlbiVDOCU5QmVpJTBBJTIwJTIwJTIwJTIwcHJvY2Vzc2luZ19jbGFzcyUzRHRva2VuaXplciUyQyUwQSk=",highlighted:`<span class="hljs-comment"># Creați SFTTrainer cu configurația LoRA</span> | |
| trainer = SFTTrainer( | |
| model=model, | |
| args=args, | |
| train_dataset=dataset[<span class="hljs-string">"train"</span>], | |
| peft_config=peft_config, <span class="hljs-comment"># Configurația LoRA</span> | |
| max_seq_length=max_seq_length, <span class="hljs-comment"># Lungimea maximă a secvenței</span> | |
| processing_class=tokenizer, | |
| )`,wrap:!1}}),$=new Oe({props:{$$slots:{default:[zt]},$$scope:{ctx:g}}}),D=new J({props:{title:"Îmbinarea adaptorilor LoRA",local:"îmbinarea-adaptorilor-lora",headingTag:"h2"}}),ee=new J({props:{title:"Implementarea îmbinării",local:"implementarea-îmbinării",headingTag:"h2"}}),ae=new me({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsRm9yQ2F1c2FsTE0lMEFmcm9tJTIwcGVmdCUyMGltcG9ydCUyMFBlZnRNb2RlbCUwQSUwQSUyMyUyMDEuJTIwJUMzJThFbmMlQzQlODNyY2ElQzglOUJpJTIwbW9kZWx1bCUyMGRlJTIwYmF6JUM0JTgzJTBBYmFzZV9tb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvckNhdXNhbExNLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJiYXNlX21vZGVsX25hbWUlMjIlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMkMlMjBkZXZpY2VfbWFwJTNEJTIyYXV0byUyMiUwQSklMEElMEElMjMlMjAyLiUyMCVDMyU4RW5jJUM0JTgzcmNhJUM4JTlCaSUyMG1vZGVsdWwlMjBQRUZUJTIwY3UlMjBhZGFwdG9ydWwlMEFwZWZ0X21vZGVsJTIwJTNEJTIwUGVmdE1vZGVsLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjBiYXNlX21vZGVsJTJDJTIwJTIycGF0aCUyRnRvJTJGYWRhcHRlciUyMiUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guZmxvYXQxNiUwQSklMEElMEElMjMlMjAzLiUyMCVDMyU4RW1iaW5hJUM4JTlCaSUyMGdyZXV0JUM0JTgzJUM4JTlCaWxlJTIwYWRhcHRvcnVsdWklMjBjdSUyMG1vZGVsdWwlMjBkZSUyMGJheiVDNCU4MyUwQW1lcmdlZF9tb2RlbCUyMCUzRCUyMHBlZnRfbW9kZWwubWVyZ2VfYW5kX3VubG9hZCgp",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForCausalLM | |
| <span class="hljs-keyword">from</span> peft <span class="hljs-keyword">import</span> PeftModel | |
| <span class="hljs-comment"># 1. Încărcați modelul de bază</span> | |
| base_model = AutoModelForCausalLM.from_pretrained( | |
| <span class="hljs-string">"base_model_name"</span>, torch_dtype=torch.float16, device_map=<span class="hljs-string">"auto"</span> | |
| ) | |
| <span class="hljs-comment"># 2. Încărcați modelul PEFT cu adaptorul</span> | |
| peft_model = PeftModel.from_pretrained( | |
| base_model, <span class="hljs-string">"path/to/adapter"</span>, torch_dtype=torch.float16 | |
| ) | |
| <span class="hljs-comment"># 3. Îmbinați greutățile adaptorului cu modelul de bază</span> | |
| merged_model = peft_model.merge_and_unload()`,wrap:!1}}),ie=new me({props:{code:"JTIzJTIwU2FsdmElQzglOUJpJTIwYXQlQzMlQTJ0JTIwbW9kZWx1bCUyQyUyMGMlQzMlQTJ0JTIwJUM4JTk5aSUyMHRva2VuaXplci11bCUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmJhc2VfbW9kZWxfbmFtZSUyMiklMEFtZXJnZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMnBhdGglMkZ0byUyRnNhdmUlMkZtZXJnZWRfbW9kZWwlMjIpJTBBdG9rZW5pemVyLnNhdmVfcHJldHJhaW5lZCglMjJwYXRoJTJGdG8lMkZzYXZlJTJGbWVyZ2VkX21vZGVsJTIyKQ==",highlighted:`<span class="hljs-comment"># Salvați atât modelul, cât și tokenizer-ul</span> | |
| tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"base_model_name"</span>) | |
| merged_model.save_pretrained(<span class="hljs-string">"path/to/save/merged_model"</span>) | |
| tokenizer.save_pretrained(<span class="hljs-string">"path/to/save/merged_model"</span>)`,wrap:!1}}),U=new Oe({props:{$$slots:{default:[Gt]},$$scope:{ctx:g}}}),ne=new J({props:{title:"Resurse",local:"resurse",headingTag:"h1"}}),oe=new Et({props:{source:"https://github.com/huggingface/course/blob/main/chapters/rum/chapter11/4.mdx"}}),{c(){r=o("meta"),b=i(),T=o("p"),y=i(),p(h.$$.fragment),pe=i(),p(v.$$.fragment),ue=i(),j=o("p"),j.textContent=Ke,ce=i(),p(C.$$.fragment),de=i(),R=o("p"),R.innerHTML=et,fe=i(),Z=o("p"),Z.textContent=tt,Me=i(),p(_.$$.fragment),Te=i(),I=o("ol"),I.innerHTML=at,be=i(),p(L.$$.fragment),Je=i(),F=o("p"),F.innerHTML=lt,ge=i(),V=o("p"),V.innerHTML=it,ye=i(),p(E.$$.fragment),we=i(),A=o("p"),A.innerHTML=nt,$e=i(),p(z.$$.fragment),Ue=i(),G=o("p"),G.innerHTML=rt,he=i(),W=o("p"),W.innerHTML=ot,ve=i(),k=o("ol"),k.innerHTML=st,je=i(),p(B.$$.fragment),Ce=i(),x=o("p"),x.textContent=mt,Re=i(),H=o("table"),H.innerHTML=pt,Ze=i(),p(w.$$.fragment),_e=i(),p(Q.$$.fragment),Ie=i(),S=o("p"),S.innerHTML=ut,Le=i(),p(X.$$.fragment),Fe=i(),Y=o("p"),Y.innerHTML=ct,Ve=i(),P=o("p"),P.innerHTML=dt,Ee=i(),p(N.$$.fragment),Ae=i(),p($.$$.fragment),ze=i(),p(D.$$.fragment),Ge=i(),q=o("p"),q.textContent=ft,We=i(),O=o("p"),O.innerHTML=Mt,ke=i(),K=o("p"),K.textContent=Tt,Be=i(),p(ee.$$.fragment),xe=i(),te=o("p"),te.textContent=bt,He=i(),p(ae.$$.fragment),Qe=i(),le=o("p"),le.textContent=Jt,Se=i(),p(ie.$$.fragment),Xe=i(),p(U.$$.fragment),Ye=i(),p(ne.$$.fragment),Pe=i(),re=o("ul"),re.innerHTML=gt,Ne=i(),p(oe.$$.fragment),De=i(),se=o("p"),this.h()},l(e){const t=_t("svelte-u9bgzb",document.head);r=s(t,"META",{name:!0,content:!0}),t.forEach(a),b=n(e),T=s(e,"P",{}),Ut(T).forEach(a),y=n(e),u(h.$$.fragment,e),pe=n(e),u(v.$$.fragment,e),ue=n(e),j=s(e,"P",{"data-svelte-h":!0}),m(j)!=="svelte-1hke4jq"&&(j.textContent=Ke),ce=n(e),u(C.$$.fragment,e),de=n(e),R=s(e,"P",{"data-svelte-h":!0}),m(R)!=="svelte-1h8yybg"&&(R.innerHTML=et),fe=n(e),Z=s(e,"P",{"data-svelte-h":!0}),m(Z)!=="svelte-ct2r99"&&(Z.textContent=tt),Me=n(e),u(_.$$.fragment,e),Te=n(e),I=s(e,"OL",{"data-svelte-h":!0}),m(I)!=="svelte-11v0bcv"&&(I.innerHTML=at),be=n(e),u(L.$$.fragment,e),Je=n(e),F=s(e,"P",{"data-svelte-h":!0}),m(F)!=="svelte-9j15w2"&&(F.innerHTML=lt),ge=n(e),V=s(e,"P",{"data-svelte-h":!0}),m(V)!=="svelte-azdyc6"&&(V.innerHTML=it),ye=n(e),u(E.$$.fragment,e),we=n(e),A=s(e,"P",{"data-svelte-h":!0}),m(A)!=="svelte-bkhm6l"&&(A.innerHTML=nt),$e=n(e),u(z.$$.fragment,e),Ue=n(e),G=s(e,"P",{"data-svelte-h":!0}),m(G)!=="svelte-1b1sfkc"&&(G.innerHTML=rt),he=n(e),W=s(e,"P",{"data-svelte-h":!0}),m(W)!=="svelte-b2vb01"&&(W.innerHTML=ot),ve=n(e),k=s(e,"OL",{"data-svelte-h":!0}),m(k)!=="svelte-9n1psx"&&(k.innerHTML=st),je=n(e),u(B.$$.fragment,e),Ce=n(e),x=s(e,"P",{"data-svelte-h":!0}),m(x)!=="svelte-1gu775z"&&(x.textContent=mt),Re=n(e),H=s(e,"TABLE",{"data-svelte-h":!0}),m(H)!=="svelte-1a3rxzh"&&(H.innerHTML=pt),Ze=n(e),u(w.$$.fragment,e),_e=n(e),u(Q.$$.fragment,e),Ie=n(e),S=s(e,"P",{"data-svelte-h":!0}),m(S)!=="svelte-1cgxpwt"&&(S.innerHTML=ut),Le=n(e),u(X.$$.fragment,e),Fe=n(e),Y=s(e,"P",{"data-svelte-h":!0}),m(Y)!=="svelte-75wp6u"&&(Y.innerHTML=ct),Ve=n(e),P=s(e,"P",{"data-svelte-h":!0}),m(P)!=="svelte-aoqr1b"&&(P.innerHTML=dt),Ee=n(e),u(N.$$.fragment,e),Ae=n(e),u($.$$.fragment,e),ze=n(e),u(D.$$.fragment,e),Ge=n(e),q=s(e,"P",{"data-svelte-h":!0}),m(q)!=="svelte-ypdjgq"&&(q.textContent=ft),We=n(e),O=s(e,"P",{"data-svelte-h":!0}),m(O)!=="svelte-h7e1mz"&&(O.innerHTML=Mt),ke=n(e),K=s(e,"P",{"data-svelte-h":!0}),m(K)!=="svelte-11pysf6"&&(K.textContent=Tt),Be=n(e),u(ee.$$.fragment,e),xe=n(e),te=s(e,"P",{"data-svelte-h":!0}),m(te)!=="svelte-1kjlqob"&&(te.textContent=bt),He=n(e),u(ae.$$.fragment,e),Qe=n(e),le=s(e,"P",{"data-svelte-h":!0}),m(le)!=="svelte-14po9ie"&&(le.textContent=Jt),Se=n(e),u(ie.$$.fragment,e),Xe=n(e),u(U.$$.fragment,e),Ye=n(e),u(ne.$$.fragment,e),Pe=n(e),re=s(e,"UL",{"data-svelte-h":!0}),m(re)!=="svelte-1fjr5bc"&&(re.innerHTML=gt),Ne=n(e),u(oe.$$.fragment,e),De=n(e),se=s(e,"P",{}),Ut(se).forEach(a),this.h()},h(){ht(r,"name","hf:doc:metadata"),ht(r,"content",kt)},m(e,t){It(document.head,r),l(e,b,t),l(e,T,t),l(e,y,t),c(h,e,t),l(e,pe,t),c(v,e,t),l(e,ue,t),l(e,j,t),l(e,ce,t),c(C,e,t),l(e,de,t),l(e,R,t),l(e,fe,t),l(e,Z,t),l(e,Me,t),c(_,e,t),l(e,Te,t),l(e,I,t),l(e,be,t),c(L,e,t),l(e,Je,t),l(e,F,t),l(e,ge,t),l(e,V,t),l(e,ye,t),c(E,e,t),l(e,we,t),l(e,A,t),l(e,$e,t),c(z,e,t),l(e,Ue,t),l(e,G,t),l(e,he,t),l(e,W,t),l(e,ve,t),l(e,k,t),l(e,je,t),c(B,e,t),l(e,Ce,t),l(e,x,t),l(e,Re,t),l(e,H,t),l(e,Ze,t),c(w,e,t),l(e,_e,t),c(Q,e,t),l(e,Ie,t),l(e,S,t),l(e,Le,t),c(X,e,t),l(e,Fe,t),l(e,Y,t),l(e,Ve,t),l(e,P,t),l(e,Ee,t),c(N,e,t),l(e,Ae,t),c($,e,t),l(e,ze,t),c(D,e,t),l(e,Ge,t),l(e,q,t),l(e,We,t),l(e,O,t),l(e,ke,t),l(e,K,t),l(e,Be,t),c(ee,e,t),l(e,xe,t),l(e,te,t),l(e,He,t),c(ae,e,t),l(e,Qe,t),l(e,le,t),l(e,Se,t),c(ie,e,t),l(e,Xe,t),c(U,e,t),l(e,Ye,t),c(ne,e,t),l(e,Pe,t),l(e,re,t),l(e,Ne,t),c(oe,e,t),l(e,De,t),l(e,se,t),qe=!0},p(e,[t]){const yt={};t&2&&(yt.$$scope={dirty:t,ctx:e}),w.$set(yt);const wt={};t&2&&(wt.$$scope={dirty:t,ctx:e}),$.$set(wt);const $t={};t&2&&($t.$$scope={dirty:t,ctx:e}),U.$set($t)},i(e){qe||(d(h.$$.fragment,e),d(v.$$.fragment,e),d(C.$$.fragment,e),d(_.$$.fragment,e),d(L.$$.fragment,e),d(E.$$.fragment,e),d(z.$$.fragment,e),d(B.$$.fragment,e),d(w.$$.fragment,e),d(Q.$$.fragment,e),d(X.$$.fragment,e),d(N.$$.fragment,e),d($.$$.fragment,e),d(D.$$.fragment,e),d(ee.$$.fragment,e),d(ae.$$.fragment,e),d(ie.$$.fragment,e),d(U.$$.fragment,e),d(ne.$$.fragment,e),d(oe.$$.fragment,e),qe=!0)},o(e){f(h.$$.fragment,e),f(v.$$.fragment,e),f(C.$$.fragment,e),f(_.$$.fragment,e),f(L.$$.fragment,e),f(E.$$.fragment,e),f(z.$$.fragment,e),f(B.$$.fragment,e),f(w.$$.fragment,e),f(Q.$$.fragment,e),f(X.$$.fragment,e),f(N.$$.fragment,e),f($.$$.fragment,e),f(D.$$.fragment,e),f(ee.$$.fragment,e),f(ae.$$.fragment,e),f(ie.$$.fragment,e),f(U.$$.fragment,e),f(ne.$$.fragment,e),f(oe.$$.fragment,e),qe=!1},d(e){e&&(a(b),a(T),a(y),a(pe),a(ue),a(j),a(ce),a(de),a(R),a(fe),a(Z),a(Me),a(Te),a(I),a(be),a(Je),a(F),a(ge),a(V),a(ye),a(we),a(A),a($e),a(Ue),a(G),a(he),a(W),a(ve),a(k),a(je),a(Ce),a(x),a(Re),a(H),a(Ze),a(_e),a(Ie),a(S),a(Le),a(Fe),a(Y),a(Ve),a(P),a(Ee),a(Ae),a(ze),a(Ge),a(q),a(We),a(O),a(ke),a(K),a(Be),a(xe),a(te),a(He),a(Qe),a(le),a(Se),a(Xe),a(Ye),a(Pe),a(re),a(Ne),a(De),a(se)),a(r),M(h,e),M(v,e),M(C,e),M(_,e),M(L,e),M(E,e),M(z,e),M(B,e),M(w,e),M(Q,e),M(X,e),M(N,e),M($,e),M(D,e),M(ee,e),M(ae,e),M(ie,e),M(U,e),M(ne,e),M(oe,e)}}}const kt='{"title":"LoRA (Adaptarea de rang scăzut)","local":"lora-adaptarea-de-rang-scăzut","sections":[{"title":"Înțelegerea LoRA","local":"înțelegerea-lora","sections":[],"depth":2},{"title":"Avantajele cheie ale LoRA","local":"avantajele-cheie-ale-lora","sections":[],"depth":2},{"title":"Încărcarea adaptorilor LoRA cu PEFT","local":"încărcarea-adaptorilor-lora-cu-peft","sections":[],"depth":2},{"title":"Fine-tuning LLM folosind trl și SFTTrainer cu LoRA","local":"fine-tuning-llm-folosind-trl-și-sfttrainer-cu-lora","sections":[],"depth":2},{"title":"Configurația LoRA","local":"configurația-lora","sections":[],"depth":2},{"title":"Folosirea TRL cu PEFT","local":"folosirea-trl-cu-peft","sections":[],"depth":2},{"title":"Îmbinarea adaptorilor LoRA","local":"îmbinarea-adaptorilor-lora","sections":[],"depth":2},{"title":"Implementarea îmbinării","local":"implementarea-îmbinării","sections":[],"depth":2}],"depth":1}';function Bt(g){return Ct(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Pt extends Rt{constructor(r){super(),Zt(this,r,Bt,Wt,jt,{})}}export{Pt as component}; | |
Xet Storage Details
- Size:
- 27 kB
- Xet hash:
- 79e45baaee14dccb1b2b2da97267075bc2c5a35154caec13e6f97c715a810672
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.