Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import pandas as pd | |
| from model_util import get_mode_from_hf, calculate_flops_in_hugging_space | |
| def calculate_flops_architecture(num_params, num_tokens): | |
| """ | |
| Calculate FLOPs based on model architecture. | |
| """ | |
| total_flops = 6 * num_params * num_tokens | |
| threshold_flops = 10 ** 25 | |
| meets_criteria = total_flops > threshold_flops | |
| return { | |
| "total_flops": total_flops, | |
| "meets_criteria": meets_criteria | |
| } | |
| def calculate_flops_gpu(gpu_hours, power_consumption_w, flops_per_gpu_s): | |
| """ | |
| Calculate FLOPs based on GPU hours and type. | |
| """ | |
| threshold_flops = 10 ** 25 | |
| total_energy_wh = gpu_hours * power_consumption_w | |
| total_flops = gpu_hours * flops_per_gpu_s * 3600 | |
| meets_criteria = total_flops > threshold_flops | |
| return { | |
| "total_energy_wh": total_energy_wh, | |
| "total_flops": total_flops, | |
| "meets_criteria": meets_criteria | |
| } | |
| def calculate_flops_hf(model_name, input_shape, access_token, bp_factor, output_unit): | |
| """ | |
| Calculate FLOPs using Hugging Face model information. | |
| """ | |
| model = get_mode_from_hf(model_name=model_name, library="auto", access_token=access_token) | |
| data, return_print = calculate_flops_in_hugging_space(model_name=model_name, empty_model=model, | |
| access_token=access_token, input_shape=input_shape, | |
| bp_factor=bp_factor, output_unit=output_unit) | |
| print(f"Data: {data}") | |
| df = data['value'] | |
| total_flops = df['Forward+Backward FLOPs'][0] * 10 ** 9 # Convert GFLOPs to FLOPs | |
| threshold_flops = 10 ** 25 | |
| meets_criteria = total_flops > threshold_flops | |
| return { | |
| "total_flops": total_flops, | |
| "meets_criteria": meets_criteria, | |
| "dataframe": df, | |
| "return_print": return_print | |
| } | |
| st.title("FLOPs Calculator for EU AI Act High Impact Capabilities") | |
| # Choose calculation method | |
| calculation_method = st.selectbox("Choose Calculation Method:", | |
| ["Model Architecture", "GPU Hours and Type", "Hugging Face Model"]) | |
| if calculation_method == "Model Architecture": | |
| num_params = st.number_input("Number of Parameters (N):", min_value=0.0, value=float(7.0 * 10 ** 9), step=1.0) | |
| num_tokens = st.number_input("Number of Training Tokens (D):", min_value=0.0, value=float(1500 * 10 ** 9), step=1.0) | |
| if st.button("Calculate FLOPs (Model Architecture)"): | |
| result = calculate_flops_architecture(num_params, num_tokens) | |
| st.write(f"Total FLOPs: {result['total_flops']:.2e} FLOPs") | |
| st.write(f"Meets high impact capabilities criteria: {result['meets_criteria']}") | |
| elif calculation_method == "GPU Hours and Type": | |
| # Define GPU types and their corresponding FLOPs per second | |
| gpu_types = { | |
| "Nvidia A100": {"flops_per_s": 312 * 10 ** 12, "power": 400}, | |
| "Nvidia V100": {"flops_per_s": 125 * 10 ** 12, "power": 300}, | |
| "Nvidia H100": {"flops_per_s": 1.25 * 10 ** 15, "power": 700}, | |
| "Nvidia T4": {"flops_per_s": 65 * 10 ** 12, "power": 70} | |
| } | |
| gpu_type = st.selectbox("Select GPU type:", list(gpu_types.keys())) | |
| flops_per_gpu_s = gpu_types[gpu_type]["flops_per_s"] | |
| power_consumption_w = gpu_types[gpu_type]["power"] | |
| gpu_hours = st.number_input("Total GPU hours used for training:", min_value=0.0, value=float(7.7 * 10 ** 6), | |
| step=1.0) | |
| if st.button("Calculate FLOPs (GPU Hours and Type)"): | |
| result = calculate_flops_gpu(gpu_hours, power_consumption_w, flops_per_gpu_s) | |
| st.write(f"Total energy consumption: {result['total_energy_wh']:.2e} Wh") | |
| st.write(f"Total FLOPs: {result['total_flops']:.2e} FLOPs") | |
| st.write(f"Meets high impact capabilities criteria: {result['meets_criteria']}") | |
| elif calculation_method == "Hugging Face Model": | |
| model_name = st.text_input("Model Name:", "tiiuae/falcon-40b") | |
| batch_size = st.number_input("Batch Size:", min_value=1, value=1) | |
| max_seq_length = st.number_input("Max Sequence Length:", min_value=1, value=128) | |
| input_shape = (batch_size, max_seq_length) | |
| access_token = st.text_input("Hugging Face Access Token:", "") | |
| bp_factor = st.number_input("Backward Pass Factor (BP Factor):", min_value=0.0, value=1.0, step=0.1) | |
| output_unit = st.selectbox("Output Unit:", ["auto", "MFLOPs", "GFLOPs", "TFLOPs", "PFLOPs"]) | |
| if st.button("Calculate FLOPs (Hugging Face Model)"): | |
| result = calculate_flops_hf(model_name, input_shape, access_token, bp_factor, output_unit) | |
| st.write(f"Total FLOPs: {result['total_flops']:.2e} FLOPs") | |
| st.write(f"Meets high impact capabilities criteria: {result['meets_criteria']}") | |
| st.write("Detailed FLOPs Data:") | |
| st.dataframe(result["dataframe"]) | |
| st.text(result["return_print"]) | |