### What this PR does / why we need it?
1.Add the implementation of normal Aclnn operators: MoeCombineNormal,
MoeDispatchNormal, NotifyDispatch,and DispatchLayout.
- MoeCombineNormal: Implements the combine logic within MoE operations.
- MoeDispatchNormal: Implements the dispatch logic within MoE
operations.
- NotifyDispatch: Exchanges topk_idx information among different ranks
to calculate the device memory required for the dispatch stage.
- DispatchLayout: Used to calculate information related to the device
memory layout for the dispatch stage.
2.Provide PyTorch interfaces for normal operators—get_dispatch_layout,
dispatch_prefill, and combine_prefill—to be used for MoE communication
during the prefill stage in vLLM.
- get_dispatch_layout: Calculates information related to the device
memory layout for the dispatch operator, and is called before
dispatch_prefill.
- dispatch_prefill: Initiates the dispatch operation.
- combine_prefill: Initiates the combine operation.
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
The functionality has already been validated using the local Qwen model.
Test cases will be added after support for multi-NPU use cases in the CI
pipeline is finalized.
- vLLM version: v0.12.0
- vLLM main:
ad32e3e19c
Signed-off-by: shiro-zzzz <zhangdianhao@huawei.com>
51 lines
1.8 KiB
C
51 lines
1.8 KiB
C
#ifndef ACLNN_DISPATCH_LAYOUT_H_
|
|
#define ACLNN_DISPATCH_LAYOUT_H_
|
|
|
|
#include "aclnn/acl_meta.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* funtion: aclnnDispatchLayoutGetWorkspaceSize
|
|
* topkIdx : required
|
|
* numTokens : required
|
|
* numRanks : required
|
|
* numExperts : required
|
|
* numTopk : required
|
|
* numTokensPerRank : required
|
|
* numTokensPerExpert : required
|
|
* isTokenInRank : required
|
|
* workspaceSize : size of workspace(output).
|
|
* executor : executor context(output).
|
|
*/
|
|
__attribute__((visibility("default"))) aclnnStatus aclnnDispatchLayoutGetWorkspaceSize(
|
|
const aclTensor *topkIdx,
|
|
int64_t numTokens,
|
|
int64_t numRanks,
|
|
int64_t numExperts,
|
|
int64_t numTopk,
|
|
const aclTensor *numTokensPerRank,
|
|
const aclTensor *numTokensPerExpert,
|
|
const aclTensor *isTokenInRank,
|
|
uint64_t *workspaceSize,
|
|
aclOpExecutor **executor);
|
|
|
|
/* funtion: aclnnDispatchLayout
|
|
* workspace : workspace memory addr(input).
|
|
* workspaceSize : size of workspace(input).
|
|
* executor : executor context(input).
|
|
* stream : acl stream.
|
|
*/
|
|
__attribute__((visibility("default"))) aclnnStatus aclnnDispatchLayout(
|
|
void *workspace,
|
|
uint64_t workspaceSize,
|
|
aclOpExecutor *executor,
|
|
aclrtStream stream);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|