Updated to latest page version
Browse files
app.py
CHANGED
|
@@ -6,13 +6,13 @@ import graphs
|
|
| 6 |
from streamlit_helpers import add_filter, slider_filter, Collapsable
|
| 7 |
|
| 8 |
st.set_page_config(
|
| 9 |
-
page_title="
|
| 10 |
page_icon="⚡",
|
| 11 |
layout="wide",
|
| 12 |
)
|
| 13 |
|
| 14 |
# dashboard title
|
| 15 |
-
st.title("
|
| 16 |
|
| 17 |
|
| 18 |
def add_faq() -> None:
|
|
@@ -21,10 +21,92 @@ def add_faq() -> None:
|
|
| 21 |
"""
|
| 22 |
faq = Collapsable()
|
| 23 |
faq.add_section(
|
| 24 |
-
"
|
| 25 |
(
|
| 26 |
-
"
|
| 27 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
),
|
| 29 |
)
|
| 30 |
|
|
@@ -72,6 +154,13 @@ with st.sidebar:
|
|
| 72 |
|
| 73 |
st.markdown("## Summary Results")
|
| 74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
cols = st.columns(2)
|
| 76 |
with cols[0]:
|
| 77 |
st.markdown("""#### Workload origin""")
|
|
@@ -81,18 +170,9 @@ with cols[1]:
|
|
| 81 |
st.markdown("""#### Parameter Size Distribution""")
|
| 82 |
graphs.parameter_histogram(report, show_assembled=False)
|
| 83 |
|
| 84 |
-
|
| 85 |
-
st.markdown("""#### Benchmark results""")
|
| 86 |
-
baseline = st.selectbox("Baseline", ("x86", "nvidia", "groq"))
|
| 87 |
-
graphs.speedup_text_summary(report, baseline)
|
| 88 |
-
graphs.speedup_bar_chart(report, baseline)
|
| 89 |
-
|
| 90 |
# FAQ Block
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
st.markdown("""## About this workload analysis (FAQ)""")
|
| 95 |
-
add_faq()
|
| 96 |
|
| 97 |
# Detailed data view (table)
|
| 98 |
st.markdown("## Detailed Data View")
|
|
|
|
| 6 |
from streamlit_helpers import add_filter, slider_filter, Collapsable
|
| 7 |
|
| 8 |
st.set_page_config(
|
| 9 |
+
page_title="MLAgility tracker",
|
| 10 |
page_icon="⚡",
|
| 11 |
layout="wide",
|
| 12 |
)
|
| 13 |
|
| 14 |
# dashboard title
|
| 15 |
+
st.title("MLAgility tracker ⚡")
|
| 16 |
|
| 17 |
|
| 18 |
def add_faq() -> None:
|
|
|
|
| 21 |
"""
|
| 22 |
faq = Collapsable()
|
| 23 |
faq.add_section(
|
| 24 |
+
"How is MLAgility different from MLPerf?",
|
| 25 |
(
|
| 26 |
+
"Deep learning pioneers have been judging their progress with the Machine Learning "
|
| 27 |
+
"Performance (MLPerf) inference benchmark, but have found that the corpus of models "
|
| 28 |
+
"is small enough that it allows vendors to primarily compete by hand-optimizing "
|
| 29 |
+
"kernels. MLAgility offers a complementary approach to MLPerf by examining the "
|
| 30 |
+
"capability of vendors to provide turnkey solutions to a larger corpus of "
|
| 31 |
+
"off-the-shelf models. By providing a workflow that is representative of the "
|
| 32 |
+
"mass adoption customer on a variety of ML accelerators and effectively disallowing "
|
| 33 |
+
"hand-crafted kernels, MLAgility bridges the gap between MLPerf and the mass adoption "
|
| 34 |
+
"of hardware acceleration."
|
| 35 |
+
),
|
| 36 |
+
)
|
| 37 |
+
faq.add_section(
|
| 38 |
+
"Why now for MLAgility?",
|
| 39 |
+
(
|
| 40 |
+
"Deep learning algorithms and their associated DL hardware accelerators are "
|
| 41 |
+
"transitioning from early adoption into mass adoption. Production DL is now "
|
| 42 |
+
"becoming available to the masses, with a desire to customize models to tackle "
|
| 43 |
+
"their specific problems, and then take the path of least resistance into "
|
| 44 |
+
"production. A market for turnkey solutions, starting with a model as input and "
|
| 45 |
+
"provision a cost- and latency-effective acceleration solution, often in the cloud, "
|
| 46 |
+
"as output, has emerged."
|
| 47 |
+
),
|
| 48 |
+
)
|
| 49 |
+
faq.add_section(
|
| 50 |
+
"Which tool was used to generate those results?",
|
| 51 |
+
(
|
| 52 |
+
"All MLAgility results have been generated using the <b>benchit</b> tool v1.0.0, which is part "
|
| 53 |
+
"of the MLAgility Github Repository. You can learn more about it "
|
| 54 |
+
'<a href="https://github.com/groq/mlagility">here</a>.'
|
| 55 |
+
),
|
| 56 |
+
)
|
| 57 |
+
faq.add_section(
|
| 58 |
+
"What is the experimental setup for each of the devices?",
|
| 59 |
+
[
|
| 60 |
+
"<b>x86</b>: Intel(R) Xeon(R) X40 CPU @ 2.00GHz on Google Cloud (custom: n2, 80 vCPU, 64.00 GiB) and OnnxRuntime version 1.14.0.",
|
| 61 |
+
"<b>nvidia</b>: NVIDIA A100 40GB on Google Cloud (a2-highgpu-1g) and TensorRT version 22.12-py3.",
|
| 62 |
+
"<b>groq</b>: GroqChip 1 on selfhosted GroqNode server, GroqFlow version 3.0.2 TestPyPI package, and GroqWare™ Suite version 0.9.2.",
|
| 63 |
+
(
|
| 64 |
+
"You can find more details about the methodology "
|
| 65 |
+
'<a href="https://github.com/groq/mlagility/blob/main/docs/tools_user_guide.md">here</a>.'
|
| 66 |
+
),
|
| 67 |
+
],
|
| 68 |
+
)
|
| 69 |
+
faq.add_section(
|
| 70 |
+
"What are the current key limitations of those results?",
|
| 71 |
+
[
|
| 72 |
+
(
|
| 73 |
+
"Groq's latency is computed using GroqModel.estimate_latency(), which takes"
|
| 74 |
+
" into account deterministic compute time and estimates an ideal runtime with"
|
| 75 |
+
" ideal I/O time. It does not take into account runtime performance."
|
| 76 |
+
),
|
| 77 |
+
"Results currently only represent batch 1 performance on a limited number of models, "
|
| 78 |
+
"devices, vendors, and runtimes. You can learn more about future directions by reading "
|
| 79 |
+
'the "What are the future directions of MLAgility?" FAQ section.',
|
| 80 |
+
],
|
| 81 |
+
)
|
| 82 |
+
faq.add_section(
|
| 83 |
+
"What are the future directions of MLAgility?",
|
| 84 |
+
[
|
| 85 |
+
"Include additional classes of models (e.g. LLMs, GNNs, DLRMs).",
|
| 86 |
+
"Perform experiments that include sweeps over batch and input sizes.",
|
| 87 |
+
"Increase the number of devices from existing vendors (e.g. T4, A10, and H100).",
|
| 88 |
+
"Include devices from additional vendors (e.g. ARM, and AMD)."
|
| 89 |
+
"Include the number of runtimes supported (e.g. ORT and PyTorch for CUDA, PyTorch for x86).",
|
| 90 |
+
],
|
| 91 |
+
)
|
| 92 |
+
faq.add_section(
|
| 93 |
+
"Who runs MLAgility?",
|
| 94 |
+
(
|
| 95 |
+
"MLAgility is currently maintained by the following individuals (in alphabetical order): "
|
| 96 |
+
"Daniel Holanda Noronha, Jeremy Fowers, Kalin Ovtcharov, and Ramakrishnan Sivakumar. We are actively seeking collaborators from across the industry."
|
| 97 |
+
),
|
| 98 |
+
)
|
| 99 |
+
faq.add_section(
|
| 100 |
+
"License and Liability",
|
| 101 |
+
(
|
| 102 |
+
'THE MLAGILITY BENCHMARK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR '
|
| 103 |
+
"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, "
|
| 104 |
+
"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE "
|
| 105 |
+
"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER "
|
| 106 |
+
"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, "
|
| 107 |
+
"OUT OF OR IN CONNECTION WITH THE BENCHMARK OR THE USE OR OTHER DEALINGS IN THE "
|
| 108 |
+
"BENCHMARK. Read more about it "
|
| 109 |
+
'<a href="https://github.com/groq/mlagility/blob/main/LICENSE">here</a>.'
|
| 110 |
),
|
| 111 |
)
|
| 112 |
|
|
|
|
| 154 |
|
| 155 |
st.markdown("## Summary Results")
|
| 156 |
|
| 157 |
+
graphs.device_funnel(report)
|
| 158 |
+
|
| 159 |
+
st.markdown("""#### Benchmark results""")
|
| 160 |
+
baseline = st.selectbox("Baseline", ("x86", "nvidia", "groq"))
|
| 161 |
+
graphs.speedup_text_summary(report, baseline)
|
| 162 |
+
graphs.speedup_bar_chart(report, baseline)
|
| 163 |
+
|
| 164 |
cols = st.columns(2)
|
| 165 |
with cols[0]:
|
| 166 |
st.markdown("""#### Workload origin""")
|
|
|
|
| 170 |
st.markdown("""#### Parameter Size Distribution""")
|
| 171 |
graphs.parameter_histogram(report, show_assembled=False)
|
| 172 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 173 |
# FAQ Block
|
| 174 |
+
st.markdown("""## About this workload analysis (FAQ)""")
|
| 175 |
+
add_faq()
|
|
|
|
|
|
|
|
|
|
| 176 |
|
| 177 |
# Detailed data view (table)
|
| 178 |
st.markdown("## Detailed Data View")
|
graphs.py
CHANGED
|
@@ -18,9 +18,9 @@ colors = {
|
|
| 18 |
"ocean_green": "#3ba272",
|
| 19 |
}
|
| 20 |
device_colors = {
|
| 21 |
-
"x86":
|
| 22 |
-
"nvidia":
|
| 23 |
-
"groq":
|
| 24 |
}
|
| 25 |
|
| 26 |
|
|
@@ -35,6 +35,19 @@ class StageCount:
|
|
| 35 |
self.assembles = int(np.sum(df["assembles"]))
|
| 36 |
|
| 37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
def stages_count_summary(current_df: pd.DataFrame, prev_df: pd.DataFrame) -> None:
|
| 39 |
"""
|
| 40 |
Show count of how many models compile, assemble, etc
|
|
@@ -476,14 +489,14 @@ def speedup_bar_chart(df: pd.DataFrame, baseline) -> None:
|
|
| 476 |
)
|
| 477 |
|
| 478 |
|
| 479 |
-
def kpi_to_markdown(compute_ratio, device, is_baseline=False, color="
|
| 480 |
|
| 481 |
title = f"""<br><br>
|
| 482 |
<p style="font-family:sans-serif; font-size: 20px;text-align: center;">Median {device} Acceleration ({len(compute_ratio)} models):</p>"""
|
| 483 |
if is_baseline:
|
| 484 |
return (
|
| 485 |
title
|
| 486 |
-
+ f"""<p style="font-family:sans-serif; color:{
|
| 487 |
)
|
| 488 |
|
| 489 |
if len(compute_ratio) > 0:
|
|
@@ -497,8 +510,8 @@ def kpi_to_markdown(compute_ratio, device, is_baseline=False, color="blue"):
|
|
| 497 |
|
| 498 |
return (
|
| 499 |
title
|
| 500 |
-
+ f"""<p style="font-family:sans-serif; color:{
|
| 501 |
-
<p style="font-family:sans-serif; color:{
|
| 502 |
"""
|
| 503 |
)
|
| 504 |
|
|
@@ -523,19 +536,19 @@ def speedup_text_summary(df: pd.DataFrame, baseline) -> None:
|
|
| 523 |
x86_text = kpi_to_markdown(
|
| 524 |
x86_compute_ratio,
|
| 525 |
device="Intel(R) Xeon(R) X40 CPU @ 2.00GHz",
|
| 526 |
-
color="
|
| 527 |
is_baseline=baseline == "x86",
|
| 528 |
)
|
| 529 |
groq_text = kpi_to_markdown(
|
| 530 |
groq_compute_ratio,
|
| 531 |
device="GroqChip 1",
|
| 532 |
-
color="
|
| 533 |
is_baseline=baseline == "groq",
|
| 534 |
)
|
| 535 |
nvidia_text = kpi_to_markdown(
|
| 536 |
nvidia_compute_ratio,
|
| 537 |
device="NVIDIA A100-PCIE-40GB",
|
| 538 |
-
color="
|
| 539 |
is_baseline=baseline == "nvidia",
|
| 540 |
)
|
| 541 |
|
|
@@ -613,3 +626,165 @@ def results_table(df: pd.DataFrame):
|
|
| 613 |
df = df[[model_name in x for x in df["Model Name"]]]
|
| 614 |
|
| 615 |
st.dataframe(df, height=min((len(df) + 1) * 35, 35 * 21))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
"ocean_green": "#3ba272",
|
| 19 |
}
|
| 20 |
device_colors = {
|
| 21 |
+
"x86": "#0071c5",
|
| 22 |
+
"nvidia": "#76b900",
|
| 23 |
+
"groq": "#F55036",
|
| 24 |
}
|
| 25 |
|
| 26 |
|
|
|
|
| 35 |
self.assembles = int(np.sum(df["assembles"]))
|
| 36 |
|
| 37 |
|
| 38 |
+
class DeviceStageCount:
|
| 39 |
+
def __init__(self, df: pd.DataFrame) -> None:
|
| 40 |
+
self.all_models = len(df)
|
| 41 |
+
self.base_onnx = int(np.sum(df["onnx_exported"]))
|
| 42 |
+
self.optimized_onnx = int(np.sum(df["onnx_optimized"]))
|
| 43 |
+
self.fp16_onnx = int(np.sum(df["onnx_converted"]))
|
| 44 |
+
self.x86 = df.loc[df.x86_latency != "-", "x86_latency"].count()
|
| 45 |
+
self.nvidia = df.loc[df.nvidia_latency != "-", "nvidia_latency"].count()
|
| 46 |
+
self.groq = df.loc[
|
| 47 |
+
df.groq_estimated_latency != "-", "groq_estimated_latency"
|
| 48 |
+
].count()
|
| 49 |
+
|
| 50 |
+
|
| 51 |
def stages_count_summary(current_df: pd.DataFrame, prev_df: pd.DataFrame) -> None:
|
| 52 |
"""
|
| 53 |
Show count of how many models compile, assemble, etc
|
|
|
|
| 489 |
)
|
| 490 |
|
| 491 |
|
| 492 |
+
def kpi_to_markdown(compute_ratio, device, is_baseline=False, color="#FFFFFF"):
|
| 493 |
|
| 494 |
title = f"""<br><br>
|
| 495 |
<p style="font-family:sans-serif; font-size: 20px;text-align: center;">Median {device} Acceleration ({len(compute_ratio)} models):</p>"""
|
| 496 |
if is_baseline:
|
| 497 |
return (
|
| 498 |
title
|
| 499 |
+
+ f"""<p style="font-family:sans-serif; color:{color}; font-size: 26px;text-align: center;"> {1}x (Baseline)</p>"""
|
| 500 |
)
|
| 501 |
|
| 502 |
if len(compute_ratio) > 0:
|
|
|
|
| 510 |
|
| 511 |
return (
|
| 512 |
title
|
| 513 |
+
+ f"""<p style="font-family:sans-serif; color:{color}; font-size: 26px;text-align: center;"> {kpi_median}x</p>
|
| 514 |
+
<p style="font-family:sans-serif; color:{color}; font-size: 20px;text-align: center;"> min {kpi_min}x; max {kpi_max}x</p>
|
| 515 |
"""
|
| 516 |
)
|
| 517 |
|
|
|
|
| 536 |
x86_text = kpi_to_markdown(
|
| 537 |
x86_compute_ratio,
|
| 538 |
device="Intel(R) Xeon(R) X40 CPU @ 2.00GHz",
|
| 539 |
+
color=device_colors["x86"],
|
| 540 |
is_baseline=baseline == "x86",
|
| 541 |
)
|
| 542 |
groq_text = kpi_to_markdown(
|
| 543 |
groq_compute_ratio,
|
| 544 |
device="GroqChip 1",
|
| 545 |
+
color=device_colors["groq"],
|
| 546 |
is_baseline=baseline == "groq",
|
| 547 |
)
|
| 548 |
nvidia_text = kpi_to_markdown(
|
| 549 |
nvidia_compute_ratio,
|
| 550 |
device="NVIDIA A100-PCIE-40GB",
|
| 551 |
+
color=device_colors["nvidia"],
|
| 552 |
is_baseline=baseline == "nvidia",
|
| 553 |
)
|
| 554 |
|
|
|
|
| 626 |
df = df[[model_name in x for x in df["Model Name"]]]
|
| 627 |
|
| 628 |
st.dataframe(df, height=min((len(df) + 1) * 35, 35 * 21))
|
| 629 |
+
|
| 630 |
+
|
| 631 |
+
def device_funnel(df: pd.DataFrame) -> None:
|
| 632 |
+
"""
|
| 633 |
+
Show count of how many models compile, assemble, etc
|
| 634 |
+
"""
|
| 635 |
+
summ = DeviceStageCount(df)
|
| 636 |
+
|
| 637 |
+
stages = [
|
| 638 |
+
"All models",
|
| 639 |
+
"Export to ONNX",
|
| 640 |
+
"Optimize ONNX file",
|
| 641 |
+
"Convert to FP16",
|
| 642 |
+
"Acquire Performance",
|
| 643 |
+
]
|
| 644 |
+
cols = st.columns(len(stages))
|
| 645 |
+
|
| 646 |
+
for idx, stage in enumerate(stages):
|
| 647 |
+
with cols[idx]:
|
| 648 |
+
st.markdown(stage)
|
| 649 |
+
|
| 650 |
+
# Show Sankey graph with percentages
|
| 651 |
+
sk_val = {
|
| 652 |
+
"All models": f"{summ.all_models} models - 100%",
|
| 653 |
+
"Convert to ONNX": f"{summ.base_onnx} models - "
|
| 654 |
+
+ str(int(100 * summ.base_onnx / summ.all_models))
|
| 655 |
+
+ "%",
|
| 656 |
+
"Optimize ONNX file": f"{summ.optimized_onnx} models - "
|
| 657 |
+
+ str(int(100 * summ.optimized_onnx / summ.all_models))
|
| 658 |
+
+ "%",
|
| 659 |
+
"Converts to FP16": f"{summ.fp16_onnx} models - "
|
| 660 |
+
+ str(int(100 * summ.fp16_onnx / summ.all_models))
|
| 661 |
+
+ "%",
|
| 662 |
+
"Acquires Nvidia Perf": f"{summ.nvidia} models - "
|
| 663 |
+
+ str(int(100 * summ.nvidia / summ.all_models))
|
| 664 |
+
+ "% (Nvidia)",
|
| 665 |
+
"Acquires Groq Perf": f"{summ.groq} models - "
|
| 666 |
+
+ str(int(100 * summ.groq / summ.all_models))
|
| 667 |
+
+ "% (Groq)",
|
| 668 |
+
"Acquires x86 Perf": f"{summ.x86} models - "
|
| 669 |
+
+ str(int(100 * summ.x86 / summ.all_models))
|
| 670 |
+
+ "% (x86)",
|
| 671 |
+
}
|
| 672 |
+
option = {
|
| 673 |
+
"series": {
|
| 674 |
+
"type": "sankey",
|
| 675 |
+
"animationDuration": 1,
|
| 676 |
+
"top": "0%",
|
| 677 |
+
"bottom": "20%",
|
| 678 |
+
"left": "0%",
|
| 679 |
+
"right": "19%",
|
| 680 |
+
"darkMode": "true",
|
| 681 |
+
"nodeWidth": 2,
|
| 682 |
+
"textStyle": {"fontSize": 16},
|
| 683 |
+
"nodeAlign": "left",
|
| 684 |
+
"lineStyle": {"curveness": 0},
|
| 685 |
+
"layoutIterations": 0,
|
| 686 |
+
"nodeGap": 12,
|
| 687 |
+
"layout": "none",
|
| 688 |
+
"emphasis": {"focus": "adjacency"},
|
| 689 |
+
"data": [
|
| 690 |
+
{
|
| 691 |
+
"name": "All models",
|
| 692 |
+
"value": sk_val["All models"],
|
| 693 |
+
"itemStyle": {"color": "white", "borderColor": "white"},
|
| 694 |
+
},
|
| 695 |
+
{
|
| 696 |
+
"name": "Convert to ONNX",
|
| 697 |
+
"value": sk_val["Convert to ONNX"],
|
| 698 |
+
"itemStyle": {"color": "white", "borderColor": "white"},
|
| 699 |
+
},
|
| 700 |
+
{
|
| 701 |
+
"name": "Optimize ONNX file",
|
| 702 |
+
"value": sk_val["Optimize ONNX file"],
|
| 703 |
+
"itemStyle": {"color": "white", "borderColor": "white"},
|
| 704 |
+
},
|
| 705 |
+
{
|
| 706 |
+
"name": "Converts to FP16",
|
| 707 |
+
"value": sk_val["Converts to FP16"],
|
| 708 |
+
"itemStyle": {"color": "white", "borderColor": "white"},
|
| 709 |
+
},
|
| 710 |
+
{
|
| 711 |
+
"name": "Acquires Nvidia Perf",
|
| 712 |
+
"value": sk_val["Acquires Nvidia Perf"],
|
| 713 |
+
"itemStyle": {
|
| 714 |
+
"color": device_colors["nvidia"],
|
| 715 |
+
"borderColor": device_colors["nvidia"],
|
| 716 |
+
},
|
| 717 |
+
},
|
| 718 |
+
{
|
| 719 |
+
"name": "Acquires Groq Perf",
|
| 720 |
+
"value": sk_val["Acquires Groq Perf"],
|
| 721 |
+
"itemStyle": {
|
| 722 |
+
"color": device_colors["groq"],
|
| 723 |
+
"borderColor": device_colors["groq"],
|
| 724 |
+
},
|
| 725 |
+
},
|
| 726 |
+
{
|
| 727 |
+
"name": "Acquires x86 Perf",
|
| 728 |
+
"value": sk_val["Acquires x86 Perf"],
|
| 729 |
+
"itemStyle": {
|
| 730 |
+
"color": device_colors["x86"],
|
| 731 |
+
"borderColor": device_colors["x86"],
|
| 732 |
+
},
|
| 733 |
+
},
|
| 734 |
+
],
|
| 735 |
+
"label": {
|
| 736 |
+
"position": "insideTopLeft",
|
| 737 |
+
"borderWidth": 0,
|
| 738 |
+
"fontSize": 16,
|
| 739 |
+
"color": "white",
|
| 740 |
+
"textBorderWidth": 0,
|
| 741 |
+
"formatter": "{c}",
|
| 742 |
+
},
|
| 743 |
+
"links": [
|
| 744 |
+
{
|
| 745 |
+
"source": "All models",
|
| 746 |
+
"target": "Convert to ONNX",
|
| 747 |
+
"value": summ.all_models,
|
| 748 |
+
},
|
| 749 |
+
{
|
| 750 |
+
"source": "Convert to ONNX",
|
| 751 |
+
"target": "Optimize ONNX file",
|
| 752 |
+
"value": summ.optimized_onnx,
|
| 753 |
+
},
|
| 754 |
+
{
|
| 755 |
+
"source": "Optimize ONNX file",
|
| 756 |
+
"target": "Converts to FP16",
|
| 757 |
+
"value": summ.fp16_onnx,
|
| 758 |
+
},
|
| 759 |
+
{
|
| 760 |
+
"source": "Converts to FP16",
|
| 761 |
+
"target": "Acquires Nvidia Perf",
|
| 762 |
+
"value": int(
|
| 763 |
+
summ.nvidia
|
| 764 |
+
* summ.fp16_onnx
|
| 765 |
+
/ (summ.x86 + summ.nvidia + summ.groq)
|
| 766 |
+
),
|
| 767 |
+
},
|
| 768 |
+
{
|
| 769 |
+
"source": "Converts to FP16",
|
| 770 |
+
"target": "Acquires Groq Perf",
|
| 771 |
+
"value": int(
|
| 772 |
+
summ.groq
|
| 773 |
+
* summ.fp16_onnx
|
| 774 |
+
/ (summ.x86 + summ.nvidia + summ.groq)
|
| 775 |
+
),
|
| 776 |
+
},
|
| 777 |
+
{
|
| 778 |
+
"source": "Converts to FP16",
|
| 779 |
+
"target": "Acquires x86 Perf",
|
| 780 |
+
"value": int(
|
| 781 |
+
summ.x86 * summ.fp16_onnx / (summ.x86 + summ.nvidia + summ.groq)
|
| 782 |
+
),
|
| 783 |
+
},
|
| 784 |
+
],
|
| 785 |
+
}
|
| 786 |
+
}
|
| 787 |
+
st_echarts(
|
| 788 |
+
options=option,
|
| 789 |
+
height="70px",
|
| 790 |
+
)
|