Buckets:
| import{s as Nt,n as Bt,o as Zt}from"../chunks/scheduler.f3b1e791.js";import{S as Wt,i as Gt,e as a,s as n,c as r,h as St,a as i,d as t,b as M,f as Rt,g as y,j as o,k as vt,l as Qt,m as s,n as p,t as T,o as U,p as J}from"../chunks/index.023a9934.js";import{C as Ht}from"../chunks/CopyLLMTxtMenu.c780467c.js";import{C as w}from"../chunks/CodeBlock.fc650646.js";import{H as c,E as Lt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.fb377ec3.js";function Vt(Kl){let m,Ne,Re,Be,u,Ze,d,We,j,Ol=`A kernel can provide layers in addition to kernel functions. A layer from | |
| the Hub can replace the <code>forward</code> method of an existing layer for a certain | |
| device type. This makes it possible to provide more performant kernels for | |
| existing layers.`,Ge,C,Dl=`See <a href="kernel-requirements">Kernel requirements</a> for more information on the | |
| requirements of Hub layers.`,Se,I,Qe,f,He,h,et=`A layer can be made extensible with the <a href="/docs/kernels/pr_607/en/api/layers#kernels.use_kernel_forward_from_hub">use_kernel_forward_from_hub()</a> | |
| decorator. For example:`,Le,A,Ve,b,lt=`The decorator does not change the behavior of the class — it annotates | |
| the class with the given name (here <code>SiluAndMul</code>). The <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> function | |
| described below uses this name to look up kernels for the layer.`,xe,k,Xe,g,tt=`An existing layer that does not (yet) have the <a href="/docs/kernels/pr_607/en/api/layers#kernels.use_kernel_forward_from_hub">use_kernel_forward_from_hub()</a> | |
| decorator can be made extensible using the <a href="/docs/kernels/pr_607/en/api/layers#kernels.replace_kernel_forward_from_hub">replace_kernel_forward_from_hub()</a> | |
| function:`,ze,$,Fe,_,st=`<strong>Warning:</strong> we strongly recommend using layers with a decorator, since | |
| it signifies that the maintainer intends to keep the <code>forward</code> signature | |
| compatible with layers from the hub.`,qe,E,Ye,R,nt=`Sometimes it can be useful to make a function extensible, for example | |
| because the function cannot be replaced by a layer. In such cases, you | |
| can annotate the function with the <a href="/docs/kernels/pr_607/en/api/layers#kernels.use_kernel_func_from_hub">use_kernel_func_from_hub()</a> decorator:`,Pe,v,Ke,N,Mt=`This will replace the function by an instantiated <code>torch.nn.Module</code> | |
| (singleton) that calls the function itself in its forward method.`,Oe,B,at=`<strong>Note:</strong> for kernelization to see the function, it must be a member of | |
| another <code>torch.nn.Module</code> that is part of the model. For example:`,De,Z,el,W,ll,G,it=`A model will not use Hub kernels by default, even if it contains extensible | |
| layers. To enable the use of Hub kernels in the model, it needs to be | |
| ‘kernelized’ using the <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> function. This function traverses the | |
| model graph and replaces the <code>forward</code> methods of extensible layers for which | |
| Hub kernels are registered. <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> can be used as follows:`,tl,S,sl,Q,rt=`The <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> function modifies the model in-place, the model itself is | |
| returned as a convenience. The <code>mode</code> specifies that the model will be used | |
| in inference. Similarly, you can ask <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> to prepare the model for | |
| training:`,nl,H,Ml,L,yt=`A model that is kernelized for training can also be used for inference, but | |
| not the other way around. If you want to change the mode of the kernelized | |
| model, you can just run <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> on the model again with the new mode.`,al,V,ot=`If you want to compile a model with <code>torch.compile</code>, this should be indicated | |
| in the mode as well. You can do this by combining <code>Mode.INFERENCE</code> or | |
| <code>Mode.TRAINING</code> with <code>Mode.TORCH_COMPILE</code> using the set union (<code>|</code>) operator:`,il,x,rl,X,yl,z,pt=`Kernels can be registered per device type. For instance, separate <code>cuda</code> and | |
| <code>metal</code> kernels could be registered for the name <code>SiluAndMul</code>. By default, | |
| <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> will try to infer the device type from the model’s parameters. | |
| You can pass the device type to <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> if the device type cannot be | |
| inferred (e.g. because the model has no parameters):`,ol,F,pl,q,Tl,Y,Tt=`If the <code>TRAINING</code> and/or <code>TORCH_COMPILE</code> modes are used, but a registered | |
| kernel does not support backward passes or <code>torch.compile</code> respectively, | |
| <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> will fall back to the original, non-kernelized, layer. You | |
| can let <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> raise an exception instead by using <code>use_fallback=False</code>:`,Ul,P,Jl,K,Ut="This can be useful if you want to guarantee that Hub kernels are used.",wl,O,cl,D,Jt=`The kernels that are used are logged at the <code>INFO</code> level by <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a>. | |
| See the <a href="https://docs.python.org/3/library/logging.html" rel="nofollow">Python logging</a> | |
| documentation for information on how to configure logging.`,ml,ee,ul,le,wt=`<a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> relies on kernel mappings to find Hub kernels for layers. | |
| Kernel mappings map a kernel name such as <code>SiluAndMul</code> to a kernel on | |
| the Hub. For example:`,dl,te,jl,se,ct=`This uses version <code>1</code> of the <code>SiluAndMul</code> kernel layer from | |
| <code>kernels-community/activation</code> for the <code>cuda</code> and <code>rocm</code> backends. Kernel | |
| layers are versioned using a major version number. Using <code>version=1</code> | |
| will get the latest kernel build from the <code>v1</code> branch. Kernel layers | |
| within a version branch must never break the API or remove builds for | |
| older PyTorch versions. This ensures that your code will continue to | |
| work. | |
| Hub-backed <a href="/docs/kernels/pr_607/en/api/layers#kernels.LayerRepository">LayerRepository</a> and <a href="/docs/kernels/pr_607/en/api/layers#kernels.FuncRepository">FuncRepository</a> entries must specify | |
| either a <code>version</code> or an explicit <code>revision</code>.`,Cl,ne,mt='You can register a mapping, like the one above, using <a href="/docs/kernels/pr_607/en/api/layers#kernels.register_kernel_mapping">register_kernel_mapping()</a>:',Il,Me,fl,ae,ut=`This will register the kernel mapping in the current context, which is | |
| normally global. It is recommended to scope the mapping to where it is | |
| used with the <a href="/docs/kernels/pr_607/en/api/layers#kernels.use_kernel_mapping">use_kernel_mapping()</a> context manager:`,hl,ie,Al,re,dt=`This ensures that the mapping is not active anymore outside the | |
| <code>with</code>-scope.`,bl,ye,jt=`If the layer is stateless (it does not use member variables in its forward <em>or</em> it was | |
| originally a function that was converted into a kernel layer with | |
| <a href="/docs/kernels/pr_607/en/api/layers#kernels.use_kernel_func_from_hub">use_kernel_func_from_hub()</a>), it can also be mapped to a kernel function:`,kl,oe,gl,pe,$l,Te,Ct=`You might want to register two different kernels for a particular layer, | |
| where one kernel is optimized for a specific mode. You can do so by | |
| registering layer repositories for specific modes. For example:`,_l,Ue,El,Je,It=`The <a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> function will attempt to use the following registered | |
| kernels for a given mode:`,Rl,we,ft=`<li><code>INFERENCE</code>: <code>INFERENCE</code> → <code>INFERENCE | TORCH_COMPILE</code> → <code>TRAINING</code> → | |
| <code>TRAINING | TORCH_COMPILE</code> → <code>FALLBACK</code></li> <li><code>INFERENCE | TORCH_COMPILE</code>: <code>INFERENCE | TORCH_COMPILE</code> → | |
| <code>TRAINING | TORCH_COMPILE</code> → <code>FALLBACK</code></li> <li><code>TRAINING</code>: <code>TRAINING</code> → <code>TRAINING | TORCH_COMPILE</code> → <code>FALLBACK</code></li> <li><code>TRAINING | TORCH_COMPILE</code>: <code>TRAINING | TORCH_COMPILE</code> → <code>FALLBACK</code></li>`,vl,ce,ht=`<code>Mode.FALLBACK</code> is a special mode that is used when no other mode matches. It | |
| is also used when a kernel is registered without a mode, as described in the | |
| previous section.`,Nl,me,Bl,ue,At=`In this case, both <code>Mode.INFERENCE | Mode.TORCH_COMPILE</code> and | |
| <code>Mode.TRAINING | Mode.TORCH_COMPILE</code> will use the <code>Mode.FALLBACK</code> kernel, | |
| since the other kernels do not support <code>torch.compile</code>.`,Zl,de,Wl,je,bt=`Some kernels only work with newer CUDA architectures. For instance, some | |
| kernels require capability 9.0 for the TMA unit on Hopper GPUs. <code>kernels</code> | |
| supports registering layers for a range of CUDA capabilities. To do so, | |
| you need to register the layer for a <a href="/docs/kernels/pr_607/en/api/layers#kernels.Device">Device</a> with type <code>cuda</code> and | |
| set the supported range of CUDA capabilities with using <code>CUDAProperties</code>:`,Gl,Ce,Sl,Ie,kt="Capabilities behave as follows:",Ql,fe,gt=`<li><p>The minimum and maximum capabilities are inclusive.</p></li> <li><p>When a new kernel is registered with the same min/max capabilities as | |
| an existing kernel, the new kernel will replace the old kernel.</p></li> <li><p>When there are multiple kernels that support a capability, the kernel | |
| with the smaller capability interval will be used. E.g. given:</p> <ul><li><code>KernelA</code> with <code>min_capability=80</code> and <code>max_capability=89</code>;</li> <li><code>KernelB</code> with <code>min_capability=75</code> and <code>max_capability=89</code>;</li> <li><a href="/docs/kernels/pr_607/en/api/layers#kernels.kernelize">kernelize()</a> runs on a system with capability 8.6.</li></ul> <p>Then <code>KernelA</code> will be used because the interval 80..89 is smaller | |
| than 75..89. The motivation is that kernels with smaller ranges | |
| tend to be more optimized for a specific set of GPUs. <strong>This behavior | |
| might still change in the future.</strong></p></li>`,Hl,he,Ll,Ae,$t=`Registering kernels for the ROCm architecture follows the exact same | |
| pattern as CUDA kernels, using <code>min_capability</code> and <code>max_capability</code> to restrict | |
| a kernel to a range of ROCm capabilities.`,Vl,be,xl,ke,_t=`The <a href="/docs/kernels/pr_607/en/api/layers#kernels.LocalLayerRepository">LocalLayerRepository</a> class is provided to load a repository from | |
| a local directory. For example:`,Xl,ge,zl,$e,Et=`Similarly, the <a href="/docs/kernels/pr_607/en/api/layers#kernels.LocalFuncRepository">LocalFuncRepository</a> class can be used to load a kernel | |
| function from a local directory:`,Fl,_e,ql,Ee,Yl,ve,Pl;return u=new Ht({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),d=new c({props:{title:"Layers",local:"layers",headingTag:"h1"}}),I=new c({props:{title:"Making a layer extensible with kernels from the hub",local:"making-a-layer-extensible-with-kernels-from-the-hub",headingTag:"h2"}}),f=new c({props:{title:"Using a decorator",local:"using-a-decorator",headingTag:"h3"}}),A=new w({props:{code:"JTQwdXNlX2tlcm5lbF9mb3J3YXJkX2Zyb21faHViKCUyMlNpbHVBbmRNdWwlMjIpJTBBY2xhc3MlMjBTaWx1QW5kTXVsKG5uLk1vZHVsZSklM0ElMEElMjAlMjAlMjAlMjBkZWYlMjBmb3J3YXJkKHNlbGYlMkMlMjBpbnB1dCUzQSUyMHRvcmNoLlRlbnNvciklMjAtJTNFJTIwdG9yY2guVGVuc29yJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZCUyMCUzRCUyMGlucHV0LnNoYXBlJTVCLTElNUQlMjAlMkYlMkYlMjAyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwRi5zaWx1KGlucHV0JTVCLi4uJTJDJTIwJTNBZCU1RCklMjAqJTIwaW5wdXQlNUIuLi4lMkMlMjBkJTNBJTVE",highlighted:`<span class="hljs-meta">@use_kernel_forward_from_hub(<span class="hljs-params"><span class="hljs-string">"SiluAndMul"</span></span>)</span> | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">SiluAndMul</span>(nn.Module): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, <span class="hljs-built_in">input</span>: torch.Tensor</span>) -> torch.Tensor: | |
| d = <span class="hljs-built_in">input</span>.shape[-<span class="hljs-number">1</span>] // <span class="hljs-number">2</span> | |
| <span class="hljs-keyword">return</span> F.silu(<span class="hljs-built_in">input</span>[..., :d]) * <span class="hljs-built_in">input</span>[..., d:]`,lang:"python",wrap:!1}}),k=new c({props:{title:"External layers",local:"external-layers",headingTag:"h3"}}),$=new w({props:{code:"ZnJvbSUyMHNvbWVsaWJyYXJ5JTIwaW1wb3J0JTIwU2lsdUFuZE11bCUwQSUwQXJlcGxhY2Vfa2VybmVsX2ZvcndhcmRfZnJvbV9odWIoU2lsdUFuZE11bCUyQyUyMCUyMlNpbHVBbmRNdWwlMjIp",highlighted:`<span class="hljs-keyword">from</span> somelibrary <span class="hljs-keyword">import</span> SiluAndMul | |
| replace_kernel_forward_from_hub(SiluAndMul, <span class="hljs-string">"SiluAndMul"</span>)`,lang:"python",wrap:!1}}),E=new c({props:{title:"Using a function as a layer",local:"using-a-function-as-a-layer",headingTag:"h3"}}),v=new w({props:{code:"JTQwdXNlX2tlcm5lbF9mdW5jX2Zyb21faHViKCUyMnNpbHVfYW5kX211bCUyMiklMEFkZWYlMjBzaWx1X2FuZF9tdWwoeCUzQSUyMHRvcmNoLlRlbnNvciklMjAtJTNFJTIwdG9yY2guVGVuc29yJTNBJTBBJTIwJTIwJTIwJTIwZCUyMCUzRCUyMHguc2hhcGUlNUItMSU1RCUyMCUyRiUyRiUyMDIlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBGLnNpbHUoeCU1Qi4uLiUyQyUyMCUzQWQlNUQpJTIwKiUyMHglNUIuLi4lMkMlMjBkJTNBJTVE",highlighted:`<span class="hljs-meta">@use_kernel_func_from_hub(<span class="hljs-params"><span class="hljs-string">"silu_and_mul"</span></span>)</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">silu_and_mul</span>(<span class="hljs-params">x: torch.Tensor</span>) -> torch.Tensor: | |
| d = x.shape[-<span class="hljs-number">1</span>] // <span class="hljs-number">2</span> | |
| <span class="hljs-keyword">return</span> F.silu(x[..., :d]) * x[..., d:]`,lang:"python",wrap:!1}}),Z=new w({props:{code:"Y2xhc3MlMjBGZWVkRm9yd2FyZChubi5Nb2R1bGUpJTNBJTBBJTIwJTIwZGVmJTIwX19pbml0X18oc2VsZiUyQyUyMGluX2ZlYXR1cmVzJTNBJTIwaW50JTJDJTIwb3V0X2ZlYXR1cmVzJTNBJTIwaW50KSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMHNlbGYubGluZWFyJTIwJTNEJTIwbm4uTGluZWFyKGluX2ZlYXR1cmVzJTJDJTIwb3V0X2ZlYXR1cmVzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME5vdGUlM0ElMjBzaWx1X2FuZF9tdWwlMjBpcyUyMGElMjBUb3JjaCUyMG1vZHVsZS4lMEElMjAlMjAlMjAlMjAlMjAlMjBzZWxmLnNpbHVfYW5kX211bCUyMCUzRCUyMHNpbHVfYW5kX211bCUwQSUwQSUyMCUyMGRlZiUyMGZvcndhcmQoc2VsZiUyQyUyMHglM0ElMjB0b3JjaC5UZW5zb3IpJTIwLSUzRSUyMHRvcmNoLlRlbnNvciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMHNlbGYuc2lsdV9hbmRfbXVsKHNlbGYubGluZWFyKHgpKQ==",highlighted:`<span class="hljs-keyword">class</span> <span class="hljs-title class_">FeedForward</span>(nn.Module): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, in_features: <span class="hljs-built_in">int</span>, out_features: <span class="hljs-built_in">int</span></span>): | |
| self.linear = nn.Linear(in_features, out_features) | |
| <span class="hljs-comment"># Note: silu_and_mul is a Torch module.</span> | |
| self.silu_and_mul = silu_and_mul | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, x: torch.Tensor</span>) -> torch.Tensor: | |
| <span class="hljs-keyword">return</span> self.silu_and_mul(self.linear(x))`,lang:"python",wrap:!1}}),W=new c({props:{title:"Kernelizing a model",local:"kernelizing-a-model",headingTag:"h2"}}),S=new w({props:{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLklORkVSRU5DRSk=",highlighted:`model = MyModel(...) | |
| model = kernelize(model, mode=Mode.INFERENCE)`,lang:"python",wrap:!1}}),H=new w({props:{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLlRSQUlOSU5HKQ==",highlighted:`model = MyModel(...) | |
| model = kernelize(model, mode=Mode.TRAINING)`,lang:"python",wrap:!1}}),x=new w({props:{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEElMEElMjMlMjBJbmZlcmVuY2UlMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLklORkVSRU5DRSUyMCU3QyUyME1vZGUuVE9SQ0hfQ09NUElMRSklMEElMEElMjMlMjBUcmFpbmluZyUwQW1vZGVsJTIwJTNEJTIwa2VybmVsaXplKG1vZGVsJTJDJTIwbW9kZSUzRE1vZGUuVFJBSU5JTkclMjAlN0MlMjBNb2RlLlRPUkNIX0NPTVBJTEUp",highlighted:`model = MyModel(...) | |
| <span class="hljs-comment"># Inference</span> | |
| model = kernelize(model, mode=Mode.INFERENCE | Mode.TORCH_COMPILE) | |
| <span class="hljs-comment"># Training</span> | |
| model = kernelize(model, mode=Mode.TRAINING | Mode.TORCH_COMPILE)`,lang:"python",wrap:!1}}),X=new c({props:{title:"Kernel device",local:"kernel-device",headingTag:"h3"}}),F=new w({props:{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMGRldmljZSUzRCUyMmN1ZGElMjIlMkMlMjBtb2RlJTNETW9kZS5JTkZFUkVOQ0Up",highlighted:`model = MyModel(...) | |
| model = kernelize(model, device=<span class="hljs-string">"cuda"</span>, mode=Mode.INFERENCE)`,lang:"python",wrap:!1}}),q=new c({props:{title:"Fallback forward",local:"fallback-forward",headingTag:"h3"}}),P=new w({props:{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLklORkVSRU5DRSUyMCU3QyUyME1vZGUuVE9SQ0hfQ09NUElMRSUyQyUyMHVzZV9mYWxsYmFjayUzREZhbHNlKQ==",highlighted:`model = MyModel(...) | |
| model = kernelize(model, mode=Mode.INFERENCE | Mode.TORCH_COMPILE, use_fallback=<span class="hljs-literal">False</span>)`,lang:"python",wrap:!1}}),O=new c({props:{title:"Inspecting which kernels are used",local:"inspecting-which-kernels-are-used",headingTag:"h3"}}),ee=new c({props:{title:"Registering a hub kernel for a layer",local:"registering-a-hub-kernel-for-a-layer",headingTag:"h2"}}),te=new w({props:{code:"a2VybmVsX2xheWVyX21hcHBpbmclMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJTaWx1QW5kTXVsJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyY3VkYSUyMiUzQSUyMExheWVyUmVwb3NpdG9yeSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvX2lkJTNEJTIya2VybmVscy1jb21tdW5pdHklMkZhY3RpdmF0aW9uJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGF5ZXJfbmFtZSUzRCUyMlNpbHVBbmRNdWwlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2ZXJzaW9uJTNEMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJyb2NtJTIyJTNBJTIwTGF5ZXJSZXBvc2l0b3J5KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlcG9faWQlM0QlMjJrZXJuZWxzLWNvbW11bml0eSUyRmFjdGl2YXRpb24lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYXllcl9uYW1lJTNEJTIyU2lsdUFuZE11bCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHZlcnNpb24lM0QxJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMCU3RCUwQSU3RA==",highlighted:`kernel_layer_mapping = { | |
| <span class="hljs-string">"SiluAndMul"</span>: { | |
| <span class="hljs-string">"cuda"</span>: LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| <span class="hljs-string">"rocm"</span>: LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ) | |
| } | |
| }`,lang:"python",wrap:!1}}),Me=new w({props:{code:"cmVnaXN0ZXJfa2VybmVsX21hcHBpbmcoa2VybmVsX2xheWVyX21hcHBpbmcp",highlighted:"register_kernel_mapping(kernel_layer_mapping)",lang:"python",wrap:!1}}),ie=new w({props:{code:"d2l0aCUyMHVzZV9rZXJuZWxfbWFwcGluZyhrZXJuZWxfbGF5ZXJfbWFwcGluZyklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBVc2UlMjB0aGUlMjBsYXllciUyMGZvciUyMHdoaWNoJTIwdGhlJTIwbWFwcGluZyUyMGlzJTIwYXBwbGllZC4lMEElMjAlMjAlMjAlMjBtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLlRSQUlOSU5HJTIwJTdDJTIwTW9kZS5UT1JDSF9DT01QSUxFKQ==",highlighted:`<span class="hljs-keyword">with</span> use_kernel_mapping(kernel_layer_mapping): | |
| <span class="hljs-comment"># Use the layer for which the mapping is applied.</span> | |
| model = kernelize(model, mode=Mode.TRAINING | Mode.TORCH_COMPILE)`,lang:"python",wrap:!1}}),oe=new w({props:{code:"a2VybmVsX2xheWVyX21hcHBpbmclMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJTaWx1QW5kTXVsJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyY3VkYSUyMiUzQSUyMEZ1bmNSZXBvc2l0b3J5KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlcG9faWQlM0QlMjJrZXJuZWxzLWNvbW11bml0eSUyRmFjdGl2YXRpb24lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmdW5jX25hbWUlM0QlMjJzaWx1X2FuZF9tdWwlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2ZXJzaW9uJTNEMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMkMlMEElMjAlMjAlMjAlMjAlN0QlMEElN0Q=",highlighted:`kernel_layer_mapping = { | |
| <span class="hljs-string">"SiluAndMul"</span>: { | |
| <span class="hljs-string">"cuda"</span>: FuncRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation"</span>, | |
| func_name=<span class="hljs-string">"silu_and_mul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| } | |
| }`,lang:"python",wrap:!1}}),pe=new c({props:{title:"Registering kernels for specific modes",local:"registering-kernels-for-specific-modes",headingTag:"h3"}}),Ue=new w({props:{code:"a2VybmVsX2xheWVyX21hcHBpbmclMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJTaWx1QW5kTXVsJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyY3VkYSUyMiUzQSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME1vZGUuSU5GRVJFTkNFJTNBJTIwTGF5ZXJSZXBvc2l0b3J5KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlcG9faWQlM0QlMjJrZXJuZWxzLWNvbW11bml0eSUyRmFjdGl2YXRpb24taW5mZXJlbmNlLW9wdGltaXplZCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxheWVyX25hbWUlM0QlMjJTaWx1QW5kTXVsJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRDElMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTW9kZS5UUkFJTklORyUyMCU3QyUyME1vZGUuVE9SQ0hfQ09NUElMRSUzQSUyMExheWVyUmVwb3NpdG9yeSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvX2lkJTNEJTIya2VybmVscy1jb21tdW5pdHklMkZhY3RpdmF0aW9uLXRyYWluaW5nLW9wdGltaXplZCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxheWVyX25hbWUlM0QlMjJTaWx1QW5kTXVsJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRDElMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTdEJTBBJTdE",highlighted:`kernel_layer_mapping = { | |
| <span class="hljs-string">"SiluAndMul"</span>: { | |
| <span class="hljs-string">"cuda"</span>: { | |
| Mode.INFERENCE: LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation-inference-optimized"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| Mode.TRAINING | Mode.TORCH_COMPILE: LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation-training-optimized"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| } | |
| } | |
| }`,lang:"python",wrap:!1}}),me=new w({props:{code:"a2VybmVsX2xheWVyX21hcHBpbmclMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJTaWx1QW5kTXVsJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyY3VkYSUyMiUzQSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME1vZGUuRkFMTEJBQ0slM0ElMjBMYXllclJlcG9zaXRvcnkoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVwb19pZCUzRCUyMmtlcm5lbHMtY29tbXVuaXR5JTJGYWN0aXZhdGlvbiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxheWVyX25hbWUlM0QlMjJTaWx1QW5kTXVsJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRDElMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTW9kZS5JTkZFUkVOQ0UlM0ElMjBMYXllclJlcG9zaXRvcnkoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVwb19pZCUzRCUyMmtlcm5lbHMtY29tbXVuaXR5JTJGYWN0aXZhdGlvbi1pbmZlcmVuY2Utb3B0aW1pemVkJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGF5ZXJfbmFtZSUzRCUyMlNpbHVBbmRNdWwlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2ZXJzaW9uJTNEMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNb2RlLlRSQUlOSU5HJTNBJTIwTGF5ZXJSZXBvc2l0b3J5KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlcG9faWQlM0QlMjJrZXJuZWxzLWNvbW11bml0eSUyRmFjdGl2YXRpb24tdHJhaW5pbmctb3B0aW1pemVkJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGF5ZXJfbmFtZSUzRCUyMlNpbHVBbmRNdWwlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2ZXJzaW9uJTNEMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlN0QlMEElN0Q=",highlighted:`kernel_layer_mapping = { | |
| <span class="hljs-string">"SiluAndMul"</span>: { | |
| <span class="hljs-string">"cuda"</span>: { | |
| Mode.FALLBACK: LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| Mode.INFERENCE: LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation-inference-optimized"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| Mode.TRAINING: LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation-training-optimized"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| } | |
| } | |
| }`,lang:"python",wrap:!1}}),de=new c({props:{title:"Registering kernels for specific CUDA capabilities",local:"registering-kernels-for-specific-cuda-capabilities",headingTag:"h3"}}),Ce=new w({props:{code:"a2VybmVsX2xheWVyX21hcHBpbmclMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJTaWx1QW5kTXVsJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwRGV2aWNlKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHR5cGUlM0QlMjJjdWRhJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvcGVydGllcyUzRENVREFQcm9wZXJ0aWVzKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1pbl9jYXBhYmlsaXR5JTNENzUlMkMlMjBtYXhfY2FwYWJpbGl0eSUzRDg5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklM0ElMjBMYXllclJlcG9zaXRvcnkoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVwb19pZCUzRCUyMmtlcm5lbHMtY29tbXVuaXR5JTJGYWN0aXZhdGlvbiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxheWVyX25hbWUlM0QlMjJTaWx1QW5kTXVsJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRDElMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwRGV2aWNlKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHR5cGUlM0QlMjJjdWRhJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvcGVydGllcyUzRENVREFQcm9wZXJ0aWVzKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1pbl9jYXBhYmlsaXR5JTNEOTAlMkMlMjBtYXhfY2FwYWJpbGl0eSUzRHN5cy5tYXhzaXplJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklM0ElMjBMYXllclJlcG9zaXRvcnkoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVwb19pZCUzRCUyMmtlcm5lbHMtY29tbXVuaXR5JTJGYWN0aXZhdGlvbi1ob3BwZXIlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYXllcl9uYW1lJTNEJTIyU2lsdUFuZE11bCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHZlcnNpb24lM0QxJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUyQyUwQSUyMCUyMCUyMCUyMCU3RCUwQSU3RA==",highlighted:`kernel_layer_mapping = { | |
| <span class="hljs-string">"SiluAndMul"</span>: { | |
| Device( | |
| <span class="hljs-built_in">type</span>=<span class="hljs-string">"cuda"</span>, | |
| properties=CUDAProperties( | |
| min_capability=<span class="hljs-number">75</span>, max_capability=<span class="hljs-number">89</span> | |
| ), | |
| ): LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| Device( | |
| <span class="hljs-built_in">type</span>=<span class="hljs-string">"cuda"</span>, | |
| properties=CUDAProperties( | |
| min_capability=<span class="hljs-number">90</span>, max_capability=sys.maxsize | |
| ), | |
| ): LayerRepository( | |
| repo_id=<span class="hljs-string">"kernels-community/activation-hopper"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| version=<span class="hljs-number">1</span>, | |
| ), | |
| } | |
| }`,lang:"python",wrap:!1}}),he=new c({props:{title:"Registering kernels for specific ROCm capabilities",local:"registering-kernels-for-specific-rocm-capabilities",headingTag:"h3"}}),be=new c({props:{title:"Loading from a local repository for testing",local:"loading-from-a-local-repository-for-testing",headingTag:"h3"}}),ge=new w({props:{code:"d2l0aCUyMHVzZV9rZXJuZWxfbWFwcGluZyglMEElMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJTaWx1QW5kTXVsJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyY3VkYSUyMiUzQSUyMExvY2FsTGF5ZXJSZXBvc2l0b3J5KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlcG9fcGF0aCUzRCUyMiUyRmhvbWUlMkZkYW5pZWwlMkZrZXJuZWxzJTJGYWN0aXZhdGlvbiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhY2thZ2VfbmFtZSUzRCUyMmFjdGl2YXRpb24lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYXllcl9uYW1lJTNEJTIyU2lsdUFuZE11bCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlN0QlMkMlMEElMjAlMjAlMjAlMjBpbmhlcml0X21hcHBpbmclM0RGYWxzZSUyQyUwQSklM0ElMEElMjAlMjAlMjAlMjBrZXJuZWxpemUobGluZWFyJTJDJTIwbW9kZSUzRE1vZGUuSU5GRVJFTkNFKQ==",highlighted:`<span class="hljs-keyword">with</span> use_kernel_mapping( | |
| { | |
| <span class="hljs-string">"SiluAndMul"</span>: { | |
| <span class="hljs-string">"cuda"</span>: LocalLayerRepository( | |
| repo_path=<span class="hljs-string">"/home/daniel/kernels/activation"</span>, | |
| package_name=<span class="hljs-string">"activation"</span>, | |
| layer_name=<span class="hljs-string">"SiluAndMul"</span>, | |
| ) | |
| } | |
| }, | |
| inherit_mapping=<span class="hljs-literal">False</span>, | |
| ): | |
| kernelize(linear, mode=Mode.INFERENCE)`,lang:"python",wrap:!1}}),_e=new w({props:{code:"d2l0aCUyMHVzZV9rZXJuZWxfbWFwcGluZyglMEElMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJzaWx1X2FuZF9tdWwlMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJjdWRhJTIyJTNBJTIwTG9jYWxGdW5jUmVwb3NpdG9yeSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvX3BhdGglM0QlMjIlMkZob21lJTJGZGFuaWVsJTJGa2VybmVscyUyRmFjdGl2YXRpb24lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwYWNrYWdlX25hbWUlM0QlMjJhY3RpdmF0aW9uJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZnVuY19uYW1lJTNEJTIyc2lsdV9hbmRfbXVsJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCU3RCUyQyUwQSUyMCUyMCUyMCUyMGluaGVyaXRfbWFwcGluZyUzREZhbHNlJTJDJTBBKSUzQSUwQSUyMCUyMCUyMCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLklORkVSRU5DRSk=",highlighted:`<span class="hljs-keyword">with</span> use_kernel_mapping( | |
| { | |
| <span class="hljs-string">"silu_and_mul"</span>: { | |
| <span class="hljs-string">"cuda"</span>: LocalFuncRepository( | |
| repo_path=<span class="hljs-string">"/home/daniel/kernels/activation"</span>, | |
| package_name=<span class="hljs-string">"activation"</span>, | |
| func_name=<span class="hljs-string">"silu_and_mul"</span>, | |
| ) | |
| } | |
| }, | |
| inherit_mapping=<span class="hljs-literal">False</span>, | |
| ): | |
| kernelize(model, mode=Mode.INFERENCE)`,lang:"python",wrap:!1}}),Ee=new Lt({props:{source:"https://github.com/huggingface/kernels/blob/main/docs/source/layers.md"}}),{c(){m=a("meta"),Ne=n(),Re=a("p"),Be=n(),r(u.$$.fragment),Ze=n(),r(d.$$.fragment),We=n(),j=a("p"),j.innerHTML=Ol,Ge=n(),C=a("p"),C.innerHTML=Dl,Se=n(),r(I.$$.fragment),Qe=n(),r(f.$$.fragment),He=n(),h=a("p"),h.innerHTML=et,Le=n(),r(A.$$.fragment),Ve=n(),b=a("p"),b.innerHTML=lt,xe=n(),r(k.$$.fragment),Xe=n(),g=a("p"),g.innerHTML=tt,ze=n(),r($.$$.fragment),Fe=n(),_=a("p"),_.innerHTML=st,qe=n(),r(E.$$.fragment),Ye=n(),R=a("p"),R.innerHTML=nt,Pe=n(),r(v.$$.fragment),Ke=n(),N=a("p"),N.innerHTML=Mt,Oe=n(),B=a("p"),B.innerHTML=at,De=n(),r(Z.$$.fragment),el=n(),r(W.$$.fragment),ll=n(),G=a("p"),G.innerHTML=it,tl=n(),r(S.$$.fragment),sl=n(),Q=a("p"),Q.innerHTML=rt,nl=n(),r(H.$$.fragment),Ml=n(),L=a("p"),L.innerHTML=yt,al=n(),V=a("p"),V.innerHTML=ot,il=n(),r(x.$$.fragment),rl=n(),r(X.$$.fragment),yl=n(),z=a("p"),z.innerHTML=pt,ol=n(),r(F.$$.fragment),pl=n(),r(q.$$.fragment),Tl=n(),Y=a("p"),Y.innerHTML=Tt,Ul=n(),r(P.$$.fragment),Jl=n(),K=a("p"),K.textContent=Ut,wl=n(),r(O.$$.fragment),cl=n(),D=a("p"),D.innerHTML=Jt,ml=n(),r(ee.$$.fragment),ul=n(),le=a("p"),le.innerHTML=wt,dl=n(),r(te.$$.fragment),jl=n(),se=a("p"),se.innerHTML=ct,Cl=n(),ne=a("p"),ne.innerHTML=mt,Il=n(),r(Me.$$.fragment),fl=n(),ae=a("p"),ae.innerHTML=ut,hl=n(),r(ie.$$.fragment),Al=n(),re=a("p"),re.innerHTML=dt,bl=n(),ye=a("p"),ye.innerHTML=jt,kl=n(),r(oe.$$.fragment),gl=n(),r(pe.$$.fragment),$l=n(),Te=a("p"),Te.textContent=Ct,_l=n(),r(Ue.$$.fragment),El=n(),Je=a("p"),Je.innerHTML=It,Rl=n(),we=a("ul"),we.innerHTML=ft,vl=n(),ce=a("p"),ce.innerHTML=ht,Nl=n(),r(me.$$.fragment),Bl=n(),ue=a("p"),ue.innerHTML=At,Zl=n(),r(de.$$.fragment),Wl=n(),je=a("p"),je.innerHTML=bt,Gl=n(),r(Ce.$$.fragment),Sl=n(),Ie=a("p"),Ie.textContent=kt,Ql=n(),fe=a("ul"),fe.innerHTML=gt,Hl=n(),r(he.$$.fragment),Ll=n(),Ae=a("p"),Ae.innerHTML=$t,Vl=n(),r(be.$$.fragment),xl=n(),ke=a("p"),ke.innerHTML=_t,Xl=n(),r(ge.$$.fragment),zl=n(),$e=a("p"),$e.innerHTML=Et,Fl=n(),r(_e.$$.fragment),ql=n(),r(Ee.$$.fragment),Yl=n(),ve=a("p"),this.h()},l(e){const l=St("svelte-u9bgzb",document.head);m=i(l,"META",{name:!0,content:!0}),l.forEach(t),Ne=M(e),Re=i(e,"P",{}),Rt(Re).forEach(t),Be=M(e),y(u.$$.fragment,e),Ze=M(e),y(d.$$.fragment,e),We=M(e),j=i(e,"P",{"data-svelte-h":!0}),o(j)!=="svelte-178x673"&&(j.innerHTML=Ol),Ge=M(e),C=i(e,"P",{"data-svelte-h":!0}),o(C)!=="svelte-35znf1"&&(C.innerHTML=Dl),Se=M(e),y(I.$$.fragment,e),Qe=M(e),y(f.$$.fragment,e),He=M(e),h=i(e,"P",{"data-svelte-h":!0}),o(h)!=="svelte-o1a81h"&&(h.innerHTML=et),Le=M(e),y(A.$$.fragment,e),Ve=M(e),b=i(e,"P",{"data-svelte-h":!0}),o(b)!=="svelte-1j3ehfu"&&(b.innerHTML=lt),xe=M(e),y(k.$$.fragment,e),Xe=M(e),g=i(e,"P",{"data-svelte-h":!0}),o(g)!=="svelte-1n6plwd"&&(g.innerHTML=tt),ze=M(e),y($.$$.fragment,e),Fe=M(e),_=i(e,"P",{"data-svelte-h":!0}),o(_)!=="svelte-13coke1"&&(_.innerHTML=st),qe=M(e),y(E.$$.fragment,e),Ye=M(e),R=i(e,"P",{"data-svelte-h":!0}),o(R)!=="svelte-osrckm"&&(R.innerHTML=nt),Pe=M(e),y(v.$$.fragment,e),Ke=M(e),N=i(e,"P",{"data-svelte-h":!0}),o(N)!=="svelte-1w74xdp"&&(N.innerHTML=Mt),Oe=M(e),B=i(e,"P",{"data-svelte-h":!0}),o(B)!=="svelte-t3eq4x"&&(B.innerHTML=at),De=M(e),y(Z.$$.fragment,e),el=M(e),y(W.$$.fragment,e),ll=M(e),G=i(e,"P",{"data-svelte-h":!0}),o(G)!=="svelte-rcfcci"&&(G.innerHTML=it),tl=M(e),y(S.$$.fragment,e),sl=M(e),Q=i(e,"P",{"data-svelte-h":!0}),o(Q)!=="svelte-1ao8toi"&&(Q.innerHTML=rt),nl=M(e),y(H.$$.fragment,e),Ml=M(e),L=i(e,"P",{"data-svelte-h":!0}),o(L)!=="svelte-6ikxa0"&&(L.innerHTML=yt),al=M(e),V=i(e,"P",{"data-svelte-h":!0}),o(V)!=="svelte-195gdzl"&&(V.innerHTML=ot),il=M(e),y(x.$$.fragment,e),rl=M(e),y(X.$$.fragment,e),yl=M(e),z=i(e,"P",{"data-svelte-h":!0}),o(z)!=="svelte-1xk119y"&&(z.innerHTML=pt),ol=M(e),y(F.$$.fragment,e),pl=M(e),y(q.$$.fragment,e),Tl=M(e),Y=i(e,"P",{"data-svelte-h":!0}),o(Y)!=="svelte-1ovn1zh"&&(Y.innerHTML=Tt),Ul=M(e),y(P.$$.fragment,e),Jl=M(e),K=i(e,"P",{"data-svelte-h":!0}),o(K)!=="svelte-1lkusth"&&(K.textContent=Ut),wl=M(e),y(O.$$.fragment,e),cl=M(e),D=i(e,"P",{"data-svelte-h":!0}),o(D)!=="svelte-1k0ktvj"&&(D.innerHTML=Jt),ml=M(e),y(ee.$$.fragment,e),ul=M(e),le=i(e,"P",{"data-svelte-h":!0}),o(le)!=="svelte-hcxip6"&&(le.innerHTML=wt),dl=M(e),y(te.$$.fragment,e),jl=M(e),se=i(e,"P",{"data-svelte-h":!0}),o(se)!=="svelte-fmqdst"&&(se.innerHTML=ct),Cl=M(e),ne=i(e,"P",{"data-svelte-h":!0}),o(ne)!=="svelte-lidftb"&&(ne.innerHTML=mt),Il=M(e),y(Me.$$.fragment,e),fl=M(e),ae=i(e,"P",{"data-svelte-h":!0}),o(ae)!=="svelte-1y95hx1"&&(ae.innerHTML=ut),hl=M(e),y(ie.$$.fragment,e),Al=M(e),re=i(e,"P",{"data-svelte-h":!0}),o(re)!=="svelte-z3xuuf"&&(re.innerHTML=dt),bl=M(e),ye=i(e,"P",{"data-svelte-h":!0}),o(ye)!=="svelte-4t56px"&&(ye.innerHTML=jt),kl=M(e),y(oe.$$.fragment,e),gl=M(e),y(pe.$$.fragment,e),$l=M(e),Te=i(e,"P",{"data-svelte-h":!0}),o(Te)!=="svelte-1ed3b6y"&&(Te.textContent=Ct),_l=M(e),y(Ue.$$.fragment,e),El=M(e),Je=i(e,"P",{"data-svelte-h":!0}),o(Je)!=="svelte-1prf4r3"&&(Je.innerHTML=It),Rl=M(e),we=i(e,"UL",{"data-svelte-h":!0}),o(we)!=="svelte-ewhtf4"&&(we.innerHTML=ft),vl=M(e),ce=i(e,"P",{"data-svelte-h":!0}),o(ce)!=="svelte-m4furw"&&(ce.innerHTML=ht),Nl=M(e),y(me.$$.fragment,e),Bl=M(e),ue=i(e,"P",{"data-svelte-h":!0}),o(ue)!=="svelte-1oi4pcx"&&(ue.innerHTML=At),Zl=M(e),y(de.$$.fragment,e),Wl=M(e),je=i(e,"P",{"data-svelte-h":!0}),o(je)!=="svelte-1u2bmpv"&&(je.innerHTML=bt),Gl=M(e),y(Ce.$$.fragment,e),Sl=M(e),Ie=i(e,"P",{"data-svelte-h":!0}),o(Ie)!=="svelte-1k7nbkd"&&(Ie.textContent=kt),Ql=M(e),fe=i(e,"UL",{"data-svelte-h":!0}),o(fe)!=="svelte-dj7ryh"&&(fe.innerHTML=gt),Hl=M(e),y(he.$$.fragment,e),Ll=M(e),Ae=i(e,"P",{"data-svelte-h":!0}),o(Ae)!=="svelte-1q9vv7t"&&(Ae.innerHTML=$t),Vl=M(e),y(be.$$.fragment,e),xl=M(e),ke=i(e,"P",{"data-svelte-h":!0}),o(ke)!=="svelte-1k2cj0i"&&(ke.innerHTML=_t),Xl=M(e),y(ge.$$.fragment,e),zl=M(e),$e=i(e,"P",{"data-svelte-h":!0}),o($e)!=="svelte-sxvgop"&&($e.innerHTML=Et),Fl=M(e),y(_e.$$.fragment,e),ql=M(e),y(Ee.$$.fragment,e),Yl=M(e),ve=i(e,"P",{}),Rt(ve).forEach(t),this.h()},h(){vt(m,"name","hf:doc:metadata"),vt(m,"content",xt)},m(e,l){Qt(document.head,m),s(e,Ne,l),s(e,Re,l),s(e,Be,l),p(u,e,l),s(e,Ze,l),p(d,e,l),s(e,We,l),s(e,j,l),s(e,Ge,l),s(e,C,l),s(e,Se,l),p(I,e,l),s(e,Qe,l),p(f,e,l),s(e,He,l),s(e,h,l),s(e,Le,l),p(A,e,l),s(e,Ve,l),s(e,b,l),s(e,xe,l),p(k,e,l),s(e,Xe,l),s(e,g,l),s(e,ze,l),p($,e,l),s(e,Fe,l),s(e,_,l),s(e,qe,l),p(E,e,l),s(e,Ye,l),s(e,R,l),s(e,Pe,l),p(v,e,l),s(e,Ke,l),s(e,N,l),s(e,Oe,l),s(e,B,l),s(e,De,l),p(Z,e,l),s(e,el,l),p(W,e,l),s(e,ll,l),s(e,G,l),s(e,tl,l),p(S,e,l),s(e,sl,l),s(e,Q,l),s(e,nl,l),p(H,e,l),s(e,Ml,l),s(e,L,l),s(e,al,l),s(e,V,l),s(e,il,l),p(x,e,l),s(e,rl,l),p(X,e,l),s(e,yl,l),s(e,z,l),s(e,ol,l),p(F,e,l),s(e,pl,l),p(q,e,l),s(e,Tl,l),s(e,Y,l),s(e,Ul,l),p(P,e,l),s(e,Jl,l),s(e,K,l),s(e,wl,l),p(O,e,l),s(e,cl,l),s(e,D,l),s(e,ml,l),p(ee,e,l),s(e,ul,l),s(e,le,l),s(e,dl,l),p(te,e,l),s(e,jl,l),s(e,se,l),s(e,Cl,l),s(e,ne,l),s(e,Il,l),p(Me,e,l),s(e,fl,l),s(e,ae,l),s(e,hl,l),p(ie,e,l),s(e,Al,l),s(e,re,l),s(e,bl,l),s(e,ye,l),s(e,kl,l),p(oe,e,l),s(e,gl,l),p(pe,e,l),s(e,$l,l),s(e,Te,l),s(e,_l,l),p(Ue,e,l),s(e,El,l),s(e,Je,l),s(e,Rl,l),s(e,we,l),s(e,vl,l),s(e,ce,l),s(e,Nl,l),p(me,e,l),s(e,Bl,l),s(e,ue,l),s(e,Zl,l),p(de,e,l),s(e,Wl,l),s(e,je,l),s(e,Gl,l),p(Ce,e,l),s(e,Sl,l),s(e,Ie,l),s(e,Ql,l),s(e,fe,l),s(e,Hl,l),p(he,e,l),s(e,Ll,l),s(e,Ae,l),s(e,Vl,l),p(be,e,l),s(e,xl,l),s(e,ke,l),s(e,Xl,l),p(ge,e,l),s(e,zl,l),s(e,$e,l),s(e,Fl,l),p(_e,e,l),s(e,ql,l),p(Ee,e,l),s(e,Yl,l),s(e,ve,l),Pl=!0},p:Bt,i(e){Pl||(T(u.$$.fragment,e),T(d.$$.fragment,e),T(I.$$.fragment,e),T(f.$$.fragment,e),T(A.$$.fragment,e),T(k.$$.fragment,e),T($.$$.fragment,e),T(E.$$.fragment,e),T(v.$$.fragment,e),T(Z.$$.fragment,e),T(W.$$.fragment,e),T(S.$$.fragment,e),T(H.$$.fragment,e),T(x.$$.fragment,e),T(X.$$.fragment,e),T(F.$$.fragment,e),T(q.$$.fragment,e),T(P.$$.fragment,e),T(O.$$.fragment,e),T(ee.$$.fragment,e),T(te.$$.fragment,e),T(Me.$$.fragment,e),T(ie.$$.fragment,e),T(oe.$$.fragment,e),T(pe.$$.fragment,e),T(Ue.$$.fragment,e),T(me.$$.fragment,e),T(de.$$.fragment,e),T(Ce.$$.fragment,e),T(he.$$.fragment,e),T(be.$$.fragment,e),T(ge.$$.fragment,e),T(_e.$$.fragment,e),T(Ee.$$.fragment,e),Pl=!0)},o(e){U(u.$$.fragment,e),U(d.$$.fragment,e),U(I.$$.fragment,e),U(f.$$.fragment,e),U(A.$$.fragment,e),U(k.$$.fragment,e),U($.$$.fragment,e),U(E.$$.fragment,e),U(v.$$.fragment,e),U(Z.$$.fragment,e),U(W.$$.fragment,e),U(S.$$.fragment,e),U(H.$$.fragment,e),U(x.$$.fragment,e),U(X.$$.fragment,e),U(F.$$.fragment,e),U(q.$$.fragment,e),U(P.$$.fragment,e),U(O.$$.fragment,e),U(ee.$$.fragment,e),U(te.$$.fragment,e),U(Me.$$.fragment,e),U(ie.$$.fragment,e),U(oe.$$.fragment,e),U(pe.$$.fragment,e),U(Ue.$$.fragment,e),U(me.$$.fragment,e),U(de.$$.fragment,e),U(Ce.$$.fragment,e),U(he.$$.fragment,e),U(be.$$.fragment,e),U(ge.$$.fragment,e),U(_e.$$.fragment,e),U(Ee.$$.fragment,e),Pl=!1},d(e){e&&(t(Ne),t(Re),t(Be),t(Ze),t(We),t(j),t(Ge),t(C),t(Se),t(Qe),t(He),t(h),t(Le),t(Ve),t(b),t(xe),t(Xe),t(g),t(ze),t(Fe),t(_),t(qe),t(Ye),t(R),t(Pe),t(Ke),t(N),t(Oe),t(B),t(De),t(el),t(ll),t(G),t(tl),t(sl),t(Q),t(nl),t(Ml),t(L),t(al),t(V),t(il),t(rl),t(yl),t(z),t(ol),t(pl),t(Tl),t(Y),t(Ul),t(Jl),t(K),t(wl),t(cl),t(D),t(ml),t(ul),t(le),t(dl),t(jl),t(se),t(Cl),t(ne),t(Il),t(fl),t(ae),t(hl),t(Al),t(re),t(bl),t(ye),t(kl),t(gl),t($l),t(Te),t(_l),t(El),t(Je),t(Rl),t(we),t(vl),t(ce),t(Nl),t(Bl),t(ue),t(Zl),t(Wl),t(je),t(Gl),t(Sl),t(Ie),t(Ql),t(fe),t(Hl),t(Ll),t(Ae),t(Vl),t(xl),t(ke),t(Xl),t(zl),t($e),t(Fl),t(ql),t(Yl),t(ve)),t(m),J(u,e),J(d,e),J(I,e),J(f,e),J(A,e),J(k,e),J($,e),J(E,e),J(v,e),J(Z,e),J(W,e),J(S,e),J(H,e),J(x,e),J(X,e),J(F,e),J(q,e),J(P,e),J(O,e),J(ee,e),J(te,e),J(Me,e),J(ie,e),J(oe,e),J(pe,e),J(Ue,e),J(me,e),J(de,e),J(Ce,e),J(he,e),J(be,e),J(ge,e),J(_e,e),J(Ee,e)}}}const xt='{"title":"Layers","local":"layers","sections":[{"title":"Making a layer extensible with kernels from the hub","local":"making-a-layer-extensible-with-kernels-from-the-hub","sections":[{"title":"Using a decorator","local":"using-a-decorator","sections":[],"depth":3},{"title":"External layers","local":"external-layers","sections":[],"depth":3},{"title":"Using a function as a layer","local":"using-a-function-as-a-layer","sections":[],"depth":3}],"depth":2},{"title":"Kernelizing a model","local":"kernelizing-a-model","sections":[{"title":"Kernel device","local":"kernel-device","sections":[],"depth":3},{"title":"Fallback forward","local":"fallback-forward","sections":[],"depth":3},{"title":"Inspecting which kernels are used","local":"inspecting-which-kernels-are-used","sections":[],"depth":3}],"depth":2},{"title":"Registering a hub kernel for a layer","local":"registering-a-hub-kernel-for-a-layer","sections":[{"title":"Registering kernels for specific modes","local":"registering-kernels-for-specific-modes","sections":[],"depth":3},{"title":"Registering kernels for specific CUDA capabilities","local":"registering-kernels-for-specific-cuda-capabilities","sections":[],"depth":3},{"title":"Registering kernels for specific ROCm capabilities","local":"registering-kernels-for-specific-rocm-capabilities","sections":[],"depth":3},{"title":"Loading from a local repository for testing","local":"loading-from-a-local-repository-for-testing","sections":[],"depth":3}],"depth":2}],"depth":1}';function Xt(Kl){return Zt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Kt extends Wt{constructor(m){super(),Gt(this,m,Xt,Vt,Nt,{})}}export{Kt as component}; | |
Xet Storage Details
- Size:
- 44.8 kB
- Xet hash:
- fd2e7ac2e7ad73562e5413a46fb4c3ecf1a1a21ca0c0eee517ff04b6fc505593
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.