| 
20 | 20 | import torch.nn as nn  | 
21 | 21 | import torch.nn.functional as F  | 
22 | 22 | 
 
  | 
23 |  | -from ..utils import is_torch_npu_available, is_torch_version  | 
 | 23 | +from ..utils import is_kernels_available, is_torch_npu_available, is_torch_version  | 
 | 24 | +from ..utils.constants import DIFFUSERS_ENABLE_HUB_KERNELS  | 
24 | 25 | from ..utils.kernels_utils import use_kernel_forward_from_hub  | 
25 | 26 | from .activations import get_activation  | 
26 | 27 | from .embeddings import CombinedTimestepLabelEmbeddings, PixArtAlphaCombinedTimestepSizeEmbeddings  | 
27 | 28 | 
 
  | 
28 | 29 | 
 
  | 
 | 30 | +if is_kernels_available() and DIFFUSERS_ENABLE_HUB_KERNELS:  | 
 | 31 | +    from kernels import get_kernel  | 
 | 32 | + | 
 | 33 | +    activation = get_kernel("kernels-community/activation", revision="add_more_act")  | 
 | 34 | +    silu_kernel = activation.silu  | 
 | 35 | + | 
 | 36 | + | 
29 | 37 | class AdaLayerNorm(nn.Module):  | 
30 | 38 |     r"""  | 
31 | 39 |     Norm layer modified to incorporate timestep embeddings.  | 
@@ -58,7 +66,10 @@ def __init__(  | 
58 | 66 |         else:  | 
59 | 67 |             self.emb = None  | 
60 | 68 | 
 
  | 
61 |  | -        self.silu = nn.SiLU()  | 
 | 69 | +        if not DIFFUSERS_ENABLE_HUB_KERNELS:  | 
 | 70 | +            self.silu = nn.SiLU()  | 
 | 71 | +        else:  | 
 | 72 | +            self.silu = silu_kernel  | 
62 | 73 |         self.linear = nn.Linear(embedding_dim, output_dim)  | 
63 | 74 |         self.norm = nn.LayerNorm(output_dim // 2, norm_eps, norm_elementwise_affine)  | 
64 | 75 | 
 
  | 
@@ -145,7 +156,10 @@ def __init__(self, embedding_dim: int, num_embeddings: Optional[int] = None, nor  | 
145 | 156 |         else:  | 
146 | 157 |             self.emb = None  | 
147 | 158 | 
 
  | 
148 |  | -        self.silu = nn.SiLU()  | 
 | 159 | +        if not DIFFUSERS_ENABLE_HUB_KERNELS:  | 
 | 160 | +            self.silu = nn.SiLU()  | 
 | 161 | +        else:  | 
 | 162 | +            self.silu = silu_kernel  | 
149 | 163 |         self.linear = nn.Linear(embedding_dim, 6 * embedding_dim, bias=bias)  | 
150 | 164 |         if norm_type == "layer_norm":  | 
151 | 165 |             self.norm = nn.LayerNorm(embedding_dim, elementwise_affine=False, eps=1e-6)  | 
@@ -184,7 +198,10 @@ class AdaLayerNormZeroSingle(nn.Module):  | 
184 | 198 |     def __init__(self, embedding_dim: int, norm_type="layer_norm", bias=True):  | 
185 | 199 |         super().__init__()  | 
186 | 200 | 
 
  | 
187 |  | -        self.silu = nn.SiLU()  | 
 | 201 | +        if not DIFFUSERS_ENABLE_HUB_KERNELS:  | 
 | 202 | +            self.silu = nn.SiLU()  | 
 | 203 | +        else:  | 
 | 204 | +            self.silu = silu_kernel  | 
188 | 205 |         self.linear = nn.Linear(embedding_dim, 3 * embedding_dim, bias=bias)  | 
189 | 206 |         if norm_type == "layer_norm":  | 
190 | 207 |             self.norm = nn.LayerNorm(embedding_dim, elementwise_affine=False, eps=1e-6)  | 
@@ -336,7 +353,10 @@ def __init__(  | 
336 | 353 |         norm_type="layer_norm",  | 
337 | 354 |     ):  | 
338 | 355 |         super().__init__()  | 
339 |  | -        self.silu = nn.SiLU()  | 
 | 356 | +        if not DIFFUSERS_ENABLE_HUB_KERNELS:  | 
 | 357 | +            self.silu = nn.SiLU()  | 
 | 358 | +        else:  | 
 | 359 | +            self.silu = silu_kernel  | 
340 | 360 |         self.linear = nn.Linear(conditioning_embedding_dim, embedding_dim * 2, bias=bias)  | 
341 | 361 |         if norm_type == "layer_norm":  | 
342 | 362 |             self.norm = LayerNorm(embedding_dim, eps, elementwise_affine, bias)  | 
 | 
0 commit comments