Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import streamlit as st | |
| st.title("GCP Resource Allocator") | |
| st.subheader("Readme") | |
| st.write("Compute Engine provides NVIDIA GPUs for your VMs in passthrough mode so that your VMs have direct control over the GPUs and their associated memory.") | |
| st.write("* To run NVIDIA H100 80GB GPUs, you must use an A3 accelerator-optimized machine type.") | |
| st.write("* To run NVIDIA A100 GPUs, you must use the A2 accelerator-optimized machine type.") | |
| st.write("* To run NVIDIA L4 GPUs, you must use a G2 accelerator-optimized machine type.") | |
| st.write("* Each A3/A2/G2 machine type has a fixed GPU count, vCPU count, and memory size.") | |
| st.markdown(""" | |
| | GPU | Memory | FP64 | FP32 | Price | Interconnect | Best used for | | |
| | --------- | ------------------------- | --------- | ----------| --------- | ----------------------------- | --------------------------------------------------------------------------------- | | |
| | H100 80GB | 80 GB HBM3 @ 3.35 TBps | 34 | 67 | 12.11 | NVLink Full Mesh @ 900 GBps | Large models with massive data tables for ML Training, Inference, HPC, BERT, DLRM | | |
| | A100 80GB | 80 GB HBM2e @ 1.9 TBps | 9.7 | 19.5 | 2.61 | NVLink Full Mesh @ 600 GBps | Large models with massive data tables for ML Training, Inference, HPC, BERT, DLRM | | |
| | A100 40GB | 40 GB HBM2 @ 1.6 TBps | 9.7 | 19.5 | 1.67 | NVLink Full Mesh @ 600 GBps | ML Training, Inference, HPC | | |
| | L4 | 24 GB GDDR6 @ 300 GBps | 0.5 | 30.3 | 0.28 | N/A | ML Inference, Training, Remote Visualization Workstations, Video Transcoding, HPC | | |
| | T4 | 16 GB GDDR6 @ 320 GBps | 0.25 | 8.1 | 0.15 | N/A | ML Inference, Training, Remote Visualization Workstations, Video Transcoding | | |
| | V100 | 16 GB HBM2 @ 900 GBps | 7.8 | 15.7 | 0.99 | NVLink Ring @ 300 GBps | ML Training, Inference, HPC | | |
| | P4 | 8 GB GDDR5 @ 192 GBps | 0.2 | 5.5 | 0.30 | N/A | Remote Visualization Workstations, ML Inference, and Video Transcoding | | |
| | P100 | 16 GB HBM2 @ 732 GBps | 4.7 | 9.3 | 0.58 | N/A | ML Training, Inference, HPC, Remote Visualization Workstations | | |
| """) | |
| st.subheader("Configuration") | |
| # GPU Type | |
| gpu_type = st.selectbox( | |
| 'GPU Type', | |
| ( | |
| 'H100 80GB', | |
| 'A100 80GB', | |
| 'A100 40GB', | |
| 'V100 16GB', | |
| 'P100 16GB', | |
| 'L4 24GB', | |
| 'T4 16GB', | |
| 'P4 8GB', | |
| ) | |
| ) | |
| # Number of GPUs | |
| gpu_number_mapping = { | |
| 'H100 80GB': [8], | |
| 'A100 80GB': [1,2,4,8], | |
| 'A100 40GB': [1,2,4,8,16], | |
| 'V100 16GB': [1,2,4,8], | |
| 'P100 16GB': [1,2,4], | |
| 'L4 24GB': [1,2,4,8], | |
| 'T4 16GB': [1,2,4], | |
| 'P4 8GB': [1,2,4], | |
| } | |
| gpu_number = st.selectbox('Number of GPUs', gpu_number_mapping[gpu_type]) | |
| # Instance Type | |
| gpu_type_mapping = { | |
| 'H100 80GB': ["A3"], | |
| 'A100 80GB': ["A2"], | |
| 'A100 40GB': ["A2"], | |
| 'V100 16GB': ["N1", "CUSTOM"], | |
| 'P100 16GB': ["N1", "CUSTOM"], | |
| 'L4 24GB': ["G2", "CUSTOM"], | |
| 'T4 16GB': ["N1", "CUSTOM"], | |
| 'P4 8GB': ["N1", "CUSTOM"], | |
| } | |
| instance_type = st.selectbox('Instance Type', gpu_type_mapping[gpu_type]) | |
| # CPU Cores | |
| cpu_cores_mapping = { | |
| "A3": [208], | |
| "A2": [12*gpu_number], | |
| "G2": [12*gpu_number] if gpu_number > 1 else [4,8,12,16,32], | |
| "N1": [1,2,4,8,16,32,96], | |
| "CUSTOM": [1] + [i for i in range(2, 96+1, 2)] | |
| } | |
| if gpu_type != "CUSTOM": | |
| cpu_cores = st.selectbox('Cores (vCPU)', cpu_cores_mapping[instance_type]) | |
| else: | |
| cpu_cores = st.select_slider('Cores (vCPU)', cpu_cores_mapping[instance_type]) | |
| # Memory Size | |
| memory_size_mapping = { | |
| "A3": [1872], | |
| "A2": [170*gpu_number], | |
| "G2": [4*cpu_cores] if gpu_number > 1 else [48*gpu_number], | |
| "N1": [cpu_cores*3.75], | |
| "CUSTOM": [i for i in np.arange(cpu_cores, cpu_cores*6.5+1, 1)] | |
| } | |
| if gpu_type != "CUSTOM": | |
| memory_size = st.selectbox('Memory (GB)', memory_size_mapping[instance_type]) | |
| else: | |
| memory_size = st.select_slider('Memory (GB)', memory_size_mapping[instance_type]) | |
| # Balanced Disk | |
| balanced_disk_size = st.select_slider('Balanced Disk (GB)', [i for i in range(10, 65536, 10)]) | |
| # SSD Disk | |
| ssd_disk_size = st.select_slider('SSD Disk (GB)', [i * 375 for i in [0,1,2,3,4,5,6,7,8,16,24]]) | |
| # Hours | |
| hours = st.select_slider('Duration (Hours)', [i for i in range(1, 168+1)]) | |
| # Pricing Estimate | |
| serivces_mapping = { | |
| "Core": { | |
| "A3": 0.029917642, | |
| "A2": 0.017880447, | |
| "G2": 0.016626389, | |
| "N1": 0.007834495, | |
| "CUSTOM": 0.00782101, | |
| }, | |
| "RAM": { | |
| "A3": 0.002605197, | |
| "A2": 0.002396196, | |
| "G2": 0.00194851, | |
| "N1": 0.001049094, | |
| "CUSTOM": 0.001047746, | |
| }, | |
| "GPU": { | |
| 'H100 80GB': 12.112232328, | |
| 'A100 80GB': 2.61383548, | |
| 'A100 40GB': 1.67288707, | |
| 'V100 16GB': 0.997853, | |
| 'P100 16GB': 0.5798335, | |
| 'L4 24GB': 0.279501996, | |
| 'T4 16GB': 0.1483295, | |
| 'P4 8GB': 0.29800745, | |
| }, | |
| "PD": 0.1483295 / 30 / 24, | |
| "SSD": 0.108550225 / 30 / 24, | |
| } | |
| core_price = serivces_mapping['Core'][instance_type] * cpu_cores | |
| memory_price = serivces_mapping['RAM'][instance_type] * memory_size | |
| gpu_price = serivces_mapping['GPU'][gpu_type] * gpu_number | |
| balanced_disk_price = serivces_mapping['PD'] * balanced_disk_size | |
| ssd_disk_price = serivces_mapping['SSD'] * ssd_disk_size | |
| duration_total_price = core_price + memory_price + gpu_price + balanced_disk_price + ssd_disk_price | |
| total_price = duration_total_price * hours | |
| st.subheader("Hourly estimate") | |
| st.write(f"Core: SGD :blue[{core_price:.3f}]") | |
| st.write(f"Memory: SGD :blue[{memory_price:.3f}]") | |
| st.write(f"GPU: SGD :blue[{gpu_price:.3f}]") | |
| st.write(f"Balance Disk: SGD :blue[{balanced_disk_price:.3f}]") | |
| st.write(f"SSD Disk: SGD :blue[{ssd_disk_price:.3f}]") | |
| st.write(f"Hourly Total: SGD :blue[{duration_total_price:.3f}]") | |
| st.write(f"Duration Total: SGD :blue[{total_price:.3f}]") |