Spaces:
Runtime error
Runtime error
import pandas as pd | |
import streamlit as st | |
import wandb | |
from dashboard_utils.bubbles import get_global_metrics, get_new_bubble_data, get_leaderboard | |
from dashboard_utils.main_metrics import get_main_metrics | |
from streamlit_observable import observable | |
import time | |
import requests | |
import streamlit as st | |
from streamlit_lottie import st_lottie | |
def load_lottieurl(url: str): | |
r = requests.get(url) | |
if r.status_code != 200: | |
return None | |
return r.json() | |
# Only need to set these here as we are add controls outside of Hydralit, to customise a run Hydralit! | |
st.set_page_config(page_title="Dashboard", layout="wide") | |
st.markdown("<h1 style='text-align: center;'>Dashboard</h1>", unsafe_allow_html=True) | |
key_figures_margin_left, key_figures_c1, key_figures_c2, key_figures_c3, key_figures_margin_right = st.columns( | |
(2, 1, 1, 1, 2) | |
) | |
chart_c1, chart_c2 = st.columns((3, 2)) | |
lottie_url_loading = "https://assets5.lottiefiles.com/packages/lf20_OdNgAj.json" | |
lottie_loading = load_lottieurl(lottie_url_loading) | |
with key_figures_c1: | |
st.caption("\# of contributing users") | |
placeholder_key_figures_c1 = st.empty() | |
with placeholder_key_figures_c1: | |
st_lottie(lottie_loading, height=100, key="loading_key_figure_c1") | |
with key_figures_c2: | |
st.caption("\# active users") | |
placeholder_key_figures_c2 = st.empty() | |
with placeholder_key_figures_c2: | |
st_lottie(lottie_loading, height=100, key="loading_key_figure_c2") | |
with key_figures_c3: | |
st.caption("Total runtime") | |
placeholder_key_figures_c3 = st.empty() | |
with placeholder_key_figures_c3: | |
st_lottie(lottie_loading, height=100, key="loading_key_figure_c3") | |
with chart_c1: | |
st.subheader("Metrics over time") | |
st.caption("Training Loss") | |
placeholder_chart_c1_1 = st.empty() | |
with placeholder_chart_c1_1: | |
st_lottie(lottie_loading, height=100, key="loading_c1_1") | |
st.caption("Number of alive runs over time") | |
placeholder_chart_c1_2 = st.empty() | |
with placeholder_chart_c1_2: | |
st_lottie(lottie_loading, height=100, key="loading_c1_2") | |
st.caption("Number of steps") | |
placeholder_chart_c1_3 = st.empty() | |
with placeholder_chart_c1_3: | |
st_lottie(lottie_loading, height=100, key="loading_c1_3") | |
with chart_c2: | |
st.subheader("Global metrics") | |
st.caption("Collaborative training participants") | |
placeholder_chart_c2_1 = st.empty() | |
with placeholder_chart_c2_1: | |
st_lottie(lottie_loading, height=100, key="loading_c2_1") | |
st.write("Chart showing participants of the collaborative-training. Circle radius is relative to the total number of " | |
"processed batches, the profile picture is circled in purple if the participant is active. Every purple square represents an " | |
"active device.") | |
st.caption("Leaderboard") | |
placeholder_chart_c2_3 = st.empty() | |
with placeholder_chart_c2_3: | |
st_lottie(lottie_loading, height=100, key="loading_c2_2") | |
wandb.login(anonymous="must") | |
steps, dates, losses, alive_peers = get_main_metrics() | |
source = pd.DataFrame({"steps": steps, "loss": losses, "alive sessions": alive_peers, "date": dates}) | |
placeholder_chart_c1_1.vega_lite_chart( | |
source, | |
{ | |
"$schema": "https://vega.github.io/schema/vega-lite/v5.json", | |
"description": "Training Loss", | |
"mark": {"type": "line", "point": {"tooltip": True, "filled": False, "strokeOpacity": 0}}, | |
"encoding": {"x": {"field": "date", "type": "temporal"}, "y": {"field": "loss", "type": "quantitative"}}, | |
"config": {"axisX": {"labelAngle": -40}}, | |
}, | |
use_container_width=True, | |
) | |
placeholder_chart_c1_2.vega_lite_chart( | |
source, | |
{ | |
"$schema": "https://vega.github.io/schema/vega-lite/v5.json", | |
"description": "Alive sessions", | |
"mark": {"type": "line", "point": {"tooltip": True, "filled": False, "strokeOpacity": 0}}, | |
"encoding": { | |
"x": {"field": "date", "type": "temporal"}, | |
"y": {"field": "alive sessions", "type": "quantitative"}, | |
}, | |
"config": {"axisX": {"labelAngle": -40}}, | |
}, | |
use_container_width=True, | |
) | |
placeholder_chart_c1_3.vega_lite_chart( | |
source, | |
{ | |
"$schema": "https://vega.github.io/schema/vega-lite/v5.json", | |
"description": "Training Loss", | |
"mark": {"type": "line", "point": {"tooltip": True, "filled": False, "strokeOpacity": 0}}, | |
"encoding": {"x": {"field": "date", "type": "temporal"}, "y": {"field": "steps", "type": "quantitative"}}, | |
"config": {"axisX": {"labelAngle": -40}}, | |
}, | |
use_container_width=True, | |
) | |
serialized_data, profiles = get_new_bubble_data() | |
df_leaderboard = get_leaderboard(serialized_data) | |
observable( | |
"_", | |
notebook="d/9ae236a507f54046", # "@huggingface/participants-bubbles-chart", | |
targets=["c_noaws"], | |
redefine={"serializedData": serialized_data, "profileSimple": profiles, "width": 0}, | |
render_empty=True, | |
) | |
placeholder_chart_c2_3.dataframe(df_leaderboard[["User", "Total time contributed"]]) | |
global_metrics = get_global_metrics(serialized_data) | |
placeholder_key_figures_c1.write(f"<b>{global_metrics['num_contributing_users']}</b>", unsafe_allow_html=True) | |
placeholder_key_figures_c2.write(f"<b>{global_metrics['num_active_users']}</b>", unsafe_allow_html=True) | |
placeholder_key_figures_c3.write(f"<b>{global_metrics['total_runtime']}</b>", unsafe_allow_html=True) | |
with placeholder_chart_c2_1: | |
observable( | |
"Participants", | |
notebook="d/9ae236a507f54046", # "@huggingface/participants-bubbles-chart", | |
targets=["c_noaws"], | |
redefine={"serializedData": serialized_data, "profileSimple": profiles}, | |
) | |