in smdebug/profiler/analysis/notebook_utils/timeline_charts.py [0:0]
def plot_detailed_profiler_data(self, indexes):
if len(indexes) > 0:
cpu_util = None
for key in self.system_metrics.keys():
if key.startswith("CPUUtilization"):
width = self.system_metrics[key]["cpu0"].shape[0]
if cpu_util is None or np.min(indexes) <= width <= np.max(indexes):
cpu_util = self.system_metrics[key]
begin_timestamp = cpu_util["cpu0"][np.min(indexes), 0]
end_timestamp = cpu_util["cpu0"][np.max(indexes), 0]
print(
f"Selected timerange: {begin_timestamp + self.start} to {end_timestamp + self.start}"
)
events = self.framework_metrics_reader.get_events(
begin_timestamp + self.start, end_timestamp + self.start, unit=TimeUnits.SECONDS
)
dataloaders = self.plot_dataloaders(
events, begin_timestamp + self.start, end_timestamp + self.start
)
framework_events = self.plot_framework_events(
events, begin_timestamp + self.start, end_timestamp + self.start
)
# define figure
plot_dataloaders = figure(
plot_height=250,
plot_width=1000,
tools="crosshair,xbox_select,pan,reset,save,xwheel_zoom",
)
plot_dataloaders.xaxis.axis_label = "Time in ms"
plot_dataloaders.yaxis.axis_label = "Thread ID"
# tooltip
hover = HoverTool(tooltips=[("metric", "@metric"), ("index", "$x{10}")])
for event in dataloaders.keys():
for entry in range(len(dataloaders[event])):
# create source that contains time annotations
source = ColumnDataSource(
data=dict(
top=[dataloaders[event][entry][2]],
bottom=[dataloaders[event][entry][2] - 1],
left=[dataloaders[event][entry][0]],
right=[dataloaders[event][entry][1]],
metric=[event],
)
)
# vertical bars
quad = Quad(
top="top",
bottom="bottom",
left="left",
right="right",
fill_color="black",
line_color=None,
fill_alpha=0.2,
)
# plot
plot_dataloaders.add_glyph(source, quad)
plot_dataloaders.add_tools(hover)
plot_framework_events = figure(
plot_height=250,
plot_width=1000,
tools="crosshair,xbox_select,pan,reset,save,xwheel_zoom",
)
plot_framework_events.xaxis.axis_label = "Time in ms"
plot_framework_events.yaxis.axis_label = "Framework metric"
# tooltip
hover = HoverTool(tooltips=[("metric", "@metric"), ("index", "$x{10}")])
for event in framework_events.keys():
for entry in range(len(framework_events[event])):
# create source that contains time annotations
source = ColumnDataSource(
data=dict(
top=[framework_events[event][entry][2]],
bottom=[framework_events[event][entry][2] - 1],
left=[framework_events[event][entry][0]],
right=[framework_events[event][entry][1]],
metric=[event],
)
)
# vertical bars
quad = Quad(
top="top",
bottom="bottom",
left="left",
right="right",
fill_color="blue",
fill_alpha=0.2,
line_color=None,
)
# plot
plot_framework_events.add_glyph(source, quad)
plot_framework_events.add_tools(hover)
p = column([plot_dataloaders, plot_framework_events])
self.target = show(p, notebook_handle=True)
else:
print("No selection made")