AdriBat1
Reorganize client files into examples, tests, and output folders
1b272e7
import torch
import time
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import os
import sys
import numpy as np
def run_benchmark():
print("=" * 60)
print(f"🚀 SYSTEM BENCHMARK on {os.uname().nodename}")
print("=" * 60)
print(f"Python: {sys.version.split()[0]}")
print(f"PyTorch: {torch.__version__}")
cuda_available = torch.cuda.is_available()
if cuda_available:
gpu_name = torch.cuda.get_device_name(0)
print(f"✅ GPU DETECTED: {gpu_name}")
print(f" Memory: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.2f} GB")
else:
print("⚠️ NO GPU DETECTED. Running on CPU.")
print(" (To enable GPU, switch Hardware in HF Space settings)")
print("-" * 60)
times = {}
# MATRIX SIZE
N = 4000
# CPU TEST
print(f"1️⃣ CPU Test ({N}x{N} Matrix Mul)...")
start_time = time.time()
a_cpu = torch.randn(N, N)
b_cpu = torch.randn(N, N)
c_cpu = torch.matmul(a_cpu, b_cpu)
cpu_time = time.time() - start_time
times['CPU'] = cpu_time
print(f" ⏱️ Time: {cpu_time:.4f} seconds")
# GPU TEST
if cuda_available:
print(f"2️⃣ GPU Test ({N}x{N} Matrix Mul)...")
# Warmup
torch.matmul(torch.randn(100,100).cuda(), torch.randn(100,100).cuda())
start_time = time.time()
a_gpu = torch.randn(N, N).cuda()
b_gpu = torch.randn(N, N).cuda()
# Synchronize for accurate timing
torch.cuda.synchronize()
start_computation = time.time()
c_gpu = torch.matmul(a_gpu, b_gpu)
torch.cuda.synchronize()
gpu_time = time.time() - start_computation
times['GPU'] = gpu_time
print(f" ⏱️ Time: {gpu_time:.4f} seconds")
speedup = cpu_time / gpu_time
print(f" 🚀 SPEEDUP: {speedup:.2f}x")
else:
print("2️⃣ GPU Test SKIPPED (No CUDA)")
times['GPU'] = 0
# PLOT
print("-" * 60)
print("Creating comparison chart...")
plt.figure(figsize=(10, 6))
models = list(times.keys())
durations = list(times.values())
colors = ['gray', 'green'] if cuda_available else ['gray', 'red']
bars = plt.bar(models, durations, color=colors)
plt.ylabel('Secons (Lower is better)')
plt.title(f'Benchmark CPU vs GPU ({N}x{N} Matrix Mul)\n{gpu_name if cuda_available else "CPU Only"}')
for bar in bars:
yval = bar.get_height()
if yval > 0:
plt.text(bar.get_x() + bar.get_width()/2, yval, f'{yval:.4f}s', ha='center', va='bottom')
filename = "gpu_benchmark.png"
plt.savefig(filename)
print(f"💾 Saved to {filename}")
if __name__ == "__main__":
run_benchmark()