File size: 4,035 Bytes
42411ac
 
 
 
 
 
 
 
 
 
 
 
 
0a426a3
42411ac
0a426a3
42411ac
 
0a426a3
42411ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
467bc7f
370c317
467bc7f
c6f01c1
 
0a426a3
 
 
 
 
42411ac
 
0a426a3
 
 
42411ac
 
 
0a426a3
 
 
 
42411ac
 
0a426a3
 
 
 
42411ac
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import gradio as gr
import pandas as pd
import os
import plotly.express as px
import numpy as np

datadir = 'data/emissions/complete'

model_param_df = pd.read_csv('data/model_parameters.csv', header=0)
model_performance_df = pd.read_csv('data/performance.csv', header=0)
emissions_df = pd.read_csv('data/co2_data.csv',header=0)
modalities_df = pd.read_csv('data/modalities_data.csv',header=0)
finetuned_df = emissions_df[~emissions_df['task'].str.contains('zero')]
finetuned_df['task'] = finetuned_df['task'].str.replace('_',' ')

fig0 = px.scatter(emissions_df, x="num_params", y="query emissions (g)", color="model", log_x=True, log_y=True)
fig0.update_layout(xaxis={'categoryorder':'mean ascending'})
fig0.update_layout(yaxis_title='Total carbon emitted (g)')
fig0.update_layout(xaxis_title='Number of Parameters')


fig1 = px.box(finetuned_df, x="task", y="query_energy (kWh)", color="task", log_y=True)
fig1.update_layout(xaxis={'categoryorder':'mean ascending'})
fig1.update_layout(yaxis_title='Total energy used (Wh)')
fig1.update_layout(xaxis_title='Task')

fig2 = px.scatter(modalities_df, x="num_params", y="query emissions (g)", color="modality",
             log_x=True, log_y=True, custom_data=['model','task'])

fig2.update_traces(
    hovertemplate="<br>".join([
        "Model: %{customdata[0]}",
        "Task: %{customdata[1]}",
    ])
)
fig2.update_layout(xaxis_title='Model size (number of parameters)')
fig2.update_layout(yaxis_title='Model emissions (g of CO<sub>2</sub>)')


demo = gr.Blocks()

with demo:
    gr.Markdown("# CO2 Inference Demo")
    gr.Markdown("### TL;DR - We ran a series of experiments to measure the energy efficiency and carbon emissions of different\
    models from the HuggingFace Hub, and to see how different tasks and models compare.")
    gr.Markdown("### We found that multi-purpose, generative models are orders of magnitude more energy-intensive than task-specific systems\
        for a variety of tasks, even for models with a similar number of parameters")
    gr.Markdown("### Explore the plots below to get more insights about the different models and tasks from our study.")
    with gr.Accordion("More details about our methodology:", open=False):
        gr.Markdown("We chose ten ML tasks: text classification, token classification, question answering, \
        ), masked language modeling, text generation, summarization, image classification, object detection, \
         image captioning and image generation. For each of the taks, we chose three of the most downloaded datasets and 8 of the most \
        downloaded models from the Hugging Face Hub. We ran each of the models ten times over a 1,000 sample from each of the models and measured the energy consumed and carbon emitted.")
    with gr.Row():
        with gr.Column():
            gr.Markdown("## All models from our study (carbon)")
            gr.Markdown("### Double click on the model name in the list on the right to isolate its datapoints:")
            gr.Markdown("The axes of the plot are in logarithmic scale, meaning that the difference between the least carbon-intensive and the most carbon-intensive models is over 9,000 times!")
            gr.Plot(fig0)
    with gr.Row():
        with gr.Column():
            gr.Markdown("## Task-by-task comparison (energy)")
            gr.Markdown("### Grouping the models by task, we can see different patterns emerge:")
            gr.Markdown("Image generation is by far the most energy- and carbon-intensive task from the ones studied, and text classification \
            is the least.")
            gr.Plot(fig1)
        with gr.Column():
            gr.Markdown("##  Modality comparison (carbon)")
            gr.Markdown("### Grouping the models by their modality shows the different characteristics of each one:")
            gr.Markdown("We can see that tasks involving images (image-to-text, image-to-category) require more energy and emit more carbon\
            than ones inolving text.")
            gr.Plot(fig2)






demo.launch()