Buckets:
| import"../chunks/DsnmJJEf.js";import{i as q,h as x,C as Y,H as a,a as l,E as H,s as L}from"../chunks/CyvF58-O.js";import{p as K,o as O,s as e,f as D,a as Q,b as P,c as V,n as $}from"../chunks/DfHjNWj2.js";const ee='{"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}';var le=V('<meta name="hf:doc:metadata"/>'),ae=V(`<p></p> <!> <!> <p>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.</p> <p>See <a href="kernel-requirements">Kernel requirements</a> for more information on the | |
| requirements of Hub layers.</p> <!> <!> <p>A layer can be made extensible with the <a href="/docs/kernels/pr_675/en/api/layers#kernels.use_kernel_forward_from_hub">use_kernel_forward_from_hub()</a> decorator. For example:</p> <!> <p>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_675/en/api/layers#kernels.kernelize">kernelize()</a> function | |
| described below uses this name to look up kernels for the layer.</p> <!> <p>An existing layer that does not (yet) have the <a href="/docs/kernels/pr_675/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_675/en/api/layers#kernels.replace_kernel_forward_from_hub">replace_kernel_forward_from_hub()</a> function:</p> <!> <p><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.</p> <!> <p>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_675/en/api/layers#kernels.use_kernel_forward_from_hub">use_kernel_forward_from_hub()</a> decorator on a | |
| function:</p> <!> <p>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>.</p> <p>For <a href="/docs/kernels/pr_675/en/api/layers#kernels.kernelize">kernelize()</a> to see the function, you must use <a href="/docs/kernels/pr_675/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_675/en/api/layers#kernels.kernelize">kernelize()</a>. The function is typically attached to the module | |
| that uses it. For example:</p> <!> <p>Functions used by <a href="/docs/kernels/pr_675/en/api/layers#kernels.use_kernelized_func">use_kernelized_func()</a> must always have a <a href="/docs/kernels/pr_675/en/api/layers#kernels.use_kernel_forward_from_hub">use_kernel_forward_from_hub()</a> decorator.</p> <!> <p>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_675/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_675/en/api/layers#kernels.kernelize">kernelize()</a> can be used as follows:</p> <!> <p>The <a href="/docs/kernels/pr_675/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_675/en/api/layers#kernels.kernelize">kernelize()</a> to prepare the model for | |
| training:</p> <!> <p>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_675/en/api/layers#kernels.kernelize">kernelize()</a> on the model again with the new mode.</p> <p>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:</p> <!> <!> <p>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_675/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_675/en/api/layers#kernels.kernelize">kernelize()</a> if the device type cannot be | |
| inferred (e.g. because the model has no parameters):</p> <!> <!> <p>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_675/en/api/layers#kernels.kernelize">kernelize()</a> will fall back to the original, non-kernelized, layer. You | |
| can let <a href="/docs/kernels/pr_675/en/api/layers#kernels.kernelize">kernelize()</a> raise an exception instead by using <code>use_fallback=False</code>:</p> <!> <p>This can be useful if you want to guarantee that Hub kernels are used.</p> <!> <p>The kernels that are used are logged at the <code>INFO</code> level by <a href="/docs/kernels/pr_675/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.</p> <!> <p><a href="/docs/kernels/pr_675/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:</p> <!> <p>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_675/en/api/layers#kernels.LayerRepository">LayerRepository</a> and <a href="/docs/kernels/pr_675/en/api/layers#kernels.FuncRepository">FuncRepository</a> entries must specify | |
| either a <code>version</code> or an explicit <code>revision</code>.</p> <blockquote class="note"><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></blockquote> <p>You can register a mapping, like the one above, using <a href="/docs/kernels/pr_675/en/api/layers#kernels.register_kernel_mapping">register_kernel_mapping()</a>:</p> <!> <p>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_675/en/api/layers#kernels.use_kernel_mapping">use_kernel_mapping()</a> context manager:</p> <!> <p>This ensures that the mapping is not active anymore outside the <code>with</code>-scope.</p> <p>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_675/en/api/layers#kernels.use_kernel_func_from_hub">use_kernel_func_from_hub()</a>), it can also be mapped to a kernel function:</p> <!> <!> <p>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:</p> <!> <p>The <a href="/docs/kernels/pr_675/en/api/layers#kernels.kernelize">kernelize()</a> function will attempt to use the following registered | |
| kernels for a given mode:</p> <ul><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></ul> <p><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.</p> <!> <p>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>.</p> <!> <p>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_675/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>:</p> <!> <p>Capabilities behave as follows:</p> <ul><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_675/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></ul> <!> <p>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.</p> <!> <p>The <a href="/docs/kernels/pr_675/en/api/layers#kernels.LocalLayerRepository">LocalLayerRepository</a> class is provided to load a repository from | |
| a local directory. For example:</p> <!> <p>Similarly, the <a href="/docs/kernels/pr_675/en/api/layers#kernels.LocalFuncRepository">LocalFuncRepository</a> class can be used to load a kernel | |
| function from a local directory:</p> <!> <!> <p></p>`,1);function oe(X,z){K(z,!1),O(()=>{new URLSearchParams(window.location.search).get("fw")}),q();var s=ae();x("jxhan7",S=>{var G=le();L(G,"content",ee),Q(S,G)});var n=e(D(s),2);Y(n,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var M=e(n,2);a(M,{title:"Use layers",local:"use-layers",headingTag:"h1"});var o=e(M,6);a(o,{title:"Making a layer extensible with kernels from the hub",local:"making-a-layer-extensible-with-kernels-from-the-hub",headingTag:"h2"});var r=e(o,2);a(r,{title:"Using a decorator",local:"using-a-decorator",headingTag:"h3"});var i=e(r,4);l(i,{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});var t=e(i,4);a(t,{title:"External layers",local:"external-layers",headingTag:"h3"});var y=e(t,4);l(y,{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});var c=e(y,4);a(c,{title:"Using a function as a layer",local:"using-a-function-as-a-layer",headingTag:"h3"});var p=e(c,4);l(p,{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});var d=e(p,6);l(d,{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>): | |
| <span class="hljs-variable language_">self</span>.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(<span class="hljs-variable language_">self</span>.linear(x))`,lang:"python",wrap:!1});var U=e(d,4);a(U,{title:"Kernelizing a model",local:"kernelizing-a-model",headingTag:"h2"});var T=e(U,4);l(T,{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLklORkVSRU5DRSk=",highlighted:`model = MyModel(...) | |
| model = kernelize(model, mode=Mode.INFERENCE)`,lang:"python",wrap:!1});var J=e(T,4);l(J,{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMG1vZGUlM0RNb2RlLlRSQUlOSU5HKQ==",highlighted:`model = MyModel(...) | |
| model = kernelize(model, mode=Mode.TRAINING)`,lang:"python",wrap:!1});var w=e(J,6);l(w,{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});var h=e(w,2);a(h,{title:"Kernel device",local:"kernel-device",headingTag:"h3"});var j=e(h,4);l(j,{code:"bW9kZWwlMjAlM0QlMjBNeU1vZGVsKC4uLiklMEFtb2RlbCUyMCUzRCUyMGtlcm5lbGl6ZShtb2RlbCUyQyUyMGRldmljZSUzRCUyMmN1ZGElMjIlMkMlMjBtb2RlJTNETW9kZS5JTkZFUkVOQ0Up",highlighted:`model = MyModel(...) | |
| model = kernelize(model, device=<span class="hljs-string">"cuda"</span>, mode=Mode.INFERENCE)`,lang:"python",wrap:!1});var u=e(j,2);a(u,{title:"Fallback forward",local:"fallback-forward",headingTag:"h3"});var I=e(u,4);l(I,{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});var C=e(I,4);a(C,{title:"Inspecting which kernels are used",local:"inspecting-which-kernels-are-used",headingTag:"h3"});var m=e(C,4);a(m,{title:"Registering a hub kernel for a layer",local:"registering-a-hub-kernel-for-a-layer",headingTag:"h2"});var A=e(m,4);l(A,{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});var k=e(A,8);l(k,{code:"cmVnaXN0ZXJfa2VybmVsX21hcHBpbmcoa2VybmVsX2xheWVyX21hcHBpbmcp",highlighted:"register_kernel_mapping(kernel_layer_mapping)",lang:"python",wrap:!1});var b=e(k,4);l(b,{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});var g=e(b,6);l(g,{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});var f=e(g,2);a(f,{title:"Registering kernels for specific modes",local:"registering-kernels-for-specific-modes",headingTag:"h3"});var _=e(f,4);l(_,{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});var R=e(_,8);l(R,{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});var E=e(R,4);a(E,{title:"Registering kernels for specific CUDA capabilities",local:"registering-kernels-for-specific-cuda-capabilities",headingTag:"h3"});var N=e(E,4);l(N,{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});var B=e(N,6);a(B,{title:"Registering kernels for specific ROCm capabilities",local:"registering-kernels-for-specific-rocm-capabilities",headingTag:"h3"});var v=e(B,4);a(v,{title:"Loading from a local repository for testing",local:"loading-from-a-local-repository-for-testing",headingTag:"h3"});var Z=e(v,4);l(Z,{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});var W=e(Z,4);l(W,{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});var F=e(W,2);H(F,{source:"https://github.com/huggingface/kernels/blob/main/docs/source/layers.md"}),$(2),Q(X,s),P()}export{oe as component}; | |
Xet Storage Details
- Size:
- 35.7 kB
- Xet hash:
- 5775e1a79453093281abec02f9aebd7728aafe44099b290c2e6f364db7e8efe7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.