Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -37,15 +37,27 @@ def make_link(mname):
|
|
| 37 |
display_name = parts[1] if len(parts) > 1 else mname
|
| 38 |
return f'[{display_name}](https://huggingface.co/{mname})'
|
| 39 |
|
| 40 |
-
def
|
| 41 |
-
|
|
|
|
|
|
|
|
|
|
| 42 |
df = pd.read_csv('data/energy/' + task, index_col=0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
df['total_gpu_energy'] = pd.to_numeric(df['total_gpu_energy'], errors='coerce')
|
| 44 |
df['energy_score'] = pd.to_numeric(df['energy_score'], errors='coerce').astype(int)
|
|
|
|
| 45 |
df['Display Model'] = df['model'].apply(lambda m: m.split('/')[-1])
|
| 46 |
|
|
|
|
| 47 |
color_map = {1: "red", 2: "orange", 3: "yellow", 4: "lightgreen", 5: "green"}
|
| 48 |
|
|
|
|
| 49 |
fig = px.scatter(
|
| 50 |
df,
|
| 51 |
x="total_gpu_energy",
|
|
@@ -73,7 +85,7 @@ def get_plots(task):
|
|
| 73 |
def get_all_plots():
|
| 74 |
all_df = pd.DataFrame()
|
| 75 |
for task in tasks:
|
| 76 |
-
df =
|
| 77 |
df['total_gpu_energy'] = pd.to_numeric(df['total_gpu_energy'], errors='coerce')
|
| 78 |
df['energy_score'] = pd.to_numeric(df['energy_score'], errors='coerce').astype(int)
|
| 79 |
df['Display Model'] = df['model'].apply(lambda m: m.split('/')[-1])
|
|
@@ -108,13 +120,13 @@ def get_all_plots():
|
|
| 108 |
|
| 109 |
def get_model_names(task):
|
| 110 |
"""
|
| 111 |
-
For a given task, load the energy CSV and return a
|
| 112 |
- Model (a markdown link)
|
| 113 |
- GPU Energy (Wh) formatted to 4 decimal places
|
| 114 |
- Score (a star rating based on energy_score)
|
| 115 |
-
For text_generation.csv only, also
|
| 116 |
"""
|
| 117 |
-
df =
|
| 118 |
df['total_gpu_energy'] = pd.to_numeric(df['total_gpu_energy'], errors='coerce')
|
| 119 |
df['energy_score'] = pd.to_numeric(df['energy_score'], errors='coerce').astype(int)
|
| 120 |
df['GPU Energy (Wh)'] = df['total_gpu_energy'].apply(lambda x: f"{x:.4f}")
|
|
@@ -127,19 +139,19 @@ def get_model_names(task):
|
|
| 127 |
else:
|
| 128 |
df = df[['Model', 'GPU Energy (Wh)', 'Score']]
|
| 129 |
|
| 130 |
-
#
|
| 131 |
df = df.sort_values(by='total_gpu_energy')
|
| 132 |
return df
|
| 133 |
|
| 134 |
def get_all_model_names():
|
| 135 |
"""
|
| 136 |
-
Combine data from all tasks and return a leaderboard
|
| 137 |
- Model, GPU Energy (Wh), Score.
|
| 138 |
Duplicate models are dropped.
|
| 139 |
"""
|
| 140 |
all_df = pd.DataFrame()
|
| 141 |
for task in tasks:
|
| 142 |
-
df =
|
| 143 |
df['total_gpu_energy'] = pd.to_numeric(df['total_gpu_energy'], errors='coerce')
|
| 144 |
df['energy_score'] = pd.to_numeric(df['energy_score'], errors='coerce').astype(int)
|
| 145 |
df['GPU Energy (Wh)'] = df['total_gpu_energy'].apply(lambda x: f"{x:.4f}")
|
|
|
|
| 37 |
display_name = parts[1] if len(parts) > 1 else mname
|
| 38 |
return f'[{display_name}](https://huggingface.co/{mname})'
|
| 39 |
|
| 40 |
+
def read_csv_file(task):
|
| 41 |
+
"""
|
| 42 |
+
Reads a CSV from the data/energy folder using the first column as the index
|
| 43 |
+
and strips any extraneous whitespace from the column names.
|
| 44 |
+
"""
|
| 45 |
df = pd.read_csv('data/energy/' + task, index_col=0)
|
| 46 |
+
df.columns = df.columns.str.strip() # remove any extra whitespace
|
| 47 |
+
return df
|
| 48 |
+
|
| 49 |
+
def get_plots(task):
|
| 50 |
+
df = read_csv_file(task)
|
| 51 |
+
# Convert the numeric columns
|
| 52 |
df['total_gpu_energy'] = pd.to_numeric(df['total_gpu_energy'], errors='coerce')
|
| 53 |
df['energy_score'] = pd.to_numeric(df['energy_score'], errors='coerce').astype(int)
|
| 54 |
+
# Create a short model name for display on the y-axis.
|
| 55 |
df['Display Model'] = df['model'].apply(lambda m: m.split('/')[-1])
|
| 56 |
|
| 57 |
+
# Define a discrete color mapping for energy scores.
|
| 58 |
color_map = {1: "red", 2: "orange", 3: "yellow", 4: "lightgreen", 5: "green"}
|
| 59 |
|
| 60 |
+
# Build the scatter plot.
|
| 61 |
fig = px.scatter(
|
| 62 |
df,
|
| 63 |
x="total_gpu_energy",
|
|
|
|
| 85 |
def get_all_plots():
|
| 86 |
all_df = pd.DataFrame()
|
| 87 |
for task in tasks:
|
| 88 |
+
df = read_csv_file(task)
|
| 89 |
df['total_gpu_energy'] = pd.to_numeric(df['total_gpu_energy'], errors='coerce')
|
| 90 |
df['energy_score'] = pd.to_numeric(df['energy_score'], errors='coerce').astype(int)
|
| 91 |
df['Display Model'] = df['model'].apply(lambda m: m.split('/')[-1])
|
|
|
|
| 120 |
|
| 121 |
def get_model_names(task):
|
| 122 |
"""
|
| 123 |
+
For a given task, load the energy CSV and return a DataFrame with the following columns:
|
| 124 |
- Model (a markdown link)
|
| 125 |
- GPU Energy (Wh) formatted to 4 decimal places
|
| 126 |
- Score (a star rating based on energy_score)
|
| 127 |
+
For text_generation.csv only, also include the "Class" column if present.
|
| 128 |
"""
|
| 129 |
+
df = read_csv_file(task)
|
| 130 |
df['total_gpu_energy'] = pd.to_numeric(df['total_gpu_energy'], errors='coerce')
|
| 131 |
df['energy_score'] = pd.to_numeric(df['energy_score'], errors='coerce').astype(int)
|
| 132 |
df['GPU Energy (Wh)'] = df['total_gpu_energy'].apply(lambda x: f"{x:.4f}")
|
|
|
|
| 139 |
else:
|
| 140 |
df = df[['Model', 'GPU Energy (Wh)', 'Score']]
|
| 141 |
|
| 142 |
+
# Sort by the numeric GPU energy value.
|
| 143 |
df = df.sort_values(by='total_gpu_energy')
|
| 144 |
return df
|
| 145 |
|
| 146 |
def get_all_model_names():
|
| 147 |
"""
|
| 148 |
+
Combine data from all tasks and return a leaderboard DataFrame with:
|
| 149 |
- Model, GPU Energy (Wh), Score.
|
| 150 |
Duplicate models are dropped.
|
| 151 |
"""
|
| 152 |
all_df = pd.DataFrame()
|
| 153 |
for task in tasks:
|
| 154 |
+
df = read_csv_file(task)
|
| 155 |
df['total_gpu_energy'] = pd.to_numeric(df['total_gpu_energy'], errors='coerce')
|
| 156 |
df['energy_score'] = pd.to_numeric(df['energy_score'], errors='coerce').astype(int)
|
| 157 |
df['GPU Energy (Wh)'] = df['total_gpu_energy'].apply(lambda x: f"{x:.4f}")
|