Buckets:

HuggingFaceDocBuilder's picture
download
raw
16 kB
import{s as qe,n as Ae,o as Qe}from"../chunks/scheduler.53228c21.js";import{S as Ge,i as Fe,e as n,s as o,c as m,h as He,a as i,d as s,b as a,f as be,g as r,j as M,k as Ue,l as ge,m as l,n as p,t as d,o as u,p as c}from"../chunks/index.100fac89.js";import{C as Le}from"../chunks/CopyLLMTxtMenu.97a22194.js";import{C as T}from"../chunks/CodeBlock.0adb3827.js";import{H as $e,E as Ye}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.ef36e23f.js";function xe(ke){let f,Y,H,x,h,S,w,z,U,ve='The <a href="/docs/diffusers/pr_13788/en/api/models/auto_model#diffusers.AutoModel">AutoModel</a> class automatically detects and loads the correct model class (UNet, transformer, VAE) from a <code>config.json</code> file. You don’t need to know the specific model class name ahead of time. It supports data types and device placement, and works across model types and libraries.',O,j,Ze="The example below loads a transformer from Diffusers and a text encoder from Transformers. Use the <code>subfolder</code> parameter to specify where to load the <code>config.json</code> file from.",P,b,D,g,K,$,Ce='<a href="/docs/diffusers/pr_13788/en/api/models/auto_model#diffusers.AutoModel">AutoModel</a> also loads models from the <a href="https://huggingface.co/models" rel="nofollow">Hub</a> that aren’t included in Diffusers. Set <code>trust_remote_code=True</code> in <a href="/docs/diffusers/pr_13788/en/api/models/auto_model#diffusers.AutoModel.from_pretrained">AutoModel.from_pretrained()</a> to load custom models.',ee,k,_e="A custom model repository needs a Python module with the model class, and a <code>config.json</code> with an <code>auto_map</code> entry that maps <code>&quot;AutoModel&quot;</code> to <code>&quot;module_file.ClassName&quot;</code>.",te,v,se,Z,Ie="The <code>config.json</code> includes the <code>auto_map</code> field pointing to the custom class.",le,C,oe,_,Ve="Then load it with <code>trust_remote_code=True</code>.",ae,I,ne,V,We='For a real-world example, <a href="https://huggingface.co/Overworld/Waypoint-1-Small/tree/main/transformer" rel="nofollow">Overworld/Waypoint-1-Small</a> hosts a custom <code>WorldModel</code> class across several modules in its <code>transformer</code> subfolder.',ie,W,me,B,re,N,Be='If the custom model inherits from the <a href="/docs/diffusers/pr_13788/en/api/models/overview#diffusers.ModelMixin">ModelMixin</a> class, it gets access to the same features as Diffusers model classes, like <a href="../optimization/fp16#regional-compilation">regional compilation</a> and <a href="../optimization/memory#group-offloading">group offloading</a>.',pe,y,F,Ne='As a precaution with <code>trust_remote_code=True</code>, pass a commit hash to the <code>revision</code> argument in <a href="/docs/diffusers/pr_13788/en/api/models/auto_model#diffusers.AutoModel.from_pretrained">AutoModel.from_pretrained()</a> to make sure the code hasn’t been updated with new malicious code (unless you fully trust the model owners).',je,X,de,E,ue,R,Xe="Use <code>register_for_auto_class()</code> to add the <code>auto_map</code> entry to <code>config.json</code> automatically when saving. This avoids having to manually edit the config file.",ce,q,Me,A,Ee="The saved <code>config.json</code> will include the <code>auto_map</code> field.",fe,Q,ye,J,Re='<p>Learn more about implementing custom models in the <a href="../using-diffusers/custom_pipeline_overview#community-components">Community components</a> guide.</p>',Te,G,Je,L,he;return h=new Le({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),w=new $e({props:{title:"AutoModel",local:"automodel",headingTag:"h1"}}),b=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsJTJDJTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEF0cmFuc2Zvcm1lciUyMCUzRCUyMEF1dG9Nb2RlbC5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyUXdlbiUyRlF3ZW4tSW1hZ2UlMjIlMkMlMjBzdWJmb2xkZXIlM0QlMjJ0cmFuc2Zvcm1lciUyMiUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMkMlMjBkZXZpY2VfbWFwJTNEJTIyY3VkYSUyMiUwQSklMEElMEF0ZXh0X2VuY29kZXIlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMlF3ZW4lMkZRd2VuLUltYWdlJTIyJTJDJTIwc3ViZm9sZGVyJTNEJTIydGV4dF9lbmNvZGVyJTIyJTJDJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5iZmxvYXQxNiUyQyUyMGRldmljZV9tYXAlM0QlMjJjdWRhJTIyJTBBKQ==",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoModel, DiffusionPipeline
transformer = AutoModel.from_pretrained(
<span class="hljs-string">&quot;Qwen/Qwen-Image&quot;</span>, subfolder=<span class="hljs-string">&quot;transformer&quot;</span>, torch_dtype=torch.bfloat16, device_map=<span class="hljs-string">&quot;cuda&quot;</span>
)
text_encoder = AutoModel.from_pretrained(
<span class="hljs-string">&quot;Qwen/Qwen-Image&quot;</span>, subfolder=<span class="hljs-string">&quot;text_encoder&quot;</span>, torch_dtype=torch.bfloat16, device_map=<span class="hljs-string">&quot;cuda&quot;</span>
)`,lang:"py",wrap:!1}}),g=new $e({props:{title:"Custom models",local:"custom-models",headingTag:"h2"}}),v=new T({props:{code:"Y3VzdG9tJTJGY3VzdG9tLXRyYW5zZm9ybWVyLW1vZGVsJTJGJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwY29uZmlnLmpzb24lMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjBteV9tb2RlbC5weSUwQSVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCUyMGRpZmZ1c2lvbl9weXRvcmNoX21vZGVsLnNhZmV0ZW5zb3Jz",highlighted:`custom<span class="hljs-regexp">/custom-transformer-model/</span>
├── config.json
├── my_model.py
└── diffusion_pytorch_model.safetensors`,lang:"",wrap:!1}}),C=new T({props:{code:"JTdCJTBBJTIwJTIwJTIyYXV0b19tYXAlMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJBdXRvTW9kZWwlMjIlM0ElMjAlMjJteV9tb2RlbC5NeUN1c3RvbU1vZGVsJTIyJTBBJTIwJTIwJTdEJTBBJTdE",highlighted:`<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;AutoModel&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;my_model.MyCustomModel&quot;</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>`,lang:"json",wrap:!1}}),I=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsJTBBJTBBdHJhbnNmb3JtZXIlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMmN1c3RvbSUyRmN1c3RvbS10cmFuc2Zvcm1lci1tb2RlbCUyMiUyQyUyMHRydXN0X3JlbW90ZV9jb2RlJTNEVHJ1ZSUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMkMlMjBkZXZpY2VfbWFwJTNEJTIyY3VkYSUyMiUwQSk=",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoModel
transformer = AutoModel.from_pretrained(
<span class="hljs-string">&quot;custom/custom-transformer-model&quot;</span>, trust_remote_code=<span class="hljs-literal">True</span>, torch_dtype=torch.bfloat16, device_map=<span class="hljs-string">&quot;cuda&quot;</span>
)`,lang:"py",wrap:!1}}),W=new T({props:{code:"dHJhbnNmb3JtZXIlMkYlMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjBjb25maWcuanNvbiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGF1dG9fbWFwJTNBJTIwJTIybW9kZWwuV29ybGRNb2RlbCUyMiUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMG1vZGVsLnB5JTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwYXR0bi5weSUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMG5uLnB5JTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwY2FjaGUucHklMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjBxdWFudGl6ZS5weSUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMF9faW5pdF9fLnB5JTBBJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJTIwZGlmZnVzaW9uX3B5dG9yY2hfbW9kZWwuc2FmZXRlbnNvcnM=",highlighted:`transformer/
├── config.json # auto_map: <span class="hljs-string">&quot;model.WorldModel&quot;</span>
├── model.<span class="hljs-keyword">py</span>
├── attn.<span class="hljs-keyword">py</span>
├── <span class="hljs-keyword">nn</span>.<span class="hljs-keyword">py</span>
├── cache.<span class="hljs-keyword">py</span>
├── quantize.<span class="hljs-keyword">py</span>
├── __init__.<span class="hljs-keyword">py</span>
└── diffusion_pytorch_model.safetensors`,lang:"",wrap:!1}}),B=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsJTBBJTBBdHJhbnNmb3JtZXIlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMk92ZXJ3b3JsZCUyRldheXBvaW50LTEtU21hbGwlMjIlMkMlMjBzdWJmb2xkZXIlM0QlMjJ0cmFuc2Zvcm1lciUyMiUyQyUyMHRydXN0X3JlbW90ZV9jb2RlJTNEVHJ1ZSUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMkMlMjBkZXZpY2VfbWFwJTNEJTIyY3VkYSUyMiUwQSk=",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> AutoModel
transformer = AutoModel.from_pretrained(
<span class="hljs-string">&quot;Overworld/Waypoint-1-Small&quot;</span>, subfolder=<span class="hljs-string">&quot;transformer&quot;</span>, trust_remote_code=<span class="hljs-literal">True</span>, torch_dtype=torch.bfloat16, device_map=<span class="hljs-string">&quot;cuda&quot;</span>
)`,lang:"py",wrap:!1}}),X=new T({props:{code:"dHJhbnNmb3JtZXIlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMk92ZXJ3b3JsZCUyRldheXBvaW50LTEtU21hbGwlMjIlMkMlMjBzdWJmb2xkZXIlM0QlMjJ0cmFuc2Zvcm1lciUyMiUyQyUyMHRydXN0X3JlbW90ZV9jb2RlJTNEVHJ1ZSUyQyUyMHJldmlzaW9uJTNEJTIyYTNkOGNiMiUyMiUwQSk=",highlighted:`transformer = AutoModel.from_pretrained(
<span class="hljs-string">&quot;Overworld/Waypoint-1-Small&quot;</span>, subfolder=<span class="hljs-string">&quot;transformer&quot;</span>, trust_remote_code=<span class="hljs-literal">True</span>, revision=<span class="hljs-string">&quot;a3d8cb2&quot;</span>
)`,lang:"py",wrap:!1}}),E=new $e({props:{title:"Saving custom models",local:"saving-custom-models",headingTag:"h3"}}),q=new T({props:{code:"JTIzJTIwbXlfbW9kZWwucHklMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwTW9kZWxNaXhpbiUyQyUyMENvbmZpZ01peGluJTBBJTBBY2xhc3MlMjBNeUN1c3RvbU1vZGVsKE1vZGVsTWl4aW4lMkMlMjBDb25maWdNaXhpbiklM0ElMEElMjAlMjAlMjAlMjAuLi4lMEElMEFNeUN1c3RvbU1vZGVsLnJlZ2lzdGVyX2Zvcl9hdXRvX2NsYXNzKCUyMkF1dG9Nb2RlbCUyMiklMEElMEFtb2RlbCUyMCUzRCUyME15Q3VzdG9tTW9kZWwoLi4uKSUwQW1vZGVsLnNhdmVfcHJldHJhaW5lZCglMjIuJTJGbXlfbW9kZWwlMjIp",highlighted:`<span class="hljs-comment"># my_model.py</span>
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> ModelMixin, ConfigMixin
<span class="hljs-keyword">class</span> <span class="hljs-title class_">MyCustomModel</span>(ModelMixin, ConfigMixin):
...
MyCustomModel.register_for_auto_class(<span class="hljs-string">&quot;AutoModel&quot;</span>)
model = MyCustomModel(...)
model.save_pretrained(<span class="hljs-string">&quot;./my_model&quot;</span>)`,lang:"py",wrap:!1}}),Q=new T({props:{code:"JTdCJTBBJTIwJTIwJTIyYXV0b19tYXAlMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJBdXRvTW9kZWwlMjIlM0ElMjAlMjJteV9tb2RlbC5NeUN1c3RvbU1vZGVsJTIyJTBBJTIwJTIwJTdEJTBBJTdE",highlighted:`<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;AutoModel&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;my_model.MyCustomModel&quot;</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>`,lang:"json",wrap:!1}}),G=new Ye({props:{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/en/using-diffusers/automodel.md"}}),{c(){f=n("meta"),Y=o(),H=n("p"),x=o(),m(h.$$.fragment),S=o(),m(w.$$.fragment),z=o(),U=n("p"),U.innerHTML=ve,O=o(),j=n("p"),j.innerHTML=Ze,P=o(),m(b.$$.fragment),D=o(),m(g.$$.fragment),K=o(),$=n("p"),$.innerHTML=Ce,ee=o(),k=n("p"),k.innerHTML=_e,te=o(),m(v.$$.fragment),se=o(),Z=n("p"),Z.innerHTML=Ie,le=o(),m(C.$$.fragment),oe=o(),_=n("p"),_.innerHTML=Ve,ae=o(),m(I.$$.fragment),ne=o(),V=n("p"),V.innerHTML=We,ie=o(),m(W.$$.fragment),me=o(),m(B.$$.fragment),re=o(),N=n("p"),N.innerHTML=Be,pe=o(),y=n("blockquote"),F=n("p"),F.innerHTML=Ne,je=o(),m(X.$$.fragment),de=o(),m(E.$$.fragment),ue=o(),R=n("p"),R.innerHTML=Xe,ce=o(),m(q.$$.fragment),Me=o(),A=n("p"),A.innerHTML=Ee,fe=o(),m(Q.$$.fragment),ye=o(),J=n("blockquote"),J.innerHTML=Re,Te=o(),m(G.$$.fragment),Je=o(),L=n("p"),this.h()},l(e){const t=He("svelte-u9bgzb",document.head);f=i(t,"META",{name:!0,content:!0}),t.forEach(s),Y=a(e),H=i(e,"P",{}),be(H).forEach(s),x=a(e),r(h.$$.fragment,e),S=a(e),r(w.$$.fragment,e),z=a(e),U=i(e,"P",{"data-svelte-h":!0}),M(U)!=="svelte-1gojwd5"&&(U.innerHTML=ve),O=a(e),j=i(e,"P",{"data-svelte-h":!0}),M(j)!=="svelte-1kv6wq5"&&(j.innerHTML=Ze),P=a(e),r(b.$$.fragment,e),D=a(e),r(g.$$.fragment,e),K=a(e),$=i(e,"P",{"data-svelte-h":!0}),M($)!=="svelte-ss0odw"&&($.innerHTML=Ce),ee=a(e),k=i(e,"P",{"data-svelte-h":!0}),M(k)!=="svelte-1tjty29"&&(k.innerHTML=_e),te=a(e),r(v.$$.fragment,e),se=a(e),Z=i(e,"P",{"data-svelte-h":!0}),M(Z)!=="svelte-1e89epm"&&(Z.innerHTML=Ie),le=a(e),r(C.$$.fragment,e),oe=a(e),_=i(e,"P",{"data-svelte-h":!0}),M(_)!=="svelte-1vi7euj"&&(_.innerHTML=Ve),ae=a(e),r(I.$$.fragment,e),ne=a(e),V=i(e,"P",{"data-svelte-h":!0}),M(V)!=="svelte-yinhn7"&&(V.innerHTML=We),ie=a(e),r(W.$$.fragment,e),me=a(e),r(B.$$.fragment,e),re=a(e),N=i(e,"P",{"data-svelte-h":!0}),M(N)!=="svelte-1ko6swk"&&(N.innerHTML=Be),pe=a(e),y=i(e,"BLOCKQUOTE",{class:!0});var we=be(y);F=i(we,"P",{"data-svelte-h":!0}),M(F)!=="svelte-p60lhf"&&(F.innerHTML=Ne),je=a(we),r(X.$$.fragment,we),we.forEach(s),de=a(e),r(E.$$.fragment,e),ue=a(e),R=i(e,"P",{"data-svelte-h":!0}),M(R)!=="svelte-b6hpck"&&(R.innerHTML=Xe),ce=a(e),r(q.$$.fragment,e),Me=a(e),A=i(e,"P",{"data-svelte-h":!0}),M(A)!=="svelte-1gofhq5"&&(A.innerHTML=Ee),fe=a(e),r(Q.$$.fragment,e),ye=a(e),J=i(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),M(J)!=="svelte-nrlzhz"&&(J.innerHTML=Re),Te=a(e),r(G.$$.fragment,e),Je=a(e),L=i(e,"P",{}),be(L).forEach(s),this.h()},h(){Ue(f,"name","hf:doc:metadata"),Ue(f,"content",Se),Ue(y,"class","warning"),Ue(J,"class","note")},m(e,t){ge(document.head,f),l(e,Y,t),l(e,H,t),l(e,x,t),p(h,e,t),l(e,S,t),p(w,e,t),l(e,z,t),l(e,U,t),l(e,O,t),l(e,j,t),l(e,P,t),p(b,e,t),l(e,D,t),p(g,e,t),l(e,K,t),l(e,$,t),l(e,ee,t),l(e,k,t),l(e,te,t),p(v,e,t),l(e,se,t),l(e,Z,t),l(e,le,t),p(C,e,t),l(e,oe,t),l(e,_,t),l(e,ae,t),p(I,e,t),l(e,ne,t),l(e,V,t),l(e,ie,t),p(W,e,t),l(e,me,t),p(B,e,t),l(e,re,t),l(e,N,t),l(e,pe,t),l(e,y,t),ge(y,F),ge(y,je),p(X,y,null),l(e,de,t),p(E,e,t),l(e,ue,t),l(e,R,t),l(e,ce,t),p(q,e,t),l(e,Me,t),l(e,A,t),l(e,fe,t),p(Q,e,t),l(e,ye,t),l(e,J,t),l(e,Te,t),p(G,e,t),l(e,Je,t),l(e,L,t),he=!0},p:Ae,i(e){he||(d(h.$$.fragment,e),d(w.$$.fragment,e),d(b.$$.fragment,e),d(g.$$.fragment,e),d(v.$$.fragment,e),d(C.$$.fragment,e),d(I.$$.fragment,e),d(W.$$.fragment,e),d(B.$$.fragment,e),d(X.$$.fragment,e),d(E.$$.fragment,e),d(q.$$.fragment,e),d(Q.$$.fragment,e),d(G.$$.fragment,e),he=!0)},o(e){u(h.$$.fragment,e),u(w.$$.fragment,e),u(b.$$.fragment,e),u(g.$$.fragment,e),u(v.$$.fragment,e),u(C.$$.fragment,e),u(I.$$.fragment,e),u(W.$$.fragment,e),u(B.$$.fragment,e),u(X.$$.fragment,e),u(E.$$.fragment,e),u(q.$$.fragment,e),u(Q.$$.fragment,e),u(G.$$.fragment,e),he=!1},d(e){e&&(s(Y),s(H),s(x),s(S),s(z),s(U),s(O),s(j),s(P),s(D),s(K),s($),s(ee),s(k),s(te),s(se),s(Z),s(le),s(oe),s(_),s(ae),s(ne),s(V),s(ie),s(me),s(re),s(N),s(pe),s(y),s(de),s(ue),s(R),s(ce),s(Me),s(A),s(fe),s(ye),s(J),s(Te),s(Je),s(L)),s(f),c(h,e),c(w,e),c(b,e),c(g,e),c(v,e),c(C,e),c(I,e),c(W,e),c(B,e),c(X),c(E,e),c(q,e),c(Q,e),c(G,e)}}}const Se='{"title":"AutoModel","local":"automodel","sections":[{"title":"Custom models","local":"custom-models","sections":[{"title":"Saving custom models","local":"saving-custom-models","sections":[],"depth":3}],"depth":2}],"depth":1}';function ze(ke){return Qe(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class tt extends Ge{constructor(f){super(),Fe(this,f,ze,xe,qe,{})}}export{tt as component};

Xet Storage Details

Size:
16 kB
·
Xet hash:
310cdae28dec1109691b3d3fbc16f23c7c75f2ca92d5899024db9193b824d80e

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