Skip to content

vllm.compilation.passes.inductor_pass

Classes:

  • CallableInductorPass

    This class is a wrapper for a callable that automatically provides an

  • InductorPass

    A custom graph pass that uses a hash of its source as the UUID.

Functions:

CallableInductorPass

Bases: InductorPass

This class is a wrapper for a callable that automatically provides an implementation of the UUID.

Source code in vllm/compilation/passes/inductor_pass.py
class CallableInductorPass(InductorPass):
    """
    This class is a wrapper for a callable that automatically provides an
    implementation of the UUID.
    """

    def __init__(
        self, callable: Callable[[fx.Graph], None], uuid: Any | None = None
    ) -> None:
        self.callable = callable
        self._uuid = self.hash_source(callable) if uuid is None else uuid

    def __call__(self, graph: torch.fx.Graph) -> None:
        self.callable(graph)

    def uuid(self) -> Any:
        return self._uuid

InductorPass

Bases: CustomGraphPass

A custom graph pass that uses a hash of its source as the UUID. This is defined as a convenience and should work in most cases.

Methods:

  • hash_dict

    Utility method to hash a dictionary, can alternatively be used for uuid.

  • hash_source

    Utility method to hash the sources of functions or objects.

  • uuid

    Provide a unique identifier for the pass, used in Inductor code cache.

Source code in vllm/compilation/passes/inductor_pass.py
class InductorPass(CustomGraphPass):  # type: ignore[misc]
    """
    A custom graph pass that uses a hash of its source as the UUID.
    This is defined as a convenience and should work in most cases.
    """

    def uuid(self) -> str:
        """
        Provide a unique identifier for the pass, used in Inductor code cache.
        This should depend on the pass implementation, so that changes to the
        pass result in recompilation.
        By default, the object source is hashed.
        """
        return InductorPass.hash_source(self)

    @staticmethod
    def hash_source(*srcs: str | Any) -> str:
        """
        Utility method to hash the sources of functions or objects.

        Args:
            srcs: strings or objects to add to the hash.
                Objects and functions have their source inspected.
                Results are cached by resolved types to avoid repeated
                inspect.getsource() calls.
        """
        # Resolve instances to their class for a hashable cache key.
        cache_key = tuple(
            src if isinstance(src, (str, type, types.FunctionType)) else src.__class__
            for src in srcs
        )
        return _hash_source_cached(*cache_key)

    @staticmethod
    def hash_dict(dict_: dict[Any, Any]) -> str:
        """
        Utility method to hash a dictionary, can alternatively be used for uuid.

        Returns:
            A sha256 hash of the json rep of the dictionary.
        """
        encoded = json.dumps(dict_, sort_keys=True).encode("utf-8")
        return hashlib.sha256(encoded).hexdigest()

    def is_applicable_for_range(self, compile_range: Range) -> bool:
        return True

hash_dict(dict_) staticmethod

Utility method to hash a dictionary, can alternatively be used for uuid.

Returns:

  • str

    A sha256 hash of the json rep of the dictionary.

Source code in vllm/compilation/passes/inductor_pass.py
@staticmethod
def hash_dict(dict_: dict[Any, Any]) -> str:
    """
    Utility method to hash a dictionary, can alternatively be used for uuid.

    Returns:
        A sha256 hash of the json rep of the dictionary.
    """
    encoded = json.dumps(dict_, sort_keys=True).encode("utf-8")
    return hashlib.sha256(encoded).hexdigest()

hash_source(*srcs) staticmethod

Utility method to hash the sources of functions or objects.

Parameters:

  • srcs

    (str | Any, default: () ) –

    strings or objects to add to the hash. Objects and functions have their source inspected. Results are cached by resolved types to avoid repeated inspect.getsource() calls.

Source code in vllm/compilation/passes/inductor_pass.py
@staticmethod
def hash_source(*srcs: str | Any) -> str:
    """
    Utility method to hash the sources of functions or objects.

    Args:
        srcs: strings or objects to add to the hash.
            Objects and functions have their source inspected.
            Results are cached by resolved types to avoid repeated
            inspect.getsource() calls.
    """
    # Resolve instances to their class for a hashable cache key.
    cache_key = tuple(
        src if isinstance(src, (str, type, types.FunctionType)) else src.__class__
        for src in srcs
    )
    return _hash_source_cached(*cache_key)

uuid()

Provide a unique identifier for the pass, used in Inductor code cache. This should depend on the pass implementation, so that changes to the pass result in recompilation. By default, the object source is hashed.

Source code in vllm/compilation/passes/inductor_pass.py
def uuid(self) -> str:
    """
    Provide a unique identifier for the pass, used in Inductor code cache.
    This should depend on the pass implementation, so that changes to the
    pass result in recompilation.
    By default, the object source is hashed.
    """
    return InductorPass.hash_source(self)

enable_fake_mode(fn)

Applies a FakeTensorMode context. This is useful when you don't want to create or run things with real tensors.

Source code in vllm/compilation/passes/inductor_pass.py
def enable_fake_mode(fn: Callable[P, R]) -> Callable[P, R]:
    """
    Applies a FakeTensorMode context. This is useful when you don't want to
    create or run things with real tensors.
    """

    @functools.wraps(fn)
    def fn_new(*args: P.args, **kwargs: P.kwargs) -> R:
        with torch._guards.tracing(None), unset_fake_temporarily(), FakeTensorMode():
            result = fn(*args, **kwargs)

        return result

    return fn_new

get_pass_context()

Get the current pass context.

Source code in vllm/compilation/passes/inductor_pass.py
def get_pass_context() -> PassContext:
    """Get the current pass context."""
    assert _pass_context is not None
    return _pass_context

pass_context(compile_range)

A context manager that stores the current pass context, usually it is a list of sizes to specialize.

Source code in vllm/compilation/passes/inductor_pass.py
@contextmanager
def pass_context(compile_range: Range) -> Generator[None, None, None]:
    """A context manager that stores the current pass context,
    usually it is a list of sizes to specialize.
    """
    global _pass_context
    prev_context = _pass_context
    _pass_context = PassContext(compile_range)
    try:
        yield
    finally:
        _pass_context = prev_context