Buckets:
| import{s as Gt,n as Lt,o as Ht}from"../chunks/scheduler.f3b1e791.js";import{S as Vt,i as Xt,e as M,s as n,c as o,h as xt,a as i,d as t,b as a,f as Qt,g as y,j as r,k as lt,l as zt,m as s,n as p,t as T,o as U,p as J}from"../chunks/index.023a9934.js";import{C as Ft,H as c,E as qt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.76705b3b.js";import{C as w}from"../chunks/CodeBlock.368f51b1.js";function Yt(tt){let m,Ze,Ne,We,d,Se,j,Qe,C,st=`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,I,nt=`See <a href="kernel-requirements">Kernel requirements</a> for more information on the | |
| requirements of Hub layers.`,Le,f,He,h,Ve,A,at=`A layer can be made extensible with the <a href="/docs/kernels/pr_676/en/api/layers#kernels.use_kernel_forward_from_hub">use_kernel_forward_from_hub()</a> | |
| decorator. For example:`,Xe,k,xe,b,Mt=`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_676/en/api/layers#kernels.kernelize">kernelize()</a> function | |
| described below uses this name to look up kernels for the layer.`,ze,g,Fe,_,it=`An existing layer that does not (yet) have the <a href="/docs/kernels/pr_676/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_676/en/api/layers#kernels.replace_kernel_forward_from_hub">replace_kernel_forward_from_hub()</a> | |
| function:`,qe,$,Ye,R,rt=`<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.`,Pe,E,Ke,v,ot=`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 use the <a href="/docs/kernels/pr_676/en/api/layers#kernels.use_kernel_forward_from_hub">use_kernel_forward_from_hub()</a> decorator on a | |
| function:`,Oe,N,De,B,yt=`This will replace the function by an instantiated <code>torch.nn.Module</code> | |
| (singleton) that calls the function itself in its forward method. It will | |
| still behave as a function, since <code>torch.nn.Module</code> provides an | |
| implementation of <code>__call__</code> that delegates to <code>forward</code>.`,el,Z,pt=`For <a href="/docs/kernels/pr_676/en/api/layers#kernels.kernelize">kernelize()</a> to see the function, you must use | |
| <a href="/docs/kernels/pr_676/en/api/layers#kernels.use_kernelized_func">use_kernelized_func()</a> on an <code>torch.nn.Module</code> that is part | |
| of the to-be kernlized model to make the function visible to | |
| <a href="/docs/kernels/pr_676/en/api/layers#kernels.kernelize">kernelize()</a>. The function is typically attached to the module | |
| that uses it. For example:`,ll,W,tl,S,Tt=`Functions used by <a href="/docs/kernels/pr_676/en/api/layers#kernels.use_kernelized_func">use_kernelized_func()</a> must always have a | |
| <a href="/docs/kernels/pr_676/en/api/layers#kernels.use_kernel_forward_from_hub">use_kernel_forward_from_hub()</a> decorator.`,sl,Q,nl,G,Ut=`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_676/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_676/en/api/layers#kernels.kernelize">kernelize()</a> can be used as follows:`,al,L,Ml,H,Jt=`The <a href="/docs/kernels/pr_676/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_676/en/api/layers#kernels.kernelize">kernelize()</a> to prepare the model for | |
| training:`,il,V,rl,X,wt=`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_676/en/api/layers#kernels.kernelize">kernelize()</a> on the model again with the new mode.`,ol,x,ct=`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:`,yl,z,pl,F,Tl,q,mt=`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_676/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_676/en/api/layers#kernels.kernelize">kernelize()</a> if the device type cannot be | |
| inferred (e.g. because the model has no parameters):`,Ul,Y,Jl,P,wl,K,ut=`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_676/en/api/layers#kernels.kernelize">kernelize()</a> will fall back to the original, non-kernelized, layer. You | |
| can let <a href="/docs/kernels/pr_676/en/api/layers#kernels.kernelize">kernelize()</a> raise an exception instead by using <code>use_fallback=False</code>:`,cl,O,ml,D,dt="This can be useful if you want to guarantee that Hub kernels are used.",ul,ee,dl,le,jt=`The kernels that are used are logged at the <code>INFO</code> level by <a href="/docs/kernels/pr_676/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.`,jl,te,Cl,se,Ct=`<a href="/docs/kernels/pr_676/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:`,Il,ne,fl,ae,It=`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_676/en/api/layers#kernels.LayerRepository">LayerRepository</a> and <a href="/docs/kernels/pr_676/en/api/layers#kernels.FuncRepository">FuncRepository</a> entries must specify | |
| either a <code>version</code> or an explicit <code>revision</code>.`,hl,u,ft=`<p>Version <code>0</code> kernels are excluded from the API compatibility requirement, | |
| since it is used for alpha/beta-quality kernels that may still have | |
| rapidly changing APIs.</p>`,Al,Me,ht='You can register a mapping, like the one above, using <a href="/docs/kernels/pr_676/en/api/layers#kernels.register_kernel_mapping">register_kernel_mapping()</a>:',kl,ie,bl,re,At=`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_676/en/api/layers#kernels.use_kernel_mapping">use_kernel_mapping()</a> context manager:`,gl,oe,_l,ye,kt=`This ensures that the mapping is not active anymore outside the | |
| <code>with</code>-scope.`,$l,pe,bt=`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_676/en/api/layers#kernels.use_kernel_func_from_hub">use_kernel_func_from_hub()</a>), it can also be mapped to a kernel function:`,Rl,Te,El,Ue,vl,Je,gt=`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:`,Nl,we,Bl,ce,_t=`The <a href="/docs/kernels/pr_676/en/api/layers#kernels.kernelize">kernelize()</a> function will attempt to use the following registered | |
| kernels for a given mode:`,Zl,me,$t=`<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>`,Wl,ue,Rt=`<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.`,Sl,de,Ql,je,Et=`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>.`,Gl,Ce,Ll,Ie,vt=`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_676/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>:`,Hl,fe,Vl,he,Nt="Capabilities behave as follows:",Xl,Ae,Bt=`<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_676/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>`,xl,ke,zl,be,Zt=`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.`,Fl,ge,ql,_e,Wt=`The <a href="/docs/kernels/pr_676/en/api/layers#kernels.LocalLayerRepository">LocalLayerRepository</a> class is provided to load a repository from | |
| a local directory. For example:`,Yl,$e,Pl,Re,St=`Similarly, the <a href="/docs/kernels/pr_676/en/api/layers#kernels.LocalFuncRepository">LocalFuncRepository</a> class can be used to load a kernel | |
| function from a local directory:`,Kl,Ee,Ol,ve,Dl,Be,et;return d=new Ft({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),j=new c({props:{title:"Use layers",local:"use-layers",headingTag:"h1"}}),f=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"}}),h=new c({props:{title:"Using a decorator",local:"using-a-decorator",headingTag:"h3"}}),k=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}}),g=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"}}),N=new w({props:{code:"JTQwdXNlX2tlcm5lbF9mb3J3YXJkX2Zyb21faHViKCUyMnNpbHVfYW5kX211bCUyMiklMEFkZWYlMjBzaWx1X2FuZF9tdWwoeCUzQSUyMHRvcmNoLlRlbnNvciklMjAtJTNFJTIwdG9yY2guVGVuc29yJTNBJTBBJTIwJTIwJTIwJTIwZCUyMCUzRCUyMHguc2hhcGUlNUItMSU1RCUyMCUyRiUyRiUyMDIlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBGLnNpbHUoeCU1Qi4uLiUyQyUyMCUzQWQlNUQpJTIwKiUyMHglNUIuLi4lMkMlMjBkJTNBJTVE",highlighted:`<span class="hljs-meta">@use_kernel_forward_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}}),W=new w({props:{code:"JTQwdXNlX2tlcm5lbGl6ZWRfZnVuYyhzaWx1X2FuZF9tdWwpJTBBY2xhc3MlMjBGZWVkRm9yd2FyZChubi5Nb2R1bGUpJTNBJTBBJTIwJTIwZGVmJTIwX19pbml0X18oc2VsZiUyQyUyMGluX2ZlYXR1cmVzJTNBJTIwaW50JTJDJTIwb3V0X2ZlYXR1cmVzJTNBJTIwaW50KSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMHNlbGYubGluZWFyJTIwJTNEJTIwbm4uTGluZWFyKGluX2ZlYXR1cmVzJTJDJTIwb3V0X2ZlYXR1cmVzKSUwQSUwQSUyMCUyMGRlZiUyMGZvcndhcmQoc2VsZiUyQyUyMHglM0ElMjB0b3JjaC5UZW5zb3IpJTIwLSUzRSUyMHRvcmNoLlRlbnNvciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMHNpbHVfYW5kX211bChzZWxmLmxpbmVhcih4KSk=",highlighted:`<span class="hljs-meta">@use_kernelized_func(<span class="hljs-params">silu_and_mul</span>)</span> | |
| <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-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> silu_and_mul(self.linear(x))`,lang:"python",wrap:!1}}),Q=new c({props:{title:"Kernelizing a model",local:"kernelizing-a-model",headingTag:"h2"}}),L=new w({props:{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLklORkVSRU5DRSk=",highlighted:`model = MyModel(...) | |
| model = kernelize(model, mode=Mode.INFERENCE)`,lang:"python",wrap:!1}}),V=new w({props:{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLlRSQUlOSU5HKQ==",highlighted:`model = MyModel(...) | |
| model = kernelize(model, mode=Mode.TRAINING)`,lang:"python",wrap:!1}}),z=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}}),F=new c({props:{title:"Kernel device",local:"kernel-device",headingTag:"h3"}}),Y=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}}),P=new c({props:{title:"Fallback forward",local:"fallback-forward",headingTag:"h3"}}),O=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}}),ee=new c({props:{title:"Inspecting which kernels are used",local:"inspecting-which-kernels-are-used",headingTag:"h3"}}),te=new c({props:{title:"Registering a hub kernel for a layer",local:"registering-a-hub-kernel-for-a-layer",headingTag:"h2"}}),ne=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}}),ie=new w({props:{code:"cmVnaXN0ZXJfa2VybmVsX21hcHBpbmcoa2VybmVsX2xheWVyX21hcHBpbmcp",highlighted:"register_kernel_mapping(kernel_layer_mapping)",lang:"python",wrap:!1}}),oe=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}}),Te=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}}),Ue=new c({props:{title:"Registering kernels for specific modes",local:"registering-kernels-for-specific-modes",headingTag:"h3"}}),we=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}}),de=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}}),Ce=new c({props:{title:"Registering kernels for specific CUDA capabilities",local:"registering-kernels-for-specific-cuda-capabilities",headingTag:"h3"}}),fe=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}}),ke=new c({props:{title:"Registering kernels for specific ROCm capabilities",local:"registering-kernels-for-specific-rocm-capabilities",headingTag:"h3"}}),ge=new c({props:{title:"Loading from a local repository for testing",local:"loading-from-a-local-repository-for-testing",headingTag:"h3"}}),$e=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}}),Ee=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}}),ve=new qt({props:{source:"https://github.com/huggingface/kernels/blob/main/docs/source/layers.md"}}),{c(){m=M("meta"),Ze=n(),Ne=M("p"),We=n(),o(d.$$.fragment),Se=n(),o(j.$$.fragment),Qe=n(),C=M("p"),C.innerHTML=st,Ge=n(),I=M("p"),I.innerHTML=nt,Le=n(),o(f.$$.fragment),He=n(),o(h.$$.fragment),Ve=n(),A=M("p"),A.innerHTML=at,Xe=n(),o(k.$$.fragment),xe=n(),b=M("p"),b.innerHTML=Mt,ze=n(),o(g.$$.fragment),Fe=n(),_=M("p"),_.innerHTML=it,qe=n(),o($.$$.fragment),Ye=n(),R=M("p"),R.innerHTML=rt,Pe=n(),o(E.$$.fragment),Ke=n(),v=M("p"),v.innerHTML=ot,Oe=n(),o(N.$$.fragment),De=n(),B=M("p"),B.innerHTML=yt,el=n(),Z=M("p"),Z.innerHTML=pt,ll=n(),o(W.$$.fragment),tl=n(),S=M("p"),S.innerHTML=Tt,sl=n(),o(Q.$$.fragment),nl=n(),G=M("p"),G.innerHTML=Ut,al=n(),o(L.$$.fragment),Ml=n(),H=M("p"),H.innerHTML=Jt,il=n(),o(V.$$.fragment),rl=n(),X=M("p"),X.innerHTML=wt,ol=n(),x=M("p"),x.innerHTML=ct,yl=n(),o(z.$$.fragment),pl=n(),o(F.$$.fragment),Tl=n(),q=M("p"),q.innerHTML=mt,Ul=n(),o(Y.$$.fragment),Jl=n(),o(P.$$.fragment),wl=n(),K=M("p"),K.innerHTML=ut,cl=n(),o(O.$$.fragment),ml=n(),D=M("p"),D.textContent=dt,ul=n(),o(ee.$$.fragment),dl=n(),le=M("p"),le.innerHTML=jt,jl=n(),o(te.$$.fragment),Cl=n(),se=M("p"),se.innerHTML=Ct,Il=n(),o(ne.$$.fragment),fl=n(),ae=M("p"),ae.innerHTML=It,hl=n(),u=M("blockquote"),u.innerHTML=ft,Al=n(),Me=M("p"),Me.innerHTML=ht,kl=n(),o(ie.$$.fragment),bl=n(),re=M("p"),re.innerHTML=At,gl=n(),o(oe.$$.fragment),_l=n(),ye=M("p"),ye.innerHTML=kt,$l=n(),pe=M("p"),pe.innerHTML=bt,Rl=n(),o(Te.$$.fragment),El=n(),o(Ue.$$.fragment),vl=n(),Je=M("p"),Je.textContent=gt,Nl=n(),o(we.$$.fragment),Bl=n(),ce=M("p"),ce.innerHTML=_t,Zl=n(),me=M("ul"),me.innerHTML=$t,Wl=n(),ue=M("p"),ue.innerHTML=Rt,Sl=n(),o(de.$$.fragment),Ql=n(),je=M("p"),je.innerHTML=Et,Gl=n(),o(Ce.$$.fragment),Ll=n(),Ie=M("p"),Ie.innerHTML=vt,Hl=n(),o(fe.$$.fragment),Vl=n(),he=M("p"),he.textContent=Nt,Xl=n(),Ae=M("ul"),Ae.innerHTML=Bt,xl=n(),o(ke.$$.fragment),zl=n(),be=M("p"),be.innerHTML=Zt,Fl=n(),o(ge.$$.fragment),ql=n(),_e=M("p"),_e.innerHTML=Wt,Yl=n(),o($e.$$.fragment),Pl=n(),Re=M("p"),Re.innerHTML=St,Kl=n(),o(Ee.$$.fragment),Ol=n(),o(ve.$$.fragment),Dl=n(),Be=M("p"),this.h()},l(e){const l=xt("svelte-u9bgzb",document.head);m=i(l,"META",{name:!0,content:!0}),l.forEach(t),Ze=a(e),Ne=i(e,"P",{}),Qt(Ne).forEach(t),We=a(e),y(d.$$.fragment,e),Se=a(e),y(j.$$.fragment,e),Qe=a(e),C=i(e,"P",{"data-svelte-h":!0}),r(C)!=="svelte-178x673"&&(C.innerHTML=st),Ge=a(e),I=i(e,"P",{"data-svelte-h":!0}),r(I)!=="svelte-35znf1"&&(I.innerHTML=nt),Le=a(e),y(f.$$.fragment,e),He=a(e),y(h.$$.fragment,e),Ve=a(e),A=i(e,"P",{"data-svelte-h":!0}),r(A)!=="svelte-1dppvo5"&&(A.innerHTML=at),Xe=a(e),y(k.$$.fragment,e),xe=a(e),b=i(e,"P",{"data-svelte-h":!0}),r(b)!=="svelte-13b90mi"&&(b.innerHTML=Mt),ze=a(e),y(g.$$.fragment,e),Fe=a(e),_=i(e,"P",{"data-svelte-h":!0}),r(_)!=="svelte-1qbi6id"&&(_.innerHTML=it),qe=a(e),y($.$$.fragment,e),Ye=a(e),R=i(e,"P",{"data-svelte-h":!0}),r(R)!=="svelte-13coke1"&&(R.innerHTML=rt),Pe=a(e),y(E.$$.fragment,e),Ke=a(e),v=i(e,"P",{"data-svelte-h":!0}),r(v)!=="svelte-1vr9sxo"&&(v.innerHTML=ot),Oe=a(e),y(N.$$.fragment,e),De=a(e),B=i(e,"P",{"data-svelte-h":!0}),r(B)!=="svelte-sji3dg"&&(B.innerHTML=yt),el=a(e),Z=i(e,"P",{"data-svelte-h":!0}),r(Z)!=="svelte-1lt8z1j"&&(Z.innerHTML=pt),ll=a(e),y(W.$$.fragment,e),tl=a(e),S=i(e,"P",{"data-svelte-h":!0}),r(S)!=="svelte-xpnsif"&&(S.innerHTML=Tt),sl=a(e),y(Q.$$.fragment,e),nl=a(e),G=i(e,"P",{"data-svelte-h":!0}),r(G)!=="svelte-1lo50wu"&&(G.innerHTML=Ut),al=a(e),y(L.$$.fragment,e),Ml=a(e),H=i(e,"P",{"data-svelte-h":!0}),r(H)!=="svelte-g5d6ma"&&(H.innerHTML=Jt),il=a(e),y(V.$$.fragment,e),rl=a(e),X=i(e,"P",{"data-svelte-h":!0}),r(X)!=="svelte-1llvys8"&&(X.innerHTML=wt),ol=a(e),x=i(e,"P",{"data-svelte-h":!0}),r(x)!=="svelte-195gdzl"&&(x.innerHTML=ct),yl=a(e),y(z.$$.fragment,e),pl=a(e),y(F.$$.fragment,e),Tl=a(e),q=i(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-1yesi2q"&&(q.innerHTML=mt),Ul=a(e),y(Y.$$.fragment,e),Jl=a(e),y(P.$$.fragment,e),wl=a(e),K=i(e,"P",{"data-svelte-h":!0}),r(K)!=="svelte-1jrphsl"&&(K.innerHTML=ut),cl=a(e),y(O.$$.fragment,e),ml=a(e),D=i(e,"P",{"data-svelte-h":!0}),r(D)!=="svelte-1lkusth"&&(D.textContent=dt),ul=a(e),y(ee.$$.fragment,e),dl=a(e),le=i(e,"P",{"data-svelte-h":!0}),r(le)!=="svelte-10zp3hb"&&(le.innerHTML=jt),jl=a(e),y(te.$$.fragment,e),Cl=a(e),se=i(e,"P",{"data-svelte-h":!0}),r(se)!=="svelte-i4344y"&&(se.innerHTML=Ct),Il=a(e),y(ne.$$.fragment,e),fl=a(e),ae=i(e,"P",{"data-svelte-h":!0}),r(ae)!=="svelte-1f1d8v5"&&(ae.innerHTML=It),hl=a(e),u=i(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(u)!=="svelte-n51n6u"&&(u.innerHTML=ft),Al=a(e),Me=i(e,"P",{"data-svelte-h":!0}),r(Me)!=="svelte-6cw4bv"&&(Me.innerHTML=ht),kl=a(e),y(ie.$$.fragment,e),bl=a(e),re=i(e,"P",{"data-svelte-h":!0}),r(re)!=="svelte-1nw948x"&&(re.innerHTML=At),gl=a(e),y(oe.$$.fragment,e),_l=a(e),ye=i(e,"P",{"data-svelte-h":!0}),r(ye)!=="svelte-z3xuuf"&&(ye.innerHTML=kt),$l=a(e),pe=i(e,"P",{"data-svelte-h":!0}),r(pe)!=="svelte-1bqtlcd"&&(pe.innerHTML=bt),Rl=a(e),y(Te.$$.fragment,e),El=a(e),y(Ue.$$.fragment,e),vl=a(e),Je=i(e,"P",{"data-svelte-h":!0}),r(Je)!=="svelte-1ed3b6y"&&(Je.textContent=gt),Nl=a(e),y(we.$$.fragment,e),Bl=a(e),ce=i(e,"P",{"data-svelte-h":!0}),r(ce)!=="svelte-yuz6qr"&&(ce.innerHTML=_t),Zl=a(e),me=i(e,"UL",{"data-svelte-h":!0}),r(me)!=="svelte-ewhtf4"&&(me.innerHTML=$t),Wl=a(e),ue=i(e,"P",{"data-svelte-h":!0}),r(ue)!=="svelte-m4furw"&&(ue.innerHTML=Rt),Sl=a(e),y(de.$$.fragment,e),Ql=a(e),je=i(e,"P",{"data-svelte-h":!0}),r(je)!=="svelte-1oi4pcx"&&(je.innerHTML=Et),Gl=a(e),y(Ce.$$.fragment,e),Ll=a(e),Ie=i(e,"P",{"data-svelte-h":!0}),r(Ie)!=="svelte-125zhib"&&(Ie.innerHTML=vt),Hl=a(e),y(fe.$$.fragment,e),Vl=a(e),he=i(e,"P",{"data-svelte-h":!0}),r(he)!=="svelte-1k7nbkd"&&(he.textContent=Nt),Xl=a(e),Ae=i(e,"UL",{"data-svelte-h":!0}),r(Ae)!=="svelte-1c2tob1"&&(Ae.innerHTML=Bt),xl=a(e),y(ke.$$.fragment,e),zl=a(e),be=i(e,"P",{"data-svelte-h":!0}),r(be)!=="svelte-1q9vv7t"&&(be.innerHTML=Zt),Fl=a(e),y(ge.$$.fragment,e),ql=a(e),_e=i(e,"P",{"data-svelte-h":!0}),r(_e)!=="svelte-e18752"&&(_e.innerHTML=Wt),Yl=a(e),y($e.$$.fragment,e),Pl=a(e),Re=i(e,"P",{"data-svelte-h":!0}),r(Re)!=="svelte-nt7av1"&&(Re.innerHTML=St),Kl=a(e),y(Ee.$$.fragment,e),Ol=a(e),y(ve.$$.fragment,e),Dl=a(e),Be=i(e,"P",{}),Qt(Be).forEach(t),this.h()},h(){lt(m,"name","hf:doc:metadata"),lt(m,"content",Pt),lt(u,"class","note")},m(e,l){zt(document.head,m),s(e,Ze,l),s(e,Ne,l),s(e,We,l),p(d,e,l),s(e,Se,l),p(j,e,l),s(e,Qe,l),s(e,C,l),s(e,Ge,l),s(e,I,l),s(e,Le,l),p(f,e,l),s(e,He,l),p(h,e,l),s(e,Ve,l),s(e,A,l),s(e,Xe,l),p(k,e,l),s(e,xe,l),s(e,b,l),s(e,ze,l),p(g,e,l),s(e,Fe,l),s(e,_,l),s(e,qe,l),p($,e,l),s(e,Ye,l),s(e,R,l),s(e,Pe,l),p(E,e,l),s(e,Ke,l),s(e,v,l),s(e,Oe,l),p(N,e,l),s(e,De,l),s(e,B,l),s(e,el,l),s(e,Z,l),s(e,ll,l),p(W,e,l),s(e,tl,l),s(e,S,l),s(e,sl,l),p(Q,e,l),s(e,nl,l),s(e,G,l),s(e,al,l),p(L,e,l),s(e,Ml,l),s(e,H,l),s(e,il,l),p(V,e,l),s(e,rl,l),s(e,X,l),s(e,ol,l),s(e,x,l),s(e,yl,l),p(z,e,l),s(e,pl,l),p(F,e,l),s(e,Tl,l),s(e,q,l),s(e,Ul,l),p(Y,e,l),s(e,Jl,l),p(P,e,l),s(e,wl,l),s(e,K,l),s(e,cl,l),p(O,e,l),s(e,ml,l),s(e,D,l),s(e,ul,l),p(ee,e,l),s(e,dl,l),s(e,le,l),s(e,jl,l),p(te,e,l),s(e,Cl,l),s(e,se,l),s(e,Il,l),p(ne,e,l),s(e,fl,l),s(e,ae,l),s(e,hl,l),s(e,u,l),s(e,Al,l),s(e,Me,l),s(e,kl,l),p(ie,e,l),s(e,bl,l),s(e,re,l),s(e,gl,l),p(oe,e,l),s(e,_l,l),s(e,ye,l),s(e,$l,l),s(e,pe,l),s(e,Rl,l),p(Te,e,l),s(e,El,l),p(Ue,e,l),s(e,vl,l),s(e,Je,l),s(e,Nl,l),p(we,e,l),s(e,Bl,l),s(e,ce,l),s(e,Zl,l),s(e,me,l),s(e,Wl,l),s(e,ue,l),s(e,Sl,l),p(de,e,l),s(e,Ql,l),s(e,je,l),s(e,Gl,l),p(Ce,e,l),s(e,Ll,l),s(e,Ie,l),s(e,Hl,l),p(fe,e,l),s(e,Vl,l),s(e,he,l),s(e,Xl,l),s(e,Ae,l),s(e,xl,l),p(ke,e,l),s(e,zl,l),s(e,be,l),s(e,Fl,l),p(ge,e,l),s(e,ql,l),s(e,_e,l),s(e,Yl,l),p($e,e,l),s(e,Pl,l),s(e,Re,l),s(e,Kl,l),p(Ee,e,l),s(e,Ol,l),p(ve,e,l),s(e,Dl,l),s(e,Be,l),et=!0},p:Lt,i(e){et||(T(d.$$.fragment,e),T(j.$$.fragment,e),T(f.$$.fragment,e),T(h.$$.fragment,e),T(k.$$.fragment,e),T(g.$$.fragment,e),T($.$$.fragment,e),T(E.$$.fragment,e),T(N.$$.fragment,e),T(W.$$.fragment,e),T(Q.$$.fragment,e),T(L.$$.fragment,e),T(V.$$.fragment,e),T(z.$$.fragment,e),T(F.$$.fragment,e),T(Y.$$.fragment,e),T(P.$$.fragment,e),T(O.$$.fragment,e),T(ee.$$.fragment,e),T(te.$$.fragment,e),T(ne.$$.fragment,e),T(ie.$$.fragment,e),T(oe.$$.fragment,e),T(Te.$$.fragment,e),T(Ue.$$.fragment,e),T(we.$$.fragment,e),T(de.$$.fragment,e),T(Ce.$$.fragment,e),T(fe.$$.fragment,e),T(ke.$$.fragment,e),T(ge.$$.fragment,e),T($e.$$.fragment,e),T(Ee.$$.fragment,e),T(ve.$$.fragment,e),et=!0)},o(e){U(d.$$.fragment,e),U(j.$$.fragment,e),U(f.$$.fragment,e),U(h.$$.fragment,e),U(k.$$.fragment,e),U(g.$$.fragment,e),U($.$$.fragment,e),U(E.$$.fragment,e),U(N.$$.fragment,e),U(W.$$.fragment,e),U(Q.$$.fragment,e),U(L.$$.fragment,e),U(V.$$.fragment,e),U(z.$$.fragment,e),U(F.$$.fragment,e),U(Y.$$.fragment,e),U(P.$$.fragment,e),U(O.$$.fragment,e),U(ee.$$.fragment,e),U(te.$$.fragment,e),U(ne.$$.fragment,e),U(ie.$$.fragment,e),U(oe.$$.fragment,e),U(Te.$$.fragment,e),U(Ue.$$.fragment,e),U(we.$$.fragment,e),U(de.$$.fragment,e),U(Ce.$$.fragment,e),U(fe.$$.fragment,e),U(ke.$$.fragment,e),U(ge.$$.fragment,e),U($e.$$.fragment,e),U(Ee.$$.fragment,e),U(ve.$$.fragment,e),et=!1},d(e){e&&(t(Ze),t(Ne),t(We),t(Se),t(Qe),t(C),t(Ge),t(I),t(Le),t(He),t(Ve),t(A),t(Xe),t(xe),t(b),t(ze),t(Fe),t(_),t(qe),t(Ye),t(R),t(Pe),t(Ke),t(v),t(Oe),t(De),t(B),t(el),t(Z),t(ll),t(tl),t(S),t(sl),t(nl),t(G),t(al),t(Ml),t(H),t(il),t(rl),t(X),t(ol),t(x),t(yl),t(pl),t(Tl),t(q),t(Ul),t(Jl),t(wl),t(K),t(cl),t(ml),t(D),t(ul),t(dl),t(le),t(jl),t(Cl),t(se),t(Il),t(fl),t(ae),t(hl),t(u),t(Al),t(Me),t(kl),t(bl),t(re),t(gl),t(_l),t(ye),t($l),t(pe),t(Rl),t(El),t(vl),t(Je),t(Nl),t(Bl),t(ce),t(Zl),t(me),t(Wl),t(ue),t(Sl),t(Ql),t(je),t(Gl),t(Ll),t(Ie),t(Hl),t(Vl),t(he),t(Xl),t(Ae),t(xl),t(zl),t(be),t(Fl),t(ql),t(_e),t(Yl),t(Pl),t(Re),t(Kl),t(Ol),t(Dl),t(Be)),t(m),J(d,e),J(j,e),J(f,e),J(h,e),J(k,e),J(g,e),J($,e),J(E,e),J(N,e),J(W,e),J(Q,e),J(L,e),J(V,e),J(z,e),J(F,e),J(Y,e),J(P,e),J(O,e),J(ee,e),J(te,e),J(ne,e),J(ie,e),J(oe,e),J(Te,e),J(Ue,e),J(we,e),J(de,e),J(Ce,e),J(fe,e),J(ke,e),J(ge,e),J($e,e),J(Ee,e),J(ve,e)}}}const Pt='{"title":"Use layers","local":"use-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 Kt(tt){return Ht(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ts extends Vt{constructor(m){super(),Xt(this,m,Kt,Yt,Gt,{})}}export{ts as component}; | |
Xet Storage Details
- Size:
- 45.9 kB
- Xet hash:
- 9db63bb3b51067c2bf8aeb8637657d8b8b7410a20526896bb4add1218561a0c5
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.