{"id":482,"date":"2026-03-16T12:39:23","date_gmt":"2026-03-16T12:39:23","guid":{"rendered":"https:\/\/laeka.org\/publications\/lora-explique-fine-tuning-ordinateur-portable\/"},"modified":"2026-03-16T12:39:23","modified_gmt":"2026-03-16T12:39:23","slug":"lora-explique-fine-tuning-ordinateur-portable","status":"publish","type":"post","link":"https:\/\/laeka.org\/publications\/fr\/lora-explique-fine-tuning-ordinateur-portable\/","title":{"rendered":"LoRA expliqu\u00e9 : le fine-tuning de mod\u00e8les avec des milliards de param\u00e8tres sur ton ordinateur portable"},"content":{"rendered":"<p>Le fine-tuning d&#8217;un mod\u00e8le avec un milliard de param\u00e8tres n\u00e9cessite g\u00e9n\u00e9ralement de modifier des milliards de poids. C&#8217;est prohibitivement cher. LoRA (Low-Rank Adaptation) contourne cela en mettant \u00e0 jour seulement une minuscule fraction du mod\u00e8le tout en obtenant des r\u00e9sultats comparables.<\/p>\n<p>L&#8217;insight est \u00e9l\u00e9gant : les mises \u00e0 jour de poids durant le fine-tuning ont un rang faible. Tu n&#8217;as pas besoin de mettre \u00e0 jour la matrice de poids compl\u00e8te. Tu dois seulement mettre \u00e0 jour une approximation de rang faible de la mise \u00e0 jour.<\/p>\n<h2>Comment LoRA fonctionne<\/h2>\n<p>Au lieu de fine-tuner la matrice de poids compl\u00e8te W, LoRA d\u00e9compose la mise \u00e0 jour comme un produit de deux matrices plus petites : \u0394W = B \u00d7 A.<\/p>\n<p>Pour une matrice de poids de forme (d_out \u00d7 d_in), LoRA introduit :<\/p>\n<p><strong>A :<\/strong> forme (r \u00d7 d_in), o\u00f9 r est le rang (g\u00e9n\u00e9ralement 8-64)<br \/>\n<strong>B :<\/strong> forme (d_out \u00d7 r)<\/p>\n<p>Pendant la passe forward : output = W \u00d7 input + (B \u00d7 A) \u00d7 input<\/p>\n<p>Tu entra\u00eenes seulement A et B, g\u00e8le le W original. Le rang r est g\u00e9n\u00e9ralement beaucoup plus petit que d_in et d_out, donc le d\u00e9compte des param\u00e8tres explose vers le bas.<\/p>\n<h2>Les chiffres<\/h2>\n<p>Pour un mod\u00e8le 70B avec dimensions cach\u00e9es 4k :<\/p>\n<p><strong>Fine-tuning complet :<\/strong> 70B param\u00e8tres entra\u00eenables<br \/>\n<strong>LoRA (rang 8) :<\/strong> 70B \u00d7 (8 \/ 4000) \u2248 140M param\u00e8tres entra\u00eenables<br \/>\n<strong>LoRA (rang 64) :<\/strong> 70B \u00d7 (64 \/ 4000) \u2248 1B param\u00e8tres entra\u00eenables<\/p>\n<p>Tu entra\u00eenes 0,2% du mod\u00e8le avec LoRA rang-8. Les \u00e9conomies en m\u00e9moire et calcul sont massives.<\/p>\n<h2>Rang : le principal compromis<\/h2>\n<p>Le rang de LoRA est le bouton de r\u00e9glage. Rang plus \u00e9lev\u00e9 = plus d&#8217;expressivit\u00e9 mais plus de param\u00e8tres.<\/p>\n<p><strong>Rang 8 :<\/strong> Tr\u00e8s bon march\u00e9, entra\u00eenement rapide. Fonctionne pour l&#8217;adaptation mineure de domaine. Fine-tuning d&#8217;instructions ou de styles sp\u00e9cifiques.<\/p>\n<p><strong>Rang 16-32 :<\/strong> Point doux pour la plupart des applications. Assez d&#8217;expressivit\u00e9 pour une adaptation significative sans co\u00fbt excessif.<\/p>\n<p><strong>Rang 64+ :<\/strong> Approche le co\u00fbt du fine-tuning complet. Utilise quand le rang mineur n&#8217;est pas assez expressif.<\/p>\n<p>En pratique, le rang 16 fonctionne pour 80% des cas d&#8217;usage. Le rang 32 fonctionne pour 95%. Les rendements d\u00e9croissants commencent rapidement.<\/p>\n<h2>Pourquoi cela fonctionne<\/h2>\n<p>L&#8217;hypoth\u00e8se sous-jacente \u00e0 LoRA est empiriquement valid\u00e9e : les mises \u00e0 jour du fine-tuning ont un rang intrins\u00e8que faible. Le mod\u00e8le n&#8217;a pas besoin de changer beaucoup pour s&#8217;adapter \u00e0 de nouveaux domaines ou t\u00e2ches.<\/p>\n<p>Cela a du sens. Le mod\u00e8le pr\u00e9-entra\u00een\u00e9 code d\u00e9j\u00e0 d&#8217;\u00e9normes quantit\u00e9s de connaissances. S&#8217;adapter \u00e0 un nouveau domaine ne n\u00e9cessite pas un rewiring en gros, juste des ajustements cibl\u00e9s.<\/p>\n<p>LoRA capture ces ajustements efficacement.<\/p>\n<h2>Impl\u00e9mentation pratique<\/h2>\n<p>Utiliser LoRA dans le code est trivial avec la biblioth\u00e8que peft :<\/p>\n<p>from peft import LoraConfig, get_peft_model<\/p>\n<p>config = LoraConfig(<br \/>\n    r=16,<br \/>\n    lora_alpha=32,<br \/>\n    target_modules=[&#8220;q_proj&#8221;, &#8220;v_proj&#8221;],<br \/>\n    lora_dropout=0.05,<br \/>\n    bias=&#8221;none&#8221;<br \/>\n)<\/p>\n<p>model = get_peft_model(model, config)<\/p>\n<p>Entra\u00eene le mod\u00e8le normalement. Seules les matrices A et B obtiennent les mises \u00e0 jour. \u00c0 l&#8217;inf\u00e9rence, fusionne les poids ou garde-les s\u00e9par\u00e9s pour changer facilement entre les adaptateurs.<\/p>\n<h2>L&#8217;avantage pratique<\/h2>\n<p>Un mod\u00e8le 70B avec LoRA peut fine-tuner sur un GPU grand public. Le stockage est minimal (LoRA rang-8 pour 70B est ~140 Mo). Tu peux charger plusieurs adaptateurs et basculer entre eux \u00e0 l&#8217;ex\u00e9cution.<\/p>\n<p>Cela d\u00e9verrouille un nouveau mod\u00e8le de d\u00e9veloppement : mod\u00e8les de base + de nombreux adaptateurs sp\u00e9cialis\u00e9s. Pas besoin d&#8217;entra\u00eener 10 mod\u00e8les pleins diff\u00e9rents. Entra\u00eene 10 adaptateurs LoRA \u00e0 la place, au co\u00fbt 1%.<\/p>\n<p><strong>Laeka Research \u2014 <a href=\"https:\/\/laeka.org\">laeka.org<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le fine-tuning d&#8217;un mod\u00e8le avec un milliard de param\u00e8tres n\u00e9cessite g\u00e9n\u00e9ralement de modifier des milliards de poids. C&#8217;est prohibitivement cher. LoRA (Low-Rank Adaptation) contourne cela en mettant \u00e0 jour seulement une minuscule fraction du&#8230;<\/p>\n","protected":false},"author":1,"featured_media":158,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[269],"tags":[],"class_list":["post-482","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fine-tuning-fr"],"_links":{"self":[{"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/posts\/482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/comments?post=482"}],"version-history":[{"count":0,"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/posts\/482\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/media\/158"}],"wp:attachment":[{"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/media?parent=482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/categories?post=482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/laeka.org\/publications\/wp-json\/wp\/v2\/tags?post=482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}