Add a custom profiler configuration option (#151656)

We aim to pass some configuration options to our custom Kineto backend via ExperimentalConfig,, so we added a `custom_profiler_config` parameter.

Requires https://github.com/pytorch/kineto/pull/1077 ,
Pull Request resolved: https://github.com/pytorch/pytorch/pull/151656
Approved by: https://github.com/sraikund16
This commit is contained in:
fuwenguang 2025-07-01 00:36:05 +00:00 committed by PyTorch MergeBot
parent b60569ed94
commit f860992db5
4 changed files with 31 additions and 3 deletions

View File

@ -207,6 +207,7 @@ class ExperimentalConfigWrapper {
configss << "\nCUPTI_PROFILER_ENABLE_PER_KERNEL=" configss << "\nCUPTI_PROFILER_ENABLE_PER_KERNEL="
<< (config_.profiler_measure_per_kernel ? "true" : "false") << (config_.profiler_measure_per_kernel ? "true" : "false")
<< "\n"; << "\n";
configss << "CUSTOM_CONFIG=" << config_.custom_profiler_config << "\n";
LOG(INFO) << "Generated config = " << configss.str(); LOG(INFO) << "Generated config = " << configss.str();
libkineto::api().activityProfiler().prepareTrace( libkineto::api().activityProfiler().prepareTrace(
@ -239,6 +240,18 @@ static const std::string setTraceID(const std::string& trace_id) {
configss << "REQUEST_GROUP_TRACE_ID=" << trace_id << "\n"; configss << "REQUEST_GROUP_TRACE_ID=" << trace_id << "\n";
return configss.str(); return configss.str();
} }
static const std::string appendCustomConfig(
const std::string& config,
const std::string& custom_profiler_config) {
if (custom_profiler_config.empty()) {
return config;
}
std::stringstream configss;
configss << config;
configss << "CUSTOM_CONFIG=" << custom_profiler_config << "\n";
return configss.str();
}
#endif #endif
void prepareTrace( void prepareTrace(
@ -295,7 +308,9 @@ void prepareTrace(
return; return;
} }
const std::string configStr = setTraceID(trace_id); const std::string traceIdStr = setTraceID(trace_id);
const std::string configStr =
appendCustomConfig(traceIdStr, config.custom_profiler_config);
libkineto::api().activityProfiler().prepareTrace(k_activities, configStr); libkineto::api().activityProfiler().prepareTrace(k_activities, configStr);
#endif // USE_KINETO #endif // USE_KINETO

View File

@ -21,6 +21,7 @@ ExperimentalConfig::ExperimentalConfig(
bool disable_external_correlation, bool disable_external_correlation,
bool profile_all_threads, bool profile_all_threads,
bool capture_overload_names, bool capture_overload_names,
std::string custom_profiler_config,
bool adjust_timestamps) bool adjust_timestamps)
: profiler_metrics{std::move(profiler_metrics)}, : profiler_metrics{std::move(profiler_metrics)},
profiler_measure_per_kernel{profiler_measure_per_kernel}, profiler_measure_per_kernel{profiler_measure_per_kernel},
@ -31,6 +32,7 @@ ExperimentalConfig::ExperimentalConfig(
disable_external_correlation{disable_external_correlation}, disable_external_correlation{disable_external_correlation},
profile_all_threads{profile_all_threads}, profile_all_threads{profile_all_threads},
capture_overload_names{capture_overload_names}, capture_overload_names{capture_overload_names},
custom_profiler_config(std::move(custom_profiler_config)),
adjust_timestamps{adjust_timestamps} {} adjust_timestamps{adjust_timestamps} {}
/*explicit*/ ExperimentalConfig::operator bool() const { /*explicit*/ ExperimentalConfig::operator bool() const {

View File

@ -62,6 +62,7 @@ struct TORCH_API ExperimentalConfig {
bool disable_external_correlation = false, bool disable_external_correlation = false,
bool profile_all_threads = false, bool profile_all_threads = false,
bool capture_overload_names = false, bool capture_overload_names = false,
std::string custom_profiler_config = "",
bool adjust_timestamps = false); bool adjust_timestamps = false);
explicit operator bool() const; explicit operator bool() const;
@ -101,6 +102,12 @@ struct TORCH_API ExperimentalConfig {
* function schema and stored in the profile */ * function schema and stored in the profile */
bool capture_overload_names; bool capture_overload_names;
/*
* A custom_profiler_config option is introduced to allow custom backends
* to apply custom configurations as needed.
*/
std::string custom_profiler_config;
/* /*
* Controls whether or not timestamp adjustment occurs after profiling. * Controls whether or not timestamp adjustment occurs after profiling.
* The purpose of this is to adjust Vulkan event timelines to align with those * The purpose of this is to adjust Vulkan event timelines to align with those

View File

@ -340,7 +340,8 @@ void initPythonBindings(PyObject* module) {
bool /* adjust_profiler_step */, bool /* adjust_profiler_step */,
bool /* disable_external_correlation*/, bool /* disable_external_correlation*/,
bool /* profile_all_threads */, bool /* profile_all_threads */,
bool /* capture_overload_names */ bool /* capture_overload_names */,
std::string /* custom_profiler_config*/
>(), >(),
"An experimental config for Kineto features. Please note that" "An experimental config for Kineto features. Please note that"
"backward compatibility is not guaranteed.\n" "backward compatibility is not guaranteed.\n"
@ -359,6 +360,7 @@ void initPythonBindings(PyObject* module) {
" disable_external_correlation (bool) : whether to disable external correlation\n", " disable_external_correlation (bool) : whether to disable external correlation\n",
" profile_all_threads (bool) : whether to profile all threads\n", " profile_all_threads (bool) : whether to profile all threads\n",
" capture_overload_names (bool) : whether to include ATen overload names in the profile\n", " capture_overload_names (bool) : whether to include ATen overload names in the profile\n",
" custom_profiler_config (string) : Used to pass some configurations to the custom profiler backend.\n",
py::arg("profiler_metrics") = std::vector<std::string>(), py::arg("profiler_metrics") = std::vector<std::string>(),
py::arg("profiler_measure_per_kernel") = false, py::arg("profiler_measure_per_kernel") = false,
py::arg("verbose") = false, py::arg("verbose") = false,
@ -367,7 +369,8 @@ void initPythonBindings(PyObject* module) {
py::arg("adjust_profiler_step") = false, py::arg("adjust_profiler_step") = false,
py::arg("disable_external_correlation") = false, py::arg("disable_external_correlation") = false,
py::arg("profile_all_threads") = false, py::arg("profile_all_threads") = false,
py::arg("capture_overload_names") = false) py::arg("capture_overload_names") = false,
py::arg("custom_profiler_config") = "")
.def(py::pickle( .def(py::pickle(
[](const ExperimentalConfig& p) { // __getstate__ [](const ExperimentalConfig& p) { // __getstate__
py::list py_metrics; py::list py_metrics;
@ -390,6 +393,7 @@ void initPythonBindings(PyObject* module) {
p.disable_external_correlation, p.disable_external_correlation,
p.profile_all_threads, p.profile_all_threads,
p.capture_overload_names, p.capture_overload_names,
p.custom_profiler_config,
p.performance_events); p.performance_events);
}, },
[](const py::tuple& t) { // __setstate__ [](const py::tuple& t) { // __setstate__