Buckets:
| import"../chunks/DsnmJJEf.js";import{i as I,h as Q,C as R,H as s,a as t,b as Z,E as W,s as S}from"../chunks/DdZvggmf.js";import{p as G,o as E,s as l,f as c,a as n,b as k,c as e,n as v}from"../chunks/BbekZcyp.js";import{H as w}from"../chunks/BcnRgdDK.js";const _='{"title":"Pruna","local":"pruna","sections":[{"title":"安装","local":"安装","sections":[],"depth":2},{"title":"优化 Diffusers 模型","local":"优化-diffusers-模型","sections":[],"depth":2},{"title":"评估和基准测试Diffusers模型","local":"评估和基准测试diffusers模型","sections":[],"depth":2},{"title":"参考","local":"参考","sections":[],"depth":2}],"depth":1}';var X=e('<meta name="hf:doc:metadata"/>'),Y=e("<p>我们可以通过使用<code>EvaluationAgent</code>加载和评估优化后的模型,并将其传递给<code>Task</code>。</p> <!>",1),q=e("<p>除了比较优化模型与基础模型,您还可以评估独立的 <code>diffusers</code> 模型。这在您想评估模型性能而不考虑优化时非常有用。我们可以通过使用 <code>PrunaModel</code> 包装器并运行 <code>EvaluationAgent</code> 来实现。</p> <!>",1),A=e("<!> <!>",1),z=e(`<p></p> <!> <!> <p><a href="https://github.com/PrunaAI/pruna" rel="nofollow">Pruna</a> 是一个模型优化框架,提供多种优化方法——量化、剪枝、缓存、编译——以加速推理并减少内存使用。以下是优化方法的概览。</p> <table><thead><tr><th>技术</th><th>描述</th><th align="center">速度</th><th align="center">内存</th><th align="center">质量</th></tr></thead><tbody><tr><td><code>batcher</code></td><td>将多个输入分组在一起同时处理,提高计算效率并减少处理时间。</td><td align="center">✅</td><td align="center">❌</td><td align="center">➖</td></tr><tr><td><code>cacher</code></td><td>存储计算的中间结果以加速后续操作。</td><td align="center">✅</td><td align="center">➖</td><td align="center">➖</td></tr><tr><td><code>compiler</code></td><td>为特定硬件优化模型指令。</td><td align="center">✅</td><td align="center">➖</td><td align="center">➖</td></tr><tr><td><code>distiller</code></td><td>训练一个更小、更简单的模型来模仿一个更大、更复杂的模型。</td><td align="center">✅</td><td align="center">✅</td><td align="center">❌</td></tr><tr><td><code>quantizer</code></td><td>降低权重和激活的精度,减少内存需求。</td><td align="center">✅</td><td align="center">✅</td><td align="center">❌</td></tr><tr><td><code>pruner</code></td><td>移除不重要或冗余的连接和神经元,产生一个更稀疏、更高效的网络。</td><td align="center">✅</td><td align="center">✅</td><td align="center">❌</td></tr><tr><td><code>recoverer</code></td><td>在压缩后恢复模型的性能。</td><td align="center">➖</td><td align="center">➖</td><td align="center">✅</td></tr><tr><td><code>factorizer</code></td><td>将多个小矩阵乘法批处理为一个大型融合操作。</td><td align="center">✅</td><td align="center">➖</td><td align="center">➖</td></tr><tr><td><code>enhancer</code></td><td>通过应用后处理算法(如去噪或上采样)来增强模型输出。</td><td align="center">❌</td><td align="center">-</td><td align="center">✅</td></tr></tbody></table> <p>✅ (改进), ➖ (大致相同), ❌ (恶化)</p> <p>在 <a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/configure.html#configure-algorithms" rel="nofollow">Pruna 文档</a> 中探索所有优化方法。</p> <!> <p>使用以下命令安装 Pruna。</p> <!> <!> <p>Diffusers 模型支持广泛的优化算法,如下所示。</p> <div class="flex justify-center"><img src="https://huggingface.co/datasets/PrunaAI/documentation-images/resolve/main/diffusers/diffusers_combinations.png" alt="Diffusers 模型支持的优化算法概览"/></div> <p>下面的示例使用 factorizer、compiler 和 cacher 算法的组合优化 <a href="https://huggingface.co/black-forest-labs/FLUX.1-dev" rel="nofollow">black-forest-labs/FLUX.1-dev</a>。这种组合将推理速度加速高达 4.2 倍,并将峰值 GPU 内存使用从 34.7GB 减少到 28.0GB,同时几乎保持相同的输出质量。</p> <blockquote class="tip"><p>参考 <a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/configure.html" rel="nofollow">Pruna 优化</a> 文档以了解更多关于该操作的信息。 | |
| 本示例中使用的优化技术。</p></blockquote> <div class="flex justify-center"><img src="https://huggingface.co/datasets/PrunaAI/documentation-images/resolve/main/diffusers/flux_combination.png" alt="用于FLUX.1-dev的优化技术展示,结合了因子分解器、编译器和缓存器算法"/></div> <p>首先定义一个包含要使用的优化算法的<code>SmashConfig</code>。要优化模型,将管道和<code>SmashConfig</code>用<code>smash</code>包装,然后像往常一样使用管道进行推理。</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/PrunaAI/documentation-images/resolve/main/diffusers/flux_smashed_comparison.png"/></div> <p>优化后,我们可以使用Hugging Face Hub共享和加载优化后的模型。</p> <!> <!> <p>Pruna提供了<a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/evaluate.html" rel="nofollow">EvaluationAgent</a>来评估优化后模型的质量。</p> <p>我们可以定义我们关心的指标,如总时间和吞吐量,以及要评估的数据集。我们可以定义一个模型并将其传递给<code>EvaluationAgent</code>。</p> <!> <p>现在您已经了解了如何优化和评估您的模型,可以开始使用 Pruna 来优化您自己的模型了。幸运的是,我们有许多示例来帮助您入门。</p> <blockquote class="tip"><p>有关基准测试 Flux 的更多详细信息,请查看 <a href="https://huggingface.co/blog/PrunaAI/flux-fastest-image-generation-endpoint" rel="nofollow">宣布 FLUX-Juiced:最快的图像生成端点(快 2.6 倍)!</a> 博客文章和 <a href="https://huggingface.co/spaces/PrunaAI/InferBench" rel="nofollow">InferBench</a> 空间。</p></blockquote> <!> <ul><li><a href="https://github.com/pruna-ai/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">Pruna 优化</a></li> <li><a href="https://docs.pruna.ai/en/stable/docs_pruna/user_manual/evaluate.html" rel="nofollow">Pruna 评估</a></li> <li><a href="https://docs.pruna.ai/en/stable/docs_pruna/tutorials/index.html" rel="nofollow">Pruna 教程</a></li></ul> <!> <p></p>`,1);function L(f,b){G(b,!1),E(()=>{new URLSearchParams(window.location.search).get("fw")}),I();var p=z();Q("15jkk7f",o=>{var d=X();S(d,"content",_),n(o,d)});var U=l(c(p),2);R(U,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var J=l(U,2);s(J,{title:"Pruna",local:"pruna",headingTag:"h1"});var h=l(J,10);s(h,{title:"安装",local:"安装",headingTag:"h2"});var m=l(h,4);t(m,{code:"cGlwJTIwaW5zdGFsbCUyMHBydW5h",highlighted:"pip install pruna",lang:"bash",wrap:!1});var u=l(m,2);s(u,{title:"优化 Diffusers 模型",local:"优化-diffusers-模型",headingTag:"h2"});var T=l(u,14);t(T,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRmx1eFBpcGVsaW5lJTBBJTBBZnJvbSUyMHBydW5hJTIwaW1wb3J0JTIwUHJ1bmFNb2RlbCUyQyUyMFNtYXNoQ29uZmlnJTJDJTIwc21hc2glMEElMEElMjMlMjAlRTUlOEElQTAlRTglQkQlQkQlRTYlQTglQTElRTUlOUUlOEIlMEElMjMlMjAlRTQlQkQlQkYlRTclOTQlQTglRTUlQjAlOEZHUFUlRTUlODYlODUlRTUlQUQlOTglRTUlQjAlOUQlRTglQUYlOTVzZWdtaW5kJTJGU2VnbWluZC1WZWdhJUU2JTg4JTk2YmxhY2stZm9yZXN0LWxhYnMlMkZGTFVYLjEtc2NobmVsbCUwQXBpcGUlMjAlM0QlMjBGbHV4UGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMmJsYWNrLWZvcmVzdC1sYWJzJTJGRkxVWC4xLWRldiUyMiUyQyUwQSUyMCUyMCUyMCUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMEEpLnRvKCUyMmN1ZGElMjIpJTBBJTBBJTIzJTIwJUU1JUFFJTlBJUU0JUI5JTg5JUU5JTg1JThEJUU3JUJEJUFFJTBBc21hc2hfY29uZmlnJTIwJTNEJTIwU21hc2hDb25maWcoKSUwQXNtYXNoX2NvbmZpZyU1QiUyMmZhY3Rvcml6ZXIlMjIlNUQlMjAlM0QlMjAlMjJxa3ZfZGlmZnVzZXJzJTIyJTBBc21hc2hfY29uZmlnJTVCJTIyY29tcGlsZXIlMjIlNUQlMjAlM0QlMjAlMjJ0b3JjaF9jb21waWxlJTIyJTBBc21hc2hfY29uZmlnJTVCJTIydG9yY2hfY29tcGlsZV90YXJnZXQlMjIlNUQlMjAlM0QlMjAlMjJtb2R1bGVfbGlzdCUyMiUwQXNtYXNoX2NvbmZpZyU1QiUyMmNhY2hlciUyMiU1RCUyMCUzRCUyMCUyMmZvcmElMjIlMEFzbWFzaF9jb25maWclNUIlMjJmb3JhX2ludGVydmFsJTIyJTVEJTIwJTNEJTIwMiUwQSUwQSUyMyUyMCVFNCVCOCVCQSVFNCVCQSU4NiVFOCU4RSVCNyVFNSVCRSU5NyVFNiU5QyU4MCVFNCVCRCVCMyVFOSU4MCU5RiVFNSVCQSVBNiVFNyVCQiU5MyVFNiU5RSU5QyVFRiVCQyU4QyVFNSU4RiVBRiVFNCVCQiVBNSVFNiVCNyVCQiVFNSU4QSVBMCVFOCVCRiU5OSVFNCVCQSU5QiVFOSU4NSU4RCVFNyVCRCVBRSUwQSUyMyUyMCVFNCVCRCU4NiVFNSVBRSU4MyVFNCVCQiVBQyVFNCVCQyU5QSVFNSVCMCU4NiVFOSVBMiU4NCVFNyU4MyVBRCVFNiU5NyVCNiVFOSU5NyVCNCVFNCVCQiU4RTEuNSVFNSU4OCU4NiVFOSU5MiU5RiVFNSVBMiU5RSVFNSU4QSVBMCVFNSU4OCVCMDEwJUU1JTg4JTg2JUU5JTkyJTlGJTBBJTIzJTIwc21hc2hfY29uZmlnJTVCJTIydG9yY2hfY29tcGlsZV9tb2RlJTIyJTVEJTIwJTNEJTIwJTIybWF4LWF1dG90dW5lLW5vLWN1ZGFncmFwaHMlMjIlMEElMjMlMjBzbWFzaF9jb25maWclNUIlMjJxdWFudGl6ZXIlMjIlNUQlMjAlM0QlMjAlMjJ0b3JjaGFvJTIyJTBBJTIzJTIwc21hc2hfY29uZmlnJTVCJTIydG9yY2hhb19xdWFudF90eXBlJTIyJTVEJTIwJTNEJTIwJTIyZnA4ZHElMjIlMEElMjMlMjBzbWFzaF9jb25maWclNUIlMjJ0b3JjaGFvX2V4Y2x1ZGVkX21vZHVsZXMlMjIlNUQlMjAlM0QlMjAlMjJub3JtJTJCZW1iZWRkaW5nJTIyJTBBJTBBJTIzJTIwJUU0JUJDJTk4JUU1JThDJTk2JUU2JUE4JUExJUU1JTlFJThCJTBBc21hc2hlZF9waXBlJTIwJTNEJTIwc21hc2gocGlwZSUyQyUyMHNtYXNoX2NvbmZpZyklMEElMEElMjMlMjAlRTglQkYlOTAlRTglQTElOEMlRTYlQTglQTElRTUlOUUlOEIlMEFzbWFzaGVkX3BpcGUoJTIyYSUyMGtuaXR0ZWQlMjBwdXJwbGUlMjBwcnVuZSUyMikuaW1hZ2VzJTVCMCU1RA==",highlighted:`<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"># 加载模型</span> | |
| <span class="hljs-comment"># 使用小GPU内存尝试segmind/Segmind-Vega或black-forest-labs/FLUX.1-schnell</span> | |
| pipe = FluxPipeline.from_pretrained( | |
| <span class="hljs-string">"black-forest-labs/FLUX.1-dev"</span>, | |
| torch_dtype=torch.bfloat16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| <span class="hljs-comment"># 定义配置</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"># 为了获得最佳速度结果,可以添加这些配置</span> | |
| <span class="hljs-comment"># 但它们会将预热时间从1.5分钟增加到10分钟</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"># 优化模型</span> | |
| smashed_pipe = smash(pipe, smash_config) | |
| <span class="hljs-comment"># 运行模型</span> | |
| smashed_pipe(<span class="hljs-string">"a knitted purple prune"</span>).images[<span class="hljs-number">0</span>]`,lang:"python",wrap:!1});var M=l(T,6);t(M,{code:"JTIzJTIwJUU0JUJGJTlEJUU1JUFEJTk4JUU2JUE4JUExJUU1JTlFJThCJTBBc21hc2hlZF9waXBlLnNhdmVfdG9faHViKCUyMiUzQ3VzZXJuYW1lJTNFJTJGRkxVWC4xLWRldi1zbWFzaGVkJTIyKSUwQSUwQSUyMyUyMCVFNSU4QSVBMCVFOCVCRCVCRCVFNiVBOCVBMSVFNSU5RSU4QiUwQXNtYXNoZWRfcGlwZSUyMCUzRCUyMFBydW5hTW9kZWwuZnJvbV9odWIoJTIyJTNDdXNlcm5hbWUlM0UlMkZGTFVYLjEtZGV2LXNtYXNoZWQlMjIp",highlighted:`<span class="hljs-comment"># 保存模型</span> | |
| smashed_pipe.save_to_hub(<span class="hljs-string">"<username>/FLUX.1-dev-smashed"</span>) | |
| <span class="hljs-comment"># 加载模型</span> | |
| smashed_pipe = PrunaModel.from_hub(<span class="hljs-string">"<username>/FLUX.1-dev-smashed"</span>)`,lang:"python",wrap:!1});var V=l(M,2);s(V,{title:"评估和基准测试Diffusers模型",local:"评估和基准测试diffusers模型",headingTag:"h2"});var g=l(V,6);Z(g,{id:"eval",options:["optimized model","standalone model"],children:(o,d)=>{var y=A(),F=c(y);w(F,{id:"eval",option:"optimized model",children:(r,N)=>{var a=Y(),i=l(c(a),2);t(i,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRmx1eFBpcGVsaW5lJTBBJTBBZnJvbSUyMHBydW5hJTIwaW1wb3J0JTIwUHJ1bmFNb2RlbCUwQWZyb20lMjBwcnVuYS5kYXRhLnBydW5hX2RhdGFtb2R1bGUlMjBpbXBvcnQlMjBQcnVuYURhdGFNb2R1bGUlMEFmcm9tJTIwcHJ1bmEuZXZhbHVhdGlvbi5ldmFsdWF0aW9uX2FnZW50JTIwaW1wb3J0JTIwRXZhbHVhdGlvbkFnZW50JTBBZnJvbSUyMHBydW5hLmV2YWx1YXRpb24ubWV0cmljcyUyMGltcG9ydCUyMCglMEElMjAlMjAlMjAlMjBUaHJvdWdocHV0TWV0cmljJTJDJTBBJTIwJTIwJTIwJTIwVG9yY2hNZXRyaWNXcmFwcGVyJTJDJTBBJTIwJTIwJTIwJTIwVG90YWxUaW1lTWV0cmljJTJDJTBBKSUwQWZyb20lMjBwcnVuYS5ldmFsdWF0aW9uLnRhc2slMjBpbXBvcnQlMjBUYXNrJTBBJTBBJTIzJTIwZGVmaW5lJTIwdGhlJTIwZGV2aWNlJTBBZGV2aWNlJTIwJTNEJTIwJTIyY3VkYSUyMiUyMGlmJTIwdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKSUyMGVsc2UlMjAlMjJtcHMlMjIlMjBpZiUyMHRvcmNoLmJhY2tlbmRzLm1wcy5pc19hdmFpbGFibGUoKSUyMGVsc2UlMjAlMjJjcHUlMjIlMEElMEElMjMlMjAlRTUlOEElQTAlRTglQkQlQkQlRTYlQTglQTElRTUlOUUlOEIlMEElMjMlMjAlRTQlQkQlQkYlRTclOTQlQTglRTUlQjAlOEZHUFUlRTUlODYlODUlRTUlQUQlOTglRTUlQjAlOUQlRTglQUYlOTUlMjBQcnVuYUFJJTJGU2VnbWluZC1WZWdhLXNtYXNoZWQlMjAlRTYlODglOTYlMjBQcnVuYUFJJTJGRkxVWC4xLWRldi1zbWFzaGVkJTBBc21hc2hlZF9waXBlJTIwJTNEJTIwUHJ1bmFNb2RlbC5mcm9tX2h1YiglMjJQcnVuYUFJJTJGRkxVWC4xLWRldi1zbWFzaGVkJTIyKSUwQSUwQSUyMyUyMCVFNSVBRSU5QSVFNCVCOSU4OSVFNiU4QyU4NyVFNiVBMCU4NyUwQW1ldHJpY3MlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjBUb3RhbFRpbWVNZXRyaWMobl9pdGVyYXRpb25zJTNEMjAlMkMlMjBuX3dhcm11cF9pdGVyYXRpb25zJTNENSklMkMlMEElMjAlMjAlMjAlMjBUaHJvdWdocHV0TWV0cmljKG5faXRlcmF0aW9ucyUzRDIwJTJDJTIwbl93YXJtdXBfaXRlcmF0aW9ucyUzRDUpJTJDJTBBJTIwJTIwJTIwJTIwVG9yY2hNZXRyaWNXcmFwcGVyKCUyMmNsaXAlMjIpJTJDJTBBJTVEJTBBJTBBJTIzJTIwJUU1JUFFJTlBJUU0JUI5JTg5JUU2JTk1JUIwJUU2JThEJUFFJUU2JUE4JUExJUU1JTlEJTk3JTBBZGF0YW1vZHVsZSUyMCUzRCUyMFBydW5hRGF0YU1vZHVsZS5mcm9tX3N0cmluZyglMjJMQUlPTjI1NiUyMiklMEFkYXRhbW9kdWxlLmxpbWl0X2RhdGFzZXRzKDEwKSUwQSUwQSUyMyUyMCVFNSVBRSU5QSVFNCVCOSU4OSVFNCVCQiVCQiVFNSU4QSVBMSVFNSU5MiU4QyVFOCVBRiU4NCVFNCVCQyVCMCVFNCVCQiVBMyVFNyU5MCU4NiUwQXRhc2slMjAlM0QlMjBUYXNrKG1ldHJpY3MlMkMlMjBkYXRhbW9kdWxlJTNEZGF0YW1vZHVsZSUyQyUyMGRldmljZSUzRGRldmljZSklMEFldmFsX2FnZW50JTIwJTNEJTIwRXZhbHVhdGlvbkFnZW50KHRhc2spJTBBJTBBJTIzJTIwJUU4JUFGJTg0JUU0JUJDJUIwJUU0JUJDJTk4JUU1JThDJTk2JUU2JUE4JUExJUU1JTlFJThCJUU1JUI5JUI2JUU1JThEJUI4JUU4JUJEJUJEJUU1JTg4JUIwQ1BVJTBBc21hc2hlZF9waXBlLm1vdmVfdG9fZGV2aWNlKGRldmljZSklMEFzbWFzaGVkX3BpcGVfcmVzdWx0cyUyMCUzRCUyMGV2YWxfYWdlbnQuZXZhbHVhdGUoc21hc2hlZF9waXBlKSUwQXNtYXNoZWRfcGlwZS5tb3ZlX3RvX2RldmljZSglMjJjcHUlMjIp",highlighted:`<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"># 加载模型</span> | |
| <span class="hljs-comment"># 使用小GPU内存尝试 PrunaAI/Segmind-Vega-smashed 或 PrunaAI/FLUX.1-dev-smashed</span> | |
| smashed_pipe = PrunaModel.from_hub(<span class="hljs-string">"PrunaAI/FLUX.1-dev-smashed"</span>) | |
| <span class="hljs-comment"># 定义指标</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"># 定义数据模块</span> | |
| datamodule = PrunaDataModule.from_string(<span class="hljs-string">"LAION256"</span>) | |
| datamodule.limit_datasets(<span class="hljs-number">10</span>) | |
| <span class="hljs-comment"># 定义任务和评估代理</span> | |
| task = Task(metrics, datamodule=datamodule, device=device) | |
| eval_agent = EvaluationAgent(task) | |
| <span class="hljs-comment"># 评估优化模型并卸载到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>)`,lang:"python",wrap:!1}),n(r,a)},$$slots:{default:!0}});var B=l(F,2);w(B,{id:"eval",option:"standalone model",children:(r,N)=>{var a=q(),i=l(c(a),2);t(i,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRmx1eFBpcGVsaW5lJTBBJTBBZnJvbSUyMHBydW5hJTIwaW1wb3J0JTIwUHJ1bmFNb2RlbCUwQSUwQSUyMyUyMCVFNSU4QSVBMCVFOCVCRCVCRCVFNiVBOCVBMSVFNSU5RSU4QiUwQSUyMyUyMCVFNCVCRCVCRiVFNyU5NCVBOCVFNSVCMCU4RkdQVSVFNSU4NiU4NSVFNSVBRCU5OCVFNSVCMCU5RCVFOCVBRiU5NSUyMFBydW5hQUklMkZTZWdtaW5kLVZlZ2Etc21hc2hlZCUyMCVFNiU4OCU5NiUyMFBydW5hQUklMkZGTFVYLjEtZGV2LXNtYXNoZWQlMEFwaXBlJTIwJTNEJTIwRmx1eFBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJibGFjay1mb3Jlc3QtbGFicyUyRkZMVVguMS1kZXYlMjIlMkMlMEElMjAlMjAlMjAlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmJmbG9hdDE2JTBBKS50byglMjJjcHUlMjIpJTBBd3JhcHBlZF9waXBlJTIwJTNEJTIwUHJ1bmFNb2RlbChtb2RlbCUzRHBpcGUp",highlighted:`<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"># 加载模型</span> | |
| <span class="hljs-comment"># 使用小GPU内存尝试 PrunaAI/Segmind-Vega-smashed 或 PrunaAI/FLUX.1-dev-smashed</span> | |
| pipe = FluxPipeline.from_pretrained( | |
| <span class="hljs-string">"black-forest-labs/FLUX.1-dev"</span>, | |
| torch_dtype=torch.bfloat16 | |
| ).to(<span class="hljs-string">"cpu"</span>) | |
| wrapped_pipe = PrunaModel(model=pipe)`,lang:"python",wrap:!1}),n(r,a)},$$slots:{default:!0}}),n(o,y)},$$slots:{default:!0}});var j=l(g,6);s(j,{title:"参考",local:"参考",headingTag:"h2"});var C=l(j,4);W(C,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/optimization/pruna.md"}),v(2),n(f,p),k()}export{L as component}; | |
Xet Storage Details
- Size:
- 19.7 kB
- Xet hash:
- b1dde5f865a69442d144c1687d48c2de268f4efcad5ca20d98b5b43c65e37ea1
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.