"""
Database of GPUs available in the market.
Includes consumer and datacenter GPUs with their VRAM capacities.
Base de dados de GPUs disponíveis no mercado.
Inclui GPUs consumer e datacenter com suas capacidades de VRAM.
"""
from dataclasses import dataclass
from enum import Enum
from typing import List, Optional
[documentos]
class GPUType(Enum):
"""GPU type: consumer or datacenter.
Tipo de GPU: consumer ou datacenter.
"""
CONSUMER = "consumer"
DATACENTER = "datacenter"
[documentos]
@dataclass(frozen=True)
class GPU:
"""Represents a GPU with its VRAM capacity.
Representa uma GPU com sua capacidade de VRAM.
Attributes:
name: GPU model name
vram_gb: VRAM capacity in GB
type: GPU type (consumer or datacenter)
memory_bandwidth_gb_s: Memory bandwidth in GB/s (optional, for future calculations)
architecture: GPU architecture name (optional, for information)
pcie_gen: Default PCIe generation (for CPU offload calculations)
"""
name: str
vram_gb: int
type: GPUType
# Opcional para cálculos futuros / Optional for future calculations
memory_bandwidth_gb_s: int | None = None
# Opcional para info / Optional for information
architecture: str | None = None
# Geração PCIe padrão (para cálculos de offload de CPU)
# Default PCIe generation (for CPU offload calculations)
pcie_gen: str = "4.0"
@property
def vram_label(self) -> str:
"""Returns formatted VRAM label (e.g., '24GB').
Retorna label formatado da VRAM (ex: '24GB').
"""
return f"{self.vram_gb}GB"
# Hardcoded GPU database
# Base de GPUs hardcoded
GPUS: List[GPU] = [
# ============================================================
# CONSUMER GPUs - NVIDIA GeForce RTX 30 Series
# ============================================================
GPU(
name="RTX 3060",
vram_gb=12,
type=GPUType.CONSUMER,
architecture="Ampere",
),
GPU(
name="RTX 3060 Ti",
vram_gb=8,
type=GPUType.CONSUMER,
architecture="Ampere",
),
GPU(
name="RTX 3070",
vram_gb=8,
type=GPUType.CONSUMER,
architecture="Ampere",
),
GPU(
name="RTX 3070 Ti",
vram_gb=8,
type=GPUType.CONSUMER,
architecture="Ampere",
),
GPU(
name="RTX 3080",
vram_gb=10,
type=GPUType.CONSUMER,
architecture="Ampere",
),
GPU(
name="RTX 3080 Ti",
vram_gb=12,
type=GPUType.CONSUMER,
architecture="Ampere",
),
GPU(
name="RTX 3090",
vram_gb=24,
type=GPUType.CONSUMER,
architecture="Ampere",
),
GPU(
name="RTX 3090 Ti",
vram_gb=24,
type=GPUType.CONSUMER,
architecture="Ampere",
),
# ============================================================
# CONSUMER GPUs - NVIDIA GeForce RTX 40 Series
# ============================================================
GPU(
name="RTX 4060",
vram_gb=8,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
GPU(
name="RTX 4060 Ti",
vram_gb=8,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
GPU(
name="RTX 4060 Ti (16GB)",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
GPU(
name="RTX 4070",
vram_gb=12,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
GPU(
name="RTX 4070 Ti",
vram_gb=12,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
GPU(
name="RTX 4070 Ti Super",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
GPU(
name="RTX 4080",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
GPU(
name="RTX 4080 Super",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
GPU(
name="RTX 4090",
vram_gb=24,
type=GPUType.CONSUMER,
architecture="Ada Lovelace",
),
# ============================================================
# CONSUMER GPUs - NVIDIA GeForce RTX 50 Series
# ============================================================
GPU(
name="RTX 5050",
vram_gb=8,
type=GPUType.CONSUMER,
architecture="Blackwell",
),
GPU(
name="RTX 5060",
vram_gb=8,
type=GPUType.CONSUMER,
architecture="Blackwell",
),
GPU(
name="RTX 5060 Ti",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="Blackwell",
),
GPU(
name="RTX 5070",
vram_gb=12,
type=GPUType.CONSUMER,
architecture="Blackwell",
),
GPU(
name="RTX 5070 Ti",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="Blackwell",
),
GPU(
name="RTX 5080",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="Blackwell",
),
GPU(
name="RTX 5090",
vram_gb=32,
type=GPUType.CONSUMER,
architecture="Blackwell",
),
# ============================================================
# CONSUMER GPUs - AMD Radeon RX 7000 Series
# ============================================================
GPU(
name="RX 7600",
vram_gb=8,
type=GPUType.CONSUMER,
architecture="RDNA 3",
),
GPU(
name="RX 7700 XT",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="RDNA 3",
),
GPU(
name="RX 7800 XT",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="RDNA 3",
),
GPU(
name="RX 7900 XT",
vram_gb=20,
type=GPUType.CONSUMER,
architecture="RDNA 3",
),
GPU(
name="RX 7900 XTX",
vram_gb=24,
type=GPUType.CONSUMER,
architecture="RDNA 3",
),
# ============================================================
# CONSUMER GPUs - AMD Radeon RX 6000 Series (relevant legacy)
# GPUs Consumer - AMD Radeon RX 6000 Series (legado relevante)
# ============================================================
GPU(
name="RX 6800",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="RDNA 2",
),
GPU(
name="RX 6800 XT",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="RDNA 2",
),
GPU(
name="RX 6900 XT",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="RDNA 2",
),
GPU(
name="RX 6950 XT",
vram_gb=16,
type=GPUType.CONSUMER,
architecture="RDNA 2",
),
# ============================================================
# DATACENTER GPUs - NVIDIA
# ============================================================
GPU(
name="A100 (40GB)",
vram_gb=40,
type=GPUType.DATACENTER,
architecture="Ampere",
),
GPU(
name="A100 (80GB)",
vram_gb=80,
type=GPUType.DATACENTER,
architecture="Ampere",
),
GPU(
name="A40",
vram_gb=48,
type=GPUType.DATACENTER,
architecture="Ampere",
),
GPU(
name="A6000",
vram_gb=48,
type=GPUType.DATACENTER,
architecture="Ampere",
),
GPU(
name="A6000 Ada",
vram_gb=48,
type=GPUType.DATACENTER,
architecture="Ada Lovelace",
),
GPU(
name="H100 (80GB)",
vram_gb=80,
type=GPUType.DATACENTER,
architecture="Hopper",
),
GPU(
name="H200 (141GB)",
vram_gb=141,
type=GPUType.DATACENTER,
architecture="Hopper",
),
GPU(
name="L40S",
vram_gb=48,
type=GPUType.DATACENTER,
architecture="Ada Lovelace",
),
GPU(
name="L4",
vram_gb=24,
type=GPUType.DATACENTER,
architecture="Ada Lovelace",
),
# ============================================================
# GOOGLE COLAB GPUs
# ============================================================
GPU(
name="Colab T4",
vram_gb=16,
type=GPUType.DATACENTER,
architecture="Turing",
),
GPU(
name="Colab V100",
vram_gb=16,
type=GPUType.DATACENTER,
architecture="Volta",
),
GPU(
name="Colab P100",
vram_gb=16,
type=GPUType.DATACENTER,
architecture="Pascal",
),
# ============================================================
# DATACENTER GPUs - AMD
# ============================================================
GPU(
name="MI210 (64GB)",
vram_gb=64,
type=GPUType.DATACENTER,
architecture="CDNA 2",
),
GPU(
name="MI250X (128GB total, 64GB per GCD)",
vram_gb=128,
type=GPUType.DATACENTER,
architecture="CDNA 2",
),
GPU(
name="MI300X (192GB)",
vram_gb=192,
type=GPUType.DATACENTER,
architecture="CDNA 3",
),
]
[documentos]
def get_gpu_by_name(name: str) -> GPU | None:
"""Returns a GPU by exact name.
Retorna uma GPU pelo nome exato.
Args:
name: GPU name to search for
Returns:
GPU if found, None otherwise
"""
for gpu in GPUS:
if gpu.name.lower() == name.lower():
return gpu
return None
[documentos]
def get_consumer_gpus() -> List[GPU]:
"""Returns all consumer GPUs.
Retorna todas as GPUs consumer.
Returns:
List of consumer GPUs
"""
return [gpu for gpu in GPUS if gpu.type == GPUType.CONSUMER]
[documentos]
def get_datacenter_gpus() -> List[GPU]:
"""Returns all datacenter GPUs.
Retorna todas as GPUs datacenter.
Returns:
List of datacenter GPUs
"""
return [gpu for gpu in GPUS if gpu.type == GPUType.DATACENTER]
[documentos]
def get_all_gpus() -> List[GPU]:
"""Returns all available GPUs.
Retorna todas as GPUs disponíveis.
Returns:
List of all GPUs
"""
return GPUS.copy()
[documentos]
def get_gpus_by_vram_min(min_vram_gb: int) -> List[GPU]:
"""Returns GPUs with at least the specified VRAM.
Retorna GPUs com pelo menos a VRAM especificada.
Args:
min_vram_gb: Minimum VRAM in GB
Returns:
List of GPUs with VRAM >= min_vram_gb
"""
return [gpu for gpu in GPUS if gpu.vram_gb >= min_vram_gb]