import os
import streamlit as st
import wandb
from dashboard_utils.bubbles import get_new_bubble_data
from dashboard_utils.main_metrics import get_main_metrics
from streamlit_observable import observable
import streamlit as st
import streamlit.components.v1 as components
st.set_page_config(page_title="Training Transformers Together", layout="centered")
with open("static/header.html", 'r', encoding='utf-8') as f:
header_html = f.read()
with open("static/header_style.css", 'r', encoding='utf-8') as f:
header_style_css = f.read()
with open("static/header_animate.js") as f:
header_animate_js = f.read()
with open("static/content_style.css", 'r', encoding='utf-8') as f:
content_style_css = f.read()
with open("static/meta.html", 'r', encoding='utf-8') as f:
meta_html = f.read()
st.markdown("## Full demo content will be posted here on December 7th!")
components.html(f"{header_html}", height=260)
st.markdown(meta_html, unsafe_allow_html=True)
st.markdown(f"", unsafe_allow_html=True) # apply css to the rest of the document
def content_text(text: str, vspace: int = 0):
st.markdown(f'
{text}
',
unsafe_allow_html=True)
CITATIONS = {}
def cite(tag):
CITATIONS[tag] = len(CITATIONS) + 1
return f"[{CITATIONS[tag]}]"
content_text(f"""
There was a time when you could comfortably train SoTA vision and language models at home on your workstation.
The first ConvNet to beat ImageNet took in 5-6 days on two gamer-grade GPUs {cite("alexnet")}. Today's top-1 imagenet model
took 20,000 TPU-v3 days {cite("coatnet")}. And things are even worse in the NLP world: training GPT-3 on a top-tier server
with 8 A100 would still take decades {cite("gpt-3")} .""")
content_text(f"""
So, can individual researchers and small labs still train state-of-the-art? Yes we can!
All it takes is for a bunch of us to come together. In fact, we're doing it right now and you're invited to join!
""", vspace=12)
source = get_main_metrics()
st.vega_lite_chart(
source, {
"height": 200,
"title": "Training DALLE with volunteers. Updated every few minutes during NeurIPS.",
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "Current training progress",
"encoding": {"x": {"field": "date", "type": "temporal"}},
"config": {"axisX": {"labelAngle": -40}},
"resolve": {"scale": {"y": "independent"}},
"layer": [
{
"mark": {"type": "line", "point": {"tooltip": True, "filled": False, "strokeOpacity": 0},
"color": "#85A9C5"},
"encoding": {"y": {"field": "training loss", "type": "quantitative", "axis": {"titleColor": "#85A9C5"}}},
},
{
"mark": {"type": "line", "point": {"tooltip": True, "filled": False, "strokeOpacity": 0.0},
"color": "#85C5A6", "opacity": 0.5},
"encoding": {
"y": {"field": "active participants", "type": "quantitative", "axis": {"titleColor": "#85C5A6"}}},
},
],
},
use_container_width=True,
)
#
# st.caption("Number of alive runs over time")
# st.vega_lite_chart(
# source,
# use_container_width=True,
# )
# st.caption("Number of steps")
# st.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,
# )
#
# st.header("Collaborative training participants")
# serialized_data, profiles = get_new_bubble_data()
# observable(
# "Participants",
# notebook="d/9ae236a507f54046", # "@huggingface/participants-bubbles-chart",
# targets=["c_noaws"],
# redefine={"serializedData": serialized_data, "profileSimple": profiles},
# )