in tb_plugin/torch_tb_profiler/profiler/run_generator.py [0:0]
def _generate_overview(self):
def build_part_time_str(part_cost, part_name):
format_str = '<div class="visualization-tooltip" style="white-space: nowrap;">' \
'Step {}<br>' \
'Total: {}us<br>' \
'<b>{}: {}us</b><br>' \
'Percentage: {}%' \
'</div>'
percentage = round(100 * part_cost / costs.costs[ProfileRole.Total], 2)
return format_str.format(step_name, costs.costs[ProfileRole.Total], part_name, part_cost, percentage)
def build_avg_cost_dict(part_name, part_cost):
cost_dict = {"name": part_name,
"description": "",
"value": round(part_cost),
"extra": round(100 * part_cost / self.profile_data.avg_costs.costs[ProfileRole.Total], 2)}
return cost_dict
show_gpu = self.profile_data.has_runtime or self.profile_data.has_kernel or self.profile_data.has_memcpy_or_memset
column_tootip = {"type": "string", "role": "tooltip", "p": {"html": "true"}}
data = {}
data["steps"] = {}
data["steps"]["columns"] = [{"type": "string", "name": "Step"}]
if show_gpu:
data["steps"]["columns"].extend([{"type": "number", "name": "Kernel"},
column_tootip,
{"type": "number", "name": "Memcpy"},
column_tootip,
{"type": "number", "name": "Memset"},
column_tootip])
if self.profile_data.has_communication:
data["steps"]["columns"].extend([{"type": "number", "name": "Communication"},
column_tootip])
if show_gpu:
data["steps"]["columns"].extend([{"type": "number", "name": "Runtime"},
column_tootip])
data["steps"]["columns"].extend([{"type": "number", "name": "DataLoader"},
column_tootip,
{"type": "number", "name": "CPU Exec"},
column_tootip,
{"type": "number", "name": "Other"},
column_tootip])
data["steps"]["rows"] = []
for i in range(len(self.profile_data.steps_costs)):
costs = self.profile_data.steps_costs[i]
step_name = self.profile_data.steps_names[i]
row = [step_name]
if show_gpu:
row.extend([costs.costs[ProfileRole.Kernel],
build_part_time_str(costs.costs[ProfileRole.Kernel], "Kernel"),
costs.costs[ProfileRole.Memcpy],
build_part_time_str(costs.costs[ProfileRole.Memcpy], "Memcpy"),
costs.costs[ProfileRole.Memset],
build_part_time_str(costs.costs[ProfileRole.Memset], "Memset")])
if self.profile_data.has_communication:
row.extend([costs.costs[ProfileRole.Communication],
build_part_time_str(costs.costs[ProfileRole.Communication], "Communication")])
if show_gpu:
row.extend([costs.costs[ProfileRole.Runtime],
build_part_time_str(costs.costs[ProfileRole.Runtime], "Runtime")])
row.extend([costs.costs[ProfileRole.DataLoader],
build_part_time_str(costs.costs[ProfileRole.DataLoader], "DataLoader"),
costs.costs[ProfileRole.CpuOp],
build_part_time_str(costs.costs[ProfileRole.CpuOp], "CPU Exec"),
costs.costs[ProfileRole.Other],
build_part_time_str(costs.costs[ProfileRole.Other], "Other")])
data["steps"]["rows"].append(row)
avg_costs = []
if show_gpu:
avg_costs.extend([
build_avg_cost_dict("Kernel", self.profile_data.avg_costs.costs[ProfileRole.Kernel]),
build_avg_cost_dict("Memcpy", self.profile_data.avg_costs.costs[ProfileRole.Memcpy]),
build_avg_cost_dict("Memset", self.profile_data.avg_costs.costs[ProfileRole.Memset])
])
if self.profile_data.has_communication:
avg_costs.extend([
build_avg_cost_dict("Communication", self.profile_data.avg_costs.costs[ProfileRole.Communication])
])
if show_gpu:
avg_costs.extend([
build_avg_cost_dict("Runtime", self.profile_data.avg_costs.costs[ProfileRole.Runtime])
])
avg_costs.extend([
build_avg_cost_dict("DataLoader", self.profile_data.avg_costs.costs[ProfileRole.DataLoader]),
build_avg_cost_dict("CPU Exec", self.profile_data.avg_costs.costs[ProfileRole.CpuOp]),
build_avg_cost_dict("Other", self.profile_data.avg_costs.costs[ProfileRole.Other])
])
data["performance"] = [{"name": "Average Step Time", "description": "",
"value": round(self.profile_data.avg_costs.costs[ProfileRole.Total]),
"extra": 100, "children": avg_costs}]
if len(self.profile_data.recommendations) == 0:
html = "<li>N/A</li>"
else:
html = ""
for recommendation in self.profile_data.recommendations:
html += "<li>{}</li>".format(recommendation)
data["recommendations"] = "<ul>{}</ul>".format(html)
return data