该模块通过 pybind11 将常用算子直接暴露在 infinicore 命名空间下,对应源码位于 InfiniCore/python/infinicore/ops/。所有函数均支持可选的 out 参数以复用输出缓冲区。
- 所有参数必须是
infinicore.Tensor实例(或至少携带_underlying指针),否则无法传递到底层_infinicore。 out张量(若提供)需要和输出形状、dtype、设备完全匹配。- 算子执行依赖底层
_infinicore运行时;请在创建张量时传入期望的device,保持所有输入处于同一设备上。
import infinicore as ic
device = ic.device("cuda:0")
a = ic.ones((4, 8), dtype=ic.float16, device=device)
b = ic.ones((4, 8), dtype=ic.float16, device=device)
ic.add(a, b, out=a) # 原位累加
c = ic.matmul(a, b.permute([1, 0])) # (4, 8) @ (8, 4)
contiguous = ic.rearrange(c)
attn_out = ic.attention(
q=contiguous,
k=contiguous,
v=contiguous,
k_cache=ic.empty((4, 128, contiguous.shape[-1]), dtype=contiguous.dtype, device=contiguous.device),
v_cache=ic.empty((4, 128, contiguous.shape[-1]), dtype=contiguous.dtype, device=contiguous.device),
pos=0,
)