main
py 40 lines 1.17 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 from torch import fx
4 from torch._ops import OpOverload, OpOverloadPacket
5
6 from vllm.ir.op import IrOp
7 from vllm.logger import init_logger
8
9 logger = init_logger(__name__)
10
11
12 def overload_or_default(op: OpOverload | OpOverloadPacket) -> OpOverload:
13 if isinstance(op, OpOverloadPacket):
14 return op.default
15 assert isinstance(op, OpOverload), "Expected an OpOverload or OpOverloadPacket"
16 return op
17
18
19 def get_ir_op(node: fx.Node) -> IrOp | None:
20 if node.op != "call_function":
21 return None
22
23 if not isinstance(node.target, (OpOverload, OpOverloadPacket)):
24 return None
25
26 op_overload = overload_or_default(node.target)
27 if op_overload.namespace != "vllm_ir":
28 return None
29
30 op_name = op_overload._opname
31 if op_name not in IrOp.registry:
32 logger.warning(
33 "Unknown vLLM IR op %s, there's likely an issue with torch registration, "
34 "or a torch custom op was registered in the vllm_ir namespace by mistake.",
35 op_name,
36 )
37 return None
38
39 ir_op = IrOp.registry[op_name]
40 return ir_op