
Alpamayo-R1 智驾VLA模型推理昇腾迁移-性能优化说明【免费下载链接】cann-recipes-embodied-intelligence本项目针对具身智能业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence本文档总结了Alpamayo-R1模型在昇腾NPU上的优化策略1. Flash Attention (FA) 替换优化说明本样例使用torch_npu内置的npu_fusion_attention融合算子替换源代码中的小算子实现npu_fusion_attention详细可见Ascend社区文档。实现方式在模型配置中设置以下参数会调用torch_npu内置的npu_fusion_attention融合算子config.attn_implementation flash_attention_2优化位置文件src/alpamayo_r1/models/base_model.py修改在模型初始化时设置attention实现方式2. Transformers库中布尔索引优化优化说明原始实现中使用了布尔索引操作效率较低。通过优化索引计算逻辑避免不必要的布尔运算和类型转换。实现方式原始实现if image_features is not None and inputs_embeds[special_image_mask].numel() ! image_features.numel():优化后实现创建了独立的patched_get_placeholder_mask函数优化了image和video token的mask生成逻辑if image_features is not None: n_masked_elements special_image_mask.sum().item() if n_masked_elements ! image_features.numel(): raise ValueError( fImage features and image tokens do not match: tokens: {n_image_tokens}, features {image_features.shape[0]} )优化位置新增文件src/alpamayo_r1/qwen_patches/qwen3vl_optimization.py新增patched_get_placeholder_mask函数新增apply_qwen3vl_patches()函数用于应用patch3. RmsNorm算子优化优化说明本样例使用torch_npu内置的npu_rms_norm融合算子替换源代码中的小算子实现npu_rms_norm详细可见Ascend社区文档。在src/alpamayo_r1/models/action_in_proj.py的RmsNorm类中使能npu_rms_norm融合算子实现方式原始实现def _norm(self, x): Normalize the input tensor. return x * torch.rsqrt(x.pow(2).mean(-1, keepdimTrue) self.eps) def forward(self, x): Normalize the input tensor. output self._norm(x.float()).type_as(x) return output * self.weight优化后实现def forward(self, x): input_dtype x.dtype weight_dtype self.weight.dtype if input_dtype ! weight_dtype: weight_dtype self.weight.to(input_dtype) else: weight self.weight # npu_rms_norm returns output torch_npu.npu_rms_norm(x, weight, self.eps)[0] return output优化位置文件src/alpamayo_r1/models/action_in_proj.py类RmsNorm修改使用torch_npu.npu_rms_norm替换原始实现4. ADD算子优化使用融合算子torch.addcmul优化说明在扩散模型的积分过程中遇到了x x dt * v这样的操作。使用昇腾NPU提供的融合算子torch.addcmul可以将加法和乘法融合为一个算子减少计算步骤和内存访问。实现方式原始实现x x dt * v优化后实现x torch.addcmul(x, dt, v)优化位置文件src/alpamayo_r1/diffusion/flow_matching.py函数flow_matching_euler积分步进修改使用torch.addcmul替换原始的加法和乘法组合5. Concat优化预分配索引赋值优化说明在处理多特征拼接时原始实现使用torch.cat进行多次拼接这会导致多次内存分配和数据拷贝。优化方案是预先分配完整大小的tensor然后通过索引直接赋值避免拼接操作。实现方式原始实现action_feats torch.cat([s(x[:, :, i]) for i, s in enumerate(self.sinus)], dim-1) timestep_feats self.timestep_fourier_encoder(timesteps[..., -1]) timestep_feats timestep_feats.repeat(1, T, 1) x torch.cat((action_feats, timestep_feats), dim-1)优化后实现batch_feats torch.empty(B, T, self.num_input_feats, devicex.device, dtypex.dtype) offset 0 for i, s in enumerate(self.sinus): feat s(x[:, :, i]) batch_feats[:, :, offset:offsetfeat.size(-1)] feat offset feat.size(-1) timestep_feats self.timestep_fourier_encoder(timesteps[..., -1]) batch_feats[:, :, offset:] timestep_feats.repeat(1, T, 1) x batch_feats优化位置文件src/alpamayo_r1/models/action_in_proj.py类PerWaypointActionInProjV2方法forward修改预分配batch_feats使用索引赋值替代torch.cat优化总结优化项优化类型主要技术性能收益FA替换注意力优化torch_npu.npu_fusion_attention降低显存、提升速度、支持更长序列Index算子替换算子优化优化布尔索引逻辑减少冗余计算、提升索引效率RmsNorm优化算子融合torch_npu.npu_rms_norm减少kernel launch、优化内存访问ADD算子优化算子融合torch.addcmul减少内存读写、减少kernel launchSliceConcat优化内存优化预分配索引赋值减少内存分配和拷贝、提升缓存效率【免费下载链接】cann-recipes-embodied-intelligence本项目针对具身智能业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考