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 i,s as M,c as r,h as St,a,d as t,b as n,f as vt,g as o,j as y,k as _t,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.093b74ad.js";import{C as w}from"../chunks/CodeBlock.31fae6d3.js";import{H as c,E as Vt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.e9aed71a.js";function Lt(Kl){let m,Ne,ve,Be,d,Ze,u,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 <code>use_kernel_forward_from_hub</code> | |
| decorator. For example:`,Ve,A,Le,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 <code>kernelize</code> 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 <code>use_kernel_forward_from_hub</code> | |
| decorator can be made extensible using the <code>replace_kernel_forward_from_hub</code> | |
| function:`,ze,$,Fe,E,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,R,Ye,v,Mt=`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 <code>use_kernel_func_from_hub</code> decorator:`,Pe,_,Ke,N,nt=`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,it=`<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,at=`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 <code>kernelize</code> function. This function traverses the | |
| model graph and replaces the <code>forward</code> methods of extensible layers for which | |
| Hub kernels are registered. <code>kernelize</code> can be used as follows:`,tl,S,sl,Q,rt=`The <code>kernelize</code> 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 <code>kernelize</code> to prepare the model for | |
| training:`,Ml,H,nl,V,ot=`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 <code>kernelize</code> on the model again with the new mode.`,il,L,yt=`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:`,al,x,rl,X,ol,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, | |
| <code>kernelize</code> will try to infer the device type from the model’s parameters. | |
| You can pass the device type to <code>kernelize</code> if the device type cannot be | |
| inferred (e.g. because the model has no parameters):`,yl,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, | |
| <code>kernelize</code> will fall back to the original, non-kernelized, layer. You | |
| can let <code>kernelize</code> 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 <code>kernelize</code>. | |
| 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,dl,le,wt=`<code>kernelize</code> 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:`,ul,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 <code>LayerRepository</code> and <code>FuncRepository</code> entries must specify | |
| either a <code>version</code> or an explicit <code>revision</code>.`,Cl,Me,mt="You can register a mapping, like the one above, using <code>register_kernel_mapping</code>:",Il,ne,fl,ie,dt=`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 <code>use_kernel_mapping</code> context manager:`,hl,ae,Al,re,ut=`This ensures that the mapping is not active anymore outside the | |
| <code>with</code>-scope.`,bl,oe,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 | |
| <code>use_kernel_func_from_hub</code>), it can also be mapped to a kernel function:`,kl,ye,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:`,El,Ue,Rl,Je,It=`The <code>kernelize</code> function will attempt to use the following registered | |
| kernels for a given mode:`,vl,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>`,_l,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,de,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,ue,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 <code>Device</code> 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><code>kernelize</code> 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,Vl,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.`,Ll,be,xl,ke,Et=`The <code>LocalLayerRepository</code> class is provided to load a repository from | |
| a local directory. For example:`,Xl,ge,zl,$e,Rt=`Similarly, the <code>LocalFuncRepository</code> class can be used to load a kernel | |
| function from a local directory:`,Fl,Ee,ql,Re,Yl,_e,Pl;return d=new Ht({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),u=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}}),R=new c({props:{title:"Using a function as a layer",local:"using-a-function-as-a-layer",headingTag:"h3"}}),_=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}}),ne=new w({props:{code:"cmVnaXN0ZXJfa2VybmVsX21hcHBpbmcoa2VybmVsX2xheWVyX21hcHBpbmcp",highlighted:"register_kernel_mapping(kernel_layer_mapping)",lang:"python",wrap:!1}}),ae=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}}),ye=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}}),ue=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}}),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}}),Re=new Vt({props:{source:"https://github.com/huggingface/kernels/blob/main/docs/source/layers.md"}}),{c(){m=i("meta"),Ne=M(),ve=i("p"),Be=M(),r(d.$$.fragment),Ze=M(),r(u.$$.fragment),We=M(),j=i("p"),j.innerHTML=Ol,Ge=M(),C=i("p"),C.innerHTML=Dl,Se=M(),r(I.$$.fragment),Qe=M(),r(f.$$.fragment),He=M(),h=i("p"),h.innerHTML=et,Ve=M(),r(A.$$.fragment),Le=M(),b=i("p"),b.innerHTML=lt,xe=M(),r(k.$$.fragment),Xe=M(),g=i("p"),g.innerHTML=tt,ze=M(),r($.$$.fragment),Fe=M(),E=i("p"),E.innerHTML=st,qe=M(),r(R.$$.fragment),Ye=M(),v=i("p"),v.innerHTML=Mt,Pe=M(),r(_.$$.fragment),Ke=M(),N=i("p"),N.innerHTML=nt,Oe=M(),B=i("p"),B.innerHTML=it,De=M(),r(Z.$$.fragment),el=M(),r(W.$$.fragment),ll=M(),G=i("p"),G.innerHTML=at,tl=M(),r(S.$$.fragment),sl=M(),Q=i("p"),Q.innerHTML=rt,Ml=M(),r(H.$$.fragment),nl=M(),V=i("p"),V.innerHTML=ot,il=M(),L=i("p"),L.innerHTML=yt,al=M(),r(x.$$.fragment),rl=M(),r(X.$$.fragment),ol=M(),z=i("p"),z.innerHTML=pt,yl=M(),r(F.$$.fragment),pl=M(),r(q.$$.fragment),Tl=M(),Y=i("p"),Y.innerHTML=Tt,Ul=M(),r(P.$$.fragment),Jl=M(),K=i("p"),K.textContent=Ut,wl=M(),r(O.$$.fragment),cl=M(),D=i("p"),D.innerHTML=Jt,ml=M(),r(ee.$$.fragment),dl=M(),le=i("p"),le.innerHTML=wt,ul=M(),r(te.$$.fragment),jl=M(),se=i("p"),se.innerHTML=ct,Cl=M(),Me=i("p"),Me.innerHTML=mt,Il=M(),r(ne.$$.fragment),fl=M(),ie=i("p"),ie.innerHTML=dt,hl=M(),r(ae.$$.fragment),Al=M(),re=i("p"),re.innerHTML=ut,bl=M(),oe=i("p"),oe.innerHTML=jt,kl=M(),r(ye.$$.fragment),gl=M(),r(pe.$$.fragment),$l=M(),Te=i("p"),Te.textContent=Ct,El=M(),r(Ue.$$.fragment),Rl=M(),Je=i("p"),Je.innerHTML=It,vl=M(),we=i("ul"),we.innerHTML=ft,_l=M(),ce=i("p"),ce.innerHTML=ht,Nl=M(),r(me.$$.fragment),Bl=M(),de=i("p"),de.innerHTML=At,Zl=M(),r(ue.$$.fragment),Wl=M(),je=i("p"),je.innerHTML=bt,Gl=M(),r(Ce.$$.fragment),Sl=M(),Ie=i("p"),Ie.textContent=kt,Ql=M(),fe=i("ul"),fe.innerHTML=gt,Hl=M(),r(he.$$.fragment),Vl=M(),Ae=i("p"),Ae.innerHTML=$t,Ll=M(),r(be.$$.fragment),xl=M(),ke=i("p"),ke.innerHTML=Et,Xl=M(),r(ge.$$.fragment),zl=M(),$e=i("p"),$e.innerHTML=Rt,Fl=M(),r(Ee.$$.fragment),ql=M(),r(Re.$$.fragment),Yl=M(),_e=i("p"),this.h()},l(e){const l=St("svelte-u9bgzb",document.head);m=a(l,"META",{name:!0,content:!0}),l.forEach(t),Ne=n(e),ve=a(e,"P",{}),vt(ve).forEach(t),Be=n(e),o(d.$$.fragment,e),Ze=n(e),o(u.$$.fragment,e),We=n(e),j=a(e,"P",{"data-svelte-h":!0}),y(j)!=="svelte-178x673"&&(j.innerHTML=Ol),Ge=n(e),C=a(e,"P",{"data-svelte-h":!0}),y(C)!=="svelte-35znf1"&&(C.innerHTML=Dl),Se=n(e),o(I.$$.fragment,e),Qe=n(e),o(f.$$.fragment,e),He=n(e),h=a(e,"P",{"data-svelte-h":!0}),y(h)!=="svelte-1jd41lf"&&(h.innerHTML=et),Ve=n(e),o(A.$$.fragment,e),Le=n(e),b=a(e,"P",{"data-svelte-h":!0}),y(b)!=="svelte-tily1x"&&(b.innerHTML=lt),xe=n(e),o(k.$$.fragment,e),Xe=n(e),g=a(e,"P",{"data-svelte-h":!0}),y(g)!=="svelte-1hj9ahw"&&(g.innerHTML=tt),ze=n(e),o($.$$.fragment,e),Fe=n(e),E=a(e,"P",{"data-svelte-h":!0}),y(E)!=="svelte-13coke1"&&(E.innerHTML=st),qe=n(e),o(R.$$.fragment,e),Ye=n(e),v=a(e,"P",{"data-svelte-h":!0}),y(v)!=="svelte-kwbso1"&&(v.innerHTML=Mt),Pe=n(e),o(_.$$.fragment,e),Ke=n(e),N=a(e,"P",{"data-svelte-h":!0}),y(N)!=="svelte-1w74xdp"&&(N.innerHTML=nt),Oe=n(e),B=a(e,"P",{"data-svelte-h":!0}),y(B)!=="svelte-t3eq4x"&&(B.innerHTML=it),De=n(e),o(Z.$$.fragment,e),el=n(e),o(W.$$.fragment,e),ll=n(e),G=a(e,"P",{"data-svelte-h":!0}),y(G)!=="svelte-stkx9y"&&(G.innerHTML=at),tl=n(e),o(S.$$.fragment,e),sl=n(e),Q=a(e,"P",{"data-svelte-h":!0}),y(Q)!=="svelte-1mdicvi"&&(Q.innerHTML=rt),Ml=n(e),o(H.$$.fragment,e),nl=n(e),V=a(e,"P",{"data-svelte-h":!0}),y(V)!=="svelte-xhc5xj"&&(V.innerHTML=ot),il=n(e),L=a(e,"P",{"data-svelte-h":!0}),y(L)!=="svelte-195gdzl"&&(L.innerHTML=yt),al=n(e),o(x.$$.fragment,e),rl=n(e),o(X.$$.fragment,e),ol=n(e),z=a(e,"P",{"data-svelte-h":!0}),y(z)!=="svelte-808tau"&&(z.innerHTML=pt),yl=n(e),o(F.$$.fragment,e),pl=n(e),o(q.$$.fragment,e),Tl=n(e),Y=a(e,"P",{"data-svelte-h":!0}),y(Y)!=="svelte-yu926d"&&(Y.innerHTML=Tt),Ul=n(e),o(P.$$.fragment,e),Jl=n(e),K=a(e,"P",{"data-svelte-h":!0}),y(K)!=="svelte-1lkusth"&&(K.textContent=Ut),wl=n(e),o(O.$$.fragment,e),cl=n(e),D=a(e,"P",{"data-svelte-h":!0}),y(D)!=="svelte-161p6z8"&&(D.innerHTML=Jt),ml=n(e),o(ee.$$.fragment,e),dl=n(e),le=a(e,"P",{"data-svelte-h":!0}),y(le)!=="svelte-1r5il31"&&(le.innerHTML=wt),ul=n(e),o(te.$$.fragment,e),jl=n(e),se=a(e,"P",{"data-svelte-h":!0}),y(se)!=="svelte-1y603ry"&&(se.innerHTML=ct),Cl=n(e),Me=a(e,"P",{"data-svelte-h":!0}),y(Me)!=="svelte-1ax1kej"&&(Me.innerHTML=mt),Il=n(e),o(ne.$$.fragment,e),fl=n(e),ie=a(e,"P",{"data-svelte-h":!0}),y(ie)!=="svelte-p5ro9n"&&(ie.innerHTML=dt),hl=n(e),o(ae.$$.fragment,e),Al=n(e),re=a(e,"P",{"data-svelte-h":!0}),y(re)!=="svelte-z3xuuf"&&(re.innerHTML=ut),bl=n(e),oe=a(e,"P",{"data-svelte-h":!0}),y(oe)!=="svelte-1uvzpxy"&&(oe.innerHTML=jt),kl=n(e),o(ye.$$.fragment,e),gl=n(e),o(pe.$$.fragment,e),$l=n(e),Te=a(e,"P",{"data-svelte-h":!0}),y(Te)!=="svelte-1ed3b6y"&&(Te.textContent=Ct),El=n(e),o(Ue.$$.fragment,e),Rl=n(e),Je=a(e,"P",{"data-svelte-h":!0}),y(Je)!=="svelte-sek2d8"&&(Je.innerHTML=It),vl=n(e),we=a(e,"UL",{"data-svelte-h":!0}),y(we)!=="svelte-ewhtf4"&&(we.innerHTML=ft),_l=n(e),ce=a(e,"P",{"data-svelte-h":!0}),y(ce)!=="svelte-m4furw"&&(ce.innerHTML=ht),Nl=n(e),o(me.$$.fragment,e),Bl=n(e),de=a(e,"P",{"data-svelte-h":!0}),y(de)!=="svelte-1oi4pcx"&&(de.innerHTML=At),Zl=n(e),o(ue.$$.fragment,e),Wl=n(e),je=a(e,"P",{"data-svelte-h":!0}),y(je)!=="svelte-1wl92tu"&&(je.innerHTML=bt),Gl=n(e),o(Ce.$$.fragment,e),Sl=n(e),Ie=a(e,"P",{"data-svelte-h":!0}),y(Ie)!=="svelte-1k7nbkd"&&(Ie.textContent=kt),Ql=n(e),fe=a(e,"UL",{"data-svelte-h":!0}),y(fe)!=="svelte-xyngc6"&&(fe.innerHTML=gt),Hl=n(e),o(he.$$.fragment,e),Vl=n(e),Ae=a(e,"P",{"data-svelte-h":!0}),y(Ae)!=="svelte-1q9vv7t"&&(Ae.innerHTML=$t),Ll=n(e),o(be.$$.fragment,e),xl=n(e),ke=a(e,"P",{"data-svelte-h":!0}),y(ke)!=="svelte-qa4iob"&&(ke.innerHTML=Et),Xl=n(e),o(ge.$$.fragment,e),zl=n(e),$e=a(e,"P",{"data-svelte-h":!0}),y($e)!=="svelte-f12z19"&&($e.innerHTML=Rt),Fl=n(e),o(Ee.$$.fragment,e),ql=n(e),o(Re.$$.fragment,e),Yl=n(e),_e=a(e,"P",{}),vt(_e).forEach(t),this.h()},h(){_t(m,"name","hf:doc:metadata"),_t(m,"content",xt)},m(e,l){Qt(document.head,m),s(e,Ne,l),s(e,ve,l),s(e,Be,l),p(d,e,l),s(e,Ze,l),p(u,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,Ve,l),p(A,e,l),s(e,Le,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,E,l),s(e,qe,l),p(R,e,l),s(e,Ye,l),s(e,v,l),s(e,Pe,l),p(_,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,Ml,l),p(H,e,l),s(e,nl,l),s(e,V,l),s(e,il,l),s(e,L,l),s(e,al,l),p(x,e,l),s(e,rl,l),p(X,e,l),s(e,ol,l),s(e,z,l),s(e,yl,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,dl,l),s(e,le,l),s(e,ul,l),p(te,e,l),s(e,jl,l),s(e,se,l),s(e,Cl,l),s(e,Me,l),s(e,Il,l),p(ne,e,l),s(e,fl,l),s(e,ie,l),s(e,hl,l),p(ae,e,l),s(e,Al,l),s(e,re,l),s(e,bl,l),s(e,oe,l),s(e,kl,l),p(ye,e,l),s(e,gl,l),p(pe,e,l),s(e,$l,l),s(e,Te,l),s(e,El,l),p(Ue,e,l),s(e,Rl,l),s(e,Je,l),s(e,vl,l),s(e,we,l),s(e,_l,l),s(e,ce,l),s(e,Nl,l),p(me,e,l),s(e,Bl,l),s(e,de,l),s(e,Zl,l),p(ue,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,Vl,l),s(e,Ae,l),s(e,Ll,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(Ee,e,l),s(e,ql,l),p(Re,e,l),s(e,Yl,l),s(e,_e,l),Pl=!0},p:Bt,i(e){Pl||(T(d.$$.fragment,e),T(u.$$.fragment,e),T(I.$$.fragment,e),T(f.$$.fragment,e),T(A.$$.fragment,e),T(k.$$.fragment,e),T($.$$.fragment,e),T(R.$$.fragment,e),T(_.$$.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(ne.$$.fragment,e),T(ae.$$.fragment,e),T(ye.$$.fragment,e),T(pe.$$.fragment,e),T(Ue.$$.fragment,e),T(me.$$.fragment,e),T(ue.$$.fragment,e),T(Ce.$$.fragment,e),T(he.$$.fragment,e),T(be.$$.fragment,e),T(ge.$$.fragment,e),T(Ee.$$.fragment,e),T(Re.$$.fragment,e),Pl=!0)},o(e){U(d.$$.fragment,e),U(u.$$.fragment,e),U(I.$$.fragment,e),U(f.$$.fragment,e),U(A.$$.fragment,e),U(k.$$.fragment,e),U($.$$.fragment,e),U(R.$$.fragment,e),U(_.$$.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(ne.$$.fragment,e),U(ae.$$.fragment,e),U(ye.$$.fragment,e),U(pe.$$.fragment,e),U(Ue.$$.fragment,e),U(me.$$.fragment,e),U(ue.$$.fragment,e),U(Ce.$$.fragment,e),U(he.$$.fragment,e),U(be.$$.fragment,e),U(ge.$$.fragment,e),U(Ee.$$.fragment,e),U(Re.$$.fragment,e),Pl=!1},d(e){e&&(t(Ne),t(ve),t(Be),t(Ze),t(We),t(j),t(Ge),t(C),t(Se),t(Qe),t(He),t(h),t(Ve),t(Le),t(b),t(xe),t(Xe),t(g),t(ze),t(Fe),t(E),t(qe),t(Ye),t(v),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(Ml),t(nl),t(V),t(il),t(L),t(al),t(rl),t(ol),t(z),t(yl),t(pl),t(Tl),t(Y),t(Ul),t(Jl),t(K),t(wl),t(cl),t(D),t(ml),t(dl),t(le),t(ul),t(jl),t(se),t(Cl),t(Me),t(Il),t(fl),t(ie),t(hl),t(Al),t(re),t(bl),t(oe),t(kl),t(gl),t($l),t(Te),t(El),t(Rl),t(Je),t(vl),t(we),t(_l),t(ce),t(Nl),t(Bl),t(de),t(Zl),t(Wl),t(je),t(Gl),t(Sl),t(Ie),t(Ql),t(fe),t(Hl),t(Vl),t(Ae),t(Ll),t(xl),t(ke),t(Xl),t(zl),t($e),t(Fl),t(ql),t(Yl),t(_e)),t(m),J(d,e),J(u,e),J(I,e),J(f,e),J(A,e),J(k,e),J($,e),J(R,e),J(_,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(ne,e),J(ae,e),J(ye,e),J(pe,e),J(Ue,e),J(me,e),J(ue,e),J(Ce,e),J(he,e),J(be,e),J(ge,e),J(Ee,e),J(Re,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,Lt,Nt,{})}}export{Kt as component}; | |
Xet Storage Details
- Size:
- 43.2 kB
- Xet hash:
- a337e9bc75bd1abf55c57f7fcb8d9d6b3be423c038a58b64a8d3dde2e797ee94
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.