huggingface/transformers-stats
24
1from huggingface_hub import HfApi2import pandas as pd3import os4import streamlit as st5import altair as alt6import numpy as np7import datetime8from huggingface_hub import Repository9 10from transformers.models.auto.configuration_auto import CONFIG_MAPPING_NAMES11from transformers.models.auto.modeling_auto import (12 MODEL_FOR_CTC_MAPPING_NAMES,13 MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES,14 MODEL_FOR_AUDIO_FRAME_CLASSIFICATION_MAPPING_NAMES,15 MODEL_FOR_AUDIO_XVECTOR_MAPPING_NAMES,16 MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES,17 MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES,18 MODEL_FOR_INSTANCE_SEGMENTATION_MAPPING_NAMES,19 MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES,20 MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES,21 MODEL_FOR_CAUSAL_IMAGE_MODELING_MAPPING_NAMES,22 MODEL_FOR_MASKED_IMAGE_MODELING_MAPPING_NAMES,23 MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING_NAMES,24 MODEL_FOR_VISUAL_QUESTION_ANSWERING_MAPPING_NAMES,25 MODEL_FOR_DOCUMENT_QUESTION_ANSWERING_MAPPING_NAMES,26 MODEL_FOR_BACKBONE_MAPPING_NAMES,27 MODEL_FOR_ZERO_SHOT_IMAGE_CLASSIFICATION_MAPPING_NAMES,28)29 30audio_models = list(MODEL_FOR_CTC_MAPPING_NAMES.keys()) + list(MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES.keys()) + \31 list(MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES.keys()) + list(MODEL_FOR_AUDIO_FRAME_CLASSIFICATION_MAPPING_NAMES.keys()) + \32 list(MODEL_FOR_AUDIO_XVECTOR_MAPPING_NAMES.keys())33 34vision_models = list(MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES.keys()) + list(MODEL_FOR_INSTANCE_SEGMENTATION_MAPPING_NAMES.keys()) + \35 list(MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES.keys()) + list(MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES.keys()) + \36 list(MODEL_FOR_CAUSAL_IMAGE_MODELING_MAPPING_NAMES.keys()) + list(MODEL_FOR_MASKED_IMAGE_MODELING_MAPPING_NAMES.keys()) + \37 list(MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING_NAMES.keys()) + list(MODEL_FOR_VISUAL_QUESTION_ANSWERING_MAPPING_NAMES.keys()) + \38 list(MODEL_FOR_DOCUMENT_QUESTION_ANSWERING_MAPPING_NAMES.keys()) + list(MODEL_FOR_BACKBONE_MAPPING_NAMES.keys()) + \39 list(MODEL_FOR_ZERO_SHOT_IMAGE_CLASSIFICATION_MAPPING_NAMES.keys())40 41today = datetime.date.today()42year, week, _ = today.isocalendar()43 44DATASET_REPO_URL = (45 "https://huggingface.co/datasets/huggingface/transformers-stats-space-data"46)47 48DATA_FILENAME = f"data_{week}_{year}.csv"49DATA_FILE = os.path.join("data", DATA_FILENAME)50 51HF_TOKEN = os.environ.get("HF_TOKEN")52 53print("is none?", HF_TOKEN is None)54 55 56def retrieve_model_stats():57 hf_api = HfApi()58 all_stats = {}59 total_downloads = 060 61 for model_name in list(CONFIG_MAPPING_NAMES.keys()):62 if model_name in audio_models:63 modality = "audio"64 elif model_name in vision_models:65 modality = "vision"66 else:67 modality = "text"68 69 model_stats = {70 "num_downloads": 0,71 "%_of_all_downloads": 0,72 "num_models": 0,73 "download_per_model": 0,74 "modality": modality,75 }76 models = list(hf_api.list_models(filter=model_name))77 78 model_stats["num_models"] = len(models)79 model_stats["num_downloads"] = sum(80 [m.downloads for m in models if hasattr(m, "downloads")]81 )82 if len(models) > 0:83 model_stats["download_per_model"] = int(84 model_stats["num_downloads"] / len(models)85 )86 else:87 model_stats["download_per_model"] = model_stats["num_downloads"]88 89 total_downloads += model_stats["num_downloads"]90 91 # save in overall dict92 all_stats[model_name] = model_stats93 94 for model_name in list(CONFIG_MAPPING_NAMES.keys()):95 all_stats[model_name]["%_of_all_downloads"] = (96 round(all_stats[model_name]["num_downloads"] / total_downloads, 5) * 10097 ) # noqa: E50198 downloads = all_stats[model_name]["num_downloads"]99 all_stats[model_name]["num_downloads"] = f"{downloads:,}"100 101 sorted_results = dict(102 reversed(sorted(all_stats.items(), key=lambda d: d[1]["%_of_all_downloads"]))103 )104 dataframe = pd.DataFrame.from_dict(sorted_results, orient="index")105 106 # give header to model names107 result = "model_names" + dataframe.to_csv()108 return result109 110 111repo = Repository(local_dir="data", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN)112 113if not os.path.isfile(DATA_FILE):114 st.title("You are the first this week!!! Please wait until the new data is generated and written")115 result = retrieve_model_stats()116 117 if not os.path.isfile(DATA_FILE):118 with open(DATA_FILE, "w") as f:119 f.write(result)120 121 commit_url = repo.push_to_hub()122 print(commit_url)123 124with open(DATA_FILE, "r") as f:125 dataframe = pd.read_csv(DATA_FILE)126 127int_downloads = np.array(128 [int(x.replace(",", "")) for x in dataframe["num_downloads"].values]129)130 131st.title(f"Stats for year {year} and week {week}")132 133# print top 20 downloads134source = pd.DataFrame(135 {136 "Number of total downloads": int_downloads[:20],137 "Model architecture name": dataframe["model_names"].values[:20],138 }139)140bar_chart = (141 alt.Chart(source)142 .mark_bar()143 .encode(144 y="Number of total downloads",145 x=alt.X("Model architecture name", sort=None),146 )147)148st.title("Top 20 downloads last 30 days")149st.altair_chart(bar_chart, use_container_width=True)150 151# print bottom 20 downloads152source = pd.DataFrame(153 {154 "Number of total downloads": int_downloads[-20:],155 "Model architecture name": dataframe["model_names"].values[-20:],156 }157)158bar_chart = (159 alt.Chart(source)160 .mark_bar()161 .encode(162 y="Number of total downloads",163 x=alt.X("Model architecture name", sort=None),164 )165)166st.title("Bottom 20 downloads last 30 days")167st.altair_chart(bar_chart, use_container_width=True)168 169# print vision170df_vision = dataframe[dataframe["modality"] == "vision"]171vision_int_downloads = np.array(172 [int(x.replace(",", "")) for x in df_vision["num_downloads"].values]173)174source = pd.DataFrame(175 {176 "Number of total downloads": vision_int_downloads,177 "Model architecture name": df_vision["model_names"].values,178 }179)180bar_chart = (181 alt.Chart(source)182 .mark_bar()183 .encode(184 y="Number of total downloads",185 x=alt.X("Model architecture name", sort=None),186 )187)188st.title("Vision downloads last 30 days")189st.altair_chart(bar_chart, use_container_width=True)190 191# print audio192df_audio = dataframe[dataframe["modality"] == "audio"]193audio_int_downloads = np.array(194 [int(x.replace(",", "")) for x in df_audio["num_downloads"].values]195)196source = pd.DataFrame(197 {198 "Number of total downloads": audio_int_downloads,199 "Model architecture name": df_audio["model_names"].values,200 }201)202bar_chart = (203 alt.Chart(source)204 .mark_bar()205 .encode(206 y="Number of total downloads",207 x=alt.X("Model architecture name", sort=None),208 )209)210st.title("Audio downloads last 30 days")211st.altair_chart(bar_chart, use_container_width=True)212 213# print all stats214st.title("All stats last 30 days")215st.table(dataframe)216 217st.title("Vision stats last 30 days")218st.table(dataframe[dataframe["modality"] == "vision"].drop("modality", axis=1))219 220st.title("Audio stats last 30 days")221st.table(dataframe[dataframe["modality"] == "audio"].drop("modality", axis=1))222 