Instructions to use replicate/flashinfer-draft with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Kernels
How to use replicate/flashinfer-draft with Kernels:
# !pip install kernels from kernels import get_kernel # a version (or an explicit revision) is required; see the "Files and versions" tab for the available ones kernel = get_kernel("replicate/flashinfer-draft", version=1) - Notebooks
- Google Colab
- Kaggle
Download include/flashinfer/trtllm/fused_moe/DevKernel.h from replicate/flashinfer-draft: direct link, hf CLI and curl.
- Browser
- Download file 18.1 kB
-
https://huggingface.co/replicate/flashinfer-draft/resolve/main/include/flashinfer/trtllm/fused_moe/DevKernel.h
- Command line
-
hf download hf://replicate/flashinfer-draft/include/flashinfer/trtllm/fused_moe/DevKernel.h
-
curl -L -o DevKernel.h https://huggingface.co/replicate/flashinfer-draft/resolve/main/include/flashinfer/trtllm/fused_moe/DevKernel.h
18.1 kB
| /* | |
| * Copyright (c) 2022-2024, NVIDIA CORPORATION. All rights reserved. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| // #include <cuda_runtime_api.h> | |
| // #include <tensorrt_llm/common/assert.h> | |
| namespace moe::dev { | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| namespace activation { | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| namespace tg = batchedGemm::trtllm::gen; | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| struct Data { | |
| tg::Dtype mDtypeElt{tg::Dtype::Fp16}; | |
| bool mUsePdl{false}; | |
| bool mUseDeepSeekFp8{false}; | |
| void* inPtr; | |
| void* outPtr; | |
| float* inDqSfsPtr = nullptr; | |
| float* outDqSfsPtr = nullptr; | |
| int32_t innerDim; | |
| int32_t numTokens; | |
| int32_t topK; | |
| int32_t* expandedIdxToPermutedIdx; | |
| int32_t const* totalNumPaddedTokens; | |
| }; | |
| template <typename Type_, bool UsePdl_> | |
| struct KernelParams { | |
| using Type = Type_; | |
| static constexpr bool UsePdl = UsePdl_; | |
| Type const* inPtr; | |
| Type* outPtr; | |
| float* inDqSfsPtr = nullptr; | |
| float* outDqSfsPtr = nullptr; | |
| int32_t innerDim; | |
| int32_t numTokens; | |
| int32_t topK; | |
| int32_t* expandedIdxToPermutedIdx; | |
| int32_t const* totalNumPaddedTokens; | |
| static KernelParams setKernelParams(Data const& data) { | |
| KernelParams params; | |
| params.inPtr = (Type*)data.inPtr; | |
| params.outPtr = (Type*)data.outPtr; | |
| params.inDqSfsPtr = data.inDqSfsPtr; | |
| params.outDqSfsPtr = data.outDqSfsPtr; | |
| params.expandedIdxToPermutedIdx = data.expandedIdxToPermutedIdx; | |
| params.innerDim = data.innerDim; | |
| params.numTokens = data.numTokens; | |
| params.topK = data.topK; | |
| params.totalNumPaddedTokens = data.totalNumPaddedTokens; | |
| return params; | |
| } | |
| }; | |
| void run(Data const& data, void* stream); | |
| } // namespace activation | |
| namespace convertsf { | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| namespace tg = batchedGemm::trtllm::gen; | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| struct Data { | |
| bool mUsePdl{false}; | |
| void* inSfPtr = nullptr; | |
| void* outSfPtr = nullptr; | |
| int32_t hiddenDimSf; | |
| int32_t numTokens; | |
| tg::SfLayout sfLayoutSrc; | |
| tg::SfLayout sfLayoutDst; | |
| }; | |
| template <typename Type_, bool UsePdl_> | |
| struct KernelParams { | |
| using Type = Type_; | |
| static constexpr bool UsePdl = UsePdl_; | |
| void const* inSfPtr = nullptr; | |
| void* outSfPtr = nullptr; | |
| int32_t hiddenDimSf; | |
| int32_t numTokens; | |
| tg::SfLayout sfLayoutSrc; | |
| tg::SfLayout sfLayoutDst; | |
| static KernelParams setKernelParams(Data const& data) { | |
| KernelParams params; | |
| params.inSfPtr = data.inSfPtr; | |
| params.outSfPtr = data.outSfPtr; | |
| params.hiddenDimSf = data.hiddenDimSf; | |
| params.numTokens = data.numTokens; | |
| params.sfLayoutSrc = data.sfLayoutSrc; | |
| params.sfLayoutDst = data.sfLayoutDst; | |
| return params; | |
| } | |
| }; | |
| void run(Data const& data, void* stream); | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| } // namespace convertsf | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| namespace permute { | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| namespace tg = batchedGemm::trtllm::gen; | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| struct Data { | |
| tg::Dtype mDtypeElt{tg::Dtype::Fp16}; | |
| bool mUsePdl{false}; | |
| bool mUseDeepSeekFp8{false}; | |
| void* inPtr; | |
| void* outPtr; | |
| float* inDqSfsPtr = nullptr; | |
| float* outDqSfsPtr = nullptr; | |
| int32_t* expandedIdxToPermutedIdx; | |
| int32_t hiddenDim; | |
| int32_t numTokens; | |
| int32_t topK; | |
| int32_t const* totalNumPaddedTokens; | |
| }; | |
| template <typename Type_, bool UsePdl_> | |
| struct KernelParams { | |
| using Type = Type_; | |
| static constexpr bool UsePdl = UsePdl_; | |
| Type const* inPtr; | |
| Type* outPtr; | |
| float const* inDqSfsPtr; | |
| float* outDqSfsPtr; | |
| int32_t* expandedIdxToPermutedIdx; | |
| int32_t hiddenDim; | |
| int32_t numTokens; | |
| int32_t topK; | |
| int32_t const* totalNumPaddedTokens; | |
| bool useDeepSeekFp8; | |
| static KernelParams setKernelParams(Data const& data) { | |
| KernelParams params; | |
| params.inPtr = (Type*)data.inPtr; | |
| params.outPtr = (Type*)data.outPtr; | |
| params.inDqSfsPtr = data.inDqSfsPtr; | |
| params.outDqSfsPtr = data.outDqSfsPtr; | |
| params.expandedIdxToPermutedIdx = data.expandedIdxToPermutedIdx; | |
| params.hiddenDim = data.hiddenDim; | |
| params.numTokens = data.numTokens; | |
| params.topK = data.topK; | |
| params.totalNumPaddedTokens = data.totalNumPaddedTokens; | |
| params.useDeepSeekFp8 = data.mUseDeepSeekFp8; | |
| return params; | |
| } | |
| }; | |
| void run(Data const& data, void* stream); | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| } // namespace permute | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| namespace finalize { | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| namespace tg = batchedGemm::trtllm::gen; | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| struct Data { | |
| tg::Dtype mDtypeElt{tg::Dtype::Fp16}; | |
| tg::Dtype mDtypeExpW{tg::Dtype::Bfloat16}; | |
| bool mUsePdl{false}; | |
| bool mUseDeepSeekFp8{false}; | |
| void* inPtr; | |
| void* outPtr; | |
| float* inDqSfsPtr = nullptr; | |
| float* outDqSfsPtr = nullptr; | |
| void* expertWeightsPtr; | |
| int32_t* expandedIdxToPermutedIdx; | |
| int32_t numTokens; | |
| int32_t numExperts; | |
| int32_t topK; | |
| // Hidden dimension output of MoE block. It is not padded. | |
| int32_t hiddenDim; | |
| // Hidden dimension output of FC2. It might be padded. | |
| int32_t hiddenDimPadded; | |
| int32_t const* totalNumPaddedTokens; | |
| }; | |
| template <typename Type_, typename TypeExpW_, bool UsePdl_> | |
| struct KernelParams { | |
| using Type = Type_; | |
| using TypeExpW = TypeExpW_; | |
| static constexpr bool UsePdl = UsePdl_; | |
| Type const* inPtr; | |
| TypeExpW const* expertWeightsPtr; | |
| Type* outPtr; | |
| float* inDqSfsPtr = nullptr; | |
| float* outDqSfsPtr = nullptr; | |
| int32_t* expandedIdxToPermutedIdx; | |
| int32_t hiddenDim; | |
| int32_t hiddenDimPadded; | |
| int32_t numTokens; | |
| int32_t numExperts; | |
| int32_t topK; | |
| int32_t const* totalNumPaddedTokens; | |
| static KernelParams setKernelParams(Data const& data) { | |
| KernelParams params; | |
| params.inPtr = (Type*)data.inPtr; | |
| params.expertWeightsPtr = (TypeExpW*)data.expertWeightsPtr; | |
| params.outPtr = (Type*)data.outPtr; | |
| params.inDqSfsPtr = data.inDqSfsPtr; | |
| params.outDqSfsPtr = data.outDqSfsPtr; | |
| params.expandedIdxToPermutedIdx = data.expandedIdxToPermutedIdx; | |
| params.hiddenDim = data.hiddenDim; | |
| params.hiddenDimPadded = data.hiddenDimPadded; | |
| params.numTokens = data.numTokens; | |
| params.numExperts = data.numExperts; | |
| params.topK = data.topK; | |
| params.totalNumPaddedTokens = data.totalNumPaddedTokens; | |
| return params; | |
| } | |
| }; | |
| void run(Data const& data, void* stream); | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| } // namespace finalize | |
| //////////////////////////////////////////////////////////////////////////////////////////////////// | |
| } // namespace moe::dev | |