Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"Pruna","local":"pruna","sections":[{"title":"Installation","local":"installation","sections":[],"depth":2},{"title":"Optimiser les modèles Diffusers","local":"optimize-diffusers-models","sections":[],"depth":2},{"title":"Évaluer et mesurer les performances des modèles Diffusers","local":"evaluate-and-benchmark-diffusers-models","sections":[],"depth":2},{"title":"Référence","local":"reference","sections":[],"depth":2}],"depth":1}"/> | |
| <link href="/docs/diffusers/main/en/_app/immutable/entry/start.0S0_iEoG.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/I9eooN77.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/Bupkjr9f.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/entry/app.CPdOxCbw.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/CyvZ3FS5.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/l0QnnOED.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DnVIJfC5.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DsnmJJEf.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/nodes/0.DteTvmQZ.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/CoSrdQax.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/nodes/345.RIgY2DFL.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DSPDl1gz.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/D5eijdnr.js" rel="modulepreload"> | |
| <!--15jkk7f--><meta name="hf:doc:metadata" content="{"title":"Pruna","local":"pruna","sections":[{"title":"Installation","local":"installation","sections":[],"depth":2},{"title":"Optimize Diffusers models","local":"optimize-diffusers-models","sections":[],"depth":2},{"title":"Evaluate and benchmark Diffusers models","local":"evaluate-and-benchmark-diffusers-models","sections":[],"depth":2},{"title":"Reference","local":"reference","sections":[],"depth":2}],"depth":1}"/><!----> | |
| <link href="/docs/diffusers/main/en/_app/immutable/assets/0.tn0RQdqM.css" rel="modulepreload"> <!--[--><!--[0--><!--[--><!--[0--><!--[--><p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: inline-end; margin-inline-start: 10px; display: inline-flex; position: relative; z-index: 10;"><div dir="ltr" class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----></span> <span dir="auto">Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg><!----></button></div> <!--[-1--><!--]--></div><!----> <!--[0--><h1 class="relative group"><a id="pruna" 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" href="#pruna"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Pruna<!----></span></h1><!--]--><!----> <p><a href="https://github.com/PrunaAI/pruna" rel="nofollow">Pruna</a> est un cadre d’optimisation de modèles qui propose diverses méthodes d’optimisation – quantification, élagage, mise en cache, compilation – pour accélérer l’inférence et réduire l’utilisation de la mémoire. Un aperçu général des méthodes d’optimisation est présenté ci-dessous.</p> <table><thead><tr><th>Technique</th><th>Description</th><th align="center">Vitesse</th><th align="center">Mémoire</th><th align="center">Qualité</th></tr></thead><tbody><tr><td><code>batcher</code></td><td>Regroupe plusieurs entrées pour qu'elles soient traitées simultanément, améliorant ainsi l'efficacité computationnelle et réduisant le temps de traitement.</td><td align="center">✅</td><td align="center">❌</td><td align="center">➖</td></tr><tr><td><code>cacher</code></td><td>Stocke les résultats intermédiaires des calculs pour accélérer les opérations ultérieures.</td><td align="center">✅</td><td align="center">➖</td><td align="center">➖</td></tr><tr><td><code>compiler</code></td><td>Optimise le modèle avec des instructions pour un matériel spécifique.</td><td align="center">✅</td><td align="center">➖</td><td align="center">➖</td></tr><tr><td><code>distiller</code></td><td>Entraîne un modèle plus petit et plus simple pour imiter un modèle plus grand et plus complexe.</td><td align="center">✅</td><td align="center">✅</td><td align="center">❌</td></tr><tr><td><code>quantizer</code></td><td>Réduit la précision des poids et des activations, ce qui diminue les besoins en mémoire.</td><td align="center">✅</td><td align="center">✅</td><td align="center">❌</td></tr><tr><td><code>pruner</code></td><td>Supprime les connexions et les neurones moins importants ou redondants, ce qui aboutit à un réseau plus creux et plus efficace.</td><td align="center">✅</td><td align="center">✅</td><td align="center">❌</td></tr><tr><td><code>recoverer</code></td><td>Restaure les performances d'un modèle après compression.</td><td align="center">➖</td><td align="center">➖</td><td align="center">✅</td></tr><tr><td><code>factorizer</code></td><td>La factorisation regroupe plusieurs petites multiplications de matrices en une seule opération fusionnée de grande taille.</td><td align="center">✅</td><td align="center">➖</td><td align="center">➖</td></tr><tr><td><code>enhancer</code></td><td>Améliore la sortie du modèle en appliquant des algorithmes de post-traitement tels que le débruitage ou le redimensionnement.</td><td align="center">❌</td><td align="center">-</td><td align="center">✅</td></tr></tbody></table> <p>✅ (améliore), ➖ (approx. identique), ❌ (dégrade)</p> <p>Explorez l’ensemble des méthodes d’optimisation dans la <a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/configure.html#configure-algorithms" rel="nofollow">documentation Pruna</a>.</p> <!--[1--><h2 class="relative group"><a id="installation" 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" href="#installation"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Installation<!----></span></h2><!--]--><!----> <p>Installez Pruna avec la commande suivante.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copié</div><!----></button><!----></div> <pre class="language-bash "><!---->pip install pruna<!----></pre></div><!----> <!--[1--><h2 class="relative group"><a id="optimize-diffusers-models" 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" href="#optimize-diffusers-models"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Optimiser les modèles Diffusers<!----></span></h2><!--]--><!----> <p>Une large gamme d'algorithmes d'optimisation est prise en charge pour les modèles Diffusers, comme indiqué ci-dessous.</p> <div class="flex justify-center"><img src="https://huggingface.co/datasets/PrunaAI/documentation-images/resolve/main/diffusers/diffusers_combinations.png" alt="Overview of the supported optimization algorithms for diffusers models"/></div> <p>L’exemple ci-dessous optimise <a href="https://huggingface.co/black-forest-labs/FLUX.1-dev" rel="nofollow">black-forest-labs/FLUX.1-dev</a> à l’aide d’une combinaison d’algorithmes factorizer, compiler et cacher. Cette combinaison accélère l’inférence jusqu’à 4,2 fois et réduit la consommation mémoire GPU de pointe de 34,7 Go à 28,0 Go, tout en conservant une qualité de sortie pratiquement identique.</p> <blockquote class="tip"><p>Consultez la documentation <a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/configure.html" rel="nofollow">Pruna optimization</a> pour en savoir plus sur les techniques d'optimisation utilisées dans cet exemple.</p></blockquote> <div class="flex justify-center"><img src="https://huggingface.co/datasets/PrunaAI/documentation-images/resolve/main/diffusers/flux_combination.png" alt="Optimization techniques used for FLUX.1-dev showing the combination of factorizer, compiler, and cacher algorithms"/></div> <p>Commencez par définir un <code>SmashConfig</code> avec les algorithmes d'optimisation à utiliser. Pour optimiser le modèle, enveloppez le pipeline et le <code>SmashConfig</code> avec <code>smash</code>, puis utilisez le pipeline comme d'habitude pour l'inférence.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copié</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> FluxPipeline | |
| <span class="hljs-keyword">from</span> pruna <span class="hljs-keyword">import</span> PrunaModel, SmashConfig, smash | |
| <span class="hljs-comment"># load the model</span> | |
| <span class="hljs-comment"># Try segmind/Segmind-Vega or black-forest-labs/FLUX.1-schnell with a small GPU memory</span> | |
| pipe = FluxPipeline.from_pretrained( | |
| <span class="hljs-string">"black-forest-labs/FLUX.1-dev"</span>, | |
| dtype=torch.bfloat16 | |
| ).to(<span class="hljs-string">"cuda"</span>) <span class="hljs-comment"># or "mps", "xpu", "cpu"</span> | |
| <span class="hljs-comment"># define the configuration</span> | |
| smash_config = SmashConfig() | |
| smash_config[<span class="hljs-string">"factorizer"</span>] = <span class="hljs-string">"qkv_diffusers"</span> | |
| smash_config[<span class="hljs-string">"compiler"</span>] = <span class="hljs-string">"torch_compile"</span> | |
| smash_config[<span class="hljs-string">"torch_compile_target"</span>] = <span class="hljs-string">"module_list"</span> | |
| smash_config[<span class="hljs-string">"cacher"</span>] = <span class="hljs-string">"fora"</span> | |
| smash_config[<span class="hljs-string">"fora_interval"</span>] = <span class="hljs-number">2</span> | |
| <span class="hljs-comment"># for the best results in terms of speed you can add these configs</span> | |
| <span class="hljs-comment"># however they will increase your warmup time from 1.5 min to 10 min</span> | |
| <span class="hljs-comment"># smash_config["torch_compile_mode"] = "max-autotune-no-cudagraphs"</span> | |
| <span class="hljs-comment"># smash_config["quantizer"] = "torchao"</span> | |
| <span class="hljs-comment"># smash_config["torchao_quant_type"] = "fp8dq"</span> | |
| <span class="hljs-comment"># smash_config["torchao_excluded_modules"] = "norm+embedding"</span> | |
| <span class="hljs-comment"># optimize the model</span> | |
| smashed_pipe = smash(pipe, smash_config) | |
| <span class="hljs-comment"># run the model</span> | |
| smashed_pipe(<span class="hljs-string">"a knitted purple prune"</span>).images[<span class="hljs-number">0</span>]<!----></pre></div><!----> <div class="flex justify-center"><img src="https://huggingface.co/datasets/PrunaAI/documentation-images/resolve/main/diffusers/flux_smashed_comparison.png"/></div> <p>Après l'optimisation, nous pouvons partager et charger le modèle optimisé à l'aide du Hugging Face Hub.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copié</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-comment"># save the model</span> | |
| smashed_pipe.save_to_hub(<span class="hljs-string">"<username>/FLUX.1-dev-smashed"</span>) | |
| <span class="hljs-comment"># load the model</span> | |
| smashed_pipe = PrunaModel.from_hub(<span class="hljs-string">"<username>/FLUX.1-dev-smashed"</span>)<!----></pre></div><!----> <!--[1--><h2 class="relative group"><a id="evaluate-and-benchmark-diffusers-models" 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" href="#evaluate-and-benchmark-diffusers-models"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Évaluer et mesurer les performances des modèles Diffusers<!----></span></h2><!--]--><!----> <p>Pruna fournit le <a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/evaluate.html" rel="nofollow">EvaluationAgent</a> pour évaluer la qualité de vos modèles optimisés.</p> <p>Nous pouvons définir les métriques qui nous intéressent, telles que le temps total et le débit, ainsi que le jeu de données sur lequel évaluer. Nous pouvons définir un modèle et le passer à <code>EvaluationAgent</code>.</p> <div class="flex space-x-2 items-center my-1.5 mr-8 h-7 !pl-0 -mx-3 md:mx-0"><!--[--><div class="flex items-center border rounded-lg px-1.5 py-1 leading-none select-none text-smd border-gray-800 bg-black dark:bg-gray-700 text-white">modèle optimisé</div><div class="flex items-center border rounded-lg px-1.5 py-1 leading-none select-none text-smd text-gray-500 cursor-pointer opacity-90 hover:text-gray-700 dark:hover:text-gray-200 hover:shadow-sm">modèle autonome</div><!--]--></div> <div class="language-select"><div><p>Nous pouvons charger et évaluer un modèle optimisé en utilisant le <code>EvaluationAgent</code> et en le transmettant à la <code>Task</code>.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copié</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> FluxPipeline | |
| <span class="hljs-keyword">from</span> pruna <span class="hljs-keyword">import</span> PrunaModel | |
| <span class="hljs-keyword">from</span> pruna.data.pruna_datamodule <span class="hljs-keyword">import</span> PrunaDataModule | |
| <span class="hljs-keyword">from</span> pruna.evaluation.evaluation_agent <span class="hljs-keyword">import</span> EvaluationAgent | |
| <span class="hljs-keyword">from</span> pruna.evaluation.metrics <span class="hljs-keyword">import</span> ( | |
| ThroughputMetric, | |
| TorchMetricWrapper, | |
| TotalTimeMetric, | |
| ) | |
| <span class="hljs-keyword">from</span> pruna.evaluation.task <span class="hljs-keyword">import</span> Task | |
| <span class="hljs-comment"># define the device</span> | |
| device = <span class="hljs-string">"cuda"</span> <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> <span class="hljs-string">"mps"</span> <span class="hljs-keyword">if</span> torch.backends.mps.is_available() <span class="hljs-keyword">else</span> <span class="hljs-string">"cpu"</span> | |
| <span class="hljs-comment"># load the model</span> | |
| <span class="hljs-comment"># Try PrunaAI/Segmind-Vega-smashed or PrunaAI/FLUX.1-dev-smashed with a small GPU memory</span> | |
| smashed_pipe = PrunaModel.from_hub(<span class="hljs-string">"PrunaAI/FLUX.1-dev-smashed"</span>) | |
| <span class="hljs-comment"># Define the metrics</span> | |
| metrics = [ | |
| TotalTimeMetric(n_iterations=<span class="hljs-number">20</span>, n_warmup_iterations=<span class="hljs-number">5</span>), | |
| ThroughputMetric(n_iterations=<span class="hljs-number">20</span>, n_warmup_iterations=<span class="hljs-number">5</span>), | |
| TorchMetricWrapper(<span class="hljs-string">"clip"</span>), | |
| ] | |
| <span class="hljs-comment"># Define the datamodule</span> | |
| datamodule = PrunaDataModule.from_string(<span class="hljs-string">"LAION256"</span>) | |
| datamodule.limit_datasets(<span class="hljs-number">10</span>) | |
| <span class="hljs-comment"># Define the task and evaluation agent</span> | |
| task = Task(metrics, datamodule=datamodule, device=device) | |
| eval_agent = EvaluationAgent(task) | |
| <span class="hljs-comment"># Evaluate smashed model and offload it to CPU</span> | |
| smashed_pipe.move_to_device(device) | |
| smashed_pipe_results = eval_agent.evaluate(smashed_pipe) | |
| smashed_pipe.move_to_device(<span class="hljs-string">"cpu"</span>)<!----></pre></div><!----><!----></div><!----> <div hidden=""><p>Plutôt que de comparer le modèle optimisé au modèle de base, vous pouvez également évaluer le modèle <code>diffusers</code> autonome. Cela est utile si vous souhaitez évaluer les performances du modèle sans l’optimisation. Nous pouvons le faire en utilisant l’enveloppe <code>PrunaModel</code> et en exécutant le <code>EvaluationAgent</code> dessus.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copié</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> FluxPipeline | |
| <span class="hljs-keyword">from</span> pruna <span class="hljs-keyword">import</span> PrunaModel | |
| <span class="hljs-comment"># load the model</span> | |
| <span class="hljs-comment"># Try PrunaAI/Segmind-Vega-smashed or PrunaAI/FLUX.1-dev-smashed with a small GPU memory</span> | |
| pipe = FluxPipeline.from_pretrained( | |
| <span class="hljs-string">"black-forest-labs/FLUX.1-dev"</span>, | |
| dtype=torch.bfloat16 | |
| ).to(<span class="hljs-string">"cpu"</span>) | |
| wrapped_pipe = PrunaModel(model=pipe)<!----></pre></div><!----><!----></div><!----><!----></div><!----> <p>Maintenant que vous avez vu comment optimiser et évaluer vos modèles, vous pouvez commencer à utiliser Pruna pour optimiser vos propres modèles. Heureusement, nous avons de nombreux exemples pour vous aider à démarrer.</p> <blockquote class="tip"><p>Pour plus de détails sur le benchmarking de Flux, consultez le billet de blog <a href="https://huggingface.co/blog/PrunaAI/flux-fastest-image-generation-endpoint" rel="nofollow">Announcing FLUX-Juiced: The Fastest Image Generation Endpoint (2.6 times faster)!</a> et l'Espace <a href="https://huggingface.co/spaces/PrunaAI/InferBench" rel="nofollow">InferBench</a>.</p></blockquote> <!--[1--><h2 class="relative group"><a id="reference" 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" href="#reference"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Référence<!----></span></h2><!--]--><!----> <ul><li><a href="https://github.com/PrunaAI/pruna" rel="nofollow">Pruna</a></li> <li><a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/configure.html#configure-algorithms" rel="nofollow">Optimisation Pruna</a></li> <li><a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/evaluate.html" rel="nofollow">Évaluation Pruna</a></li> <li><a href="https://docs.pruna.ai/en/stable/docs_pruna/tutorials/index.html" rel="nofollow">Tutoriels Pruna</a></li></ul> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/diffusers/blob/main/docs/source/en/optimization/pruna.md" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg><!----> <span><span class="underline">Update</span> on GitHub</span></a><!----> <p></p><!--]--><!----><!--]--><!--]--><!--]--> <!--[-1--><!--]--><!--]--> | |
| <script> | |
| { | |
| __sveltekit_1qsdbwf = { | |
| base: "/docs/diffusers/main/en", | |
| assets: "/docs/diffusers/main/en" | |
| }; | |
| const element = document.currentScript.parentElement; | |
| Promise.all([ | |
| import("/docs/diffusers/main/en/_app/immutable/entry/start.0S0_iEoG.js"), | |
| import("/docs/diffusers/main/en/_app/immutable/entry/app.CPdOxCbw.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 345], | |
| data: [null,null], | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 31.5 kB
- Xet hash:
- c53343c190f0e4cde1bced6848e8090b15315011cbba110af81ed80ea1d29cba
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.