mindscience.sciops.evoformer_attention.evo_attention
- mindscience.sciops.evoformer_attention.evo_attention(query, key, value, head_num, bias, attn_mask, scale_value, input_layout)[源代码]
使用自定义NPU算子执行evoformer注意力计算。
此函数实现了Evoformer中的注意力机制,这是AlphaFold2等蛋白质结构预测模型中的关键组件。它计算注意力分数并将它们应用于值张量以产生输出。
- 参数:
query (Tensor) - 用于注意力计算的查询张量。
key (Tensor) - 用于注意力计算的键张量。
value (Tensor) - 用于注意力计算的值张量。
head_num (int) - 注意力头的数量。
bias (Tensor) - 要添加到注意力分数的偏置张量。
attn_mask (Tensor) - 用于屏蔽某些位置的注意力掩码。
scale_value (float) - 应用于注意力分数的缩放因子。
input_layout (str) - 输入张量的布局(例如,'BHMK'或'BMKH')。
- 返回:
Tensor。应用注意力机制后的输出张量。
- 异常:
RuntimeError - 如果自定义算子加载或执行失败。
样例:
>>> import numpy as np >>> import mindspore as ms >>> from mindspore import Tensor >>> from mindscience.sciops import evo_attention >>> >>> # Example with BSND layout >>> b, n, s, d = 2048, 1, 2048, 8 >>> query = Tensor(np.random.uniform(-0.1, 0.1, (b, s, n, d)), ms.bfloat16) >>> key = Tensor(np.random.uniform(-0.1, 0.1, (b, s, n, d)), ms.bfloat16) >>> value = Tensor(np.random.uniform(-0.1, 0.1, (b, s, n, d)), ms.bfloat16) >>> bias = Tensor(np.random.uniform(-0.1, 0.1, (1, n, s, s)), ms.bfloat16) >>> mask = np.concatenate((np.ones((b, 1, 1, s - 5)).astype(np.float32), ... np.zeros((b, 1, 1, 5)).astype(np.float32)), axis=-1) >>> evo_mask = Tensor(1 - mask.astype(np.uint8)) >>> output = evo_attention(query, key, value, n, bias, evo_mask, scale_value=1.0, input_layout="BSND") >>> print(output.shape) (2048, 2048, 1, 8)