Pdist
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | √ |
功能说明
-
算子功能:Pdist算子计算行向量两两之间的p-范数距离(pairwise p-norm distances),输出为上三角行优先的一维向量。等价于
torch.nn.functional.pdist。 -
kernel 实现形态:PyPTO DSL(
op_kernel/pdist.py),经enable_pypto_kernel在 configure 阶段做 codegen 并以 pypto opc 形式交付(MIX 发射,AIC 空转、计算全部位于 Vector 核)。 -
计算公式:
yidx=∥xi−xj∥p=(∑k=0M−1∣xi,k−xj,k∣p)1/p,idx=i⋅(2N−i−1)2+(j−i−1)y_{idx}=\left\|x_{i}-x_{j}\right\|_{p}=\left(\sum_{k=0}^{M-1}\left|x_{i,k}-x_{j,k}\right|^{p}\right)^{1/p},\quad idx=\frac{i\cdot(2N-i-1)}{2}+(j-i-1)
0≤i<j≤N−10\le i<j\le N-1
p 分支语义:
| p 取值 | 语义 |
|---|---|
| p = 0 | 统计不相等的维度数(Hamming 距离),NaN 维度计为不相等 |
| p = +inf | 最大绝对差(Chebyshev 距离),忽略 NaN 维度 |
| 0 < p < +inf | 幂和的 1/p 次方(Minkowski 距离),p=2 为欧氏距离、p=1 为曼哈顿距离 |
NaN 语义(对齐 GPU/CUDA):p=0 时 NaN 维度计为不相等;p=+inf 忽略 NaN 维度(输出非 NaN 维度的最大绝对差,全 NaN 行对输出 0);一般 p(非 0/0.5/1/2)逐对检测 NaN 维度并输出 NaN;p∈{0.5, 1, 2} 通过 IEEE 算术自然传播。
fp16 输入:片上中间累加一律使用 FP32,出口窄化回 FP16。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 输入张量,shape为(N, M),N≥2,M≥1。行i与行j(j>i)组成一个行对参与计算。要求行主序连续。 | FLOAT16、FLOAT32 | ND |
| p | 属性 | 范数阶,p≥0或+inf,默认2.0(欧氏距离)。p=0统计不相等维度数,p=+inf取最大绝对差,0 | FLOAT | - |
| y | 输出 | 两两距离向量,shape为(N*(N-1)/2,),上三角行优先排列,dtype与x一致。 | FLOAT16、FLOAT32 | ND |
约束说明
- x必须为二维(N, M)行主序连续张量,y的dtype必须与x一致。
- y的shape必须为(N*(N-1)/2,)。
- fp16输入的中间累加使用FP32,出口窄化回FP16。
- 平台差异:
- p=+inf且输入含NaN时:Ascend 950PR&950DT系列产品忽略NaN维度(输出非NaN维度的最大绝对差,全NaN行对输出 0),对齐GPU/CUDA语义;其余平台会将NaN传播至输出。
| 规格项 | 规格 | 规格说明 |
|---|---|---|
| N | 2~65535 | 行数,至少为2(至少一个行对)。 |
| M | 1~65535 | 每行维度数,超过片上内存时自动分块规约。 |
| p | [0, +inf) | p≥0或+inf;p=0为Hamming距离,p=+inf为Chebyshev距离,p<0或NaN拒绝为参数错误。 |
| dtype | FLOAT16/FLOAT32 | 输入输出同dtype;fp16中间计算使用FP32累加。 |
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_pdist | 通过aclnnPdist接口方式调用pdist算子,覆盖fp32全部p分支、多M分块与fp16。 |
| aclnn调用(Forward) | test_aclnn_pdist_forward | 通过aclnnPdistForward接口方式调用(标量 p 复合入口)。 |
| GEIR调用 | test_geir_pdist | 通过GE IR图模式(RunGraph)方式调用pdist算子。 |