Buckets:

download
raw
35.4 kB
import"../chunks/DsnmJJEf.js";import{i as L,h as P,C as K,H as c,a as y,b as s,E as $,s as ll}from"../chunks/Dv-EnAnp.js";import{p as sl,o as al,s as l,f as d,a as i,b as nl,c as U,n as pl}from"../chunks/F-c_tsrl.js";import{H as J}from"../chunks/BYc-qY3j.js";const el='{"title":"模块化管道","local":"模块化管道","sections":[{"title":"添加块","local":"添加块","sections":[],"depth":2},{"title":"创建管道","local":"创建管道","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":[],"depth":2}],"depth":1}';var ol=U('<meta name="hf:doc:metadata"/>'),tl=U("<!> <!> <!>",1),cl=U("<p>使用<code>init_pipeline()</code>方法从组件和配置规范创建一个<code>ModularPipeline</code>。此方法从<code>modular_model_index.json</code>文件加载<em>规范</em>,但尚未加载<em>模型</em>。</p> <!>",1),il=U("<p><code>from_pretrained()</code>方法创建一个<code>ModularPipeline</code>从Hub上的模块化仓库加载。</p> <!> <p>添加<code>trust_remote_code</code>参数以加载自定义的<code>ModularPipeline</code>。</p> <!>",1),q=U("<!> <!>",1),dl=U("<p>下面的例子仅加载UNet和VAE。</p> <!>",1),Jl=U(`<p></p> <!> <!> <p><code>ModularPipeline</code> 将 <code>ModularPipelineBlocks</code> 转换为可执行的管道,加载模型并执行块中定义的计算步骤。它是运行管道的主要接口,与 <code>DiffusionPipeline</code> API 非常相似。</p> <p>主要区别在于在管道中包含了一个预期的 <code>output</code> 参数。</p> <!> <p>本指南将向您展示如何创建一个<code>ModularPipeline</code>并管理其中的组件。</p> <!> <p>块是<code>InsertableDict</code>对象,可以在特定位置插入,提供了一种灵活的方式来混合和匹配块。</p> <p>使用<code>insert()</code>在块类或<code>sub_blocks</code>属性上添加一个块。</p> <!> <p>使用<code>pop()</code>在块类或<code>sub_blocks</code>属性上移除一个块。</p> <!> <p>通过将现有块设置为新块来交换块。</p> <!> <!> <p>有两种方法可以创建一个<code>ModularPipeline</code>。从<code>ModularPipelineBlocks</code>组装并创建管道,或使用<code>from_pretrained()</code>加载现有管道。</p> <p>您还应该初始化一个<code>ComponentsManager</code>来处理设备放置和内存以及组件管理。</p> <blockquote class="tip"><p>有关它如何帮助管理不同工作流中的组件的更多详细信息,请参阅<a href="./components_manager">ComponentsManager</a>文档。</p></blockquote> <!> <!> <p>一个<code>ModularPipeline</code>不会自动实例化组件。它只加载配置和组件规范。您可以使用<code>load_components()</code>加载所有组件,或仅使用<code>load_components()</code>加载特定组件。</p> <!> <p>打印管道以检查加载的预训练组件。</p> <!> <p>这应该与管道初始化自的模块化仓库中的<code>modular_model_index.json</code>文件匹配。如果管道不需要某个组件,即使它在模块化仓库中存在,也不会被包含。</p> <p>要修改组件加载的来源,编辑仓库中的<code>modular_model_index.json</code>文件,并将其更改为您希望的加载路径。下面的例子从不同的仓库加载UNet。</p> <!> <!> <p>下面的管道属性提供了关于哪些组件被加载的更多信息。</p> <p>使用<code>component_names</code>返回所有预期的组件。</p> <!> <p>使用<code>null_component_names</code>返回尚未加载的组件。使用<code>from_pretrained()</code>加载这些组件。</p> <!> <p>使用<code>pretrained_component_names</code>返回将从预训练模型加载的组件。</p> <!> <p>使用 <code>config_component_names</code> 返回那些使用默认配置创建的组件(不是从模块化仓库加载的)。来自配置的组件不包括在内,因为它们已经在管道创建期间初始化。这就是为什么它们没有列在 <code>null_component_names</code> 中。</p> <!> <!> <p>根据组件是<em>预训练组件</em>还是<em>配置组件</em>,组件可能会被更新。</p> <blockquote class="warning"><p>在更新组件时,组件可能会从预训练变为配置。组件类型最初是在块的 <code>expected_components</code> 字段中定义的。</p></blockquote> <p>预训练组件通过 <code>ComponentSpec</code> 更新,而配置组件则通过直接传递对象或使用 <code>ComponentSpec</code> 更新。</p> <p><code>ComponentSpec</code> 对于预训练组件显示 <code>default_creation_method="from_pretrained"</code>,对于配置组件显示 <code>default_creation_method="from_config</code>。</p> <p>要更新预训练组件,创建一个 <code>ComponentSpec</code>,指定组件的名称和从哪里加载它。使用 <code>load()</code> 方法来加载组件。</p> <!> <p><code>update_components()</code> 方法用一个新的组件替换原来的组件。</p> <!> <p>当组件被更新时,加载规范也会在管道配置中更新。</p> <!> <p>当你使用 <code>load()</code> 时,新组件保持其加载规范。这使得提取规范并重新创建组件成为可能。</p> <!> <p><code>get_component_spec()</code> 方法获取当前组件规范的副本以进行修改或更新。</p> <!> <!> <p>一个仓库
如果管道块使用<em>预训练组件</em>,则需要y。该存储库提供了加载规范和元数据。</p> <p><code>ModularPipeline</code>特别需要<em>模块化存储库</em>(参见<a href="https://huggingface.co/YiYiXu/modular-diffdiff" rel="nofollow">示例存储库</a>),这比典型的存储库更灵活。它包含一个<code>modular_model_index.json</code>文件,包含以下3个元素。</p> <ul><li><code>library</code>和<code>class</code>显示组件是从哪个库加载的及其类。如果是<code>null</code>,则表示组件尚未加载。</li> <li><code>loading_specs_dict</code>包含加载组件所需的信息,例如从中加载的存储库和子文件夹。</li></ul> <p>与标准存储库不同,模块化存储库可以根据<code>loading_specs_dict</code>从不同的存储库获取组件。组件不需要存在于同一个存储库中。</p> <p>模块化存储库可能包含用于加载<code>ModularPipeline</code>的自定义代码。这允许您使用不是Diffusers原生的专用块。</p> <!> <p><a href="https://huggingface.co/YiYiXu/modular-diffdiff-0704/blob/main/config.json" rel="nofollow">config.json</a>文件包含一个<code>auto_map</code>键,指向<code>block.py</code>中定义自定义块的位置。</p> <!> <!> <p></p>`,1);function yl(A,O){sl(O,!1),al(()=>{new URLSearchParams(window.location.search).get("fw")}),L();var m=Jl();P("10zod39",e=>{var M=ol();ll(M,"content",el),i(e,M)});var T=l(d(m),2);K(T,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var h=l(T,2);c(h,{title:"模块化管道",local:"模块化管道",headingTag:"h1"});var b=l(h,6);y(b,{id:"example",options:["text-to-image","image-to-image","inpainting"],children:(e,M)=>{var o=tl(),t=d(o);J(t,{id:"example",option:"text-to-image",children:(p,a)=>{s(p,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzLm1vZHVsYXJfcGlwZWxpbmVzJTIwaW1wb3J0JTIwU2VxdWVudGlhbFBpcGVsaW5lQmxvY2tzJTBBZnJvbSUyMGRpZmZ1c2Vycy5tb2R1bGFyX3BpcGVsaW5lcy5zdGFibGVfZGlmZnVzaW9uX3hsJTIwaW1wb3J0JTIwVEVYVDJJTUFHRV9CTE9DS1MlMEElMEFibG9ja3MlMjAlM0QlMjBTZXF1ZW50aWFsUGlwZWxpbmVCbG9ja3MuZnJvbV9ibG9ja3NfZGljdChURVhUMklNQUdFX0JMT0NLUyklMEElMEFtb2R1bGFyX3JlcG9faWQlMjAlM0QlMjAlMjJZaVlpWHUlMkZtb2R1bGFyLWxvYWRlci10MmktMDcwNCUyMiUwQXBpcGVsaW5lJTIwJTNEJTIwYmxvY2tzLmluaXRfcGlwZWxpbmUobW9kdWxhcl9yZXBvX2lkKSUwQSUwQXBpcGVsaW5lLmxvYWRfY29tcG9uZW50cyhkdHlwZSUzRHRvcmNoLmZsb2F0MTYpJTBBcGlwZWxpbmUudG8oJTIyY3VkYSUyMiklMEElMEFpbWFnZSUyMCUzRCUyMHBpcGVsaW5lKHByb21wdCUzRCUyMkFzdHJvbmF1dCUyMGluJTIwYSUyMGp1bmdsZSUyQyUyMGNvbGQlMjBjb2xvciUyMHBhbGV0dGUlMkMlMjBtdXRlZCUyMGNvbG9ycyUyQyUyMGRldGFpbGVkJTJDJTIwOGslMjIlMkMlMjBvdXRwdXQlM0QlMjJpbWFnZXMlMjIpJTVCMCU1RCUwQWltYWdlLnNhdmUoJTIybW9kdWxhcl90Mmlfb3V0LnBuZyUyMik=",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> SequentialPipelineBlocks
<span class="hljs-keyword">from</span> diffusers.modular_pipelines.stable_diffusion_xl <span class="hljs-keyword">import</span> TEXT2IMAGE_BLOCKS
blocks = SequentialPipelineBlocks.from_blocks_dict(TEXT2IMAGE_BLOCKS)
modular_repo_id = <span class="hljs-string">&quot;YiYiXu/modular-loader-t2i-0704&quot;</span>
pipeline = blocks.init_pipeline(modular_repo_id)
pipeline.load_components(dtype=torch.float16)
pipeline.to(<span class="hljs-string">&quot;cuda&quot;</span>)
image = pipeline(prompt=<span class="hljs-string">&quot;Astronaut in a jungle, cold color palette, muted colors, detailed, 8k&quot;</span>, output=<span class="hljs-string">&quot;images&quot;</span>)[<span class="hljs-number">0</span>]
image.save(<span class="hljs-string">&quot;modular_t2i_out.png&quot;</span>)`,lang:"py",wrap:!1})},$$slots:{default:!0}});var r=l(t,2);J(r,{id:"example",option:"image-to-image",children:(p,a)=>{s(p,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzLm1vZHVsYXJfcGlwZWxpbmVzJTIwaW1wb3J0JTIwU2VxdWVudGlhbFBpcGVsaW5lQmxvY2tzJTBBZnJvbSUyMGRpZmZ1c2Vycy5tb2R1bGFyX3BpcGVsaW5lcy5zdGFibGVfZGlmZnVzaW9uX3hsJTIwaW1wb3J0JTIwSU1BR0UySU1BR0VfQkxPQ0tTJTBBJTBBYmxvY2tzJTIwJTNEJTIwU2VxdWVudGlhbFBpcGVsaW5lQmxvY2tzLmZyb21fYmxvY2tzX2RpY3QoSU1BR0UySU1BR0VfQkxPQ0tTKSUwQSUwQW1vZHVsYXJfcmVwb19pZCUyMCUzRCUyMCUyMllpWWlYdSUyRm1vZHVsYXItbG9hZGVyLXQyaS0wNzA0JTIyJTBBcGlwZWxpbmUlMjAlM0QlMjBibG9ja3MuaW5pdF9waXBlbGluZShtb2R1bGFyX3JlcG9faWQpJTBBJTBBcGlwZWxpbmUubG9hZF9jb21wb25lbnRzKGR0eXBlJTNEdG9yY2guZmxvYXQxNiklMEFwaXBlbGluZS50byglMjJjdWRhJTIyKSUwQSUwQXVybCUyMCUzRCUyMCUyMmh0dHBzJTNBJTJGJTJGaHVnZ2luZ2ZhY2UuY28lMkZkYXRhc2V0cyUyRmh1Z2dpbmdmYWNlJTJGZG9jdW1lbnRhdGlvbi1pbWFnZXMlMkZyZXNvbHZlJTJGbWFpbiUyRmRpZmZ1c2VycyUyRnNkeGwtdGV4dDJpbWcucG5nJTIyJTBBaW5pdF9pbWFnZSUyMCUzRCUyMGxvYWRfaW1hZ2UodXJsKSUwQXByb21wdCUyMCUzRCUyMCUyMmElMjBkb2clMjBjYXRjaGluZyUyMGElMjBmcmlzYmVlJTIwaW4lMjB0aGUlMjBqdW5nbGUlMjIlMEFpbWFnZSUyMCUzRCUyMHBpcGVsaW5lKHByb21wdCUzRHByb21wdCUyQyUyMGltYWdlJTNEaW5pdF9pbWFnZSUyQyUyMHN0cmVuZ3RoJTNEMC44JTJDJTIwb3V0cHV0JTNEJTIyaW1hZ2VzJTIyKSU1QjAlNUQlMEFpbWFnZS5zYXZlKCUyMm1vZHVsYXJfaTJpX291dC5wbmclMjIp",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> SequentialPipelineBlocks
<span class="hljs-keyword">from</span> diffusers.modular_pipelines.stable_diffusion_xl <span class="hljs-keyword">import</span> IMAGE2IMAGE_BLOCKS
blocks = SequentialPipelineBlocks.from_blocks_dict(IMAGE2IMAGE_BLOCKS)
modular_repo_id = <span class="hljs-string">&quot;YiYiXu/modular-loader-t2i-0704&quot;</span>
pipeline = blocks.init_pipeline(modular_repo_id)
pipeline.load_components(dtype=torch.float16)
pipeline.to(<span class="hljs-string">&quot;cuda&quot;</span>)
url = <span class="hljs-string">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png&quot;</span>
init_image = load_image(url)
prompt = <span class="hljs-string">&quot;a dog catching a frisbee in the jungle&quot;</span>
image = pipeline(prompt=prompt, image=init_image, strength=<span class="hljs-number">0.8</span>, output=<span class="hljs-string">&quot;images&quot;</span>)[<span class="hljs-number">0</span>]
image.save(<span class="hljs-string">&quot;modular_i2i_out.png&quot;</span>)`,lang:"py",wrap:!1})},$$slots:{default:!0}});var n=l(r,2);J(n,{id:"example",option:"inpainting",children:(p,a)=>{s(p,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzLm1vZHVsYXJfcGlwZWxpbmVzJTIwaW1wb3J0JTIwU2VxdWVudGlhbFBpcGVsaW5lQmxvY2tzJTBBZnJvbSUyMGRpZmZ1c2Vycy5tb2R1bGFyX3BpcGVsaW5lcy5zdGFibGVfZGlmZnVzaW9uX3hsJTIwaW1wb3J0JTIwSU5QQUlOVF9CTE9DS1MlMEFmcm9tJTIwZGlmZnVzZXJzLnV0aWxzJTIwaW1wb3J0JTIwbG9hZF9pbWFnZSUwQSUwQWJsb2NrcyUyMCUzRCUyMFNlcXVlbnRpYWxQaXBlbGluZUJsb2Nrcy5mcm9tX2Jsb2Nrc19kaWN0KElOUEFJTlRfQkxPQ0tTKSUwQSUwQW1vZHVsYXJfcmVwb19pZCUyMCUzRCUyMCUyMllpWWlYdSUyRm1vZHVsYXItbG9hZGVyLXQyaS0wNzA0JTIyJTBBcGlwZWxpbmUlMjAlM0QlMjBibG9ja3MuaW5pdF9waXBlbGluZShtb2R1bGFyX3JlcG9faWQpJTBBJTBBcGlwZWxpbmUubG9hZF9jb21wb25lbnRzKGR0eXBlJTNEdG9yY2guZmxvYXQxNiklMEFwaXBlbGluZS50byglMjJjdWRhJTIyKSUwQSUwQWltZ191cmwlMjAlM0QlMjAlMjJodHRwcyUzQSUyRiUyRmh1Z2dpbmdmYWNlLmNvJTJGZGF0YXNldHMlMkZodWdnaW5nZmFjZSUyRmRvY3VtZW50YXRpb24taW1hZ2VzJTJGcmVzb2x2ZSUyRm1haW4lMkZkaWZmdXNlcnMlMkZzZHhsLXRleHQyaW1nLnBuZyUyMiUwQW1hc2tfdXJsJTIwJTNEJTIwJTIyaCUwQXR0cHMlM0ElMkYlMkZodWdnaW5nZmFjZS5jbyUyRmRhdGFzZXRzJTJGaHVnZ2luZ2ZhY2UlMkZkb2N1bWVudGF0aW9uLWltYWdlcyUyRnJlc29sdmUlMkZtYWluJTJGZGlmZnVzZXJzJTJGc2R4bC1pbnBhaW50LW1hc2sucG5nJTIyJTBBJTBBaW5pdF9pbWFnZSUyMCUzRCUyMGxvYWRfaW1hZ2UoaW1nX3VybCklMEFtYXNrX2ltYWdlJTIwJTNEJTIwbG9hZF9pbWFnZShtYXNrX3VybCklMEElMEFwcm9tcHQlMjAlM0QlMjAlMjJBJTIwZGVlcCUyMHNlYSUyMGRpdmVyJTIwZmxvYXRpbmclMjIlMEFpbWFnZSUyMCUzRCUyMHBpcGVsaW5lKHByb21wdCUzRHByb21wdCUyQyUyMGltYWdlJTNEaW5pdF9pbWFnZSUyQyUyMG1hc2tfaW1hZ2UlM0RtYXNrX2ltYWdlJTJDJTIwc3RyZW5ndGglM0QwLjg1JTJDJTIwb3V0cHV0JTNEJTIyaW1hZ2VzJTIyKSU1QjAlNUQlMEFpbWFnZS5zYXZlKCUyMm1vZHVhcl9pbnBhaW50X291dC5wbmclMjIp",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> SequentialPipelineBlocks
<span class="hljs-keyword">from</span> diffusers.modular_pipelines.stable_diffusion_xl <span class="hljs-keyword">import</span> INPAINT_BLOCKS
<span class="hljs-keyword">from</span> diffusers.utils <span class="hljs-keyword">import</span> load_image
blocks = SequentialPipelineBlocks.from_blocks_dict(INPAINT_BLOCKS)
modular_repo_id = <span class="hljs-string">&quot;YiYiXu/modular-loader-t2i-0704&quot;</span>
pipeline = blocks.init_pipeline(modular_repo_id)
pipeline.load_components(dtype=torch.float16)
pipeline.to(<span class="hljs-string">&quot;cuda&quot;</span>)
img_url = <span class="hljs-string">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png&quot;</span>
mask_url = <span class="hljs-string">&quot;h
ttps://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-inpaint-mask.png&quot;</span>
init_image = load_image(img_url)
mask_image = load_image(mask_url)
prompt = <span class="hljs-string">&quot;A deep sea diver floating&quot;</span>
image = pipeline(prompt=prompt, image=init_image, mask_image=mask_image, strength=<span class="hljs-number">0.85</span>, output=<span class="hljs-string">&quot;images&quot;</span>)[<span class="hljs-number">0</span>]
image.save(<span class="hljs-string">&quot;moduar_inpaint_out.png&quot;</span>)`,lang:"py",wrap:!1})},$$slots:{default:!0}}),i(e,o)},$$slots:{default:!0}});var j=l(b,4);c(j,{title:"添加块",local:"添加块",headingTag:"h2"});var g=l(j,6);s(g,{code:"JTIzJTIwQkxPQ0tTJUU2JTk4JUFGJUU1JTlEJTk3JUU3JUIxJUJCJUU3JTlBJTg0JUU1JUFEJTk3JUU1JTg1JUI4JUVGJUJDJThDJUU2JTgyJUE4JUU5JTlDJTgwJUU4JUE2JTgxJUU1JTkwJTkxJUU1JTg1JUI2JUU0JUI4JUFEJUU2JUI3JUJCJUU1JThBJUEwJUU3JUIxJUJCJTBBQkxPQ0tTLmluc2VydCglMjJibG9ja19uYW1lJTIyJTJDJTIwQmxvY2tDbGFzcyUyQyUyMGluZGV4KSUwQSUyMyUyMHN1Yl9ibG9ja3MlRTUlQjElOUUlRTYlODAlQTclRTUlOEMlODUlRTUlOTAlQUIlRTUlQUUlOUUlRTQlQkUlOEIlRUYlQkMlOEMlRTUlOTAlOTElRTglQUYlQTUlRTUlQjElOUUlRTYlODAlQTclRTYlQjclQkIlRTUlOEElQTAlRTQlQjglODAlRTQlQjglQUElRTUlOUQlOTclRTUlQUUlOUUlRTQlQkUlOEIlMEF0MmlfYmxvY2tzLnN1Yl9ibG9ja3MuaW5zZXJ0KCUyMmJsb2NrX25hbWUlMjIlMkMlMjBibG9ja19pbnN0YW5jZSUyQyUyMGluZGV4KQ==",highlighted:`<span class="hljs-comment"># BLOCKS是块类的字典,您需要向其中添加类</span>
BLOCKS.insert(<span class="hljs-string">&quot;block_name&quot;</span>, BlockClass, index)
<span class="hljs-comment"># sub_blocks属性包含实例,向该属性添加一个块实例</span>
t2i_blocks.sub_blocks.insert(<span class="hljs-string">&quot;block_name&quot;</span>, block_instance, index)`,lang:"py",wrap:!1});var Z=l(g,4);s(Z,{code:"JTIzJTIwJUU0JUJCJThFJUU5JUEyJTg0JUU4JUFFJUJFJUU0JUI4JUFEJUU3JUE3JUJCJUU5JTk5JUE0JUU0JUI4JTgwJUU0JUI4JUFBJUU1JTlEJTk3JUU3JUIxJUJCJTBBQkxPQ0tTLnBvcCglMjJ0ZXh0X2VuY29kZXIlMjIpJTBBJTIzJTIwJUU1JTg4JTg2JUU3JUE2JUJCJUU1JTg3JUJBJUU0JUI4JTgwJUU0JUI4JUFBJUU1JTlEJTk3JUU1JUFFJTlFJUU0JUJFJThCJTBBdGV4dF9lbmNvZGVyX2Jsb2NrJTIwJTNEJTIwdDJpX2Jsb2Nrcy5zdWJfYmxvY2tzLnBvcCglMjJ0ZXh0X2VuY29kZXIlMjIp",highlighted:`<span class="hljs-comment"># 从预设中移除一个块类</span>
BLOCKS.pop(<span class="hljs-string">&quot;text_encoder&quot;</span>)
<span class="hljs-comment"># 分离出一个块实例</span>
text_encoder_block = t2i_blocks.sub_blocks.pop(<span class="hljs-string">&quot;text_encoder&quot;</span>)`,lang:"py",wrap:!1});var w=l(Z,4);s(w,{code:"JTIzJTIwJUU1JTlDJUE4JUU5JUEyJTg0JUU4JUFFJUJFJUU0JUI4JUFEJUU2JTlCJUJGJUU2JThEJUEyJUU1JTlEJTk3JUU3JUIxJUJCJTBBQkxPQ0tTJTVCJTIycHJlcGFyZV9sYXRlbnRzJTIyJTVEJTIwJTNEJTIwQ3VzdG9tUHJlcGFyZUxhdGVudHMlMEElMjMlMjAlRTQlQkQlQkYlRTclOTQlQTglRTUlOUQlOTclRTUlQUUlOUUlRTQlQkUlOEIlRTUlOUMlQThzdWJfYmxvY2tzJUU1JUIxJTlFJUU2JTgwJUE3JUU0JUI4JUFEJUU2JTlCJUJGJUU2JThEJUEyJTBBdDJpX2Jsb2Nrcy5zdWJfYmxvY2tzJTVCJTIycHJlcGFyZV9sYXRlbnRzJTIyJTVEJTIwJTNEJTIwQ3VzdG9tUHJlcGFyZUxhdGVudHMoKQ==",highlighted:`<span class="hljs-comment"># 在预设中替换块类</span>
BLOCKS[<span class="hljs-string">&quot;prepare_latents&quot;</span>] = CustomPrepareLatents
<span class="hljs-comment"># 使用块实例在sub_blocks属性中替换</span>
t2i_blocks.sub_blocks[<span class="hljs-string">&quot;prepare_latents&quot;</span>] = CustomPrepareLatents()`,lang:"py",wrap:!1});var W=l(w,2);c(W,{title:"创建管道",local:"创建管道",headingTag:"h2"});var G=l(W,8);y(G,{id:"create",options:["ModularPipelineBlocks","from_pretrained"],children:(e,M)=>{var o=q(),t=d(o);J(t,{id:"create",option:"ModularPipelineBlocks",children:(n,p)=>{var a=cl(),u=l(d(a),2);s(u,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMENvbXBvbmVudHNNYW5hZ2VyJTBBZnJvbSUyMGRpZmZ1c2Vycy5tb2R1bGFyX3BpcGVsaW5lcyUyMGltcG9ydCUyMFNlcXVlbnRpYWxQaXBlbGluZUJsb2NrcyUwQWZyb20lMjBkaWZmdXNlcnMubW9kdWxhcl9waXBlbGluZXMuc3RhYmxlX2RpZmZ1c2lvbl94bCUyMGltcG9ydCUyMFRFWFQySU1BR0VfQkxPQ0tTJTBBJTBBdDJpX2Jsb2NrcyUyMCUzRCUyMFNlcXVlbnRpYWxQaXBlbGluZUJsb2Nrcy5mcm9tX2Jsb2Nrc19kaWN0KFRFWFQySU1BR0VfQkxPQ0tTKSUwQSUwQW1vZHVsYXJfcmVwb19pZCUyMCUzRCUyMCUyMllpWWlYdSUyRm1vZHVsYXItbG9hZGVyLXQyaS0wNzA0JTIyJTBBY29tcG9uZW50cyUyMCUzRCUyMENvbXBvbmVudHNNYW5hZ2VyKCklMEF0MmlfcGlwZWxpbmUlMjAlM0QlMjB0MmlfYmxvY2tzLmluaXRfcGlwZWxpbmUobW9kdWxhcl9yZXBvX2lkJTJDJTIwY29tcG9uZW50c19tYW5hZ2VyJTNEY29tcG9uZW50cyk=",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> ComponentsManager
<span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> SequentialPipelineBlocks
<span class="hljs-keyword">from</span> diffusers.modular_pipelines.stable_diffusion_xl <span class="hljs-keyword">import</span> TEXT2IMAGE_BLOCKS
t2i_blocks = SequentialPipelineBlocks.from_blocks_dict(TEXT2IMAGE_BLOCKS)
modular_repo_id = <span class="hljs-string">&quot;YiYiXu/modular-loader-t2i-0704&quot;</span>
components = ComponentsManager()
t2i_pipeline = t2i_blocks.init_pipeline(modular_repo_id, components_manager=components)`,lang:"py",wrap:!1}),i(n,a)},$$slots:{default:!0}});var r=l(t,2);J(r,{id:"create",option:"from_pretrained",children:(n,p)=>{var a=il(),u=l(d(a),2);s(u,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyME1vZHVsYXJQaXBlbGluZSUyQyUyMENvbXBvbmVudHNNYW5hZ2VyJTBBJTBBY29tcG9uZW50cyUyMCUzRCUyMENvbXBvbmVudHNNYW5hZ2VyKCklMEFwaXBlbGluZSUyMCUzRCUyME1vZHVsYXJQaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTIyWWlZaVh1JTJGbW9kdWxhci1sb2FkZXItdDJpLTA3MDQlMjIlMkMlMjBjb21wb25lbnRzX21hbmFnZXIlM0Rjb21wb25lbnRzKQ==",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> ModularPipeline, ComponentsManager
components = ComponentsManager()
pipeline = ModularPipeline.from_pretrained(<span class="hljs-string">&quot;YiYiXu/modular-loader-t2i-0704&quot;</span>, components_manager=components)`,lang:"py",wrap:!1});var D=l(u,4);s(D,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyME1vZHVsYXJQaXBlbGluZSUyQyUyMENvbXBvbmVudHNNYW5hZ2VyJTBBJTBBY29tcG9uZW50cyUyMCUzRCUyMENvbXBvbmVudHNNYW5hZ2VyKCklMEFtb2R1bGFyX3JlcG9faWQlMjAlM0QlMjAlMjJZaVlpWHUlMkZtb2R1bGFyLWRpZmZkaWZmLTA3MDQlMjIlMEFkaWZmZGlmZl9waXBlbGluZSUyMCUzRCUyME1vZHVsYXJQaXBlbGluZS5mcm9tX3ByZXRyYWluZWQobW9kdWxhcl9yZXBvX2lkJTJDJTIwdHJ1c3RfcmVtb3RlX2NvZGUlM0RUcnVlJTJDJTIwY29tcG9uZW50c19tYW5hZ2VyJTNEY29tcG9uZW50cyk=",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> ModularPipeline, ComponentsManager
components = ComponentsManager()
modular_repo_id = <span class="hljs-string">&quot;YiYiXu/modular-diffdiff-0704&quot;</span>
diffdiff_pipeline = ModularPipeline.from_pretrained(modular_repo_id, trust_remote_code=<span class="hljs-literal">True</span>, components_manager=components)`,lang:"py",wrap:!1}),i(n,a)},$$slots:{default:!0}}),i(e,o)},$$slots:{default:!0}});var _=l(G,2);c(_,{title:"加载组件",local:"加载组件",headingTag:"h2"});var f=l(_,4);y(f,{id:"load",options:["load_components","load_components"],children:(e,M)=>{var o=q(),t=d(o);J(t,{id:"load",option:"load_components",children:(n,p)=>{s(n,{code:"aW1wb3J0JTIwdG9yY2glMEElMEF0MmlfcGlwZWxpbmUubG9hZF9jb21wb25lbnRzKGR0eXBlJTNEdG9yY2guZmxvYXQxNiklMEF0MmlfcGlwZWxpbmUudG8oJTIyY3VkYSUyMik=",highlighted:`<span class="hljs-keyword">import</span> torch
t2i_pipeline.load_components(dtype=torch.float16)
t2i_pipeline.to(<span class="hljs-string">&quot;cuda&quot;</span>)`,lang:"py",wrap:!1})},$$slots:{default:!0}});var r=l(t,2);J(r,{id:"load",option:"load_components",children:(n,p)=>{var a=dl(),u=l(d(a),2);s(u,{code:"aW1wb3J0JTIwdG9yY2glMEElMEF0MmlfcGlwZWxpbmUubG9hZF9jb21wb25lbnRzKG5hbWVzJTNEJTVCJTIydW5ldCUyMiUyQyUyMCUyMnZhZSUyMiU1RCUyQyUyMGR0eXBlJTNEdG9yY2guZmxvYXQxNik=",highlighted:`<span class="hljs-keyword">import</span> torch
t2i_pipeline.load_components(names=[<span class="hljs-string">&quot;unet&quot;</span>, <span class="hljs-string">&quot;vae&quot;</span>], dtype=torch.float16)`,lang:"py",wrap:!1}),i(n,a)},$$slots:{default:!0}}),i(e,o)},$$slots:{default:!0}});var Q=l(f,4);s(Q,{code:"dDJpX3BpcGVsaW5l",highlighted:"t2i_pipeline",lang:"py",wrap:!1});var k=l(Q,6);s(k,{code:"JTIzJTIwJUU1JThFJTlGJUU1JUE3JThCJTBBJTIydW5ldCUyMiUzQSUyMCU1QiUwQSUyMCUyMG51bGwlMkMlMjBudWxsJTJDJTBBJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIycmVwbyUyMiUzQSUyMCUyMnN0YWJpbGl0eWFpJTJGc3RhYmxlLWRpZmZ1c2lvbi14bC1iYXNlLTEuMCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMnN1YmZvbGRlciUyMiUzQSUyMCUyMnVuZXQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJ2YXJpYW50JTIyJTNBJTIwJTIyZnAxNiUyMiUwQSUyMCUyMCU3RCUwQSU1RCUwQSUwQSUyMyUyMCVFNCVCRiVBRSVFNiU5NCVCOSVFNSU5MCU4RSUwQSUyMnVuZXQlMjIlM0ElMjAlNUIlMEElMjAlMjBudWxsJTJDJTIwbnVsbCUyQyUwQSUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMnJlcG8lMjIlM0ElMjAlMjJSdW5EaWZmdXNpb24lMkZKdWdnZXJuYXV0LVhMLXY5JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyc3ViZm9sZGVyJTIyJTNBJTIwJTIydW5ldCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMnZhcmlhbnQlMjIlM0ElMjAlMjJmcDE2JTIyJTBBJTIwJTIwJTdEJTBBJTVE",highlighted:`# 原始
<span class="hljs-attr">&quot;unet&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
<span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>
<span class="hljs-punctuation">{</span>
<span class="hljs-attr">&quot;repo&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;stabilityai/stable-diffusion-xl-base-1.0&quot;</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;subfolder&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;unet&quot;</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;variant&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;fp16&quot;</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">]</span>
# 修改后
<span class="hljs-attr">&quot;unet&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
<span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>
<span class="hljs-punctuation">{</span>
<span class="hljs-attr">&quot;repo&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;RunDiffusion/Juggernaut-XL-v9&quot;</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;subfolder&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;unet&quot;</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;variant&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;fp16&quot;</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">]</span>`,lang:"json",wrap:!1});var R=l(k,2);c(R,{title:"组件加载状态",local:"组件加载状态",headingTag:"h3"});var V=l(R,6);s(V,{code:"dDJpX3BpcGVsaW5lLmNvbXBvbmVudF9uYW1lcyUwQSU1Qid0ZXh0X2VuY29kZXInJTJDJTIwJ3RleHRfZW5jb2Rlcl8yJyUyQyUyMCd0b2tlbml6ZXInJTJDJTIwJ3Rva2VuaXplcl8yJyUyQyUyMCdndWlkZXInJTJDJTIwJ3NjaGVkdWxlciclMkMlMjAndW5ldCclMkMlMjAndmFlJyUyQyUyMCdpbWFnZV9wcm9jZXNzb3InJTVE",highlighted:`t2i_pipeline.component_names
[<span class="hljs-string">&#x27;text_encoder&#x27;</span>, <span class="hljs-string">&#x27;text_encoder_2&#x27;</span>, <span class="hljs-string">&#x27;tokenizer&#x27;</span>, <span class="hljs-string">&#x27;tokenizer_2&#x27;</span>, <span class="hljs-string">&#x27;guider&#x27;</span>, <span class="hljs-string">&#x27;scheduler&#x27;</span>, <span class="hljs-string">&#x27;unet&#x27;</span>, <span class="hljs-string">&#x27;vae&#x27;</span>, <span class="hljs-string">&#x27;image_processor&#x27;</span>]`,lang:"py",wrap:!1});var B=l(V,4);s(B,{code:"dDJpX3BpcGVsaW5lLm51bGxfY29tcG9uZW50X25hbWVzJTBBJTVCJ3RleHRfZW5jb2RlciclMkMlMjAndGV4dF9lbmNvZGVyXzInJTJDJTIwJ3Rva2VuaXplciclMkMlMjAndG9rZW5pemVyXzInJTJDJTIwJ3NjaGVkdWxlciclNUQ=",highlighted:`t2i_pipeline.null_component_names
[<span class="hljs-string">&#x27;text_encoder&#x27;</span>, <span class="hljs-string">&#x27;text_encoder_2&#x27;</span>, <span class="hljs-string">&#x27;tokenizer&#x27;</span>, <span class="hljs-string">&#x27;tokenizer_2&#x27;</span>, <span class="hljs-string">&#x27;scheduler&#x27;</span>]`,lang:"py",wrap:!1});var I=l(B,4);s(I,{code:"dDJpX3BpcGVsaW5lLnByZXRyYWluZWRfY29tcG9uZW50X25hbWVzJTBBJTVCJ3RleHRfZW5jb2RlciclMkMlMjAndGV4dF9lbmNvZGVyXzInJTJDJTIwJ3Rva2VuaXplciclMkMlMjAndG9rZW5pemVyXzInJTJDJTIwJ3NjaGVkdWxlciclMkMlMjAndW5ldCclMkMlMjAndmFlJyU1RA==",highlighted:`t2i_pipeline.pretrained_component_names
[<span class="hljs-string">&#x27;text_encoder&#x27;</span>, <span class="hljs-string">&#x27;text_encoder_2&#x27;</span>, <span class="hljs-string">&#x27;tokenizer&#x27;</span>, <span class="hljs-string">&#x27;tokenizer_2&#x27;</span>, <span class="hljs-string">&#x27;scheduler&#x27;</span>, <span class="hljs-string">&#x27;unet&#x27;</span>, <span class="hljs-string">&#x27;vae&#x27;</span>]`,lang:"py",wrap:!1});var C=l(I,4);s(C,{code:"dDJpX3BpcGVsaW5lLmNvbmZpZ19jb21wb25lbnRfbmFtZXMlMEElNUInZ3VpZGVyJyUyQyUyMCdpbWFnZV9wcm9jZXNzb3InJTVE",highlighted:`t2i_pipeline.config_component_names
[<span class="hljs-string">&#x27;guider&#x27;</span>, <span class="hljs-string">&#x27;image_processor&#x27;</span>]`,lang:"py",wrap:!1});var X=l(C,2);c(X,{title:"更新组件",local:"更新组件",headingTag:"h2"});var x=l(X,12);s(x,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMENvbXBvbmVudFNwZWMlMkMlMjBVTmV0MkRDb25kaXRpb25Nb2RlbCUwQSUwQXVuZXRfc3BlYyUyMCUzRCUyMENvbXBvbmVudFNwZWMobmFtZSUzRCUyMnVuZXQlMjIlMkN0eXBlX2hpbnQlM0RVTmV0MkRDb25kaXRpb25Nb2RlbCUyQyUyMHJlcG8lM0QlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMjBzdWJmb2xkZXIlM0QlMjJ1bmV0JTIyJTJDJTIwdmFyaWFudCUzRCUyMmZwMTYlMjIpJTBBdW5ldCUyMCUzRCUyMHVuZXRfc3BlYy5sb2FkKGR0eXBlJTNEdG9yY2guZmxvYXQxNik=",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> ComponentSpec, UNet2DConditionModel
unet_spec = ComponentSpec(name=<span class="hljs-string">&quot;unet&quot;</span>,type_hint=UNet2DConditionModel, repo=<span class="hljs-string">&quot;stabilityai/stable-diffusion-xl-base-1.0&quot;</span>, subfolder=<span class="hljs-string">&quot;unet&quot;</span>, variant=<span class="hljs-string">&quot;fp16&quot;</span>)
unet = unet_spec.load(dtype=torch.float16)`,lang:"py",wrap:!1});var E=l(x,4);s(E,{code:"dDJpX3BpcGVsaW5lLnVwZGF0ZV9jb21wb25lbnRzKHVuZXQlM0R1bmV0Mik=",highlighted:"t2i_pipeline.update_components(unet=unet2)",lang:"py",wrap:!1});var Y=l(E,4);c(Y,{title:"组件提取和修改",local:"组件提取和修改",headingTag:"h3"});var v=l(Y,4);s(v,{code:"c3BlYyUyMCUzRCUyMENvbXBvbmVudFNwZWMuZnJvbV9jb21wb25lbnQoJTIydW5ldCUyMiUyQyUyMHVuZXQyKSUwQXNwZWMlMEFDb21wb25lbnRTcGVjKG5hbWUlM0QndW5ldCclMkMlMjB0eXBlX2hpbnQlM0QlM0NjbGFzcyUyMCdkaWZmdXNlcnMubW9kZWxzLnVuZXRzLnVuZXRfMmRfY29uZGl0aW9uLlVOZXQyRENvbmRpdGlvbk1vZGVsJyUzRSUyQyUyMGRlc2NyaXB0aW9uJTNETm9uZSUyQyUyMGNvbmZpZyUzRE5vbmUlMkMlMjByZXBvJTNEJ3N0YWJpbGl0eWFpJTJGc3RhYmxlLWRpZmZ1c2lvbi14bC1iYXNlLTEuMCclMkMlMjBzdWJmb2xkZXIlM0QndW5ldCclMkMlMjB2YXJpYW50JTNEJ2ZwMTYnJTJDJTIwcmV2aXNpb24lM0ROb25lJTJDJTIwZGVmYXVsdF9jcmVhdGlvbl9tZXRob2QlM0QnZnJvbV9wcmV0cmFpbmVkJyklMEF1bmV0Ml9yZWNyZWF0ZWQlMjAlM0QlMjBzcGVjLmxvYWQoZHR5cGUlM0R0b3JjaC5mbG9hdDE2KQ==",highlighted:`spec = ComponentSpec.from_component(<span class="hljs-string">&quot;unet&quot;</span>, unet2)
spec
ComponentSpec(name=<span class="hljs-string">&#x27;unet&#x27;</span>, type_hint=&lt;<span class="hljs-keyword">class</span> <span class="hljs-string">&#x27;diffusers.models.unets.unet_2d_condition.UNet2DConditionModel&#x27;</span>&gt;, description=<span class="hljs-literal">None</span>, config=<span class="hljs-literal">None</span>, repo=<span class="hljs-string">&#x27;stabilityai/stable-diffusion-xl-base-1.0&#x27;</span>, subfolder=<span class="hljs-string">&#x27;unet&#x27;</span>, variant=<span class="hljs-string">&#x27;fp16&#x27;</span>, revision=<span class="hljs-literal">None</span>, default_creation_method=<span class="hljs-string">&#x27;from_pretrained&#x27;</span>)
unet2_recreated = spec.load(dtype=torch.float16)`,lang:"py",wrap:!1});var F=l(v,4);s(F,{code:"dW5ldF9zcGVjJTIwJTNEJTIwdDJpX3BpcGVsaW5lLmdldF9jb21wb25lbnRfc3BlYyglMjJ1bmV0JTIyKSUwQXVuZXRfc3BlYyUwQUNvbXBvbmVudFNwZWMoJTBBJTIwJTIwJTIwJTIwbmFtZSUzRCd1bmV0JyUyQyUwQSUyMCUyMCUyMCUyMHR5cGVfaGludCUzRCUzQ2NsYXNzJTIwJ2RpZmZ1c2Vycy5tb2RlbHMudW5ldHMudW5ldF8yZF9jb25kaXRpb24uVU5ldDJEQ29uZGl0aW9uTW9kZWwnJTNFJTJDJTBBJTIwJTIwJTIwJTIwcHJldHJhaW5lZF9tb2RlbF9uYW1lX29yX3BhdGglM0QnUnVuRGlmZnVzaW9uJTJGSnVnZ2VybmF1dC1YTC12OSclMkMlMEElMjAlMjAlMjAlMjBzdWJmb2xkZXIlM0QndW5ldCclMkMlMEElMjAlMjAlMjAlMjB2YXJpYW50JTNEJ2ZwMTYnJTJDJTBBJTIwJTIwJTIwJTIwZGVmYXVsdF9jcmVhdGlvbl9tZXRob2QlM0QnZnJvbV9wcmV0cmFpbmVkJyUwQSklMEElMEElMjMlMjAlRTQlQkYlQUUlRTYlOTQlQjklRTQlQkIlQTUlRTQlQkIlOEUlRTQlQjglOEQlRTUlOTAlOEMlRTclOUElODQlRTQlQkIlOTMlRTUlQkElOTMlRTUlOEElQTAlRTglQkQlQkQlMEF1bmV0X3NwZWMucHJldHJhaW5lZF9tb2RlbF9uYW1lX29yX3BhdGglMjAlM0QlMjAlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMEElMEElMjMlMjAlRTQlQkQlQkYlRTclOTQlQTglRTQlQkYlQUUlRTYlOTQlQjklRTUlOTAlOEUlRTclOUElODQlRTglQTclODQlRTglOEMlODMlRTUlOEElQTAlRTglQkQlQkQlRTclQkIlODQlRTQlQkIlQjYlMEF1bmV0JTIwJTNEJTIwdW5ldF9zcGVjLmxvYWQoZHR5cGUlM0R0b3JjaC5mbG9hdDE2KQ==",highlighted:`unet_spec = t2i_pipeline.get_component_spec(<span class="hljs-string">&quot;unet&quot;</span>)
unet_spec
ComponentSpec(
name=<span class="hljs-string">&#x27;unet&#x27;</span>,
type_hint=&lt;<span class="hljs-keyword">class</span> <span class="hljs-string">&#x27;diffusers.models.unets.unet_2d_condition.UNet2DConditionModel&#x27;</span>&gt;,
pretrained_model_name_or_path=<span class="hljs-string">&#x27;RunDiffusion/Juggernaut-XL-v9&#x27;</span>,
subfolder=<span class="hljs-string">&#x27;unet&#x27;</span>,
variant=<span class="hljs-string">&#x27;fp16&#x27;</span>,
default_creation_method=<span class="hljs-string">&#x27;from_pretrained&#x27;</span>
)
<span class="hljs-comment"># 修改以从不同的仓库加载</span>
unet_spec.pretrained_model_name_or_path = <span class="hljs-string">&quot;stabilityai/stable-diffusion-xl-base-1.0&quot;</span>
<span class="hljs-comment"># 使用修改后的规范加载组件</span>
unet = unet_spec.load(dtype=torch.float16)`,lang:"py",wrap:!1});var N=l(F,2);c(N,{title:"模块化仓库",local:"模块化仓库",headingTag:"h2"});var S=l(N,12);s(S,{code:"bW9kdWxhci1kaWZmZGlmZi0wNzA0JTJGJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwYmxvY2sucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjAlRTglODclQUElRTUlQUUlOUElRTQlQjklODklRTclQUUlQTElRTklODElOTMlRTUlOUQlOTclRTUlQUUlOUUlRTclOEUlQjAlMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjBjb25maWcuanNvbiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMCVFNyVBRSVBMSVFOSU4MSU5MyVFOSU4NSU4RCVFNyVCRCVBRSVFNSU5MiU4Q2F1dG9fbWFwJTBBJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJTIwbW9kdWxhcl9tb2RlbF9pbmRleC5qc29uJTIwJTIwJTIwJTIwJTIzJTIwJUU3JUJCJTg0JUU0JUJCJUI2JUU1JThBJUEwJUU4JUJEJUJEJUU4JUE3JTg0JUU4JThDJTgz",highlighted:`modular-<span class="hljs-keyword">diffdiff-0704/
</span>├── <span class="hljs-keyword">block.py </span> <span class="hljs-comment"># 自定义管道块实现</span>
├── <span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span> <span class="hljs-comment"># 管道配置和auto_map</span>
└── modular_model_index.<span class="hljs-keyword">json </span> <span class="hljs-comment"># 组件加载规范</span>`,lang:"",wrap:!1});var z=l(S,4);s(z,{code:"JTdCJTBBJTIwJTIwJTIyX2NsYXNzX25hbWUlMjIlM0ElMjAlMjJEaWZmRGlmZkJsb2NrcyUyMiUyQyUwQSUyMCUyMCUyMmF1dG9fbWFwJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIyTW9kdWxhclBpcGVsaW5lQmxvY2tzJTIyJTNBJTIwJTIyYmxvY2suRGlmZkRpZmZCbG9ja3MlMjIlMEElMjAlMjAlN0QlMEElN0Q=",highlighted:`<span class="hljs-punctuation">{</span>
<span class="hljs-attr">&quot;_class_name&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;DiffDiffBlocks&quot;</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;auto_map&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
<span class="hljs-attr">&quot;ModularPipelineBlocks&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;block.DiffDiffBlocks&quot;</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>`,lang:"json",wrap:!1});var H=l(z,2);$(H,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/modular_diffusers/modular_pipeline.md"}),pl(2),i(A,m),nl()}export{yl as component};

Xet Storage Details

Size:
35.4 kB
·
Xet hash:
71704a84d4bf04309207591ca57a76b7770a20c9404a557cce9c1aeeea3094cd

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.