开发者
下载
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:Attention与FFN分离部署场景下,FFN worker侧的token重排算子。Attention将token按专家路由发送到对应FFN worker的预分配数据区,本接口从该数据区中扫描调度信息,按专家维度聚合并重排token,产出各专家对应的连续token数据块。

    该算子不建议单独使用,建议与FfnWorkerScheduler等算子配合使用,形成完整的工作流。

    1. 接收Attention侧发送的数据。该数据以ScheduleContext结构体内存排布方式存储。其具体定义参见。该结构体包含CommonArea、ControlArea、AttentionArea、FfnArea域。本接口从FfnArea中读取token_info_buf和token_data_buf获取待重排的token数据与描述信息,并获取layer_id、session_id、micro_batch_id、expert_ids等路由信息。

    2. [object Object]中所有token的专家ID进行排序(被mask的token初始化为大值),生成gather索引。

    3. 多核并行按gather索引从[object Object]中提取token的hidden states和dynamic scale,同时查表得到对应的session_id、micro_batch_id、token_id。

    4. 单核扫描排序后的专家ID序列,查找跳变点,生成[object Object](每个专家处理的token起止偏移)。

    其中 Y=A×BS×(K+1)Y = A \times BS \times (K+1)AA 为Attention worker数量,BSBS 为micro batch size,K+1K+1 为topK加共享专家数。

  • 计算公式:

    gather_idx,_=sort(expert_ids_in)\text{gather\_idx}, \_ = \text{sort}(\text{expert\_ids\_in}) y[i]=token_data[gather_idx[i]]y[i] = \text{token\_data}[\text{gather\_idx}[i]] group_list[e]=[expert_ide,expert_token_nume]\text{group\_list}[e] = [\text{expert\_id}_e, \text{expert\_token\_num}_e] actual_token_num=eexpert_token_nume\text{actual\_token\_num} = \sum_{e} \text{expert\_token\_num}_e
[object Object]

每个算子分为,必须先调用“aclnnFfnWorkerBatchingGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnFfnWorkerBatching”接口执行计算。

[object Object]
[object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

    第一段接口会完成入参校验,出现以下场景时报错:

    [object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

[object Object]
  • 参数A(Attention worker数量)支持 ≤ 1024。
  • 参数M(micro batch数量)支持 ≤ 64。
  • 参数K(topK数)支持 ≤ 64。
  • 参数BS(micro batch size)和Y支持泛化,无硬上限(受内存限制)。
  • 参数H(hidden size)支持泛化。
  • tokenDtype为2时,输入int8数据与fp32 scale连续排布。
  • 确定性计算:
    • aclnnFfnWorkerBatching默认确定性实现。
[object Object]

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]