Buckets:
| import"../chunks/DsnmJJEf.js";import{i as X,h as v,C as I,H as e,b as x,a as s,E as S,s as Y}from"../chunks/ClyeqfBE.js";import{p as E,o as q,s as l,f as w,a as t,b as z,c as p,n as O}from"../chunks/C7BP3yal.js";import{H as Q}from"../chunks/DRiwAycn.js";const H='{"title":"组件管理器","local":"组件管理器","sections":[{"title":"添加组件","local":"添加组件","sections":[],"depth":2},{"title":"检索组件","local":"检索组件","sections":[{"title":"get_one","local":"getone","sections":[],"depth":3}],"depth":2},{"title":"重复检测","local":"重复检测","sections":[],"depth":2},{"title":"集合","local":"集合","sections":[],"depth":2},{"title":"卸载","local":"卸载","sections":[],"depth":2}],"depth":1}';var D=p('<meta name="hf:doc:metadata"/>'),A=p("<!> <!>",1),L=p('<p></p> <!> <!> <p><code>ComponentsManager</code> 是 Modular Diffusers 的模型注册和管理系统。它添加和跟踪模型,存储有用的元数据(模型大小、设备放置、适配器),防止重复模型实例,并支持卸载。</p> <p>本指南将展示如何使用 <code>ComponentsManager</code> 来管理组件和设备内存。</p> <!> <p><code>ComponentsManager</code> 应与 <code>ModularPipeline</code> 一起创建,在 <code>from_pretrained()</code> 或 <code>init_pipeline()</code> 中。</p> <blockquote class="tip"><p><code>collection</code> 参数是可选的,但可以更轻松地组织和管理组件。</p></blockquote> <!> <p>组件仅在调用 <code>load_components()</code> 或 <code>load_components()</code> 时加载和注册。以下示例使用 <code>load_components()</code> 创建第二个管道,重用第一个管道的所有组件,并将其分配到不同的集合。</p> <!> <p>使用 <code>null_component_names</code> 属性来识别需要加载的任何组件,使用 <code>get_one()</code> 检索它们,然后调用 <code>update_components()</code> 来添加缺失的组件。</p> <!> <p>要添加单个组件,请使用 <code>add()</code> 方法。这会使用唯一 id 注册一个组件。</p> <!> <p>使用 <code>remove()</code> 通过其 id 移除一个组件。</p> <!> <!> <p><code>ComponentsManager</code> 提供了几种方法来检索已注册的组件。</p> <!> <p><code>get_one()</code> 方法按 <code>name</code> 精确匹配并返回单个组件。如果多个组件匹配,<code>get_one()</code> 会返回错误。</p> <p><code>get_one()</code> 还通过 <code>collection</code> 参数或 <code>load_id</code> 参数过滤组件。</p> <!> <!> <p>建议使用 <code>ComponentSpec</code> 加载模型组件,以分配具有唯一 id 的组件,该 id 编码了它们的加载参数。这允许 <code>ComponentsManager</code> 自动检测并防止重复的模型实例,即使不同的对象代表相同的底层检查点。</p> <!> <p>这会返回一个警告,附带移除重复项的说明。</p> <!> <p>您也可以不使用 <code>ComponentSpec</code> 添加组件,并且在大多数情况下,即使您以不同名称添加相同组件,重复检测仍然有效。</p> <p>然而,当您将相同组件加载到不同对象时,<code>ComponentManager</code> 无法检测重复项。在这种情况下,您应该使用 <code>ComponentSpec</code> 加载模型。</p> <!> <!> <p>集合是为组件分配的标签,用于更好的组织和管理。使用 <code>add()</code> 中的 <code>collection</code> 参数将组件添加到集合中。</p> <p>每个集合中只允许每个名称有一个组件。添加第二个同名组件会自动移除第一个组件。</p> <!> <p>这使得在基于节点的系统中工作变得方便,因为您可以:</p> <ul><li>使用 <code>collection</code> 标签标记所有从一个节点加载的模型。</li> <li>当新检查点以相同名称加载时自动替换模型。</li> <li>当节点被移除时批量删除集合中的所有模型。</li></ul> <!> <p><code>enable_auto_cpu_offload()</code> 方法是一种全局卸载策略,适用于所有模型,无论哪个管道在使用它们。一旦启用,您无需担心设备放置,如果您添加或移除组件。</p> <!> <p>所有模型开始时都在 CPU 上,<code>ComponentsManager</code> 在需要它们之前将它们移动到适当的设备,并在 GPU 内存不足时将其他模型移回 CPU。</p> <p>您可以设置自己的规则来决定哪些模型要卸载。</p> <!> <p></p>',1);function sl(_,F){E(F,!1),q(()=>{new URLSearchParams(window.location.search).get("fw")}),X();var c=L();v("1ngi0d6",n=>{var a=D();Y(a,"content",H),t(n,a)});var d=l(w(c),2);I(d,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var i=l(d,2);e(i,{title:"组件管理器",local:"组件管理器",headingTag:"h1"});var U=l(i,6);e(U,{title:"添加组件",local:"添加组件",headingTag:"h2"});var M=l(U,6);x(M,{id:"create",options:["from_pretrained","init_pipeline"],children:(n,a)=>{var B=A(),W=w(B);Q(W,{id:"create",option:"from_pretrained",children:(o,k)=>{s(o,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyME1vZHVsYXJQaXBlbGluZSUyQyUyMENvbXBvbmVudHNNYW5hZ2VyJTBBJTBBY29tcCUyMCUzRCUyMENvbXBvbmVudHNNYW5hZ2VyKCklMEFwaXBlJTIwJTNEJTIwTW9kdWxhclBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMjJZaVlpWHUlMkZtb2R1bGFyLWRlbW8tYXV0byUyMiUyQyUyMGNvbXBvbmVudHNfbWFuYWdlciUzRGNvbXAlMkMlMjBjb2xsZWN0aW9uJTNEJTIydGVzdDElMjIp",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> ModularPipeline, ComponentsManager | |
| comp = ComponentsManager() | |
| pipe = ModularPipeline.from_pretrained(<span class="hljs-string">"YiYiXu/modular-demo-auto"</span>, components_manager=comp, collection=<span class="hljs-string">"test1"</span>)`,lang:"py",wrap:!1})},$$slots:{default:!0}});var f=l(W,2);Q(f,{id:"create",option:"init_pipeline",children:(o,k)=>{s(o,{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">"YiYiXu/modular-loader-t2i-0704"</span> | |
| components = ComponentsManager() | |
| t2i_pipeline = t2i_blocks.init_pipeline(modular_repo_id, components_manager=components)`,lang:"py",wrap:!1})},$$slots:{default:!0}}),t(n,B)},$$slots:{default:!0}});var y=l(M,4);s(y,{code:"cGlwZS5sb2FkX2NvbXBvbmVudHMoKSUwQXBpcGUyJTIwJTNEJTIwTW9kdWxhclBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMjJZaVlpWHUlMkZtb2R1bGFyLWRlbW8tYXV0byUyMiUyQyUyMGNvbXBvbmVudHNfbWFuYWdlciUzRGNvbXAlMkMlMjBjb2xsZWN0aW9uJTNEJTIydGVzdDIlMjIp",highlighted:`pipe.load_components() | |
| pipe2 = ModularPipeline.from_pretrained(<span class="hljs-string">"YiYiXu/modular-demo-auto"</span>, components_manager=comp, collection=<span class="hljs-string">"test2"</span>)`,lang:"py",wrap:!1});var r=l(y,4);s(r,{code:"cGlwZTIubnVsbF9jb21wb25lbnRfbmFtZXMlMjAlMEElNUIndGV4dF9lbmNvZGVyJyUyQyUyMCd0ZXh0X2VuY29kZXJfMiclMkMlMjAndG9rZW5pemVyJyUyQyUyMCd0b2tlbml6ZXJfMiclMkMlMjAnaW1hZ2VfZW5jb2RlciclMkMlMjAndW5ldCclMkMlMjAndmFlJyUyQyUyMCdzY2hlZHVsZXInJTJDJTIwJ2NvbnRyb2xuZXQnJTVEJTBBJTBBY29tcF9kaWN0JTIwJTNEJTIwJTdCbmFtZSUzQSUyMGNvbXAuZ2V0X29uZShuYW1lJTNEbmFtZSklMjBmb3IlMjBuYW1lJTIwaW4lMjBwaXBlMi5udWxsX2NvbXBvbmVudF9uYW1lcyU3RCUwQXBpcGUyLnVwZGF0ZV9jb21wb25lbnRzKCoqY29tcF9kaWN0KQ==",highlighted:`pipe2.null_component_names | |
| [<span class="hljs-string">'text_encoder'</span>, <span class="hljs-string">'text_encoder_2'</span>, <span class="hljs-string">'tokenizer'</span>, <span class="hljs-string">'tokenizer_2'</span>, <span class="hljs-string">'image_encoder'</span>, <span class="hljs-string">'unet'</span>, <span class="hljs-string">'vae'</span>, <span class="hljs-string">'scheduler'</span>, <span class="hljs-string">'controlnet'</span>] | |
| comp_dict = {name: comp.get_one(name=name) <span class="hljs-keyword">for</span> name <span class="hljs-keyword">in</span> pipe2.null_component_names} | |
| pipe2.update_components(**comp_dict)`,lang:"py",wrap:!1});var J=l(r,4);s(J,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMEF1dG9Nb2RlbCUwQSUwQXRleHRfZW5jb2RlciUyMCUzRCUyMEF1dG9Nb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLXhsLWJhc2UtMS4wJTIyJTJDJTIwc3ViZm9sZGVyJTNEJTIydGV4dF9lbmNvZGVyJTIyKSUwQWNvbXBvbmVudF9pZCUyMCUzRCUyMGNvbXAuYWRkKCUyMnRleHRfZW5jb2RlciUyMiUyQyUyMHRleHRfZW5jb2RlciklMEFjb21w",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoModel | |
| text_encoder = AutoModel.from_pretrained(<span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, subfolder=<span class="hljs-string">"text_encoder"</span>) | |
| component_id = comp.add(<span class="hljs-string">"text_encoder"</span>, text_encoder) | |
| comp`,lang:"py",wrap:!1});var m=l(J,4);s(m,{code:"Y29tcC5yZW1vdmUoJTIydGV4dF9lbmNvZGVyXzEzOTkxNzczMzA0Mjg2NCUyMik=",highlighted:'comp.remove(<span class="hljs-string">"text_encoder_139917733042864"</span>)',lang:"py",wrap:!1});var b=l(m,2);e(b,{title:"检索组件",local:"检索组件",headingTag:"h2"});var u=l(b,4);e(u,{title:"get_one",local:"getone",headingTag:"h3"});var V=l(u,6);s(V,{code:"Y29tcC5nZXRfb25lKG5hbWUlM0QlMjJ1bmV0JTIyJTJDJTIwY29sbGVjdGlvbiUzRCUyMnNkeGwlMjIp",highlighted:'comp.get_one(name=<span class="hljs-string">"unet"</span>, collection=<span class="hljs-string">"sdxl"</span>)',lang:"py",wrap:!1});var C=l(V,2);e(C,{title:"重复检测",local:"重复检测",headingTag:"h2"});var h=l(C,4);s(h,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMENvbXBvbmVudFNwZWMlMkMlMjBDb21wb25lbnRzTWFuYWdlciUwQWZyb20lMjB0cmFuc2Zvcm1lcnMlMjBpbXBvcnQlMjBDTElQVGV4dE1vZGVsJTBBJTBBY29tcCUyMCUzRCUyMENvbXBvbmVudHNNYW5hZ2VyKCklMEElMEElMjMlMjAlRTQlQjglQkElRTclQUMlQUMlRTQlQjglODAlRTQlQjglQUElRTYlOTYlODclRTYlOUMlQUMlRTclQkMlOTYlRTclQTAlODElRTUlOTklQTglRTUlODglOUIlRTUlQkIlQkElMjBDb21wb25lbnRTcGVjJTBBc3BlYyUyMCUzRCUyMENvbXBvbmVudFNwZWMobmFtZSUzRCUyMnRleHRfZW5jb2RlciUyMiUyQyUyMHJlcG8lM0QlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMjBzdWJmb2xkZXIlM0QlMjJ0ZXh0X2VuY29kZXIlMjIlMkMlMjB0eXBlX2hpbnQlM0RBdXRvTW9kZWwpJTBBJTIzJTIwJUU0JUI4JUJBJUU5JTg3JThEJUU1JUE0JThEJUU3JTlBJTg0JUU2JTk2JTg3JUU2JTlDJUFDJUU3JUJDJTk2JUU3JUEwJTgxJUU1JTk5JUE4JUU1JTg4JTlCJUU1JUJCJUJBJTIwQ29tcG9uZW50U3BlYyVFRiVCQyU4OCVFNSVBRSU4MyVFNiU5OCVBRiVFNyU5QiVCOCVFNSU5MCU4QyVFNyU5QSU4NCVFNiVBMyU4MCVFNiU5RiVBNSVFNyU4MiVCOSVFRiVCQyU4QyVFNiU5RCVBNSVFOCU4NyVBQSVFNyU5QiVCOCVFNSU5MCU4QyVFNyU5QSU4NCVFNCVCQiU5MyVFNSVCQSU5MyUyRiVFNSVBRCU5MCVFNiU5NiU4NyVFNCVCQiVCNiVFNSVBNCVCOSVFRiVCQyU4OSUwQXNwZWNfZHVwbGljYXRlZCUyMCUzRCUyMENvbXBvbmVudFNwZWMobmFtZSUzRCUyMnRleHRfZW5jb2Rlcl9kdXBsaWNhdGVkJTIyJTJDJTIwcmVwbyUzRCUyMnN0YWJpbGl0eWFpJTJGc3RhYmxlLWRpZmZ1c2lvbi14bC1iYXNlLTEuMCUyMiUyQyUyMHN1YmZvbGRlciUzRCUyMnRleHRfZW5jb2RlciUyMiUyQyUyMHR5JTBBcGVfaGludCUzRENMSVBUZXh0TW9kZWwpJTBBJTBBJTIzJTIwJUU1JThBJUEwJUU4JUJEJUJEJUU1JUI5JUI2JUU2JUI3JUJCJUU1JThBJUEwJUU0JUI4JUE0JUU0JUI4JUFBJUU3JUJCJTg0JUU0JUJCJUI2JTIwLSUyMCVFNyVBRSVBMSVFNyU5MCU4NiVFNSU5OSVBOCVFNCVCQyU5QSVFNiVBMyU4MCVFNiVCNSU4QiVFNSU4OCVCMCVFNSVBRSU4MyVFNCVCQiVBQyVFNiU5OCVBRiVFNSU5MCU4QyVFNCVCOCU4MCVFNCVCOCVBQSVFNiVBOCVBMSVFNSU5RSU4QiUwQWNvbXAuYWRkKCUyMnRleHRfZW5jb2RlciUyMiUyQyUyMHNwZWMubG9hZCgpKSUwQWNvbXAuYWRkKCUyMnRleHRfZW5jb2Rlcl9kdXBsaWNhdGVkJTIyJTJDJTIwc3BlY19kdXBsaWNhdGVkLmxvYWQoKSk=",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> ComponentSpec, ComponentsManager | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> CLIPTextModel | |
| comp = ComponentsManager() | |
| <span class="hljs-comment"># 为第一个文本编码器创建 ComponentSpec</span> | |
| spec = ComponentSpec(name=<span class="hljs-string">"text_encoder"</span>, repo=<span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, subfolder=<span class="hljs-string">"text_encoder"</span>, type_hint=AutoModel) | |
| <span class="hljs-comment"># 为重复的文本编码器创建 ComponentSpec(它是相同的检查点,来自相同的仓库/子文件夹)</span> | |
| spec_duplicated = ComponentSpec(name=<span class="hljs-string">"text_encoder_duplicated"</span>, repo=<span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, subfolder=<span class="hljs-string">"text_encoder"</span>, ty | |
| pe_hint=CLIPTextModel) | |
| <span class="hljs-comment"># 加载并添加两个组件 - 管理器会检测到它们是同一个模型</span> | |
| comp.add(<span class="hljs-string">"text_encoder"</span>, spec.load()) | |
| comp.add(<span class="hljs-string">"text_encoder_duplicated"</span>, spec_duplicated.load())`,lang:"py",wrap:!1});var T=l(h,4);s(T,{code:"Q29tcG9uZW50c01hbmFnZXIlM0ElMjBhZGRpbmclMjBjb21wb25lbnQlMjAndGV4dF9lbmNvZGVyX2R1cGxpY2F0ZWRfMTM5OTE3NTgwNjgyNjcyJyUyQyUyMGJ1dCUyMGl0JTIwaGFzJTIwZHVwbGljYXRlJTIwbG9hZF9pZCUyMCdzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlN0N0ZXh0X2VuY29kZXIlN0NudWxsJTdDbnVsbCclMjB3aXRoJTIwZXhpc3RpbmclMjBjb21wb25lbnRzJTNBJTIwdGV4dF9lbmNvZGVyXzEzOTkxODUwNjI0NjgzMi4lMjBUbyUyMHJlbW92ZSUyMGElMjBkdXBsaWNhdGUlMkMlMjBjYWxsJTIwJTYwY29tcG9uZW50c19tYW5hZ2VyLnJlbW92ZSgnJTNDY29tcG9uZW50X2lkJTNFJyklNjAuJTBBJ3RleHRfZW5jb2Rlcl9kdXBsaWNhdGVkXzEzOTkxNzU4MDY4MjY3Mic=",highlighted:'ComponentsManager: adding component <span class="hljs-string">'text_encoder_duplicated_139917580682672'</span>, but it has duplicate load_id <span class="hljs-string">'stabilityai/stable-diffusion-xl-base-1.0|text_encoder|null|null'</span> <span class="hljs-keyword">with</span> existing components: text_encoder_139918506246832. To remove a duplicate, call `components_manager.remove(<span class="hljs-string">'<component_id>'</span>)`.\n<span class="hljs-string">'text_encoder_duplicated_139917580682672'</span>',lang:"py",wrap:!1});var j=l(T,6);s(j,{code:"dGV4dF9lbmNvZGVyXzIlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMnN0YWJpbGl0eWFpJTJGc3RhYmxlLWRpZmZ1c2lvbi14bC1iYXNlLTEuMCUyMiUyQyUyMHN1YmZvbGRlciUzRCUyMnRleHRfZW5jb2RlciUyMiklMEFjb21wLmFkZCglMjJ0ZXh0X2VuY29kZXIlMjIlMkMlMjB0ZXh0X2VuY29kZXJfMiklMEEndGV4dF9lbmNvZGVyXzEzOTkxNzczMjk4MzY2NCc=",highlighted:`text_encoder_2 = AutoModel.from_pretrained(<span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, subfolder=<span class="hljs-string">"text_encoder"</span>) | |
| comp.add(<span class="hljs-string">"text_encoder"</span>, text_encoder_2) | |
| <span class="hljs-string">'text_encoder_139917732983664'</span>`,lang:"py",wrap:!1});var N=l(j,2);e(N,{title:"集合",local:"集合",headingTag:"h2"});var g=l(N,6);s(g,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMENvbXBvbmVudFNwZWMlMkMlMjBDb21wb25lbnRzTWFuYWdlciUwQSUwQWNvbXAlMjAlM0QlMjBDb21wb25lbnRzTWFuYWdlcigpJTBBJTIzJTIwJUU0JUI4JUJBJUU3JUFDJUFDJUU0JUI4JTgwJUU0JUI4JUFBJTIwVU5ldCUyMCVFNSU4OCU5QiVFNSVCQiVCQSUyMENvbXBvbmVudFNwZWMlMEFzcGVjJTIwJTNEJTIwQ29tcG9uZW50U3BlYyhuYW1lJTNEJTIydW5ldCUyMiUyQyUyMHJlcG8lM0QlMjJzdGFiaWxpdHlhaSUyRnN0YWJsZS1kaWZmdXNpb24teGwtYmFzZS0xLjAlMjIlMkMlMjBzdWJmb2xkZXIlM0QlMjJ1bmV0JTIyJTJDJTIwdHlwZV9oaW50JTNEQXV0b01vZGVsKSUwQSUyMyUyMCVFNCVCOCVCQSVFNSU4RiVBNiVFNCVCOCU4MCVFNCVCOCVBQSUyMFVOZXQlMjAlRTUlODglOUIlRTUlQkIlQkElMjBDb21wb25lbnRTcGVjJTBBc3BlYzIlMjAlM0QlMjBDb21wb25lbnRTcGVjKG5hbWUlM0QlMjJ1bmV0JTIyJTJDJTIwcmVwbyUzRCUyMlJ1bkRpZmZ1c2lvbiUyRkp1Z2dlcm5hdXQtWEwtdjklMjIlMkMlMjBzdWJmb2xkZXIlM0QlMjJ1bmV0JTIyJTJDJTIwdHlwZV9oaW50JTNEQXV0b01vZGVsJTJDJTIwdmFyaWFudCUzRCUyMmZwMTYlMjIpJTBBJTBBJTIzJTIwJUU1JUIwJTg2JUU0JUI4JUE0JUU0JUI4JUFBJTIwVU5ldCUyMCVFNiVCNyVCQiVFNSU4QSVBMCVFNSU4OCVCMCVFNSU5MCU4QyVFNCVCOCU4MCVFNCVCOCVBQSVFOSU5QiU4NiVFNSU5MCU4OCUyMC0lMjAlRTclQUMlQUMlRTQlQkElOEMlRTQlQjglQUElRTUlQjAlODYlRTYlOUIlQkYlRTYlOEQlQTIlRTclQUMlQUMlRTQlQjglODAlRTQlQjglQUElMEFjb21wLmFkZCglMjJ1bmV0JTIyJTJDJTIwc3BlYy5sb2FkKCklMkMlMjBjb2xsZWN0aW9uJTNEJTIyc2R4bCUyMiklMEFjb21wLmFkZCglMjJ1bmV0JTIyJTJDJTIwc3BlYzIubG9hZCgpJTJDJTIwY29sbGVjdGlvbiUzRCUyMnNkeGwlMjIp",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> ComponentSpec, ComponentsManager | |
| comp = ComponentsManager() | |
| <span class="hljs-comment"># 为第一个 UNet 创建 ComponentSpec</span> | |
| spec = ComponentSpec(name=<span class="hljs-string">"unet"</span>, repo=<span class="hljs-string">"stabilityai/stable-diffusion-xl-base-1.0"</span>, subfolder=<span class="hljs-string">"unet"</span>, type_hint=AutoModel) | |
| <span class="hljs-comment"># 为另一个 UNet 创建 ComponentSpec</span> | |
| spec2 = ComponentSpec(name=<span class="hljs-string">"unet"</span>, repo=<span class="hljs-string">"RunDiffusion/Juggernaut-XL-v9"</span>, subfolder=<span class="hljs-string">"unet"</span>, type_hint=AutoModel, variant=<span class="hljs-string">"fp16"</span>) | |
| <span class="hljs-comment"># 将两个 UNet 添加到同一个集合 - 第二个将替换第一个</span> | |
| comp.add(<span class="hljs-string">"unet"</span>, spec.load(), collection=<span class="hljs-string">"sdxl"</span>) | |
| comp.add(<span class="hljs-string">"unet"</span>, spec2.load(), collection=<span class="hljs-string">"sdxl"</span>)`,lang:"py",wrap:!1});var Z=l(g,6);e(Z,{title:"卸载",local:"卸载",headingTag:"h2"});var R=l(Z,4);s(R,{code:"Y29tcC5lbmFibGVfYXV0b19jcHVfb2ZmbG9hZChkZXZpY2UlM0QlMjJjdWRhJTIyKQ==",highlighted:'comp.enable_auto_cpu_offload(device=<span class="hljs-string">"cuda"</span>)',lang:"py",wrap:!1});var G=l(R,6);S(G,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/modular_diffusers/components_manager.md"}),O(2),t(_,c),z()}export{sl as component}; | |
Xet Storage Details
- Size:
- 18.7 kB
- Xet hash:
- 716a9358a3dddb7dafe70e1519075251ac5c99b86c68702d62b2b662947b4f75
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.