torch.compile: populate compiler_config (#165581)

Summary: This starts writing the compiler_config metadata into logger

Test Plan:
Modified existing test case to make sure this is not null.
(Also eyeballed what we're logging tomake sure it's reasonable

Reviewed By: masnesral

Differential Revision: D84014636

Pull Request resolved: https://github.com/pytorch/pytorch/pull/165581
Approved by: https://github.com/masnesral
This commit is contained in:
Colin L Reliability Rice
2025-10-17 18:21:18 +00:00
committed by PyTorch MergeBot
parent 9a71d96256
commit ca5b7f8ded
2 changed files with 51 additions and 0 deletions

View File

@ -8,6 +8,7 @@ from unittest import mock
import torch
import torch._dynamo.config as dynamo_config
import torch._inductor.config as inductor_config
import torch.compiler.config as compiler_config
from torch._dynamo import utils
from torch._inductor.test_case import TestCase
@ -497,6 +498,7 @@ class TestDynamoTimed(TestCase):
e.co_filename = None
e.co_firstlineno = None
e.inductor_config = None
e.compiler_config = None
e.cuda_version = None
e.triton_version = None
e.python_version = None
@ -530,6 +532,7 @@ class TestDynamoTimed(TestCase):
'code_gen_time_s': 0.0,
'compile_id': '1/0',
'compile_time_autotune_time_us': None,
'compiler_config': None,
'compliant_custom_ops': set(),
'config_inline_inbuilt_nn_modules': False,
'config_suppress_errors': False,
@ -616,6 +619,7 @@ class TestDynamoTimed(TestCase):
'code_gen_time_s': 0.0,
'compile_id': '1/0',
'compile_time_autotune_time_us': None,
'compiler_config': None,
'compliant_custom_ops': set(),
'config_inline_inbuilt_nn_modules': False,
'config_suppress_errors': False,
@ -714,6 +718,7 @@ class TestDynamoTimed(TestCase):
'code_gen_time_s': 0.0,
'compile_id': '1/0',
'compile_time_autotune_time_us': None,
'compiler_config': None,
'compliant_custom_ops': None,
'config_inline_inbuilt_nn_modules': False,
'config_suppress_errors': False,
@ -800,6 +805,7 @@ class TestDynamoTimed(TestCase):
'code_gen_time_s': 0.0,
'compile_id': '1/0',
'compile_time_autotune_time_us': None,
'compiler_config': None,
'compliant_custom_ops': None,
'config_inline_inbuilt_nn_modules': False,
'config_suppress_errors': False,
@ -875,6 +881,25 @@ class TestDynamoTimed(TestCase):
'triton_version': None}""", # noqa: B950
)
@dynamo_config.patch(
{
"log_compilation_metrics": True,
}
)
@compiler_config.patch({"job_id": "test_job_id"})
def test_compiler_config(self):
def test1(x):
return x * x
compilation_events = []
with mock.patch("torch._dynamo.utils.log_compilation_event") as log_event:
torch.compile(test1)(torch.randn(1))
compilation_events = [arg[0][0] for arg in log_event.call_args_list]
self.assertIn(
'"job_id": "test_job_id"',
compilation_events[0].compiler_config,
)
@dynamo_config.patch(
{
"log_compilation_metrics": True,

View File

@ -1315,6 +1315,7 @@ class CompilationMetrics:
config_inline_inbuilt_nn_modules: Optional[bool] = None
specialize_float: Optional[bool] = None
dynamo_config: Optional[str] = None
compiler_config: Optional[str] = None
is_forward: Optional[bool] = None
num_triton_bundles: Optional[int] = None
remote_fx_graph_cache_get_time_ms: Optional[int] = None
@ -1555,6 +1556,30 @@ def _get_dynamo_config_for_logging() -> Optional[str]:
return json.dumps(config_dict, sort_keys=True)
def _compiler_config_for_logging() -> Optional[str]:
def clean_for_json(d: dict[str, Any]) -> dict[str, Any]:
blocklist = {
"TYPE_CHECKING",
}
return {
key: sorted(value) if isinstance(value, set) else value
for key, value in d.items()
if key not in blocklist
}
if not torch.compiler.config:
return None
try:
compiler_config_copy = torch.compiler.config.get_config_copy() # type: ignore[attr-defined]
except (TypeError, AttributeError):
return "Compiler Config cannot be pickled"
config_dict = clean_for_json(compiler_config_copy)
return json.dumps(config_dict, sort_keys=True)
def _scrubbed_inductor_config_for_logging() -> Optional[str]:
"""
Method to parse and scrub uninteresting configs from inductor config
@ -1642,6 +1667,7 @@ def record_compilation_metrics(
"config_suppress_errors": config.suppress_errors,
"config_inline_inbuilt_nn_modules": config.inline_inbuilt_nn_modules,
"inductor_config": _scrubbed_inductor_config_for_logging(),
"compiler_config": _compiler_config_for_logging(),
"cuda_version": torch.version.cuda,
"triton_version": triton.__version__ if has_triton() else "",
"remote_cache_version": remote_cache_version,