Logging¶
FlashInfer provides a logging feature to help debug issues and reproduce crashes. This document describes all available logging levels and their features.
Quick Start¶
Enable logging using two environment variables:
# Set logging level (0-5)
export FLASHINFER_LOGLEVEL=3
# Set log destination (default is stdout)
export FLASHINFER_LOGDEST=stdout # or stderr, or a file path like "flashinfer.log"
Logging Levels¶
Level |
Name |
Features |
Use Case |
|---|---|---|---|
0 |
Disabled (Default) |
No logging (zero overhead) |
Production |
1 |
Function Names |
Function names only |
Basic tracing |
3 |
Inputs/Outputs |
Function names + arguments + outputs with metadata |
Standard debugging |
5 |
Statistics |
Level 3 + tensor statistics (min, max, mean, NaN/Inf counts) |
Numerical analysis |
Environment Variables¶
Main Configuration¶
Variable |
Type |
Default |
Description |
|---|---|---|---|
|
int |
0 |
Logging level (0, 1, 3, 5) |
|
str |
|
Log destination: |
Process ID Substitution¶
Use %i in file paths for automatic process ID substitution (useful for multi-GPU training):
export FLASHINFER_LOGDEST="flashinfer_log_%i.txt" # → flashinfer_log_12345.txt
Miscellaneous Notes and Examples¶
CUDA Graph Compatibility¶
Level 5 statistics are automatically skipped during CUDA graph capture to avoid synchronization issues.
# This works correctly - no synchronization errors
with torch.cuda.graph(cuda_graph):
result = mm_fp4(a, b, scales, ...) # Level 5 logging active
# Statistics automatically skipped during capture
Output shows: [statistics skipped: CUDA graph capture in progress]
Process IDs for Multi-GPU Environments¶
# Use %i for process ID substitution
export FLASHINFER_LOGLEVEL=3
export FLASHINFER_LOGDEST="logs/flashinfer_api_%i.log"
torchrun --nproc_per_node=8 awesome_script_that_uses_FlashInfer.py
# Creates separate logs:
# logs/flashinfer_api_12345.log (rank 0)
# logs/flashinfer_api_12346.log (rank 1)
# ...
Level 0 has zero overhead¶
At Level 0, the decorator returns the original function unchanged. No wrapper, no checks, no overhead.