Buckets:
| import"../chunks/DsnmJJEf.js";import{i as C,h as S,C as Q,H as s,b as e,E as H,s as F}from"../chunks/Dv-EnAnp.js";import{p as Y,o as x,s as l,f as D,a as v,b as E,c as R,n as L}from"../chunks/F-c_tsrl.js";import{D as A}from"../chunks/Bp8JmtCn.js";const q='{"title":"有效且高效的扩散","local":"有效且高效的扩散","sections":[{"title":"速度","local":"速度","sections":[],"depth":2},{"title":"内存","local":"内存","sections":[],"depth":2},{"title":"质量","local":"质量","sections":[{"title":"更好的 checkpoints","local":"更好的-checkpoints","sections":[],"depth":3},{"title":"更好的 pipeline 组件","local":"更好的-pipeline-组件","sections":[],"depth":3},{"title":"更好的提示词工程","local":"更好的提示词工程","sections":[],"depth":3}],"depth":2},{"title":"最后","local":"最后","sections":[],"depth":2}],"depth":1}';var P=R('<meta name="hf:doc:metadata"/>'),K=R('<p></p> <!> <!> <!> <p>让 <code>DiffusionPipeline</code> 生成特定风格或包含你所想要的内容的图像可能会有些棘手。 通常情况下,你需要多次运行 <code>DiffusionPipeline</code> 才能得到满意的图像。但是从无到有生成图像是一个计算密集的过程,特别是如果你要一遍又一遍地进行推理运算。</p> <p>这就是为什么从pipeline中获得最高的 <em>computational</em> (speed) 和 <em>memory</em> (GPU RAM) 非常重要 ,以减少推理周期之间的时间,从而使迭代速度更快。</p> <p>本教程将指导您如何通过 <code>DiffusionPipeline</code> 更快、更好地生成图像。</p> <p>首先,加载 <a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5" rel="nofollow"><code>stable-diffusion-v1-5/stable-diffusion-v1-5</code></a> 模型:</p> <!> <p>本教程将使用的提示词是 <code>portrait photo of a old warrior chief</code> ,但是你可以随心所欲的想象和构造自己的提示词:</p> <!> <!> <blockquote class="tip"><p>💡 如果你没有 GPU, 你可以从像 <a href="https://colab.research.google.com/" rel="nofollow">Colab</a> 这样的 GPU 提供商获取免费的 GPU !</p></blockquote> <p>加速推理的最简单方法之一是将 pipeline 放在 GPU 上 ,就像使用任何 PyTorch 模块一样:</p> <!> <p>为了确保您可以使用相同的图像并对其进行改进,使用 <a href="https://pytorch.org/docs/stable/generated/torch.Generator.html" rel="nofollow"><code>Generator</code></a> 方法,然后设置一个随机数种子 以确保其 <a href="./using-diffusers/reusing_seeds">复现性</a>:</p> <!> <p>现在,你可以生成一个图像:</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/stable_diffusion_101/sd_101_1.png"/></div> <p>在 T4 GPU 上,这个过程大概要30秒(如果你的 GPU 比 T4 好,可能会更快)。在默认情况下,<code>DiffusionPipeline</code> 使用完整的 <code>float32</code> 精度进行 50 步推理。你可以通过降低精度(如 <code>float16</code> )或者减少推理步数来加速整个过程</p> <p>让我们把模型的精度降低至 <code>float16</code> ,然后生成一张图像:</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/stable_diffusion_101/sd_101_2.png"/></div> <p>这一次,生成图像只花了约 11 秒,比之前快了近 3 倍!</p> <blockquote class="tip"><p>💡 我们强烈建议把 pipeline 精度降低至 <code>float16</code> , 到目前为止, 我们很少看到输出质量有任何下降。</p></blockquote> <p>另一个选择是减少推理步数。 你可以选择一个更高效的调度器 (<em>scheduler</em>) 可以减少推理步数同时保证输出质量。您可以在 [DiffusionPipeline] 中通过调用compatibles方法找到与当前模型兼容的调度器 (<em>scheduler</em>)。</p> <!> <p>Stable Diffusion 模型默认使用的是 <code>PNDMScheduler</code> ,通常要大概50步推理, 但是像 <code>DPMSolverMultistepScheduler</code> 这样更高效的调度器只要大概 20 或 25 步推理. 使用 <code>ConfigMixin.from_config()</code> 方法加载新的调度器:</p> <!> <p>现在将 <code>num_inference_steps</code> 设置为 20:</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/stable_diffusion_101/sd_101_3.png"/></div> <p>太棒了!你成功把推理时间缩短到 4 秒!⚡️</p> <!> <p>改善 pipeline 性能的另一个关键是减少内存的使用量,这间接意味着速度更快,因为你经常试图最大化每秒生成的图像数量。要想知道你一次可以生成多少张图片,最简单的方法是尝试不同的batch size,直到出现<code>OutOfMemoryError</code> (OOM)。</p> <p>创建一个函数,为每一批要生成的图像分配提示词和 <code>Generators</code> 。请务必为每个<code>Generator</code> 分配一个种子,以便于复现良好的结果。</p> <!> <p>设置 <code>batch_size=4</code> ,然后看一看我们消耗了多少内存:</p> <!> <p>除非你有一个更大内存的GPU, 否则上述代码会返回 <code>OOM</code> 错误! 大部分内存被 cross-attention 层使用。按顺序运行可以节省大量内存,而不是在批处理中进行。你可以为 pipeline 配置 <code>enable_attention_slicing()</code> 函数:</p> <!> <p>现在尝试把 <code>batch_size</code> 增加到 8!</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/stable_diffusion_101/sd_101_5.png"/></div> <p>以前你不能一批生成 4 张图片,而现在你可以在一张图片里面生成八张图片而只需要大概3.5秒!这可能是 T4 GPU 在不牺牲质量的情况运行速度最快的一种方法。</p> <!> <p>在最后两节中, 你要学习如何通过 <code>fp16</code> 来优化 pipeline 的速度, 通过使用性能更高的调度器来减少推理步数, 使用注意力切片(<em>enabling attention slicing</em>)方法来节省内存。现在,你将关注的是如何提高图像的质量。</p> <!> <p>有个显而易见的方法是使用更好的 checkpoints。 Stable Diffusion 模型是一个很好的起点, 自正式发布以来,还发布了几个改进版本。然而, 使用更新的版本并不意味着你会得到更好的结果。你仍然需要尝试不同的 checkpoints ,并做一些研究 (例如使用 <a href="https://minimaxir.com/2022/11/stable-diffusion-negative-prompt/" rel="nofollow">negative prompts</a>) 来获得更好的结果。</p> <p>随着该领域的发展, 有越来越多经过微调的高质量的 checkpoints 用来生成不一样的风格. 在 <a href="https://huggingface.co/models?library=diffusers&sort=downloads" rel="nofollow">Hub</a> 和 <a href="https://huggingface.co/spaces/huggingface-projects/diffusers-gallery" rel="nofollow">Diffusers Gallery</a> 寻找你感兴趣的一种!</p> <!> <p>也可以尝试用新版本替换当前 pipeline 组件。让我们加载最新的 <a href="https://huggingface.co/stabilityai/stable-diffusion-2-1/tree/main/vae" rel="nofollow">autodecoder</a> 从 Stability AI 加载到 pipeline, 并生成一些图像:</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/stable_diffusion_101/sd_101_6.png"/></div> <!> <p>用于生成图像的文本非常重要, 因此被称为 <em>提示词工程</em>。 在设计提示词工程应注意如下事项:</p> <ul><li>我想生成的图像或类似图像如何存储在互联网上?</li> <li>我可以提供哪些额外的细节来引导模型朝着我想要的风格生成?</li></ul> <p>考虑到这一点,让我们改进提示词,以包含颜色和更高质量的细节:</p> <!> <p>使用新的提示词生成一批图像:</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/stable_diffusion_101/sd_101_7.png"/></div> <p>非常的令人印象深刻! Let’s tweak the second image - 把 <code>Generator</code> 的种子设置为 <code>1</code> - 添加一些关于年龄的主题文本:</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/stable_diffusion_101/sd_101_8.png"/></div> <!> <p>在本教程中, 您学习了如何优化<code>DiffusionPipeline</code>以提高计算和内存效率,以及提高生成输出的质量. 如果你有兴趣让你的 pipeline 更快, 可以看一看以下资源:</p> <ul><li>学习 <a href="./optimization/torch2.0">PyTorch 2.0</a> 和 <a href="https://pytorch.org/docs/stable/generated/torch.compile.html" rel="nofollow"><code>torch.compile</code></a> 可以让推理速度提高 5 - 300% . 在 A100 GPU 上, 推理速度可以提高 50% !</li> <li>如果你没法用 PyTorch 2, 我们建议你安装 <a href="./optimization/xformers">xFormers</a>。它的内存高效注意力机制(<em>memory-efficient attention mechanism</em>)与PyTorch 1.13.1配合使用,速度更快,内存消耗更少。</li> <li>其他的优化技术, 如:模型卸载(<em>model offloading</em>), 包含在 <a href="./optimization/fp16">这份指南</a>.</li></ul> <!> <p></p>',1);function sl(X,z){Y(z,!1),x(()=>{new URLSearchParams(window.location.search).get("fw")}),C();var a=K();S("1ji58vo",k=>{var B=P();F(B,"content",q),v(k,B)});var i=l(D(a),2);Q(i,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var o=l(i,2);A(o,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;",options:[{label:"Mixed",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/zh/stable_diffusion.ipynb"},{label:"PyTorch",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/zh/pytorch/stable_diffusion.ipynb"},{label:"TensorFlow",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/zh/tensorflow/stable_diffusion.ipynb"},{label:"Mixed",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/zh/stable_diffusion.ipynb"},{label:"PyTorch",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/zh/pytorch/stable_diffusion.ipynb"},{label:"TensorFlow",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/zh/tensorflow/stable_diffusion.ipynb"}]});var n=l(o,2);s(n,{title:"有效且高效的扩散",local:"有效且高效的扩散",headingTag:"h1"});var c=l(n,10);e(c,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBJTBBbW9kZWxfaWQlMjAlM0QlMjAlMjJzdGFibGUtZGlmZnVzaW9uLXYxLTUlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTUlMjIlMEFwaXBlbGluZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZChtb2RlbF9pZCUyQyUyMHVzZV9zYWZldGVuc29ycyUzRFRydWUp",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline | |
| model_id = <span class="hljs-string">"stable-diffusion-v1-5/stable-diffusion-v1-5"</span> | |
| pipeline = DiffusionPipeline.from_pretrained(model_id, use_safetensors=<span class="hljs-literal">True</span>)`,lang:"python",wrap:!1});var t=l(c,4);e(t,{code:"cHJvbXB0JTIwJTNEJTIwJTIycG9ydHJhaXQlMjBwaG90byUyMG9mJTIwYSUyMG9sZCUyMHdhcnJpb3IlMjBjaGllZiUyMg==",highlighted:'prompt = <span class="hljs-string">"portrait photo of a old warrior chief"</span>',lang:"python",wrap:!1});var p=l(t,2);s(p,{title:"速度",local:"速度",headingTag:"h2"});var r=l(p,6);e(r,{code:"cGlwZWxpbmUlMjAlM0QlMjBwaXBlbGluZS50byglMjJjdWRhJTIyKQ==",highlighted:'pipeline = pipeline.to(<span class="hljs-string">"cuda"</span>)',lang:"python",wrap:!1});var d=l(r,4);e(d,{code:"aW1wb3J0JTIwdG9yY2glMEElMEFnZW5lcmF0b3IlMjAlM0QlMjB0b3JjaC5HZW5lcmF0b3IoJTIyY3VkYSUyMikubWFudWFsX3NlZWQoMCk=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| generator = torch.Generator(<span class="hljs-string">"cuda"</span>).manual_seed(<span class="hljs-number">0</span>)`,lang:"python",wrap:!1});var h=l(d,4);e(h,{code:"aW1hZ2UlMjAlM0QlMjBwaXBlbGluZShwcm9tcHQlMkMlMjBnZW5lcmF0b3IlM0RnZW5lcmF0b3IpLmltYWdlcyU1QjAlNUQlMEFpbWFnZQ==",highlighted:`image = pipeline(prompt, generator=generator).images[<span class="hljs-number">0</span>] | |
| image`,lang:"python",wrap:!1});var y=l(h,8);e(y,{code:"aW1wb3J0JTIwdG9yY2glMEElMEFwaXBlbGluZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZChtb2RlbF9pZCUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guZmxvYXQxNiUyQyUyMHVzZV9zYWZldGVuc29ycyUzRFRydWUpJTBBcGlwZWxpbmUlMjAlM0QlMjBwaXBlbGluZS50byglMjJjdWRhJTIyKSUwQWdlbmVyYXRvciUyMCUzRCUyMHRvcmNoLkdlbmVyYXRvciglMjJjdWRhJTIyKS5tYW51YWxfc2VlZCgwKSUwQWltYWdlJTIwJTNEJTIwcGlwZWxpbmUocHJvbXB0JTJDJTIwZ2VuZXJhdG9yJTNEZ2VuZXJhdG9yKS5pbWFnZXMlNUIwJTVEJTBBaW1hZ2U=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| pipeline = DiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16, use_safetensors=<span class="hljs-literal">True</span>) | |
| pipeline = pipeline.to(<span class="hljs-string">"cuda"</span>) | |
| generator = torch.Generator(<span class="hljs-string">"cuda"</span>).manual_seed(<span class="hljs-number">0</span>) | |
| image = pipeline(prompt, generator=generator).images[<span class="hljs-number">0</span>] | |
| image`,lang:"python",wrap:!1});var M=l(y,10);e(M,{code:"cGlwZWxpbmUuc2NoZWR1bGVyLmNvbXBhdGlibGVzJTBBJTVCJTBBJTIwJTIwJTIwJTIwZGlmZnVzZXJzLnNjaGVkdWxlcnMuc2NoZWR1bGluZ19sbXNfZGlzY3JldGUuTE1TRGlzY3JldGVTY2hlZHVsZXIlMkMlMEElMjAlMjAlMjAlMjBkaWZmdXNlcnMuc2NoZWR1bGVycy5zY2hlZHVsaW5nX3VuaXBjX211bHRpc3RlcC5VbmlQQ011bHRpc3RlcFNjaGVkdWxlciUyQyUwQSUyMCUyMCUyMCUyMGRpZmZ1c2Vycy5zY2hlZHVsZXJzLnNjaGVkdWxpbmdfa19kcG1fMl9kaXNjcmV0ZS5LRFBNMkRpc2NyZXRlU2NoZWR1bGVyJTJDJTBBJTIwJTIwJTIwJTIwZGlmZnVzZXJzLnNjaGVkdWxlcnMuc2NoZWR1bGluZ19kZWlzX211bHRpc3RlcC5ERUlTTXVsdGlzdGVwU2NoZWR1bGVyJTJDJTBBJTIwJTIwJTIwJTIwZGlmZnVzZXJzLnNjaGVkdWxlcnMuc2NoZWR1bGluZ19ldWxlcl9kaXNjcmV0ZS5FdWxlckRpc2NyZXRlU2NoZWR1bGVyJTJDJTBBJTIwJTIwJTIwJTIwZGlmZnVzZXJzLnNjaGVkdWxlcnMuc2NoZWR1bGluZ19kcG1zb2x2ZXJfbXVsdGlzdGVwLkRQTVNvbHZlck11bHRpc3RlcFNjaGVkdWxlciUyQyUwQSUyMCUyMCUyMCUyMGRpZmZ1c2Vycy5zY2hlZHVsZXJzLnNjaGVkdWxpbmdfZGRwbS5ERFBNU2NoZWR1bGVyJTJDJTBBJTIwJTIwJTIwJTIwZGlmZnVzZXJzLnNjaGVkdWxlcnMuc2NoZWR1bGluZ19kcG1zb2x2ZXJfc2luZ2xlc3RlcC5EUE1Tb2x2ZXJTaW5nbGVzdGVwU2NoZWR1bGVyJTJDJTBBJTIwJTIwJTIwJTIwZGlmZnVzZXJzLnNjaGVkdWxlcnMuc2NoZWR1bGluZ19rX2RwbV8yX2FuY2VzdHJhbF9kaXNjcmV0ZS5LRFBNMkFuY2VzdHJhbERpc2NyZXRlU2NoZWR1bGVyJTJDJTBBJTIwJTIwJTIwJTIwZGlmZnVzZXJzLnNjaGVkdWxlcnMuc2NoZWR1bGluZ19oZXVuX2Rpc2NyZXRlLkhldW5EaXNjcmV0ZVNjaGVkdWxlciUyQyUwQSUyMCUyMCUyMCUyMGRpZmZ1c2Vycy5zY2hlZHVsZXJzLnNjaGVkdWxpbmdfcG5kbS5QTkRNU2NoZWR1bGVyJTJDJTBBJTIwJTIwJTIwJTIwZGlmZnVzZXJzLnNjaGVkdWxlcnMuc2NoZWR1bGluZ19ldWxlcl9hbmNlc3RyYWxfZGlzY3JldGUuRXVsZXJBbmNlc3RyYWxEaXNjcmV0ZVNjaGVkdWxlciUyQyUwQSUyMCUyMCUyMCUyMGRpZmZ1c2Vycy5zY2hlZHVsZXJzLnNjaGVkdWxpbmdfZGRpbS5ERElNU2NoZWR1bGVyJTJDJTBBJTVE",highlighted:`pipeline.scheduler.compatibles | |
| [ | |
| diffusers.schedulers.scheduling_lms_discrete.LMSDiscreteScheduler, | |
| diffusers.schedulers.scheduling_unipc_multistep.UniPCMultistepScheduler, | |
| diffusers.schedulers.scheduling_k_dpm_2_discrete.KDPM2DiscreteScheduler, | |
| diffusers.schedulers.scheduling_deis_multistep.DEISMultistepScheduler, | |
| diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteScheduler, | |
| diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler, | |
| diffusers.schedulers.scheduling_ddpm.DDPMScheduler, | |
| diffusers.schedulers.scheduling_dpmsolver_singlestep.DPMSolverSinglestepScheduler, | |
| diffusers.schedulers.scheduling_k_dpm_2_ancestral_discrete.KDPM2AncestralDiscreteScheduler, | |
| diffusers.schedulers.scheduling_heun_discrete.HeunDiscreteScheduler, | |
| diffusers.schedulers.scheduling_pndm.PNDMScheduler, | |
| diffusers.schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteScheduler, | |
| diffusers.schedulers.scheduling_ddim.DDIMScheduler, | |
| ]`,lang:"python",wrap:!1});var u=l(M,4);e(u,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERQTVNvbHZlck11bHRpc3RlcFNjaGVkdWxlciUwQSUwQXBpcGVsaW5lLnNjaGVkdWxlciUyMCUzRCUyMERQTVNvbHZlck11bHRpc3RlcFNjaGVkdWxlci5mcm9tX2NvbmZpZyhwaXBlbGluZS5zY2hlZHVsZXIuY29uZmlnKQ==",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DPMSolverMultistepScheduler | |
| pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)`,lang:"python",wrap:!1});var m=l(u,4);e(m,{code:"Z2VuZXJhdG9yJTIwJTNEJTIwdG9yY2guR2VuZXJhdG9yKCUyMmN1ZGElMjIpLm1hbnVhbF9zZWVkKDApJTBBaW1hZ2UlMjAlM0QlMjBwaXBlbGluZShwcm9tcHQlMkMlMjBnZW5lcmF0b3IlM0RnZW5lcmF0b3IlMkMlMjBudW1faW5mZXJlbmNlX3N0ZXBzJTNEMjApLmltYWdlcyU1QjAlNUQlMEFpbWFnZQ==",highlighted:`generator = torch.Generator(<span class="hljs-string">"cuda"</span>).manual_seed(<span class="hljs-number">0</span>) | |
| image = pipeline(prompt, generator=generator, num_inference_steps=<span class="hljs-number">20</span>).images[<span class="hljs-number">0</span>] | |
| image`,lang:"python",wrap:!1});var b=l(m,6);s(b,{title:"内存",local:"内存",headingTag:"h2"});var J=l(b,6);e(J,{code:"ZGVmJTIwZ2V0X2lucHV0cyhiYXRjaF9zaXplJTNEMSklM0ElMEElMjAlMjAlMjAlMjBnZW5lcmF0b3IlMjAlM0QlMjAlNUJ0b3JjaC5HZW5lcmF0b3IoJTIyY3VkYSUyMikubWFudWFsX3NlZWQoaSklMjBmb3IlMjBpJTIwaW4lMjByYW5nZShiYXRjaF9zaXplKSU1RCUwQSUyMCUyMCUyMCUyMHByb21wdHMlMjAlM0QlMjBiYXRjaF9zaXplJTIwKiUyMCU1QnByb21wdCU1RCUwQSUyMCUyMCUyMCUyMG51bV9pbmZlcmVuY2Vfc3RlcHMlMjAlM0QlMjAyMCUwQSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMCU3QiUyMnByb21wdCUyMiUzQSUyMHByb21wdHMlMkMlMjAlMjJnZW5lcmF0b3IlMjIlM0ElMjBnZW5lcmF0b3IlMkMlMjAlMjJudW1faW5mZXJlbmNlX3N0ZXBzJTIyJTNBJTIwbnVtX2luZmVyZW5jZV9zdGVwcyU3RA==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_inputs</span>(<span class="hljs-params">batch_size=<span class="hljs-number">1</span></span>): | |
| generator = [torch.Generator(<span class="hljs-string">"cuda"</span>).manual_seed(i) <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(batch_size)] | |
| prompts = batch_size * [prompt] | |
| num_inference_steps = <span class="hljs-number">20</span> | |
| <span class="hljs-keyword">return</span> {<span class="hljs-string">"prompt"</span>: prompts, <span class="hljs-string">"generator"</span>: generator, <span class="hljs-string">"num_inference_steps"</span>: num_inference_steps}`,lang:"python",wrap:!1});var g=l(J,4);e(g,{code:"ZnJvbSUyMGRpZmZ1c2Vycy51dGlscyUyMGltcG9ydCUyMG1ha2VfaW1hZ2VfZ3JpZCUwQSUwQWltYWdlcyUyMCUzRCUyMHBpcGVsaW5lKCoqZ2V0X2lucHV0cyhiYXRjaF9zaXplJTNENCkpLmltYWdlcyUwQW1ha2VfaW1hZ2VfZ3JpZChpbWFnZXMlMkMlMjAyJTJDJTIwMik=",highlighted:`<span class="hljs-keyword">from</span> diffusers.utils <span class="hljs-keyword">import</span> make_image_grid | |
| images = pipeline(**get_inputs(batch_size=<span class="hljs-number">4</span>)).images | |
| make_image_grid(images, <span class="hljs-number">2</span>, <span class="hljs-number">2</span>)`,lang:"python",wrap:!1});var f=l(g,4);e(f,{code:"cGlwZWxpbmUuZW5hYmxlX2F0dGVudGlvbl9zbGljaW5nKCk=",highlighted:"pipeline.enable_attention_slicing()",lang:"python",wrap:!1});var U=l(f,4);e(U,{code:"aW1hZ2VzJTIwJTNEJTIwcGlwZWxpbmUoKipnZXRfaW5wdXRzKGJhdGNoX3NpemUlM0Q4KSkuaW1hZ2VzJTBBbWFrZV9pbWFnZV9ncmlkKGltYWdlcyUyQyUyMHJvd3MlM0QyJTJDJTIwY29scyUzRDQp",highlighted:`images = pipeline(**get_inputs(batch_size=<span class="hljs-number">8</span>)).images | |
| make_image_grid(images, rows=<span class="hljs-number">2</span>, cols=<span class="hljs-number">4</span>)`,lang:"python",wrap:!1});var Z=l(U,6);s(Z,{title:"质量",local:"质量",headingTag:"h2"});var w=l(Z,4);s(w,{title:"更好的 checkpoints",local:"更好的-checkpoints",headingTag:"h3"});var G=l(w,6);s(G,{title:"更好的 pipeline 组件",local:"更好的-pipeline-组件",headingTag:"h3"});var T=l(G,4);e(T,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMEF1dG9lbmNvZGVyS0wlMEElMEF2YWUlMjAlM0QlMjBBdXRvZW5jb2RlcktMLmZyb21fcHJldHJhaW5lZCglMjJzdGFiaWxpdHlhaSUyRnNkLXZhZS1mdC1tc2UlMjIlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYpLnRvKCUyMmN1ZGElMjIpJTBBcGlwZWxpbmUudmFlJTIwJTNEJTIwdmFlJTBBaW1hZ2VzJTIwJTNEJTIwcGlwZWxpbmUoKipnZXRfaW5wdXRzKGJhdGNoX3NpemUlM0Q4KSkuaW1hZ2VzJTBBbWFrZV9pbWFnZV9ncmlkKGltYWdlcyUyQyUyMHJvd3MlM0QyJTJDJTIwY29scyUzRDQp",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoencoderKL | |
| vae = AutoencoderKL.from_pretrained(<span class="hljs-string">"stabilityai/sd-vae-ft-mse"</span>, torch_dtype=torch.float16).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.vae = vae | |
| images = pipeline(**get_inputs(batch_size=<span class="hljs-number">8</span>)).images | |
| make_image_grid(images, rows=<span class="hljs-number">2</span>, cols=<span class="hljs-number">4</span>)`,lang:"python",wrap:!1});var j=l(T,4);s(j,{title:"更好的提示词工程",local:"更好的提示词工程",headingTag:"h3"});var W=l(j,8);e(W,{code:"cHJvbXB0JTIwJTJCJTNEJTIwJTIyJTJDJTIwdHJpYmFsJTIwcGFudGhlciUyMG1ha2UlMjB1cCUyQyUyMGJsdWUlMjBvbiUyMHJlZCUyQyUyMHNpZGUlMjBwcm9maWxlJTJDJTIwbG9va2luZyUyMGF3YXklMkMlMjBzZXJpb3VzJTIwZXllcyUyMiUwQXByb21wdCUyMCUyQiUzRCUyMCUyMiUyMDUwbW0lMjBwb3J0cmFpdCUyMHBob3RvZ3JhcGh5JTJDJTIwaGFyZCUyMHJpbSUyMGxpZ2h0aW5nJTIwcGhvdG9ncmFwaHktLWJldGElMjAtLWFyJTIwMiUzQTMlMjAlMjAtLWJldGElMjAtLXVwYmV0YSUyMg==",highlighted:`prompt += <span class="hljs-string">", tribal panther make up, blue on red, side profile, looking away, serious eyes"</span> | |
| prompt += <span class="hljs-string">" 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta"</span>`,lang:"python",wrap:!1});var _=l(W,4);e(_,{code:"aW1hZ2VzJTIwJTNEJTIwcGlwZWxpbmUoKipnZXRfaW5wdXRzKGJhdGNoX3NpemUlM0Q4KSkuaW1hZ2VzJTBBbWFrZV9pbWFnZV9ncmlkKGltYWdlcyUyQyUyMHJvd3MlM0QyJTJDJTIwY29scyUzRDQp",highlighted:`images = pipeline(**get_inputs(batch_size=<span class="hljs-number">8</span>)).images | |
| make_image_grid(images, rows=<span class="hljs-number">2</span>, cols=<span class="hljs-number">4</span>)`,lang:"python",wrap:!1});var V=l(_,6);e(V,{code:"cHJvbXB0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMnBvcnRyYWl0JTIwcGhvdG8lMjBvZiUyMHRoZSUyMG9sZGVzdCUyMHdhcnJpb3IlMjBjaGllZiUyQyUyMHRyaWJhbCUyMHBhbnRoZXIlMjBtYWtlJTIwdXAlMkMlMjBibHVlJTIwb24lMjByZWQlMkMlMjBzaWRlJTIwcHJvZmlsZSUyQyUyMGxvb2tpbmclMjBhd2F5JTJDJTIwc2VyaW91cyUyMGV5ZXMlMjA1MG1tJTIwcG9ydHJhaXQlMjBwaG90b2dyYXBoeSUyQyUyMGhhcmQlMjByaW0lMjBsaWdodGluZyUyMHBob3RvZ3JhcGh5LS1iZXRhJTIwLS1hciUyMDIlM0EzJTIwJTIwLS1iZXRhJTIwLS11cGJldGElMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJwb3J0cmFpdCUyMHBob3RvJTIwb2YlMjBhJTIwb2xkJTIwd2FycmlvciUyMGNoaWVmJTJDJTIwdHJpYmFsJTIwcGFudGhlciUyMG1ha2UlMjB1cCUyQyUyMGJsdWUlMjBvbiUyMHJlZCUyQyUyMHNpZGUlMjBwcm9maWxlJTJDJTIwbG9va2luZyUyMGF3YXklMkMlMjBzZXJpb3VzJTIwZXllcyUyMDUwbW0lMjBwb3J0cmFpdCUyMHBob3RvZ3JhcGh5JTJDJTIwaGFyZCUyMHJpbSUyMGxpZ2h0aW5nJTIwcGhvdG9ncmFwaHktLWJldGElMjAtLWFyJTIwMiUzQTMlMjAlMjAtLWJldGElMjAtLXVwYmV0YSUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMnBvcnRyYWl0JTIwcGhvdG8lMjBvZiUyMGElMjB3YXJyaW9yJTIwY2hpZWYlMkMlMjB0cmliYWwlMjBwYW50aGVyJTIwbWFrZSUyMHVwJTJDJTIwYmx1ZSUyMG9uJTIwcmVkJTJDJTIwc2lkZSUyMHByb2ZpbGUlMkMlMjBsb29raW5nJTIwYXdheSUyQyUyMHNlcmlvdXMlMjBleWVzJTIwNTBtbSUyMHBvcnRyYWl0JTIwcGhvdG9ncmFwaHklMkMlMjBoYXJkJTIwcmltJTIwbGlnaHRpbmclMjBwaG90b2dyYXBoeS0tYmV0YSUyMC0tYXIlMjAyJTNBMyUyMCUyMC0tYmV0YSUyMC0tdXBiZXRhJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIycG9ydHJhaXQlMjBwaG90byUyMG9mJTIwYSUyMHlvdW5nJTIwd2FycmlvciUyMGNoaWVmJTJDJTIwdHJpYmFsJTIwcGFudGhlciUyMG1ha2UlMjB1cCUyQyUyMGJsdWUlMjBvbiUyMHJlZCUyQyUyMHNpZGUlMjBwcm9maWxlJTJDJTIwbG9va2luZyUyMGF3YXklMkMlMjBzZXJpb3VzJTIwZXllcyUyMDUwbW0lMjBwb3J0cmFpdCUyMHBob3RvZ3JhcGh5JTJDJTIwaGFyZCUyMHJpbSUyMGxpZ2h0aW5nJTIwcGhvdG9ncmFwaHktLWJldGElMjAtLWFyJTIwMiUzQTMlMjAlMjAtLWJldGElMjAtLXVwYmV0YSUyMiUyQyUwQSU1RCUwQSUwQWdlbmVyYXRvciUyMCUzRCUyMCU1QnRvcmNoLkdlbmVyYXRvciglMjJjdWRhJTIyKS5tYW51YWxfc2VlZCgxKSUyMGZvciUyMF8lMjBpbiUyMHJhbmdlKGxlbihwcm9tcHRzKSklNUQlMEFpbWFnZXMlMjAlM0QlMjBwaXBlbGluZShwcm9tcHQlM0Rwcm9tcHRzJTJDJTIwZ2VuZXJhdG9yJTNEZ2VuZXJhdG9yJTJDJTIwbnVtX2luZmVyZW5jZV9zdGVwcyUzRDI1KS5pbWFnZXMlMEFtYWtlX2ltYWdlX2dyaWQoaW1hZ2VzJTJDJTIwMiUyQyUyMDIp",highlighted:`prompts = [ | |
| <span class="hljs-string">"portrait photo of the oldest warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta"</span>, | |
| <span class="hljs-string">"portrait photo of a old warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta"</span>, | |
| <span class="hljs-string">"portrait photo of a warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta"</span>, | |
| <span class="hljs-string">"portrait photo of a young warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta"</span>, | |
| ] | |
| generator = [torch.Generator(<span class="hljs-string">"cuda"</span>).manual_seed(<span class="hljs-number">1</span>) <span class="hljs-keyword">for</span> _ <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(prompts))] | |
| images = pipeline(prompt=prompts, generator=generator, num_inference_steps=<span class="hljs-number">25</span>).images | |
| make_image_grid(images, <span class="hljs-number">2</span>, <span class="hljs-number">2</span>)`,lang:"python",wrap:!1});var I=l(V,4);s(I,{title:"最后",local:"最后",headingTag:"h2"});var N=l(I,6);H(N,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/stable_diffusion.md"}),L(2),v(X,a),E()}export{sl as component}; | |
Xet Storage Details
- Size:
- 26.1 kB
- Xet hash:
- fb94cafa5dc95fd48ea16fec51f29cd5e3d84364f9c0ab77dbb7d3eed8f80edd
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.