开发者
资源
[object Object][object Object][object Object]undefined
[object Object]
  • API功能:在NPU上实现vLLM库中advance_step_flashattn的功能,在每个生成步骤中原地更新[object Object][object Object][object Object][object Object]
  • 非投机场景计算公式:blockIdxblockIdx是当前代码被执行的核的索引。blockTablesStride=blockTables.stride(0)inputTokens[blockIdx]=sampledTokenIds[blockIdx]inputPositions[blockIdx]=seqLens[blockIdx]seqLens[blockIdx]=seqLens[blockIdx]+1slotMapping[blockIdx]=(blockTables[blockIdx]+blockTablesStrideblockIdx)blockSize+(seqLens[blockIdx]%blockSize)blockTablesStride = blockTables.stride(0) \\ inputTokens[blockIdx] = sampledTokenIds[blockIdx] \\ inputPositions[blockIdx] = seqLens[blockIdx] \\ seqLens[blockIdx] = seqLens[blockIdx] + 1 \\ slotMapping[blockIdx] = ({blockTables}[blockIdx] + blockTablesStride * blockIdx) * blockSize + (seqLens[blockIdx]\%blockSize)
  • 投机场景计算公式:ii是当前代码被执行的请求的索引。lastToken=last valid token of each request in sampledTokenIdsblockTablesStride=blockTables.stride(0)inputTokens[:numSeqs,0]=lastTokeninputTokens[:numSeqs,1:]=specTokeninputPositions[i]=inputPositions[i]+1+acceptedNum[i]seqLens[i]=inputPositions[i]+1slotMapping[i]=(blockTables[i]+blockTablesStridei)blockSize+(inputPositions[i]%blockSize)lastToken = \text{last valid token of each request in }sampledTokenIds \\ blockTablesStride = blockTables.stride(0) \\ inputTokens[:numSeqs, 0] = lastToken \\ inputTokens[:numSeqs, 1:] = specToken \\ inputPositions[i] = inputPositions[i] + 1 + acceptedNum[i] \\ seqLens[i] = inputPositions[i] + 1 \\ slotMapping[i] = ({blockTables}[i] + blockTablesStride * i) * blockSize + (inputPositions[i]\%blockSize)
[object Object]
[object Object]
[object Object]
  • input_tokens ([object Object]):必选参数,输入/输出张量,对应公式中的输出inputTokensinputTokens,用于更新vLLM模型中的token值;数据类型支持[object Object];如果是非投机场景,shape为[num_seqs,],如果是投机场景,shape为[num_seqs, 1 + spec_num];第一维长度与[object Object]相同,不支持空tensor,取值范围为大于0的正整数。
  • sampled_token_ids ([object Object]):必选参数,输入张量,对应公式中的输入sampledTokenIdssampledTokenIds,用于储存token_id;数据类型支持[object Object];如果是非投机场景,shape为[num_queries, 1],第二维长度是1;如果是投机场景,shape为[num_seqs, 1 + spec_num];第一维长度与[object Object]相同,第二维长度是1,不支持空tensor,取值范围为大于0的正整数。
  • input_positions ([object Object]):必选参数,输入/输出张量,对应公式中的输出inputPositionsinputPositions,用于记录token的index;数据类型支持[object Object];如果是非投机场景,shape为[num_queries, 1],第二维长度是1;如果是投机场景,shape为[num_seqs, 1 + spec_num];第一维长度与[object Object]相同,不支持空tensor,取值范围为大于0的正整数。
  • seq_lens ([object Object]):必选参数,输入/输出张量,对应公式中的输入/输出seqLensseqLens,用于记录不同block_idx下seq的长度;数据类型支持[object Object];如果是非投机场景,shape为[num_queries, 1],第二维长度是1;如果是投机场景,shape为[num_seqs, 1 + spec_num];第一维长度与[object Object]相同,不支持空tensor,取值范围为大于0的正整数。
  • slot_mapping ([object Object]):必选参数,输入/输出张量,对应公式中的输出slotMappingslotMapping,用于将token值在序列中的位置映射到物理位置;数据类型支持[object Object];如果是非投机场景,shape为[num_queries, 1],第二维长度是1;如果是投机场景,shape为[num_seqs, 1 + spec_num];第一维长度与[object Object]相同,不支持空tensor,取值范围为大于0的正整数。
  • block_tables ([object Object]):必选参数,输入/输出张量,对应公式中的输入blockTablesblockTables,用于记录不同block_idx下block的大小;数据类型支持[object Object];shape为二维,第一维长度与[object Object]相同,第二维长度需要大于[object Object]中最大值除以[object Object]的整数部分,不支持空tensor,取值范围为大于0的正整数。
  • num_seqs ([object Object]):必选参数,记录输入的seq数量;取值范围为大于0的正整数。
  • num_queries ([object Object]):必选参数,记录输入的query数量;取值范围为大于0的正整数。
  • block_size ([object Object]):必选参数,对应公式中的blockSizeblockSize,每个block的大小;取值范围为大于0的正整数。
  • spec_token ([object Object]): 可选参数,输入张量,用于记录投机场景下当前的token的idx。数据类型支持[object Object];spec_token为空时,则为非投机场景,默认为[object Object][object Object]不为空时,则为投机场景,shape为[num_seqs, spec_num];不支持空tensor,必须为大于0的正整数。
  • accepted_num ([object Object]): 可选参数,输入张量,用于记录投机场景下每个request接受的投机的数量。数据类型支持[object Object]
[object Object]

此接口将原地更新[object Object][object Object][object Object][object Object]的值,无返回值。

[object Object]
  • 输入[object Object][object Object][object Object][object Object][object Object]的第一维长度与[object Object]相同。
  • 投机场景下,输入[object Object]的第二维长度为[object Object]
  • 输入[object Object]的第一维长度与[object Object]相同且第二维长度为1。
  • 输入[object Object]的shape的第二维长度大于[object Object]中最大值除以[object Object]的整数部分。
  • 非投机场景下,输入[object Object]必须大于输入[object Object];投机场景下,[object Object][object Object]相同。
  • 该接口仅限推理场景使用,无反向函数。
[object Object]

非投机场景:

[object Object]

投机场景:

[object Object]