Skip to main content

A GPU-to-Grid simulation library for datacenter-grid cooperation.

Project description

OpenG2G

License: Apache-2.0 Python 3.10+ arXiv

A modular Python library for simulating datacenter-grid interaction, with a focus on LLM workloads.

OpenG2G provides the building blocks for studying how datacenter-level controls (e.g., LLM workload batch size) affect distribution-level voltages. It ships with an implementation of Online Feedback Optimization (OFO) for joint voltage regulation and latency management, alongside a trace-replay datacenter backend and an OpenDSS-based grid simulator.

Key Features

  • Multi-rate simulation: datacenter, grid, and controller components run at independent rates, coordinated by a shared clock.
  • Pluggable architecture: swap datacenter backends (trace-based or live GPU) and controllers (OFO, tap scheduling, or your own) via simple abstract interfaces.
  • OpenDSS integration: power flow analysis on standard IEEE test feeders with tap scheduling (TapPosition/TapSchedule API) and voltage monitoring.
  • Online Feedback Optimization: primal-dual batch size control balancing voltage regulation, inference latency, and throughput.
  • Live GPU support: OnlineDatacenter backend reads real-time GPU power via Zeus for hardware-in-the-loop experiments.

Installation

Requires Python 3.10+.

pip install openg2g

For grid simulation with OpenDSS:

pip install "openg2g[opendss]"

Development

git clone https://github.com/gpu2grid/openg2g.git
cd openg2g
uv sync  # or: pip install -e . --group dev

Quick Start

For a full walkthrough including data setup, see the Getting Started guide. The snippet below illustrates the core API:

from fractions import Fraction
from pathlib import Path

from openg2g.coordinator import Coordinator
from openg2g.datacenter.config import DatacenterConfig, InferenceModelSpec
from openg2g.datacenter.offline import OfflineDatacenter, OfflineWorkload
from openg2g.datacenter.workloads.inference import InferenceData
from openg2g.grid.opendss import OpenDSSGrid
from openg2g.controller.noop import NoopController
from openg2g.grid.config import TapPosition

# 1. Set up a trace-based datacenter
models = (
    InferenceModelSpec(
        model_label="Llama-3.1-8B", num_replicas=720, gpus_per_replica=1,
        initial_batch_size=128, itl_deadline_s=0.08,
    ),
    InferenceModelSpec(
        model_label="Llama-3.1-70B", num_replicas=180, gpus_per_replica=4,
        initial_batch_size=128, itl_deadline_s=0.10,
    ),
)
data_dir = Path("data/offline")
inference_data = InferenceData.load(data_dir, models, duration_s=3600, dt_s=0.1)
dc_config = DatacenterConfig()
dc = OfflineDatacenter(
    dc_config,
    OfflineWorkload(inference_data=inference_data),
    dt_s=Fraction(1, 10),
)

# 2. Set up the grid
TAP_STEP = 0.00625
grid = OpenDSSGrid(
    dss_case_dir="examples/ieee13",
    dss_master_file="IEEE13Nodeckt.dss",
    dc_bus="671",
    dc_bus_kv=4.16,
    power_factor=dc_config.power_factor,
    dt_s=Fraction(1, 10),
    initial_tap_position=TapPosition(a=1.0 + 14 * TAP_STEP, b=1.0 + 6 * TAP_STEP, c=1.0 + 15 * TAP_STEP),
    connection_type="wye",
)

# 3. Run the simulation
coord = Coordinator(
    datacenter=dc,
    grid=grid,
    controllers=[NoopController()],
    total_duration_s=3600,
    dc_bus="671",
)
log = coord.run()

See examples/ for complete simulation scripts (offline trace-replay and online hardware-in-the-loop variants).

Running Example Simulations

A single --config flag drives both data generation and simulation. The first run downloads benchmark data from the ML.ENERGY Benchmark v3 dataset (gated -- request access first) and generates simulation artifacts. Subsequent runs load from cache.

export HF_TOKEN=hf_xxxxxxxxxxx  # needed for first run only

# Baseline: fixed taps
python examples/offline/run_baseline.py --config examples/offline/config.json --mode no-tap

# Baseline: scheduled tap changes
python examples/offline/run_baseline.py --config examples/offline/config.json --mode tap-change

# OFO closed-loop control
python examples/offline/run_ofo.py --config examples/offline/config.json

--config is the only required argument. Model specs, data sources, and paths are all in the config file. Generated data is cached in data/offline/{hash}/.

Documentation

Full documentation is available at https://gpu2grid.io/openg2g, including:

  • Installation and setup guide
  • Running simulations
  • Implementing custom components
  • Architecture reference

Contact

Jae-Won Chung jwnchung@umich.edu

Citation

If you use OpenG2G in your research, please cite:

@article{gpu2grid-arxiv26,
  title   = {{GPU-to-Grid}: Voltage Regulation via {GPU} Utilization Control},
  author  = {Zhirui Liang and Jae-Won Chung and Mosharaf Chowdhury and Jiasi Chen and Vladimir Dvorkin},
  year    = {2026},
  journal = {arXiv preprint arXiv:2602.05116},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openg2g-0.1.0.tar.gz (91.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openg2g-0.1.0-py3-none-any.whl (80.4 kB view details)

Uploaded Python 3

File details

Details for the file openg2g-0.1.0.tar.gz.

File metadata

  • Download URL: openg2g-0.1.0.tar.gz
  • Upload date:
  • Size: 91.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for openg2g-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c309c0950f21caecae67853d6ba5f9220b04b1911d50b5f24db946beb1e23631
MD5 ae7b6c6306c79d2ef26316298b646295
BLAKE2b-256 ddc1aad296abad3381b79180a4545a2c4ea48cbf2c0f869791dba4ea0420f7f7

See more details on using hashes here.

File details

Details for the file openg2g-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: openg2g-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 80.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for openg2g-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 35411d6dc30e0e832bdc9053c7f7cfc828825368df23e6085b73c69d64451771
MD5 284d2e2bf03ce21967d041509648483d
BLAKE2b-256 3736c620aef6787e85b7a4f04bc1bacdc46f7f5d9547890bdeb1b5c9849af242

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page