Buckets:
| import"../chunks/DsnmJJEf.js";import{i as Ul,h as jl,C as ml,H as a,a as T,b as s,E as bl,s as Zl}from"../chunks/Dv-EnAnp.js";import{p as gl,o as Il,s as l,f as i,a as p,b as Wl,d as fl,c as h,r as Gl,n as _l}from"../chunks/F-c_tsrl.js";import{H as c}from"../chunks/BYc-qY3j.js";const Rl='{"title":"LoRA","local":"lora","sections":[{"title":"torch.compile","local":"torchcompile","sections":[],"depth":2},{"title":"权重缩放","local":"权重缩放","sections":[{"title":"缩放调度","local":"缩放调度","sections":[],"depth":3}],"depth":2},{"title":"热切换","local":"热切换","sections":[{"title":"编译模型","local":"编译模型","sections":[],"depth":3}],"depth":2},{"title":"合并","local":"合并","sections":[{"title":"set_adapters","local":"setadapters","sections":[],"depth":3},{"title":"add_weighted_adapter","local":"addweightedadapter","sections":[],"depth":3},{"title":"fuse_lora","local":"fuselora","sections":[],"depth":3}],"depth":2},{"title":"管理","local":"管理","sections":[{"title":"set_adapters","local":"setadapters","sections":[],"depth":3},{"title":"save_lora_adapter","local":"saveloraadapter","sections":[],"depth":3},{"title":"unload_lora_weights","local":"unloadloraweights","sections":[],"depth":3},{"title":"disable_lora","local":"disablelora","sections":[],"depth":3},{"title":"get_active_adapters","local":"getactiveadapters","sections":[],"depth":3},{"title":"get_list_adapters","local":"getlistadapters","sections":[],"depth":3},{"title":"delete_adapters","local":"deleteadapters","sections":[],"depth":3}],"depth":2},{"title":"资源","local":"资源","sections":[],"depth":2}],"depth":1}';var Bl=h('<meta name="hf:doc:metadata"/>'),w=h("<!> <!>",1),Vl=h('<p>对于简单场景,可以直接把 <code>cross_attention_kwargs={"scale": 1.0}</code> 传给管道。</p> <!>',1),kl=h('<blockquote class="warning"><p><code>set_adapters()</code> 只会缩放 attention 权重。如果某个 LoRA 还包含 ResNet、downsampler 或 upsampler,这些组件的缩放值仍会保持为 <code>1.0</code>。</p></blockquote> <p>如果你想更细粒度地控制 UNet 或文本编码器中每个组件的缩放比例,可以改为传入一个字典。下面这个例子里,UNet 中 <code>"down"</code> block 的缩放值是 0.9,而 <code>"up"</code> block 里还进一步指定了 <code>"block_0"</code> 和 <code>"block_1"</code> 中 transformer 的缩放值。如果像 <code>"mid"</code> 这样的 block 没有显式指定,就会使用默认值 <code>1.0</code>。</p> <!>',1),El=h('<p></p> <!> <!> <p><a href="https://huggingface.co/papers/2106.09685" rel="nofollow">LoRA (Low-Rank Adaptation)</a> 是一种让模型快速适配新任务的方法。它会冻结原始模型权重,并额外添加一小部分<em>新的</em>可训练参数。这样一来,在现有模型上适配新任务的速度会更快、成本也更低,比如生成某种新的图像风格。</p> <p>LoRA的checkpoint通常只有几百 MB,因此非常轻量,也很容易存储。你可以使用 <code>load_lora_weights()</code> 将这组较小的权重加载到现有基础模型中,并通过 <code>weight_name</code> 指定文件名。</p> <!> <p><code>load_lora_weights()</code> 是把 LoRA 权重加载到 UNet 和 text encoder 中的首选方式,因为它能处理以下情况:</p> <ul><li>LoRA 权重没有分别标注 UNet 和text encoder标识符</li> <li>LoRA 权重分别带有 UNet 和text encoder标识符</li></ul> <p><code>load_lora_adapter()</code> 则用于在<em>模型级别</em>直接加载 LoRA adapter,只要该模型是 Diffusers 模型并且继承自 <code>PeftAdapterMixin</code> 即可。它会为 adapter 构建并准备所需的模型配置。这个方法同样会把 LoRA adapter 加载到 UNet 中。</p> <p>例如,如果你只想把 LoRA 加载到 UNet,<code>load_lora_adapter()</code> 会忽略文本编码器对应的 key。使用 <code>prefix</code> 参数筛选并加载合适的 state dict,这里传入 <code>"unet"</code> 即可。</p> <!> <!> <p><a href="../optimization/fp16#torchcompile">torch.compile</a> 会通过编译 PyTorch 模型来使用优化内核,从而加速推理。在编译之前,需要先把 LoRA 权重融合进基础模型,并卸载原始 LoRA 权重。</p> <!> <p>通常会编译 UNet,因为它是整个管道里计算最密集的部分。</p> <!> <p>如果你想在编译模型后配合多个 LoRA 一起使用,又不想每次都重新编译,可以查看下文的 <a href="#hotswapping">hotswapping</a> 部分。</p> <!> <p><code>scale</code> 参数用于控制 LoRA 的应用强度。值为 <code>0</code> 时等价于只使用基础模型权重;值为 <code>1</code> 时等价于完全使用 LoRA。</p> <!> <!> <p>在采样过程中动态调整 LoRA scale,通常可以让你更好地控制整体构图和布局,因为某些采样步骤可能更适合使用更高或更低的 scale。</p> <p>下面的例子使用了一个 <a href="https://huggingface.co/alvarobartt/ghibli-characters-flux-lora" rel="nofollow">character LoRA</a>。它在前 20 步使用较高的 scale,并逐步衰减,以便先把角色生成出来;在后续步骤中,只保留 0.2 的 scale,避免把 LoRA 学到的特征过多地施加到图像中其他并非训练目标的区域。</p> <!> <!> <p>LoRA 热切换(hotswapping)是一种高效的多 LoRA 工作方式。它可以避免多次调用 <code>load_lora_weights()</code> 带来的额外内存累积;在某些情况下,如果模型已经编译,还可以避免重新编译。这个工作流要求你先加载一个 LoRA,因为新的 LoRA 权重会原地替换当前已加载的 LoRA。</p> <!> <blockquote class="warning"><p>目标是文本编码器的 LoRA 目前不支持热切换。</p></blockquote> <p>在 <code>load_lora_weights()</code> 中设置 <code>hotswap=True</code>,即可替换第二个 LoRA。使用 <code>adapter_name</code> 参数指定要替换的是哪个 LoRA(默认名字是 <code>default_0</code>)。</p> <!> <!> <p>对于已经编译的模型,可以使用 <code>enable_lora_hotswap()</code> 来避免热切换时重新编译。这个方法应该在加载第一个 LoRA <em>之前</em>调用,而 <code>torch.compile</code> 则应该在加载第一个 LoRA <em>之后</em>调用。</p> <blockquote class="tip"><p>如果第二个 LoRA 与第一个 LoRA 的 rank 和 scale 完全一致,那么 <code>enable_lora_hotswap()</code> 不一定是必需的。</p></blockquote> <p>在 <code>enable_lora_hotswap()</code> 中,<code>target_rank</code> 参数很重要,它决定了所有 LoRA adapter 的 rank。设为 <code>max_rank</code> 时,会自动取最大的 rank;如果 LoRA 的 rank 不同,你也可以手动设为更高的值。默认 rank 是 128。</p> <!> <blockquote class="tip"><p>你可以把代码放进 <code>with torch._dynamo.config.patch(error_on_recompile=True)</code> 上下文中,用来检测模型是否发生了重新编译。如果你严格按照上面的步骤做了,模型依然重新编译,请带着可复现示例提交一个 <a href="https://github.com/huggingface/diffusers/issues" rel="nofollow">issue</a>。</p></blockquote> <p>如果你预计在推理时会使用不同分辨率,请在编译时设置 <code>dynamic=True</code>。更多细节可以参考<a href="../optimization/fp16#dynamic-shape-compilation">这篇文档</a>。</p> <p>有些情况下,重新编译依然无法避免,例如热切换进来的 LoRA 比初始 adapter 覆盖了更多层。这时,尽量<em>先</em>加载那个覆盖层数最多的 LoRA。关于这个限制的更多说明,可以参考 PEFT 的 <a href="https://huggingface.co/docs/peft/main/en/package_reference/hotswap#peft.utils.hotswap.hotswap_adapter" rel="nofollow">hotswapping</a> 文档。</p> <details><summary>热切换的技术细节</summary> <p><code>enable_lora_hotswap()</code> 会把 LoRA 的缩放因子从 float 转成 torch.tensor,并把权重形状补齐到所需的最大形状,这样在替换权重数据时,就不用重新分配整个属性。</p> <p>这也是为什么 <code>max_rank</code> 参数很重要。即使补出来的部分是零,也不会改变最终结果,只是补齐量越大,计算速度可能会更慢一些。</p> <p>由于不会新增新的 LoRA 属性,因此后续热切换进来的 LoRA 只能作用于与第一个 LoRA 相同的层,或者其子集。LoRA 的加载顺序因此会很关键。如果多个 LoRA 的目标层彼此不相交,你最终可能需要先构造一个覆盖所有目标层并集的 dummy LoRA。</p> <p>如果想了解更多实现细节,可以直接查看 <a href="https://github.com/huggingface/peft/blob/92d65cafa51c829484ad3d95cf71d09de57ff066/src/peft/utils/hotswap.py" rel="nofollow"><code>hotswap.py</code></a> 文件。</p></details> <!> <p>你可以把多个 LoRA 的权重合并在一起,得到多种现有风格的混合效果。LoRA 合并有多种方法,不同方法主要区别在于<em>如何</em>合并权重,这也可能影响生成质量。</p> <!> <p><code>set_adapters()</code> 会通过拼接多个 LoRA 的加权矩阵来完成合并。把 LoRA 名称传给 <code>set_adapters()</code>,再通过 <code>adapter_weights</code> 参数控制每个 LoRA 的缩放权重。例如,当 <code>adapter_weights=[0.5, 0.5]</code> 时,输出就是两个 LoRA 的平均效果。</p> <blockquote class="tip"><p><code>"scale"</code> 参数决定了应用合并后 LoRA 的强度。详情可参考前面的 <a href="#%E6%9D%83%E9%87%8D%E7%BC%A9%E6%94%BE">权重缩放</a> 部分。</p></blockquote> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/lora_merge_set_adapters.png"/></div> <!> <blockquote class="tip"><p>这是一个实验性方法。更多背景可以参考 PEFT 的 <a href="https://huggingface.co/docs/peft/developer_guides/model_merging" rel="nofollow">Model merging</a> 文档。如果你想了解这项集成背后的动机和设计,也可以看看这个 <a href="https://github.com/huggingface/diffusers/issues/6892" rel="nofollow">issue</a>。</p></blockquote> <p><code>add_weighted_adapter</code> 支持使用更高效的合并方法,比如 <a href="https://huggingface.co/papers/2306.01708" rel="nofollow">TIES</a> 或 <a href="https://huggingface.co/papers/2311.03099" rel="nofollow">DARE</a>。这些方法会从合并后的模型中移除冗余或可能互相干扰的参数。需要注意的是,要进行合并,各个 LoRA 的 rank 必须一致。</p> <p>请先确保安装的是最新版稳定版 Diffusers 和 PEFT。</p> <!> <p>先加载一个与 LoRA UNet 对应的 UNet。</p> <!> <p>加载一个管道,把这个 UNet 传进去,然后再加载 LoRA。</p> <!> <p>通过前面加载的第一个 UNet 和管道中的 LoRA UNet,创建一个来自该 LoRA 检查点的 <code>PeftModel</code>。</p> <!> <blockquote class="tip"><p>你也可以像下面这样把 <code>ikea_peft_model</code> 推送到 Hub,之后保存并复用。</p> <!></blockquote> <p>重复这一步,为第二个 LoRA 再创建一个 <code>PeftModel</code>。</p> <!> <p>加载一个基础 UNet,并加载 adapters。</p> <!> <p>使用 <code>add_weighted_adapter</code> 合并 LoRA,并通过 <code>combination_type</code> 指定合并方式。下面的例子使用 <code>"dare_linear"</code> 方法(想了解这些合并方法,可以参考<a href="https://huggingface.co/blog/peft_merging" rel="nofollow">这篇博客</a>),它会先随机裁剪一部分权重,再根据 <code>weights</code> 中给定的权重,对各个 LoRA 的张量做加权求和。</p> <p>再使用 <code>set_adapters()</code> 激活合并后的 LoRA。</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/ikea-feng-dare-linear.png"/></div> <!> <p><code>fuse_lora()</code> 会把 LoRA 权重直接融合到基础模型底层的 UNet 和文本编码器权重中。这样做可以减少每个 LoRA 都重新加载底层模型的开销,因为基础模型只需加载一次,从而降低内存占用并提升推理速度。</p> <!> <p>调用 <code>fuse_lora()</code> 进行融合。<code>lora_scale</code> 参数控制 LoRA 权重对输出的缩放强度。这里必须现在就设置好,因为在这个场景下,向 <code>cross_attention_kwargs</code> 传 <code>scale</code> 不会生效。</p> <!> <p>由于 LoRA 权重已经融合到底层模型中,可以把它们卸载掉。然后通过 <code>save_pretrained()</code> 保存到本地,或者通过 <code>~PushToHubMixin.push_to_hub</code> 保存到 Hub。</p> <!> <p>之后,你就可以快速加载这个融合后的管道进行推理,而不需要分别加载每个 LoRA。</p> <!> <p>如果你想恢复底层模型原始权重,例如想改用不同的 <code>lora_scale</code>,可以使用 <code>unfuse_lora()</code>。不过只有融合了单个 LoRA 时才能反融合。比如上面那个含多个融合 LoRA 的管道就无法这样做,这种情况下你需要重新加载整个模型。</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/fuse_lora.png"/></div> <!> <p>Diffusers 提供了多种方法来帮助你管理 LoRA,尤其是在同时使用多个 LoRA 时会很有帮助。</p> <!> <p><code>set_adapters()</code> 也会在多个活跃 LoRA 中激活当前要使用的那个 LoRA。你可以通过指定名字,在不同 LoRA 之间切换。</p> <!> <!> <p>使用 <code>save_lora_adapter()</code> 保存 adapter。</p> <!> <!> <p><code>unload_lora_weights()</code> 会卸载管道中的所有 LoRA 权重,并恢复到底层模型原始权重。</p> <!> <!> <p><code>disable_lora()</code> 会禁用所有 LoRA(但仍保留在管道中),并让管道恢复到底层模型权重。</p> <!> <!> <p><code>get_active_adapters()</code> 会返回挂载在管道上的活跃 LoRA 列表。</p> <!> <!> <p><code>get_list_adapters()</code> 会返回管道中每个组件当前有哪些活跃 LoRA。</p> <!> <!> <p><code>delete_adapters()</code> 会把某个 LoRA 及其对应层从模型中彻底移除。</p> <!> <!> <p>你可以在 <a href="https://lorastudio.co/models" rel="nofollow">LoRA Studio</a> 浏览可用的 LoRA,也可以使用下面这个 Civitai Space,把自己喜欢的 LoRA 上传到 Hub。</p> <iframe src="https://multimodalart-civitai-to-hf.hf.space" frameborder="0" width="850" height="450"></iframe> <p>你还可以在 <a href="https://huggingface.co/spaces/multimodalart/flux-lora-the-explorer" rel="nofollow">FLUX LoRA the Explorer</a> 和 <a href="https://huggingface.co/spaces/multimodalart/LoraTheExplorer" rel="nofollow">LoRA the Explorer</a> 这两个仓库中找到更多 LoRA。</p> <p>如果你想了解如何结合 FlashAttention-3 和 fp8 量化等方法优化 LoRA 推理,也可以看看这篇博客:<a href="https://huggingface.co/blog/lora-fast" rel="nofollow">Fast LoRA inference for Flux with Diffusers and PEFT</a>。</p> <!> <p></p>',1);function Ql(yl,ul){gl(ul,!1),Il(()=>{new URLSearchParams(window.location.search).get("fw")}),Ul();var U=El();jl("1e0v2s5",t=>{var M=Bl();Zl(M,"content",Rl),p(t,M)});var j=l(i(U),2);ml(j,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var m=l(j,2);a(m,{title:"LoRA",local:"lora",headingTag:"h1"});var b=l(m,6);T(b,{id:"usage",options:["text-to-image","text-to-video"],children:(t,M)=>{var n=w(),o=i(n);c(o,{id:"usage",option:"text-to-image",children:(e,r)=>{s(e,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZSUwQSUwQXBpcGVsaW5lJTIwJTNEJTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQXBpcGVsaW5lLmxvYWRfbG9yYV93ZWlnaHRzKCUwQSUyMCUyMCUyMCUyMCUyMm9zdHJpcyUyRnN1cGVyLWNlcmVhbC1zZHhsLWxvcmElMjIlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfbmFtZSUzRCUyMmNlcmVhbF9ib3hfc2R4bF92MS5zYWZldGVuc29ycyUyMiUyQyUwQSUyMCUyMCUyMCUyMGFkYXB0ZXJfbmFtZSUzRCUyMmNlcmVhbCUyMiUwQSklMEFwaXBlbGluZSglMjJiZWFycyUyQyUyMHBpenphJTIwYml0ZXMlMjIpLmltYWdlcyU1QjAlNUQ=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoPipelineForText2Image | |
| pipeline = AutoPipelineForText2Image.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/super-cereal-sdxl-lora"</span>, | |
| weight_name=<span class="hljs-string">"cereal_box_sdxl_v1.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"cereal"</span> | |
| ) | |
| pipeline(<span class="hljs-string">"bears, pizza bites"</span>).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1})},$$slots:{default:!0}});var J=l(o,2);c(J,{id:"usage",option:"text-to-video",children:(e,r)=>{s(e,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwTFRYQ29uZGl0aW9uUGlwZWxpbmUlMEFmcm9tJTIwZGlmZnVzZXJzLnV0aWxzJTIwaW1wb3J0JTIwZXhwb3J0X3RvX3ZpZGVvJTJDJTIwbG9hZF9pbWFnZSUwQSUwQXBpcGVsaW5lJTIwJTNEJTIwTFRYQ29uZGl0aW9uUGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMkxpZ2h0cmlja3MlMkZMVFgtVmlkZW8tMC45LjUlMjIlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmJmbG9hdDE2JTBBKSUwQSUwQXBpcGVsaW5lLmxvYWRfbG9yYV93ZWlnaHRzKCUwQSUyMCUyMCUyMCUyMCUyMkxpZ2h0cmlja3MlMkZMVFgtVmlkZW8tQ2FrZWlmeS1Mb1JBJTIyJTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X25hbWUlM0QlMjJsdHh2XzA5NV9jYWtlaWZ5X2xvcmEuc2FmZXRlbnNvcnMlMjIlMkMlMEElMjAlMjAlMjAlMjBhZGFwdGVyX25hbWUlM0QlMjJjYWtlaWZ5JTIyJTBBKSUwQXBpcGVsaW5lLnNldF9hZGFwdGVycyglMjJjYWtlaWZ5JTIyKSUwQSUwQSUyMyUyMCVFNCVCRCVCRiVFNyU5NCVBOCUyMCUyMkNBS0VJRlklMjIlMjAlRTglQTclQTYlRTUlOEYlOTElRTglQkYlOTklRTQlQjglQUElMjBMb1JBJTBBcHJvbXB0JTIwJTNEJTIwJTIyQ0FLRUlGWSUyMGElMjBwZXJzb24lMjB1c2luZyUyMGElMjBrbmlmZSUyMHRvJTIwY3V0JTIwYSUyMGNha2UlMjBzaGFwZWQlMjBsaWtlJTIwYSUyMFBpa2FjaHUlMjBwbHVzaGllJTIyJTBBaW1hZ2UlMjAlM0QlMjBsb2FkX2ltYWdlKCUyMmh0dHBzJTNBJTJGJTJGaHVnZ2luZ2ZhY2UuY28lMkZMaWdodHJpY2tzJTJGTFRYLVZpZGVvLUNha2VpZnktTG9SQSUyRnJlc29sdmUlMkZtYWluJTJGYXNzZXRzJTJGaW1hZ2VzJTJGcGlrYWNodS5wbmclMjIpJTBBJTBBdmlkZW8lMjAlM0QlMjBwaXBlbGluZSglMEElMjAlMjAlMjAlMjBwcm9tcHQlM0Rwcm9tcHQlMkMlMEElMjAlMjAlMjAlMjBpbWFnZSUzRGltYWdlJTJDJTBBJTIwJTIwJTIwJTIwd2lkdGglM0Q1NzYlMkMlMEElMjAlMjAlMjAlMjBoZWlnaHQlM0Q1NzYlMkMlMEElMjAlMjAlMjAlMjBudW1fZnJhbWVzJTNEMTYxJTJDJTBBJTIwJTIwJTIwJTIwZGVjb2RlX3RpbWVzdGVwJTNEMC4wMyUyQyUwQSUyMCUyMCUyMCUyMGRlY29kZV9ub2lzZV9zY2FsZSUzRDAuMDI1JTJDJTBBJTIwJTIwJTIwJTIwbnVtX2luZmVyZW5jZV9zdGVwcyUzRDUwJTJDJTBBKS5mcmFtZXMlNUIwJTVEJTBBZXhwb3J0X3RvX3ZpZGVvKHZpZGVvJTJDJTIwJTIyb3V0cHV0Lm1wNCUyMiUyQyUyMGZwcyUzRDI2KQ==",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> LTXConditionPipeline | |
| <span class="hljs-keyword">from</span> diffusers.utils <span class="hljs-keyword">import</span> export_to_video, load_image | |
| pipeline = LTXConditionPipeline.from_pretrained( | |
| <span class="hljs-string">"Lightricks/LTX-Video-0.9.5"</span>, torch_dtype=torch.bfloat16 | |
| ) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"Lightricks/LTX-Video-Cakeify-LoRA"</span>, | |
| weight_name=<span class="hljs-string">"ltxv_095_cakeify_lora.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"cakeify"</span> | |
| ) | |
| pipeline.set_adapters(<span class="hljs-string">"cakeify"</span>) | |
| <span class="hljs-comment"># 使用 "CAKEIFY" 触发这个 LoRA</span> | |
| prompt = <span class="hljs-string">"CAKEIFY a person using a knife to cut a cake shaped like a Pikachu plushie"</span> | |
| image = load_image(<span class="hljs-string">"https://huggingface.co/Lightricks/LTX-Video-Cakeify-LoRA/resolve/main/assets/images/pikachu.png"</span>) | |
| video = pipeline( | |
| prompt=prompt, | |
| image=image, | |
| width=<span class="hljs-number">576</span>, | |
| height=<span class="hljs-number">576</span>, | |
| num_frames=<span class="hljs-number">161</span>, | |
| decode_timestep=<span class="hljs-number">0.03</span>, | |
| decode_noise_scale=<span class="hljs-number">0.025</span>, | |
| num_inference_steps=<span class="hljs-number">50</span>, | |
| ).frames[<span class="hljs-number">0</span>] | |
| export_to_video(video, <span class="hljs-string">"output.mp4"</span>, fps=<span class="hljs-number">26</span>)`,lang:"py",wrap:!1})},$$slots:{default:!0}}),p(t,n)},$$slots:{default:!0}});var Z=l(b,10);s(Z,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZSUwQSUwQXBpcGVsaW5lJTIwJTNEJTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQXBpcGVsaW5lLnVuZXQubG9hZF9sb3JhX2FkYXB0ZXIoJTBBJTIwJTIwJTIwJTIwJTIyamJpbGNrZS1oZiUyRnNkeGwtY2luZW1hdGljLTElMjIlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfbmFtZSUzRCUyMnB5dG9yY2hfbG9yYV93ZWlnaHRzLnNhZmV0ZW5zb3JzJTIyJTJDJTBBJTIwJTIwJTIwJTIwYWRhcHRlcl9uYW1lJTNEJTIyY2luZW1hdGljJTIyJTJDJTBBJTIwJTIwJTIwJTIwcHJlZml4JTNEJTIydW5ldCUyMiUwQSklMEElMjMlMjAlRTUlOUMlQTglRTYlOEYlOTAlRTclQTQlQkElRTglQUYlOEQlRTQlQjglQUQlRTQlQkQlQkYlRTclOTQlQTglMjBjbm10JTIwJUU2JTlEJUE1JUU4JUE3JUE2JUU1JThGJTkxJUU4JUJGJTk5JUU0JUI4JUFBJTIwTG9SQSUwQXBpcGVsaW5lKCUyMkElMjBjdXRlJTIwY25tdCUyMGVhdGluZyUyMGElMjBzbGljZSUyMG9mJTIwcGl6emElMkMlMjBzdHVubmluZyUyMGNvbG9yJTIwc2NoZW1lJTJDJTIwbWFzdGVycGllY2UlMkMlMjBpbGx1c3RyYXRpb24lMjIpLmltYWdlcyU1QjAlNUQ=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoPipelineForText2Image | |
| pipeline = AutoPipelineForText2Image.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.unet.load_lora_adapter( | |
| <span class="hljs-string">"jbilcke-hf/sdxl-cinematic-1"</span>, | |
| weight_name=<span class="hljs-string">"pytorch_lora_weights.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"cinematic"</span>, | |
| prefix=<span class="hljs-string">"unet"</span> | |
| ) | |
| <span class="hljs-comment"># 在提示词中使用 cnmt 来触发这个 LoRA</span> | |
| pipeline(<span class="hljs-string">"A cute cnmt eating a slice of pizza, stunning color scheme, masterpiece, illustration"</span>).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1});var g=l(Z,2);a(g,{title:"torch.compile",local:"torchcompile",headingTag:"h2"});var I=l(g,4);s(I,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEElMjMlMjAlRTUlOEElQTAlRTglQkQlQkQlRTUlOUYlQkElRTclQTElODAlRTYlQTglQTElRTUlOUUlOEIlRTUlOTIlOEMlMjBMb1JBJTBBcGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQXBpcGVsaW5lLmxvYWRfbG9yYV93ZWlnaHRzKCUwQSUyMCUyMCUyMCUyMCUyMm9zdHJpcyUyRmlrZWEtaW5zdHJ1Y3Rpb25zLWxvcmEtc2R4bCUyMiUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9uYW1lJTNEJTIyaWtlYV9pbnN0cnVjdGlvbnNfeGxfdjFfNS5zYWZldGVuc29ycyUyMiUyQyUwQSUyMCUyMCUyMCUyMGFkYXB0ZXJfbmFtZSUzRCUyMmlrZWElMjIlMEEpJTBBJTBBJTIzJTIwJUU2JUJGJTgwJUU2JUI0JUJCJTIwTG9SQSUyMCVFNSVCOSVCNiVFOCVBRSVCRSVFNyVCRCVBRSUyMGFkYXB0ZXIlMjAlRTYlOUQlODMlRTklODclOEQlMEFwaXBlbGluZS5zZXRfYWRhcHRlcnMoJTIyaWtlYSUyMiUyQyUyMGFkYXB0ZXJfd2VpZ2h0cyUzRDAuNyklMEElMEElMjMlMjAlRTglOUUlOEQlRTUlOTAlODglMjBMb1JBJTIwJUU1JUI5JUI2JUU1JThEJUI4JUU4JUJEJUJEJUU2JTlEJTgzJUU5JTg3JThEJTBBcGlwZWxpbmUuZnVzZV9sb3JhKGFkYXB0ZXJfbmFtZXMlM0QlNUIlMjJpa2VhJTIyJTVEJTJDJTIwbG9yYV9zY2FsZSUzRDEuMCklMEFwaXBlbGluZS51bmxvYWRfbG9yYV93ZWlnaHRzKCk=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline | |
| <span class="hljs-comment"># 加载基础模型和 LoRA</span> | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/ikea-instructions-lora-sdxl"</span>, | |
| weight_name=<span class="hljs-string">"ikea_instructions_xl_v1_5.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| ) | |
| <span class="hljs-comment"># 激活 LoRA 并设置 adapter 权重</span> | |
| pipeline.set_adapters(<span class="hljs-string">"ikea"</span>, adapter_weights=<span class="hljs-number">0.7</span>) | |
| <span class="hljs-comment"># 融合 LoRA 并卸载权重</span> | |
| pipeline.fuse_lora(adapter_names=[<span class="hljs-string">"ikea"</span>], lora_scale=<span class="hljs-number">1.0</span>) | |
| pipeline.unload_lora_weights()`,lang:"py",wrap:!1});var W=l(I,4);s(W,{code:"cGlwZWxpbmUudW5ldC50byhtZW1vcnlfZm9ybWF0JTNEdG9yY2guY2hhbm5lbHNfbGFzdCklMEFwaXBlbGluZS51bmV0JTIwJTNEJTIwdG9yY2guY29tcGlsZShwaXBlbGluZS51bmV0JTJDJTIwbW9kZSUzRCUyMnJlZHVjZS1vdmVyaGVhZCUyMiUyQyUyMGZ1bGxncmFwaCUzRFRydWUpJTBBJTBBcGlwZWxpbmUoJTIyQSUyMGJvd2wlMjBvZiUyMHJhbWVuJTIwc2hhcGVkJTIwbGlrZSUyMGElMjBjdXRlJTIwa2F3YWlpJTIwYmVhciUyMikuaW1hZ2VzJTVCMCU1RA==",highlighted:`pipeline.unet.to(memory_format=torch.channels_last) | |
| pipeline.unet = torch.<span class="hljs-built_in">compile</span>(pipeline.unet, mode=<span class="hljs-string">"reduce-overhead"</span>, fullgraph=<span class="hljs-literal">True</span>) | |
| pipeline(<span class="hljs-string">"A bowl of ramen shaped like a cute kawaii bear"</span>).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1});var f=l(W,4);a(f,{title:"权重缩放",local:"权重缩放",headingTag:"h2"});var G=l(f,4);T(G,{id:"weight-scale",options:["simple use case","finer control"],children:(t,M)=>{var n=w(),o=i(n);c(o,{id:"weight-scale",option:"simple use case",children:(e,r)=>{var d=Vl(),u=l(i(d),2);s(u,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZSUwQSUwQXBpcGVsaW5lJTIwJTNEJTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQXBpcGVsaW5lLmxvYWRfbG9yYV93ZWlnaHRzKCUwQSUyMCUyMCUyMCUyMCUyMm9zdHJpcyUyRnN1cGVyLWNlcmVhbC1zZHhsLWxvcmElMjIlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfbmFtZSUzRCUyMmNlcmVhbF9ib3hfc2R4bF92MS5zYWZldGVuc29ycyUyMiUyQyUwQSUyMCUyMCUyMCUyMGFkYXB0ZXJfbmFtZSUzRCUyMmNlcmVhbCUyMiUwQSklMEFwaXBlbGluZSglMjJiZWFycyUyQyUyMHBpenphJTIwYml0ZXMlMjIlMkMlMjBjcm9zc19hdHRlbnRpb25fa3dhcmdzJTNEJTdCJTIyc2NhbGUlMjIlM0ElMjAxLjAlN0QpLmltYWdlcyU1QjAlNUQ=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoPipelineForText2Image | |
| pipeline = AutoPipelineForText2Image.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/super-cereal-sdxl-lora"</span>, | |
| weight_name=<span class="hljs-string">"cereal_box_sdxl_v1.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"cereal"</span> | |
| ) | |
| pipeline(<span class="hljs-string">"bears, pizza bites"</span>, cross_attention_kwargs={<span class="hljs-string">"scale"</span>: <span class="hljs-number">1.0</span>}).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1}),p(e,d)},$$slots:{default:!0}});var J=l(o,2);c(J,{id:"weight-scale",option:"finer control",children:(e,r)=>{var d=kl(),u=l(i(d),4);s(u,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZSUwQSUwQXBpcGVsaW5lJTIwJTNEJTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQXBpcGVsaW5lLmxvYWRfbG9yYV93ZWlnaHRzKCUwQSUyMCUyMCUyMCUyMCUyMm9zdHJpcyUyRnN1cGVyLWNlcmVhbC1zZHhsLWxvcmElMjIlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfbmFtZSUzRCUyMmNlcmVhbF9ib3hfc2R4bF92MS5zYWZldGVuc29ycyUyMiUyQyUwQSUyMCUyMCUyMCUyMGFkYXB0ZXJfbmFtZSUzRCUyMmNlcmVhbCUyMiUwQSklMEFzY2FsZXMlMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJ0ZXh0X2VuY29kZXIlMjIlM0ElMjAwLjUlMkMlMEElMjAlMjAlMjAlMjAlMjJ0ZXh0X2VuY29kZXJfMiUyMiUzQSUyMDAuNSUyQyUwQSUyMCUyMCUyMCUyMCUyMnVuZXQlMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJkb3duJTIyJTNBJTIwMC45JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIydXAlMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJibG9ja18wJTIyJTNBJTIwMC42JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyYmxvY2tfMSUyMiUzQSUyMCU1QjAuNCUyQyUyMDAuOCUyQyUyMDEuMCU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCU3RCUwQSU3RCUwQXBpcGVsaW5lLnNldF9hZGFwdGVycyglMjJjZXJlYWwlMjIlMkMlMjBzY2FsZXMpJTBBcGlwZWxpbmUoJTIyYmVhcnMlMkMlMjBwaXp6YSUyMGJpdGVzJTIyKS5pbWFnZXMlNUIwJTVE",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoPipelineForText2Image | |
| pipeline = AutoPipelineForText2Image.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/super-cereal-sdxl-lora"</span>, | |
| weight_name=<span class="hljs-string">"cereal_box_sdxl_v1.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"cereal"</span> | |
| ) | |
| scales = { | |
| <span class="hljs-string">"text_encoder"</span>: <span class="hljs-number">0.5</span>, | |
| <span class="hljs-string">"text_encoder_2"</span>: <span class="hljs-number">0.5</span>, | |
| <span class="hljs-string">"unet"</span>: { | |
| <span class="hljs-string">"down"</span>: <span class="hljs-number">0.9</span>, | |
| <span class="hljs-string">"up"</span>: { | |
| <span class="hljs-string">"block_0"</span>: <span class="hljs-number">0.6</span>, | |
| <span class="hljs-string">"block_1"</span>: [<span class="hljs-number">0.4</span>, <span class="hljs-number">0.8</span>, <span class="hljs-number">1.0</span>], | |
| } | |
| } | |
| } | |
| pipeline.set_adapters(<span class="hljs-string">"cereal"</span>, scales) | |
| pipeline(<span class="hljs-string">"bears, pizza bites"</span>).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1}),p(e,d)},$$slots:{default:!0}}),p(t,n)},$$slots:{default:!0}});var _=l(G,2);a(_,{title:"缩放调度",local:"缩放调度",headingTag:"h3"});var R=l(_,6);s(R,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRmx1eFBpcGVsaW5lJTBBJTBBcGlwZWxpbmUlMjAlM0QlMjBGbHV4UGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMmJsYWNrLWZvcmVzdC1sYWJzJTJGRkxVWC4xLWRldiUyMiUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMEEpLnRvKCUyMmN1ZGElMjIpJTBBJTBBcGlwZWxuZS5sb2FkX2xvcmFfd2VpZ2h0cyglMjJhbHZhcm9iYXJ0dCUyRmdoaWJsaS1jaGFyYWN0ZXJzLWZsdXgtbG9yYSUyMiUyQyUyMCUyMmxvcmElMjIpJTBBJTBBbnVtX2luZmVyZW5jZV9zdGVwcyUyMCUzRCUyMDMwJTBBbG9yYV9zdGVwcyUyMCUzRCUyMDIwJTBBbG9yYV9zY2FsZXMlMjAlM0QlMjB0b3JjaC5saW5zcGFjZSgxLjUlMkMlMjAwLjclMkMlMjBsb3JhX3N0ZXBzKS50b2xpc3QoKSUwQWxvcmFfc2NhbGVzJTIwJTJCJTNEJTIwJTVCMC4yJTVEJTIwKiUyMChudW1faW5mZXJlbmNlX3N0ZXBzJTIwLSUyMGxvcmFfc3RlcHMlMjAlMkIlMjAxKSUwQSUwQXBpcGVsaW5lLnNldF9hZGFwdGVycyglMjJsb3JhJTIyJTJDJTIwbG9yYV9zY2FsZXMlNUIwJTVEKSUwQSUwQWRlZiUyMGNhbGxiYWNrKHBpcGVsaW5lJTNBJTIwRmx1eFBpcGVsaW5lJTJDJTIwc3RlcCUzQSUyMGludCUyQyUyMHRpbWVzdGVwJTNBJTIwdG9yY2guTG9uZ1RlbnNvciUyQyUyMGNhbGxiYWNrX2t3YXJncyUzQSUyMGRpY3QpJTNBJTBBJTIwJTIwJTIwJTIwcGlwZWxpbmUuc2V0X2FkYXB0ZXJzKCUyMmxvcmElMjIlMkMlMjBsb3JhX3NjYWxlcyU1QnN0ZXAlMjAlMkIlMjAxJTVEKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGNhbGxiYWNrX2t3YXJncyUwQSUwQXByb21wdCUyMCUzRCUyMCUyMiUyMiUyMiUwQUdoaWJsaSUyMHN0eWxlJTIwVGhlJTIwR3JpbmNoJTJDJTIwYSUyMG1pc2NoaWV2b3VzJTIwZ3JlZW4lMjBjcmVhdHVyZSUyMHdpdGglMjBhJTIwc2x5JTIwZ3JpbiUyQyUyMHBlZWtpbmclMjBvdXQlMjBmcm9tJTIwYmVoaW5kJTIwYSUyMHNub3ctY292ZXJlZCUyMHRyZWUlMjB3aGlsZSUyMHBsb3R0aW5nJTIwaGlzJTIwYW50aWNzJTJDJTIwJTBBaW4lMjBhJTIwcXVhaW50JTIwc25vd3klMjB2aWxsYWdlJTIwZGVjb3JhdGVkJTIwZm9yJTIwdGhlJTIwaG9saWRheXMlMkMlMjB3YXJtJTIwbGlnaHQlMjBnbG93aW5nJTIwZnJvbSUyMGNvenklMjBob21lcyUyQyUyMHdpdGglMjBwbGF5ZnVsJTIwc25vd2ZsYWtlcyUyMGRhbmNpbmclMjBpbiUyMHRoZSUyMGFpciUwQSUyMiUyMiUyMiUwQXBpcGVsaW5lKCUwQSUyMCUyMCUyMCUyMHByb21wdCUzRHByb21wdCUyQyUwQSUyMCUyMCUyMCUyMGd1aWRhbmNlX3NjYWxlJTNEMy4wJTJDJTBBJTIwJTIwJTIwJTIwbnVtX2luZmVyZW5jZV9zdGVwcyUzRG51bV9pbmZlcmVuY2Vfc3RlcHMlMkMlMEElMjAlMjAlMjAlMjBnZW5lcmF0b3IlM0R0b3JjaC5HZW5lcmF0b3IoKS5tYW51YWxfc2VlZCg0MiklMkMlMEElMjAlMjAlMjAlMjBjYWxsYmFja19vbl9zdGVwX2VuZCUzRGNhbGxiYWNrJTJDJTBBKS5pbWFnZXMlNUIwJTVE",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> FluxPipeline | |
| pipeline = 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>) | |
| pipelne.load_lora_weights(<span class="hljs-string">"alvarobartt/ghibli-characters-flux-lora"</span>, <span class="hljs-string">"lora"</span>) | |
| num_inference_steps = <span class="hljs-number">30</span> | |
| lora_steps = <span class="hljs-number">20</span> | |
| lora_scales = torch.linspace(<span class="hljs-number">1.5</span>, <span class="hljs-number">0.7</span>, lora_steps).tolist() | |
| lora_scales += [<span class="hljs-number">0.2</span>] * (num_inference_steps - lora_steps + <span class="hljs-number">1</span>) | |
| pipeline.set_adapters(<span class="hljs-string">"lora"</span>, lora_scales[<span class="hljs-number">0</span>]) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">callback</span>(<span class="hljs-params">pipeline: FluxPipeline, step: <span class="hljs-built_in">int</span>, timestep: torch.LongTensor, callback_kwargs: <span class="hljs-built_in">dict</span></span>): | |
| pipeline.set_adapters(<span class="hljs-string">"lora"</span>, lora_scales[step + <span class="hljs-number">1</span>]) | |
| <span class="hljs-keyword">return</span> callback_kwargs | |
| prompt = <span class="hljs-string">""" | |
| Ghibli style The Grinch, a mischievous green creature with a sly grin, peeking out from behind a snow-covered tree while plotting his antics, | |
| in a quaint snowy village decorated for the holidays, warm light glowing from cozy homes, with playful snowflakes dancing in the air | |
| """</span> | |
| pipeline( | |
| prompt=prompt, | |
| guidance_scale=<span class="hljs-number">3.0</span>, | |
| num_inference_steps=num_inference_steps, | |
| generator=torch.Generator().manual_seed(<span class="hljs-number">42</span>), | |
| callback_on_step_end=callback, | |
| ).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1});var B=l(R,2);a(B,{title:"热切换",local:"热切换",headingTag:"h2"});var V=l(B,4);s(V,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEElMjMlMjAlRTUlOEElQTAlRTglQkQlQkQlRTUlOUYlQkElRTclQTElODAlRTYlQTglQTElRTUlOUUlOEIlRTUlOTIlOEMlMjBMb1JBJTBBcGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQXBpcGVsaW5lLmxvYWRfbG9yYV93ZWlnaHRzKCUwQSUyMCUyMCUyMCUyMCUyMm9zdHJpcyUyRmlrZWEtaW5zdHJ1Y3Rpb25zLWxvcmEtc2R4bCUyMiUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9uYW1lJTNEJTIyaWtlYV9pbnN0cnVjdGlvbnNfeGxfdjFfNS5zYWZldGVuc29ycyUyMiUyQyUwQSUyMCUyMCUyMCUyMGFkYXB0ZXJfbmFtZSUzRCUyMmlrZWElMjIlMEEp",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline | |
| <span class="hljs-comment"># 加载基础模型和 LoRA</span> | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/ikea-instructions-lora-sdxl"</span>, | |
| weight_name=<span class="hljs-string">"ikea_instructions_xl_v1_5.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| )`,lang:"py",wrap:!1});var k=l(V,6);s(k,{code:"cGlwZWxpbmUubG9hZF9sb3JhX3dlaWdodHMoJTBBJTIwJTIwJTIwJTIwJTIybG9yZGppYSUyRmJ5LWZlbmctemlrYWklMjIlMkMlMEElMjAlMjAlMjAlMjBob3Rzd2FwJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGFkYXB0ZXJfbmFtZSUzRCUyMmlrZWElMjIlMEEp",highlighted:`pipeline.load_lora_weights( | |
| <span class="hljs-string">"lordjia/by-feng-zikai"</span>, | |
| hotswap=<span class="hljs-literal">True</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| )`,lang:"py",wrap:!1});var E=l(k,2);a(E,{title:"编译模型",local:"编译模型",headingTag:"h3"});var A=l(E,8);s(A,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEElMjMlMjAlRTUlOEElQTAlRTglQkQlQkQlRTUlOUYlQkElRTclQTElODAlRTYlQTglQTElRTUlOUUlOEIlRTUlOTIlOEMlMjBMb1JBJTBBcGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQSUyMyUyMDEuJTIwJUU1JTkwJUFGJUU3JTk0JUE4JTIwZW5hYmxlX2xvcmFfaG90c3dhcCUwQXBpcGVsaW5lLmVuYWJsZV9sb3JhX2hvdHN3YXAodGFyZ2V0X3JhbmslM0RtYXhfcmFuayklMEFwaXBlbGluZS5sb2FkX2xvcmFfd2VpZ2h0cyglMEElMjAlMjAlMjAlMjAlMjJvc3RyaXMlMkZpa2VhLWluc3RydWN0aW9ucy1sb3JhLXNkeGwlMjIlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfbmFtZSUzRCUyMmlrZWFfaW5zdHJ1Y3Rpb25zX3hsX3YxXzUuc2FmZXRlbnNvcnMlMjIlMkMlMEElMjAlMjAlMjAlMjBhZGFwdGVyX25hbWUlM0QlMjJpa2VhJTIyJTBBKSUwQSUyMyUyMDIuJTIwdG9yY2guY29tcGlsZSUwQXBpcGVsaW5lLnVuZXQlMjAlM0QlMjB0b3JjaC5jb21waWxlKHBpcGVsaW5lLnVuZXQlMkMlMjBtb2RlJTNEJTIycmVkdWNlLW92ZXJoZWFkJTIyJTJDJTIwZnVsbGdyYXBoJTNEVHJ1ZSklMEElMEElMjMlMjAzLiUyMCVFNyU4MyVBRCVFNSU4OCU4NyVFNiU4RCVBMiUwQXBpcGVsaW5lLmxvYWRfbG9yYV93ZWlnaHRzKCUwQSUyMCUyMCUyMCUyMCUyMmxvcmRqaWElMkZieS1mZW5nLXppa2FpJTIyJTJDJTBBJTIwJTIwJTIwJTIwaG90c3dhcCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBhZGFwdGVyX25hbWUlM0QlMjJpa2VhJTIyJTBBKQ==",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline | |
| <span class="hljs-comment"># 加载基础模型和 LoRA</span> | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| <span class="hljs-comment"># 1. 启用 enable_lora_hotswap</span> | |
| pipeline.enable_lora_hotswap(target_rank=max_rank) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/ikea-instructions-lora-sdxl"</span>, | |
| weight_name=<span class="hljs-string">"ikea_instructions_xl_v1_5.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| ) | |
| <span class="hljs-comment"># 2. torch.compile</span> | |
| pipeline.unet = torch.<span class="hljs-built_in">compile</span>(pipeline.unet, mode=<span class="hljs-string">"reduce-overhead"</span>, fullgraph=<span class="hljs-literal">True</span>) | |
| <span class="hljs-comment"># 3. 热切换</span> | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"lordjia/by-feng-zikai"</span>, | |
| hotswap=<span class="hljs-literal">True</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| )`,lang:"py",wrap:!1});var X=l(A,10);a(X,{title:"合并",local:"合并",headingTag:"h2"});var q=l(X,4);a(q,{title:"set_adapters",local:"setadapters",headingTag:"h3"});var C=l(q,6);s(C,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEFwaXBlbGluZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMEElMjAlMjAlMjAlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMEEpLnRvKCUyMmN1ZGElMjIpJTBBcGlwZWxpbmUubG9hZF9sb3JhX3dlaWdodHMoJTBBJTIwJTIwJTIwJTIwJTIyb3N0cmlzJTJGaWtlYS1pbnN0cnVjdGlvbnMtbG9yYS1zZHhsJTIyJTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X25hbWUlM0QlMjJpa2VhX2luc3RydWN0aW9uc194bF92MV81LnNhZmV0ZW5zb3JzJTIyJTJDJTBBJTIwJTIwJTIwJTIwYWRhcHRlcl9uYW1lJTNEJTIyaWtlYSUyMiUwQSklMEFwaXBlbGluZS5sb2FkX2xvcmFfd2VpZ2h0cyglMEElMjAlMjAlMjAlMjAlMjJsb3JkamlhJTJGYnktZmVuZy16aWthaSUyMiUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9uYW1lJTNEJTIyZmVuZ3ppa2FpX3YxLjBfWEwuc2FmZXRlbnNvcnMlMjIlMkMlMEElMjAlMjAlMjAlMjBhZGFwdGVyX25hbWUlM0QlMjJmZW5nJTIyJTBBKSUwQXBpcGVsaW5lLnNldF9hZGFwdGVycyglNUIlMjJpa2VhJTIyJTJDJTIwJTIyZmVuZyUyMiU1RCUyQyUyMGFkYXB0ZXJfd2VpZ2h0cyUzRCU1QjAuNyUyQyUyMDAuOCU1RCklMEElMjMlMjAlRTUlOUMlQTglRTYlOEYlOTAlRTclQTQlQkElRTglQUYlOEQlRTQlQjglQUQlRTQlQkQlQkYlRTclOTQlQTglMjBieSUyMEZlbmclMjBaaWthaSUyMCVFNiU5RCVBNSVFNiVCRiU4MCVFNiVCNCVCQiUyMGxvcmRqaWElMkZieS1mZW5nLXppa2FpJTIwJUU4JUJGJTk5JUU0JUI4JUFBJTIwTG9SQSUwQXBpcGVsaW5lKCUyMkElMjBib3dsJTIwb2YlMjByYW1lbiUyMHNoYXBlZCUyMGxpa2UlMjBhJTIwY3V0ZSUyMGthd2FpaSUyMGJlYXIlMkMlMjBieSUyMEZlbmclMjBaaWthaSUyMiUyQyUyMGNyb3NzX2F0dGVudGlvbl9rd2FyZ3MlM0QlN0IlMjJzY2FsZSUyMiUzQSUyMDEuMCU3RCkuaW1hZ2VzJTVCMCU1RA==",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/ikea-instructions-lora-sdxl"</span>, | |
| weight_name=<span class="hljs-string">"ikea_instructions_xl_v1_5.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| ) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"lordjia/by-feng-zikai"</span>, | |
| weight_name=<span class="hljs-string">"fengzikai_v1.0_XL.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"feng"</span> | |
| ) | |
| pipeline.set_adapters([<span class="hljs-string">"ikea"</span>, <span class="hljs-string">"feng"</span>], adapter_weights=[<span class="hljs-number">0.7</span>, <span class="hljs-number">0.8</span>]) | |
| <span class="hljs-comment"># 在提示词中使用 by Feng Zikai 来激活 lordjia/by-feng-zikai 这个 LoRA</span> | |
| pipeline(<span class="hljs-string">"A bowl of ramen shaped like a cute kawaii bear, by Feng Zikai"</span>, cross_attention_kwargs={<span class="hljs-string">"scale"</span>: <span class="hljs-number">1.0</span>}).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1});var Q=l(C,4);a(Q,{title:"add_weighted_adapter",local:"addweightedadapter",headingTag:"h3"});var F=l(Q,8);s(F,{code:"cGlwJTIwaW5zdGFsbCUyMC1VJTIwLXElMjBkaWZmdXNlcnMlMjBwZWZ0",highlighted:"pip install -U -q diffusers peft",lang:"bash",wrap:!1});var Y=l(F,4);s(Y,{code:"aW1wb3J0JTIwY29weSUwQWltcG9ydCUyMHRvcmNoJTBBZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMEF1dG9Nb2RlbCUyQyUyMERpZmZ1c2lvblBpcGVsaW5lJTBBZnJvbSUyMHBlZnQlMjBpbXBvcnQlMjBnZXRfcGVmdF9tb2RlbCUyQyUyMExvcmFDb25maWclMkMlMjBQZWZ0TW9kZWwlMEElMEF1bmV0JTIwJTNEJTIwQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMEElMjAlMjAlMjAlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMkMlMEElMjAlMjAlMjAlMjB1c2Vfc2FmZXRlbnNvcnMlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwdmFyaWFudCUzRCUyMmZwMTYlMjIlMkMlMEElMjAlMjAlMjAlMjBzdWJmb2xkZXIlM0QlMjJ1bmV0JTIyJTJDJTBBKS50byglMjJjdWRhJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> copy | |
| <span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoModel, DiffusionPipeline | |
| <span class="hljs-keyword">from</span> peft <span class="hljs-keyword">import</span> get_peft_model, LoraConfig, PeftModel | |
| unet = AutoModel.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16, | |
| use_safetensors=<span class="hljs-literal">True</span>, | |
| variant=<span class="hljs-string">"fp16"</span>, | |
| subfolder=<span class="hljs-string">"unet"</span>, | |
| ).to(<span class="hljs-string">"cuda"</span>)`,lang:"py",wrap:!1});var S=l(Y,4);s(S,{code:"cGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdmFyaWFudCUzRCUyMmZwMTYlMjIlMkMlMEElMjAlMjAlMjAlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMkMlMEElMjAlMjAlMjAlMjB1bmV0JTNEdW5ldCUwQSkudG8oJTIyY3VkYSUyMiklMEFwaXBlbGluZS5sb2FkX2xvcmFfd2VpZ2h0cyglMEElMjAlMjAlMjAlMjAlMjJvc3RyaXMlMkZpa2VhLWluc3RydWN0aW9ucy1sb3JhLXNkeGwlMjIlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfbmFtZSUzRCUyMmlrZWFfaW5zdHJ1Y3Rpb25zX3hsX3YxXzUuc2FmZXRlbnNvcnMlMjIlMkMlMEElMjAlMjAlMjAlMjBhZGFwdGVyX25hbWUlM0QlMjJpa2VhJTIyJTBBKQ==",highlighted:`pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| variant=<span class="hljs-string">"fp16"</span>, | |
| torch_dtype=torch.float16, | |
| unet=unet | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/ikea-instructions-lora-sdxl"</span>, | |
| weight_name=<span class="hljs-string">"ikea_instructions_xl_v1_5.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| )`,lang:"py",wrap:!1});var z=l(S,4);s(z,{code:"c2R4bF91bmV0JTIwJTNEJTIwY29weS5kZWVwY29weSh1bmV0KSUwQWlrZWFfcGVmdF9tb2RlbCUyMCUzRCUyMGdldF9wZWZ0X21vZGVsKCUwQSUyMCUyMCUyMCUyMHNkeGxfdW5ldCUyQyUwQSUyMCUyMCUyMCUyMHBpcGVsaW5lLnVuZXQucGVmdF9jb25maWclNUIlMjJpa2VhJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwYWRhcHRlcl9uYW1lJTNEJTIyaWtlYSUyMiUwQSklMEElMEFvcmlnaW5hbF9zdGF0ZV9kaWN0JTIwJTNEJTIwJTdCZiUyMmJhc2VfbW9kZWwubW9kZWwuJTdCayU3RCUyMiUzQSUyMHYlMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwcGlwZWxpbmUudW5ldC5zdGF0ZV9kaWN0KCkuaXRlbXMoKSU3RCUwQWlrZWFfcGVmdF9tb2RlbC5sb2FkX3N0YXRlX2RpY3Qob3JpZ2luYWxfc3RhdGVfZGljdCUyQyUyMHN0cmljdCUzRFRydWUp",highlighted:`sdxl_unet = copy.deepcopy(unet) | |
| ikea_peft_model = get_peft_model( | |
| sdxl_unet, | |
| pipeline.unet.peft_config[<span class="hljs-string">"ikea"</span>], | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| ) | |
| original_state_dict = {<span class="hljs-string">f"base_model.model.<span class="hljs-subst">{k}</span>"</span>: v <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> pipeline.unet.state_dict().items()} | |
| ikea_peft_model.load_state_dict(original_state_dict, strict=<span class="hljs-literal">True</span>)`,lang:"py",wrap:!1});var y=l(z,2),Tl=l(fl(y),2);s(Tl,{code:"aWtlYV9wZWZ0X21vZGVsLnB1c2hfdG9faHViKCUyMmlrZWFfcGVmdF9tb2RlbCUyMiUyQyUyMHRva2VuJTNEVE9LRU4p",highlighted:'ikea_peft_model.push_to_hub(<span class="hljs-string">"ikea_peft_model"</span>, token=TOKEN)',lang:"py",wrap:!1}),Gl(y);var N=l(y,4);s(N,{code:"cGlwZWxpbmUuZGVsZXRlX2FkYXB0ZXJzKCUyMmlrZWElMjIpJTBBc2R4bF91bmV0LmRlbGV0ZV9hZGFwdGVycyglMjJpa2VhJTIyKSUwQSUwQXBpcGVsaW5lLmxvYWRfbG9yYV93ZWlnaHRzKCUwQSUyMCUyMCUyMCUyMCUyMmxvcmRqaWElMkZieS1mZW5nLXppa2FpJTIyJTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X25hbWUlM0QlMjJmZW5nemlrYWlfdjEuMF9YTC5zYWZldGVuc29ycyUyMiUyQyUwQSUyMCUyMCUyMCUyMGFkYXB0ZXJfbmFtZSUzRCUyMmZlbmclMjIlMEEpJTBBcGlwZWxpbmUuc2V0X2FkYXB0ZXJzKGFkYXB0ZXJfbmFtZXMlM0QlMjJmZW5nJTIyKSUwQSUwQWZlbmdfcGVmdF9tb2RlbCUyMCUzRCUyMGdldF9wZWZ0X21vZGVsKCUwQSUyMCUyMCUyMCUyMHNkeGxfdW5ldCUyQyUwQSUyMCUyMCUyMCUyMHBpcGVsaW5lLnVuZXQucGVmdF9jb25maWclNUIlMjJmZW5nJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwYWRhcHRlcl9uYW1lJTNEJTIyZmVuZyUyMiUwQSklMEElMEFvcmlnaW5hbF9zdGF0ZV9kaWN0JTIwJTNEJTIwJTdCZiUyMmJhc2VfbW9kZWwubW9kZWwuJTdCayU3RCUyMiUzQSUyMHYlMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwcGlwZS51bmV0LnN0YXRlX2RpY3QoKS5pdGVtcygpJTdEJTBBZmVuZ19wZWZ0X21vZGVsLmxvYWRfc3RhdGVfZGljdChvcmlnaW5hbF9zdGF0ZV9kaWN0JTJDJTIwc3RyaWN0JTNEVHJ1ZSk=",highlighted:`pipeline.delete_adapters(<span class="hljs-string">"ikea"</span>) | |
| sdxl_unet.delete_adapters(<span class="hljs-string">"ikea"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"lordjia/by-feng-zikai"</span>, | |
| weight_name=<span class="hljs-string">"fengzikai_v1.0_XL.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"feng"</span> | |
| ) | |
| pipeline.set_adapters(adapter_names=<span class="hljs-string">"feng"</span>) | |
| feng_peft_model = get_peft_model( | |
| sdxl_unet, | |
| pipeline.unet.peft_config[<span class="hljs-string">"feng"</span>], | |
| adapter_name=<span class="hljs-string">"feng"</span> | |
| ) | |
| original_state_dict = {<span class="hljs-string">f"base_model.model.<span class="hljs-subst">{k}</span>"</span>: v <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> pipe.unet.state_dict().items()} | |
| feng_peft_model.load_state_dict(original_state_dict, strict=<span class="hljs-literal">True</span>)`,lang:"py",wrap:!1});var v=l(N,4);s(v,{code:"YmFzZV91bmV0JTIwJTNEJTIwQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMEElMjAlMjAlMjAlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMkMlMEElMjAlMjAlMjAlMjB1c2Vfc2FmZXRlbnNvcnMlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwdmFyaWFudCUzRCUyMmZwMTYlMjIlMkMlMEElMjAlMjAlMjAlMjBzdWJmb2xkZXIlM0QlMjJ1bmV0JTIyJTJDJTBBKS50byglMjJjdWRhJTIyKSUwQSUwQW1vZGVsJTIwJTNEJTIwUGVmdE1vZGVsLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjBiYXNlX3VuZXQlMkMlMEElMjAlMjAlMjAlMjAlMjJzdGV2aGxpdSUyRmlrZWFfcGVmdF9tb2RlbCUyMiUyQyUwQSUyMCUyMCUyMCUyMHVzZV9zYWZldGVuc29ycyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBzdWJmb2xkZXIlM0QlMjJpa2VhJTIyJTJDJTBBJTIwJTIwJTIwJTIwYWRhcHRlcl9uYW1lJTNEJTIyaWtlYSUyMiUwQSklMEFtb2RlbC5sb2FkX2FkYXB0ZXIoJTBBJTIwJTIwJTIwJTIwJTIyc3RldmhsaXUlMkZmZW5nX3BlZnRfbW9kZWwlMjIlMkMlMEElMjAlMjAlMjAlMjB1c2Vfc2FmZXRlbnNvcnMlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwc3ViZm9sZGVyJTNEJTIyZmVuZyUyMiUyQyUwQSUyMCUyMCUyMCUyMGFkYXB0ZXJfbmFtZSUzRCUyMmZlbmclMjIlMEEp",highlighted:`base_unet = AutoModel.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16, | |
| use_safetensors=<span class="hljs-literal">True</span>, | |
| variant=<span class="hljs-string">"fp16"</span>, | |
| subfolder=<span class="hljs-string">"unet"</span>, | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| model = PeftModel.from_pretrained( | |
| base_unet, | |
| <span class="hljs-string">"stevhliu/ikea_peft_model"</span>, | |
| use_safetensors=<span class="hljs-literal">True</span>, | |
| subfolder=<span class="hljs-string">"ikea"</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| ) | |
| model.load_adapter( | |
| <span class="hljs-string">"stevhliu/feng_peft_model"</span>, | |
| use_safetensors=<span class="hljs-literal">True</span>, | |
| subfolder=<span class="hljs-string">"feng"</span>, | |
| adapter_name=<span class="hljs-string">"feng"</span> | |
| )`,lang:"py",wrap:!1});var x=l(v,6);s(x,{code:"bW9kZWwuYWRkX3dlaWdodGVkX2FkYXB0ZXIoJTBBJTIwJTIwJTIwJTIwYWRhcHRlcnMlM0QlNUIlMjJpa2VhJTIyJTJDJTIwJTIyZmVuZyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbWJpbmF0aW9uX3R5cGUlM0QlMjJkYXJlX2xpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodHMlM0QlNUIxLjAlMkMlMjAxLjAlNUQlMkMlMEElMjAlMjAlMjAlMjBhZGFwdGVyX25hbWUlM0QlMjJpa2VhLWZlbmclMjIlMEEpJTBBbW9kZWwuc2V0X2FkYXB0ZXJzKCUyMmlrZWEtZmVuZyUyMiklMEElMEFwaXBlbGluZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMEElMjAlMjAlMjAlMjB1bmV0JTNEbW9kZWwlMkMlMEElMjAlMjAlMjAlMjB2YXJpYW50JTNEJTIyZnAxNiUyMiUyQyUwQSUyMCUyMCUyMCUyMHRvcmNoX2R0eXBlJTNEdG9yY2guZmxvYXQxNiUyQyUwQSkudG8oJTIyY3VkYSUyMiklMEFwaXBlbGluZSglMjJBJTIwYm93bCUyMG9mJTIwcmFtZW4lMjBzaGFwZWQlMjBsaWtlJTIwYSUyMGN1dGUlMjBrYXdhaWklMjBiZWFyJTJDJTIwYnklMjBGZW5nJTIwWmlrYWklMjIpLmltYWdlcyU1QjAlNUQ=",highlighted:`model.add_weighted_adapter( | |
| adapters=[<span class="hljs-string">"ikea"</span>, <span class="hljs-string">"feng"</span>], | |
| combination_type=<span class="hljs-string">"dare_linear"</span>, | |
| weights=[<span class="hljs-number">1.0</span>, <span class="hljs-number">1.0</span>], | |
| adapter_name=<span class="hljs-string">"ikea-feng"</span> | |
| ) | |
| model.set_adapters(<span class="hljs-string">"ikea-feng"</span>) | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| unet=model, | |
| variant=<span class="hljs-string">"fp16"</span>, | |
| torch_dtype=torch.float16, | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline(<span class="hljs-string">"A bowl of ramen shaped like a cute kawaii bear, by Feng Zikai"</span>).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1});var L=l(x,4);a(L,{title:"fuse_lora",local:"fuselora",headingTag:"h3"});var H=l(L,4);s(H,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEFwaXBlbGluZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMEElMjAlMjAlMjAlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMEEpLnRvKCUyMmN1ZGElMjIpJTBBcGlwZWxpbmUubG9hZF9sb3JhX3dlaWdodHMoJTBBJTIwJTIwJTIwJTIwJTIyb3N0cmlzJTJGaWtlYS1pbnN0cnVjdGlvbnMtbG9yYS1zZHhsJTIyJTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X25hbWUlM0QlMjJpa2VhX2luc3RydWN0aW9uc194bF92MV81LnNhZmV0ZW5zb3JzJTIyJTJDJTBBJTIwJTIwJTIwJTIwYWRhcHRlcl9uYW1lJTNEJTIyaWtlYSUyMiUwQSklMEFwaXBlbGluZS5sb2FkX2xvcmFfd2VpZ2h0cyglMEElMjAlMjAlMjAlMjAlMjJsb3JkamlhJTJGYnktZmVuZy16aWthaSUyMiUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9uYW1lJTNEJTIyZmVuZ3ppa2FpX3YxLjBfWEwuc2FmZXRlbnNvcnMlMjIlMkMlMEElMjAlMjAlMjAlMjBhZGFwdGVyX25hbWUlM0QlMjJmZW5nJTIyJTBBKSUwQXBpcGVsaW5lLnNldF9hZGFwdGVycyglNUIlMjJpa2VhJTIyJTJDJTIwJTIyZmVuZyUyMiU1RCUyQyUyMGFkYXB0ZXJfd2VpZ2h0cyUzRCU1QjAuNyUyQyUyMDAuOCU1RCk=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/ikea-instructions-lora-sdxl"</span>, | |
| weight_name=<span class="hljs-string">"ikea_instructions_xl_v1_5.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| ) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"lordjia/by-feng-zikai"</span>, | |
| weight_name=<span class="hljs-string">"fengzikai_v1.0_XL.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"feng"</span> | |
| ) | |
| pipeline.set_adapters([<span class="hljs-string">"ikea"</span>, <span class="hljs-string">"feng"</span>], adapter_weights=[<span class="hljs-number">0.7</span>, <span class="hljs-number">0.8</span>])`,lang:"py",wrap:!1});var D=l(H,4);s(D,{code:"cGlwZWxpbmUuZnVzZV9sb3JhKGFkYXB0ZXJfbmFtZXMlM0QlNUIlMjJpa2VhJTIyJTJDJTIwJTIyZmVuZyUyMiU1RCUyQyUyMGxvcmFfc2NhbGUlM0QxLjAp",highlighted:'pipeline.fuse_lora(adapter_names=[<span class="hljs-string">"ikea"</span>, <span class="hljs-string">"feng"</span>], lora_scale=<span class="hljs-number">1.0</span>)',lang:"py",wrap:!1});var K=l(D,4);T(K,{id:"save",options:["save locally","save to Hub"],children:(t,M)=>{var n=w(),o=i(n);c(o,{id:"save",option:"save locally",children:(e,r)=>{s(e,{code:"cGlwZWxpbmUudW5sb2FkX2xvcmFfd2VpZ2h0cygpJTBBcGlwZWxpbmUuc2F2ZV9wcmV0cmFpbmVkKCUyMnBhdGglMkZ0byUyRmZ1c2VkLXBpcGVsaW5lJTIyKQ==",highlighted:`pipeline.unload_lora_weights() | |
| pipeline.save_pretrained(<span class="hljs-string">"path/to/fused-pipeline"</span>)`,lang:"py",wrap:!1})},$$slots:{default:!0}});var J=l(o,2);c(J,{id:"save",option:"save to Hub",children:(e,r)=>{s(e,{code:"cGlwZWxpbmUudW5sb2FkX2xvcmFfd2VpZ2h0cygpJTBBcGlwZWxpbmUucHVzaF90b19odWIoJTIyZnVzZWQtaWtlYS1mZW5nJTIyKQ==",highlighted:`pipeline.unload_lora_weights() | |
| pipeline.push_to_hub(<span class="hljs-string">"fused-ikea-feng"</span>)`,lang:"py",wrap:!1})},$$slots:{default:!0}}),p(t,n)},$$slots:{default:!0}});var P=l(K,4);s(P,{code:"cGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIydXNlcm5hbWUlMkZmdXNlZC1pa2VhLWZlbmclMjIlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMkMlMEEpLnRvKCUyMmN1ZGElMjIpJTBBcGlwZWxpbmUoJTIyQSUyMGJvd2wlMjBvZiUyMHJhbWVuJTIwc2hhcGVkJTIwbGlrZSUyMGElMjBjdXRlJTIwa2F3YWlpJTIwYmVhciUyQyUyMGJ5JTIwRmVuZyUyMFppa2FpJTIyKS5pbWFnZXMlNUIwJTVE",highlighted:`pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"username/fused-ikea-feng"</span>, torch_dtype=torch.float16, | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline(<span class="hljs-string">"A bowl of ramen shaped like a cute kawaii bear, by Feng Zikai"</span>).images[<span class="hljs-number">0</span>]`,lang:"py",wrap:!1});var O=l(P,4);s(O,{code:"cGlwZWxpbmUudW5mdXNlX2xvcmEoKQ==",highlighted:"pipeline.unfuse_lora()",lang:"py",wrap:!1});var $=l(O,4);a($,{title:"管理",local:"管理",headingTag:"h2"});var ll=l($,4);a(ll,{title:"set_adapters",local:"setadapters",headingTag:"h3"});var sl=l(ll,4);s(sl,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEFwaXBlbGluZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMEElMjAlMjAlMjAlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMEEpLnRvKCUyMmN1ZGElMjIpJTBBcGlwZWxpbmUubG9hZF9sb3JhX3dlaWdodHMoJTBBJTIwJTIwJTIwJTIwJTIyb3N0cmlzJTJGaWtlYS1pbnN0cnVjdGlvbnMtbG9yYS1zZHhsJTIyJTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X25hbWUlM0QlMjJpa2VhX2luc3RydWN0aW9uc194bF92MV81LnNhZmV0ZW5zb3JzJTIyJTJDJTBBJTIwJTIwJTIwJTIwYWRhcHRlcl9uYW1lJTNEJTIyaWtlYSUyMiUwQSklMEFwaXBlbGluZS5sb2FkX2xvcmFfd2VpZ2h0cyglMEElMjAlMjAlMjAlMjAlMjJsb3JkamlhJTJGYnktZmVuZy16aWthaSUyMiUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9uYW1lJTNEJTIyZmVuZ3ppa2FpX3YxLjBfWEwuc2FmZXRlbnNvcnMlMjIlMkMlMEElMjAlMjAlMjAlMjBhZGFwdGVyX25hbWUlM0QlMjJmZW5nJTIyJTBBKSUwQSUyMyUyMCVFNiVCRiU4MCVFNiVCNCVCQiUyMGZlbmclMjBMb1JBJUVGJUJDJThDJUU4JTgwJThDJUU0JUI4JThEJUU2JTk4JUFGJTIwaWtlYSUyMExvUkElMEFwaXBlbGluZS5zZXRfYWRhcHRlcnMoJTIyZmVuZyUyMik=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"ostris/ikea-instructions-lora-sdxl"</span>, | |
| weight_name=<span class="hljs-string">"ikea_instructions_xl_v1_5.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"ikea"</span> | |
| ) | |
| pipeline.load_lora_weights( | |
| <span class="hljs-string">"lordjia/by-feng-zikai"</span>, | |
| weight_name=<span class="hljs-string">"fengzikai_v1.0_XL.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"feng"</span> | |
| ) | |
| <span class="hljs-comment"># 激活 feng LoRA,而不是 ikea LoRA</span> | |
| pipeline.set_adapters(<span class="hljs-string">"feng"</span>)`,lang:"py",wrap:!1});var al=l(sl,2);a(al,{title:"save_lora_adapter",local:"saveloraadapter",headingTag:"h3"});var el=l(al,4);s(el,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZSUwQSUwQXBpcGVsaW5lJTIwJTNEJTIwQXV0b1BpcGVsaW5lRm9yVGV4dDJJbWFnZS5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKSUwQXBpcGVsaW5lLnVuZXQubG9hZF9sb3JhX2FkYXB0ZXIoJTBBJTIwJTIwJTIwJTIwJTIyamJpbGNrZS1oZiUyRnNkeGwtY2luZW1hdGljLTElMjIlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfbmFtZSUzRCUyMnB5dG9yY2hfbG9yYV93ZWlnaHRzLnNhZmV0ZW5zb3JzJTIyJTJDJTBBJTIwJTIwJTIwJTIwYWRhcHRlcl9uYW1lJTNEJTIyY2luZW1hdGljJTIyJTBBJTIwJTIwJTIwJTIwcHJlZml4JTNEJTIydW5ldCUyMiUwQSklMEFwaXBlbGluZS5zYXZlX2xvcmFfYWRhcHRlciglMjJwYXRoJTJGdG8lMkZzYXZlJTIyJTJDJTIwYWRhcHRlcl9uYW1lJTNEJTIyY2luZW1hdGljJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoPipelineForText2Image | |
| pipeline = AutoPipelineForText2Image.from_pretrained( | |
| <span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, | |
| torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>) | |
| pipeline.unet.load_lora_adapter( | |
| <span class="hljs-string">"jbilcke-hf/sdxl-cinematic-1"</span>, | |
| weight_name=<span class="hljs-string">"pytorch_lora_weights.safetensors"</span>, | |
| adapter_name=<span class="hljs-string">"cinematic"</span> | |
| prefix=<span class="hljs-string">"unet"</span> | |
| ) | |
| pipeline.save_lora_adapter(<span class="hljs-string">"path/to/save"</span>, adapter_name=<span class="hljs-string">"cinematic"</span>)`,lang:"py",wrap:!1});var tl=l(el,2);a(tl,{title:"unload_lora_weights",local:"unloadloraweights",headingTag:"h3"});var nl=l(tl,4);s(nl,{code:"cGlwZWxpbmUudW5sb2FkX2xvcmFfd2VpZ2h0cygp",highlighted:"pipeline.unload_lora_weights()",lang:"py",wrap:!1});var ol=l(nl,2);a(ol,{title:"disable_lora",local:"disablelora",headingTag:"h3"});var pl=l(ol,4);s(pl,{code:"cGlwZWxpbmUuZGlzYWJsZV9sb3JhKCk=",highlighted:"pipeline.disable_lora()",lang:"py",wrap:!1});var il=l(pl,2);a(il,{title:"get_active_adapters",local:"getactiveadapters",headingTag:"h3"});var cl=l(il,4);s(cl,{code:"cGlwZWxpbmUuZ2V0X2FjdGl2ZV9hZGFwdGVycygpJTBBJTVCJTIyY2VyZWFsJTIyJTJDJTIwJTIyaWtlYSUyMiU1RA==",highlighted:`pipeline.get_active_adapters() | |
| [<span class="hljs-string">"cereal"</span>, <span class="hljs-string">"ikea"</span>]`,lang:"py",wrap:!1});var Ml=l(cl,2);a(Ml,{title:"get_list_adapters",local:"getlistadapters",headingTag:"h3"});var Jl=l(Ml,4);s(Jl,{code:"cGlwZWxpbmUuZ2V0X2xpc3RfYWRhcHRlcnMoKSUwQSU3QiUyMnVuZXQlMjIlM0ElMjAlNUIlMjJjZXJlYWwlMjIlMkMlMjAlMjJpa2VhJTIyJTVEJTJDJTIwJTIydGV4dF9lbmNvZGVyXzIlMjIlM0ElMjAlNUIlMjJjZXJlYWwlMjIlNUQlN0Q=",highlighted:`pipeline.get_list_adapters() | |
| {<span class="hljs-string">"unet"</span>: [<span class="hljs-string">"cereal"</span>, <span class="hljs-string">"ikea"</span>], <span class="hljs-string">"text_encoder_2"</span>: [<span class="hljs-string">"cereal"</span>]}`,lang:"py",wrap:!1});var rl=l(Jl,2);a(rl,{title:"delete_adapters",local:"deleteadapters",headingTag:"h3"});var dl=l(rl,4);s(dl,{code:"cGlwZWxpbmUuZGVsZXRlX2FkYXB0ZXJzKCUyMmlrZWElMjIp",highlighted:'pipeline.delete_adapters(<span class="hljs-string">"ikea"</span>)',lang:"py",wrap:!1});var hl=l(dl,2);a(hl,{title:"资源",local:"资源",headingTag:"h2"});var wl=l(hl,10);bl(wl,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/tutorials/using_peft_for_inference.md"}),_l(2),p(yl,U),Wl()}export{Ql as component}; | |
Xet Storage Details
- Size:
- 64.6 kB
- Xet hash:
- 42506e0cfd98a07a874f66174c4604f22a56c94f905ff8a9370c1ae208b4b286
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.