news 2026/5/9 12:51:31

CANN SANA-Video优化实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN SANA-Video优化实践

NPU SANA-Video模型推理优化实践

【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer

本文档主要介绍SANA-Video模型基于NPU的推理优化策略。相关优化逻辑位于models/sana-video/patches/npu_patches.py

1×1 conv2d优化

patch_conv1x1_matmul()中,对ConvLayer.forward加入1×1 conv2d的判断与转换逻辑:

if self.conv.kernel_size == (1, 1): B, Ci, H, W = x.shape Co, *_ = self.conv.weight.shape x_trans = x.view(B, Ci, -1).permute(0, 2, 1).contiguous() kernel_trans = self.conv.weight.view(Co, Ci) x = x_trans @ kernel_trans.T if self.conv.bias is not None: x += self.conv.bias x = x.permute(0, 2, 1).contiguous().view(B, Co, H, W) else: x = self.conv(x)

时序conv2d的hw轴调换优化

patch_temporal_conv_swap()中,对GLUMBConvTemp增加t_conv_swap并在forward中调用:

self.t_conv_swap = nn.Conv2d( out_feature, out_feature, kernel_size=(1, t_kernel_size), stride=1, padding=(0, t_padding), bias=False, ) x_reshaped = x.view(batch_size, time_steps, channels, height * width).permute(0, 2, 1, 3) x_out = x_reshaped + self.t_conv_swap(x_reshaped.transpose(-1, -2)).transpose(-1, -2)

inference_video_scripts/inference_sana_video.py加载模型参数后,再同步一次交换后的权重:

for block in model.blocks: block.mlp.t_conv_swap.weight = nn.Parameter(block.mlp.t_conv.weight.permute(0, 1, 3, 2))

npu_rms_norm算子适配

本样例使用torch_npu内置的npu_rms_norm融合算子替换原始小算子实现,npu_rms_norm详细可见Ascend社区文档。在patch_rms_norm()中使能npu_rms_norm融合算子:

def forward(self, x): if _npu_available: return torch_npu.npu_rms_norm(x, self.weight, epsilon=self.eps)[0] return original_forward(self, x)

npu_rotary_mul算子适配

本样例使用torch_npu内置的npu_rotary_mul融合算子替换原始 rotary 小算子实现,npu_rotary_mul详细可见Ascend社区文档。在patch_rotary_mul()中使能npu_rotary_mul融合算子:

def apply_rotary_emb(hidden_states: torch.Tensor, freqs: torch.Tensor): if _npu_available: cos = freqs.real.unsqueeze(-1).expand(-1, -1, -1, -1, 2).flatten(-2) sin = freqs.imag.unsqueeze(-1).expand(-1, -1, -1, -1, 2).flatten(-2) x_out = torch_npu.npu_rotary_mul(hidden_states.permute(0, 1, 3, 2), cos, sin, "interleave") return x_out.permute(0, 1, 3, 2) else: x_rotated = torch.view_as_complex(hidden_states.permute(0, 1, 3, 2).to(torch.float64).unflatten(3, (-1, 2))) x_out = torch.view_as_real(x_rotated * freqs).flatten(3, 4).permute(0, 1, 3, 2) return x_out.type_as(hidden_states) q_rotated = apply_rotary_emb(q, rotary_emb) k_rotated = apply_rotary_emb(k, rotary_emb)

npu_fusion_attention算子适配

本样例使用torch_npu内置的npu_fusion_attention融合算子替换原始 attention 小算子实现,npu_fusion_attention详细可见Ascend社区文档。在patch_fusion_attention()中使能npu_fusion_attention融合算子:

if mask is not None and mask.ndim == 2: mask = (1 - mask.to(q.dtype)) * -10000.0 mask = mask[:, None, None].repeat(1, self.num_heads, num_tokens, 1) if _npu_available: bool_mask = None if mask is None else mask < -1000 x = torch_npu.npu_fusion_attention( q, k, v, q.shape[1], input_layout="BNSD", pse=None, atten_mask=bool_mask, scale=1.0 / math.sqrt(q.shape[-1]), pre_tockens=2147483647, next_tockens=2147483647, keep_prob=1, )[0] else: x = F.scaled_dot_product_attention(q, k, v, attn_mask=mask, dropout_p=0.0, is_causal=False) x = x.transpose(1, 2).contiguous()

【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 12:48:15

融合模糊规则与多任务学习的艺术图像分类与可解释性研究

1. 项目概述&#xff1a;当艺术遇见算法&#xff0c;我们如何“看懂”一幅画&#xff1f; 在艺术的世界里&#xff0c;评判一幅作品往往依赖策展人、评论家或资深藏家的“慧眼”。这种基于深厚学识和感性经验的判断&#xff0c;长久以来被认为是机器难以企及的领域。然而&#…

作者头像 李华
网站建设 2026/5/9 12:46:02

CANN运行时溢出检测示例

0_overflow_detection 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 概述 本示例演示流级溢出检测开关、状态查询和重置流程。 功能说明 查询当前 Device 的浮点溢出模式&#xff0c;并切换为 ACL…

作者头像 李华
网站建设 2026/5/9 12:45:44

HarmonyOS 6 ArkUI 粒子动画(Particle)动态发射器控制使用文档

文章目录动态发射器控制核心说明1. 作用2. EmitterProperty 结构示例代码逐模块解析1 状态变量定义&#xff08;动态发射器核心&#xff09;2 粒子基础配置对应功能&#xff1a;3 颜色动画配置4 动态发射器绑定5 页面布局运行效果完整代码运行效果如图&#xff0c;从中间发散&a…

作者头像 李华
网站建设 2026/5/9 12:42:33

CANN/ops-cv一维上采样反向算子

aclnnUpsampleLinear1dBackward 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv &#x1f4c4; 查看源码 产品支持情况 产品是否支持 Ascend 950PR/Asce…

作者头像 李华