
| Блог | Документация | Слабый | Дискуссионный форум |
FlashInfer-это библиотечный и ядро генератор для моделей крупных языков, который обеспечивает высокопроизводительную реализацию ядра графических процессоров LLM, таких как вспышка, разрезание, Pageattention, выборка и многое другое. FlashInfer фокусируется на LLM обслуживании и выводе, а также обеспечивает современные результаты в разных сценариях.
Проверьте наш блог V0.2 для новых функций!
Основные особенности FlashInfer включают:
plan / run Stage Вычисление внимания, где мы планируем вычисление входов с переменной длиной на этапе plan , чтобы облегчить проблему с имбалсом нагрузки.API API-файлы FlashInfer поддерживают Pytorch, TVM и C ++ (только для заголовка) и могут быть легко интегрированы в существующие проекты.
Использование нашего Pytorch API - самый простой способ начать:
Мы предоставляем предварительно построенные колеса для Linux. Вы можете установить FlashInfer со следующей командой:
# For CUDA 12.4 & torch 2.4
pip install flashinfer -i https://flashinfer.ai/whl/cu124/torch2.4
# For other CUDA & torch versions, please check https://docs.flashinfer.ai/installation.htmlМы также предлагаем ночные колеса, чтобы попробовать последние функции из главной ветви:
pip install flashinfer -i https://flashinfer.ai/whl/nightly/cu124/torch2.4В качестве альтернативы, вы можете построить FlashInfer из источника:
git clone https://github.com/flashinfer-ai/flashinfer.git --recursive
cd flashinfer
pip install -e . -v По умолчанию FlashInfer использует Just-Time (JIT) компиляцию для своих ядров. Чтобы предварительно выполнять необходимые ядра, установите переменную среды FLASHINFER_ENABLE_AOT=1 перед запуском команды установки:
FLASHINFER_ENABLE_AOT=1 pip install -e . -vДля получения более подробной информации обратитесь к установке из исходной документации.
Ниже приведен минимальный пример использования одноразового декодирования/приложения/приложения/преподавателя ядра.
import torch
import flashinfer
kv_len = 2048
num_kv_heads = 32
head_dim = 128
k = torch . randn ( kv_len , num_kv_heads , head_dim ). half (). to ( 0 )
v = torch . randn ( kv_len , num_kv_heads , head_dim ). half (). to ( 0 )
# decode attention
num_qo_heads = 32
q = torch . randn ( num_qo_heads , head_dim ). half (). to ( 0 )
o = flashinfer . single_decode_with_kv_cache ( q , k , v ) # decode attention without RoPE on-the-fly
o_rope_on_the_fly = flashinfer . single_decode_with_kv_cache ( q , k , v , pos_encoding_mode = "ROPE_LLAMA" ) # decode with LLaMA style RoPE on-the-fly
# append attention
append_qo_len = 128
q = torch . randn ( append_qo_len , num_qo_heads , head_dim ). half (). to ( 0 ) # append attention, the last 128 tokens in the KV-Cache are the new tokens
o = flashinfer . single_prefill_with_kv_cache ( q , k , v , causal = True ) # append attention without RoPE on-the-fly, apply causal mask
o_rope_on_the_fly = flashinfer . single_prefill_with_kv_cache ( q , k , v , causal = True , pos_encoding_mode = "ROPE_LLAMA" ) # append attention with LLaMA style RoPE on-the-fly, apply causal mask
# prefill attention
qo_len = 2048
q = torch . randn ( qo_len , num_qo_heads , head_dim ). half (). to ( 0 ) # prefill attention
o = flashinfer . single_prefill_with_kv_cache ( q , k , v , causal = False ) # prefill attention without RoPE on-the-fly, do not apply causal maskОзнакомьтесь с документацией для использования партийных декодирования/приложения/префиллевых ядров и каскадных ядер общего предварительного профиля.
Мы профиляем производительность ядра FlashInfer с помощью NVBench, и вы можете скомпилировать и запускать тесты со следующими командами:
mkdir build
cp cmake/config.cmake build # you can modify the config.cmake to enable/disable benchmarks and change CUDA architectures
cd build
cmake ..
make -j12 Вы можете запустить ./bench_{single/batch}_{prefill/decode} , чтобы сравнить производительность (например, ./bench_single_prefill для предварительного внимания с одним запросом). ./bench_{single/batch}_{prefill/decode} --help
FlashInfer также предоставляет API C ++ и привязки к TVM, пожалуйста, обратитесь к документации для получения более подробной информации.
Мы очень рады поделиться тем, что FlashInfer принимается во многих передовых проектах, включая, помимо прочего:
FlashInfer вдохновлен флэш -атриально 1 и 2, VLLM, Stream-K, Cutlass и Aitemplate Projects.