Skip to content

Commit 439ca21

Browse files
[JAX] Support new JAX triton_kernel_call_ffi for cuda-graph support (NVIDIA#3055)
Signed-off-by: Jeremy Berchtold <jberchtold@nvidia.com> Signed-off-by: jberchtold-nvidia <158520091+jberchtold-nvidia@users.noreply.github.com>
1 parent f3c2e74 commit 439ca21

2 files changed

Lines changed: 21 additions & 7 deletions

File tree

transformer_engine/jax/triton_extensions/utils.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,17 @@
4444
from packaging import version
4545

4646
from jax import core
47+
from jaxlib.mlir import ir
4748
import jax
4849
import jax.numpy as jnp
4950

5051
from ..version_utils import (
5152
TRITON_AUTOTUNED_INPUT_OUTPUT_ALIAS_MIN_JAX_VERSION,
53+
TRITON_EXTENSION_CUDA_GRAPH_MIN_JAX_VERSION,
5254
TRITON_EXTENSION_MIN_JAX_VERSION,
5355
is_triton_autotuned_alias_safe,
5456
is_triton_extension_supported,
57+
jax_version_meet_requirement,
5558
)
5659

5760

@@ -626,12 +629,19 @@ def _normalize_grid(grid_tuple):
626629
else:
627630
ffi_operand_output_aliases = None
628631

629-
# Use JAX FFI lowering with compressed protobuf
630-
rule = jax.ffi.ffi_lowering(
631-
"triton_kernel_call", # Custom call target registered in gpu_triton.py
632-
api_version=2,
633-
backend_config=zlib.compress(call_proto),
634-
operand_output_aliases=ffi_operand_output_aliases,
635-
)
632+
compressed_call_proto = zlib.compress(call_proto)
633+
if jax_version_meet_requirement(TRITON_EXTENSION_CUDA_GRAPH_MIN_JAX_VERSION):
634+
rule = jax.ffi.ffi_lowering(
635+
"triton_kernel_call_ffi",
636+
backend_config={"opaque": ir.StringAttr.get(compressed_call_proto)},
637+
operand_output_aliases=ffi_operand_output_aliases,
638+
)
639+
else:
640+
rule = jax.ffi.ffi_lowering(
641+
"triton_kernel_call", # Custom call target registered in gpu_triton.py
642+
api_version=2,
643+
backend_config=compressed_call_proto,
644+
operand_output_aliases=ffi_operand_output_aliases,
645+
)
636646

637647
return rule(ctx, *array_args)

transformer_engine/jax/version_utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ def jax_version_meet_requirement(version: str):
2525
# Minimum JAX version required for Triton kernel dispatch (jaxlib < 0.8.0 segfaults).
2626
TRITON_EXTENSION_MIN_JAX_VERSION = "0.8.0"
2727

28+
# Minimum JAX version for non-legacy Triton kernel FFI (supports CUDA graph capture).
29+
TRITON_EXTENSION_CUDA_GRAPH_MIN_JAX_VERSION = "0.10.1"
30+
2831
# Nightly and stable floors for safe input_output_aliases in TritonAutotunedKernelCall.
2932
# jaxlib/gpu/triton_kernels.cc had a bug in the autotuning save/restore loop:
3033
# it iterated over all declared aliases unconditionally, but input_copies only
@@ -76,5 +79,6 @@ def is_triton_extension_supported() -> bool:
7679
"is_triton_autotuned_alias_safe",
7780
"is_triton_extension_supported",
7881
"TRITON_EXTENSION_MIN_JAX_VERSION",
82+
"TRITON_EXTENSION_CUDA_GRAPH_MIN_JAX_VERSION",
7983
"TRITON_AUTOTUNED_INPUT_OUTPUT_ALIAS_MIN_JAX_VERSION",
8084
]

0 commit comments

Comments
 (0)