
| Blog | Documentación | Holgura | Foro de discusión |
FlashInfer es un generador de biblioteca y núcleo para modelos de idiomas grandes que proporciona una implementación de alto rendimiento de los núcleos de GPU de LLM, como flashatent, spareattention, pageattention, muestreo y más. FlashInfer se centra en la servicio e inferencia de LLM, y ofrece un rendimiento de última generación en diversos escenarios.
¡Consulte nuestro blog de lanzamiento V0.2 para ver nuevas funciones!
Las características principales de FlashInfer incluyen:
plan / Etapa run del cálculo de atención donde programamos el cálculo de las entradas de longitud variable en la etapa plan para aliviar el problema de la carga de carga.API de Pytorch, TVM y C ++ (solo de encabezado) de soporte de FlashInfer, y se pueden integrar fácilmente en proyectos existentes.
Usar nuestra API de Pytorch es la forma más fácil de comenzar:
Proporcionamos ruedas preconstruidas para Linux. Puede instalar FlashInfer con el siguiente comando:
# 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.htmlTambién ofrecemos ruedas nocturnas para probar las últimas características de la rama principal:
pip install flashinfer -i https://flashinfer.ai/whl/nightly/cu124/torch2.4Alternativamente, puede construir flashinfer desde la fuente:
git clone https://github.com/flashinfer-ai/flashinfer.git --recursive
cd flashinfer
pip install -e . -v Por defecto, FlashInfer utiliza la compilación de justo en el tiempo (JIT) para sus núcleos. Para compilar previamente los núcleos esenciales, establezca la variable de entorno FLASHINFER_ENABLE_AOT=1 antes de ejecutar el comando de instalación:
FLASHINFER_ENABLE_AOT=1 pip install -e . -vPara obtener más detalles, consulte la instalación de la documentación de origen.
A continuación se muestra un ejemplo mínimo de usar los núcleos de atención de decodificación/append/de preflexión de FlashInfer.
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 maskConsulte la documentación para obtener el uso de núcleos de decodificación/appendición/preflamiento de lotes y núcleos en cascada de prefijo compartido.
Perfil FlashInfer Kernel Performance con NVBench y puede compilar y ejecutar los puntos de referencia con los siguientes comandos:
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 Puede ejecutar ./bench_{single/batch}_{prefill/decode} para comparar el rendimiento (por ejemplo ./bench_single_prefill para una atención previa a la requisito único). ./bench_{single/batch}_{prefill/decode} --help le mostrará las opciones disponibles.
FlashInfer también proporciona enlaces de C ++ API y TVM, consulte la documentación para obtener más detalles.
Estamos encantados de compartir que FlashInfer está siendo adoptado por muchos proyectos de vanguardia, incluidos, entre otros::
FlashInfer está inspirado en los proyectos FlashAttent 1 y 2, VLLM, Stream-K, Cutlass y Aitemplate.