Regular measures are made on the 363 nodes of 8 Grid'5000 clusters to keep track of their evolution. Three main metrics are collected: the average CPU performance (in Gflop/s), the average CPU frequency (in GHz) and the average CPU temperature (in °C).
cluster = 'yeti'
factor = ['mean_gflops', 'mean_gflops_2048']
confidence = 0.9999
# Parameters
cluster = "chetemi"
factor = ["intercept", "mnk", "mn", "mk", "nk", "m", "n", "k"]
%load_ext autoreload
%autoreload 2
import requests
import pandas
import io
import plotnine
plotnine.options.figure_size = 10, 7.5
plotnine.options.dpi = 100
from cashew import non_regression_tests as nrt
import cashew
print(cashew.__git_version__)
697ee1f882418b003dd238ab6f7a1997176ac874
%%time
csv_url = nrt.DEFAULT_CSV_URL_PREFIX + nrt.DATA_FILES[factor[0]]
df = nrt.format(nrt.get(csv_url))
2021-06-24 10:15:18,397 - non_regression_tests - INFO - Loaded (from cache) a dataframe with 168840 rows and 39 columns
CPU times: user 1.06 s, sys: 59.5 ms, total: 1.12 s Wall time: 1.12 s
changelog = nrt.format_changelog(nrt.get(nrt.DEFAULT_CHANGELOG_URL))
outlierlog = nrt.format_changelog(nrt.get(nrt.DEFAULT_OUTLIERLOG_URL))
2021-06-24 10:15:18,438 - non_regression_tests - INFO - Loaded (from cache) a dataframe with 24 rows and 5 columns 2021-06-24 10:15:18,441 - non_regression_tests - INFO - Loaded (from cache) a dataframe with 52 rows and 5 columns
df = nrt.filter(df, cluster=cluster)
2021-06-24 10:15:18,485 - non_regression_tests - INFO - Filtered the dataframe, there remains 6238 rows
df = nrt.filter_na(df, *factor)
2021-06-24 10:15:18,532 - non_regression_tests - INFO - Filtered the dataframe, there remains 6238 rows
%%time
marked=nrt.mark_weird(df, changelog, outlierlog, nmin=10, keep=5, window=5, naive=False, confidence=confidence, cols=factor)
nb_weird = len(marked[marked.weird.isin({'True'})])
nb_total = len(marked[marked.weird != 'NA'])
print(f'{nb_weird/nb_total*100:.2f}% of measures are abnormal ({nb_weird}/{nb_total})')
/usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:872: RuntimeWarning: invalid value encountered in greater /usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:872: RuntimeWarning: invalid value encountered in greater /usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in greater /usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in less /usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:1738: RuntimeWarning: invalid value encountered in greater_equal
1.15% of measures are abnormal (63/5488) CPU times: user 20.7 s, sys: 70.6 ms, total: 20.7 s Wall time: 20.7 s
/usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:872: RuntimeWarning: invalid value encountered in greater /usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:872: RuntimeWarning: invalid value encountered in greater /usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in greater /usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in less /usr/lib/python3/dist-packages/scipy/stats/_distn_infrastructure.py:1738: RuntimeWarning: invalid value encountered in greater_equal
%%time
import plotnine
nb_unique = len(marked[['node', 'cpu']].drop_duplicates())
height = max(6, nb_unique/8)
old_sizes = tuple(plotnine.options.figure_size)
CPU times: user 1.87 ms, sys: 0 ns, total: 1.87 ms Wall time: 1.88 ms
%%time
plotnine.options.figure_size = (10, height)
print(nrt.plot_overview(marked, changelog, confidence=confidence, discretize=True))
plotnine.options.figure_size = old_sizes
CPU times: user 765 ms, sys: 3.96 ms, total: 769 ms Wall time: 769 ms
%%time
plotnine.options.figure_size = (10, height)
print(nrt.plot_overview_windowed(marked, changelog, confidence=confidence, discretize=True))
plotnine.options.figure_size = old_sizes
CPU times: user 713 ms, sys: 12 ms, total: 725 ms Wall time: 724 ms