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 a,c as m,h as He,a as i,d as s,b as o,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.cac5d66a.js";import{C as Le}from"../chunks/CopyLLMTxtMenu.efae84b2.js";import{C as T}from"../chunks/CodeBlock.606cbaf4.js";import{H as $e,E as Ye}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.de76e98b.js";function xe(ve){let f,Y,H,x,h,S,w,z,U,Ze='The <a href="/docs/diffusers/pr_13832/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,ke="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_13832/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_13832/en/api/models/auto_model#diffusers.AutoModel.from_pretrained">AutoModel.from_pretrained()</a> to load custom models.',ee,v,_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,Z,se,k,Ie="The <code>config.json</code> includes the <code>auto_map</code> field pointing to the custom class.",le,C,ae,_,Ve="Then load it with <code>trust_remote_code=True</code>.",oe,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_13832/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_13832/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"}}),Z=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=a(),H=n("p"),x=a(),m(h.$$.fragment),S=a(),m(w.$$.fragment),z=a(),U=n("p"),U.innerHTML=Ze,O=a(),j=n("p"),j.innerHTML=ke,P=a(),m(b.$$.fragment),D=a(),m(g.$$.fragment),K=a(),$=n("p"),$.innerHTML=Ce,ee=a(),v=n("p"),v.innerHTML=_e,te=a(),m(Z.$$.fragment),se=a(),k=n("p"),k.innerHTML=Ie,le=a(),m(C.$$.fragment),ae=a(),_=n("p"),_.innerHTML=Ve,oe=a(),m(I.$$.fragment),ne=a(),V=n("p"),V.innerHTML=We,ie=a(),m(W.$$.fragment),me=a(),m(B.$$.fragment),re=a(),N=n("p"),N.innerHTML=Be,pe=a(),y=n("blockquote"),F=n("p"),F.innerHTML=Ne,je=a(),m(X.$$.fragment),de=a(),m(E.$$.fragment),ue=a(),R=n("p"),R.innerHTML=Xe,ce=a(),m(q.$$.fragment),Me=a(),A=n("p"),A.innerHTML=Ee,fe=a(),m(Q.$$.fragment),ye=a(),J=n("blockquote"),J.innerHTML=Re,Te=a(),m(G.$$.fragment),Je=a(),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=o(e),H=i(e,"P",{}),be(H).forEach(s),x=o(e),r(h.$$.fragment,e),S=o(e),r(w.$$.fragment,e),z=o(e),U=i(e,"P",{"data-svelte-h":!0}),M(U)!=="svelte-au6isd"&&(U.innerHTML=Ze),O=o(e),j=i(e,"P",{"data-svelte-h":!0}),M(j)!=="svelte-1kv6wq5"&&(j.innerHTML=ke),P=o(e),r(b.$$.fragment,e),D=o(e),r(g.$$.fragment,e),K=o(e),$=i(e,"P",{"data-svelte-h":!0}),M($)!=="svelte-14qm1bw"&&($.innerHTML=Ce),ee=o(e),v=i(e,"P",{"data-svelte-h":!0}),M(v)!=="svelte-1tjty29"&&(v.innerHTML=_e),te=o(e),r(Z.$$.fragment,e),se=o(e),k=i(e,"P",{"data-svelte-h":!0}),M(k)!=="svelte-1e89epm"&&(k.innerHTML=Ie),le=o(e),r(C.$$.fragment,e),ae=o(e),_=i(e,"P",{"data-svelte-h":!0}),M(_)!=="svelte-1vi7euj"&&(_.innerHTML=Ve),oe=o(e),r(I.$$.fragment,e),ne=o(e),V=i(e,"P",{"data-svelte-h":!0}),M(V)!=="svelte-yinhn7"&&(V.innerHTML=We),ie=o(e),r(W.$$.fragment,e),me=o(e),r(B.$$.fragment,e),re=o(e),N=i(e,"P",{"data-svelte-h":!0}),M(N)!=="svelte-1rj0qvc"&&(N.innerHTML=Be),pe=o(e),y=i(e,"BLOCKQUOTE",{class:!0});var we=be(y);F=i(we,"P",{"data-svelte-h":!0}),M(F)!=="svelte-tfppf"&&(F.innerHTML=Ne),je=o(we),r(X.$$.fragment,we),we.forEach(s),de=o(e),r(E.$$.fragment,e),ue=o(e),R=i(e,"P",{"data-svelte-h":!0}),M(R)!=="svelte-b6hpck"&&(R.innerHTML=Xe),ce=o(e),r(q.$$.fragment,e),Me=o(e),A=i(e,"P",{"data-svelte-h":!0}),M(A)!=="svelte-1gofhq5"&&(A.innerHTML=Ee),fe=o(e),r(Q.$$.fragment,e),ye=o(e),J=i(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),M(J)!=="svelte-nrlzhz"&&(J.innerHTML=Re),Te=o(e),r(G.$$.fragment,e),Je=o(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,v,t),l(e,te,t),p(Z,e,t),l(e,se,t),l(e,k,t),l(e,le,t),p(C,e,t),l(e,ae,t),l(e,_,t),l(e,oe,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(Z.$$.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(Z.$$.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(v),s(te),s(se),s(k),s(le),s(ae),s(_),s(oe),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(Z,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(ve){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:
454c3efb37a8febaa969166a75c1ec69a033b62ebca3fe9fec7eb5935ece598f

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