ScatterElements/ViewCopy 算子执行比较慢?
收藏回复举报
ScatterElements/ViewCopy 算子执行比较慢?
t('forum.solved') 已解决
发表于2024-03-19 11:28:36
0 查看

背景

现在执行类似下面的 pytorch 代码时候:

import torch
a = torch.randn(130, 32, 128)
b = torch.randn(1, 32, 128)

def forward(self, a, b):
    a[129] = b
    return a + a

out = forward(a, b)

a[129] = b 这种 scatter 操作,我们使用了 GE接口,使用算子原型进行构图来进行表达。我们尝试了使用 ScatterElements 和 viewcopy 算子来构图,分别对应下面两张图:

  1. 使用 ScatterElements 算子 true

模型执行 kernel 耗时占比: true

执行时间: true

  1. 使用 viewcopy 算子

true

模型执行 kernel 耗时占比: true

执行时间: true

我们对比发现,同样的实现 ViewCopy 和 ScatterElements 操作都可以实现期望的功能,但是 ViewCopy 性能会更好点。但是 ViewCopy 本身也是使用 AICPU 实现,最终的性能比我们现象的还是要差一些。

以下是我们在 llama2 7b 前向推理中使用 viewcopy 最终耗时占比: true

我们发现 viewcopy 在仅调用 64 次的情况下, kernel耗时占比达到了 18%,这让我们认为这个算子性能比较差。

我们的问题:

  1. 类似上述这种 scatter update 操作,除了ScatterElements/ViewCopy 还有没有其他什么算子可以更高效的实现?
  2. 目前我们尝试的两个算子都是跑在 AI CPU 上的,有没有什么方法可以提供性能?

实验环境

CANN 版本: 8.0.RC1.alpha001

cpu架构:aarch64

硬件:Atlas 800T A2

我要发帖子