Graphyco
Computational graph topology and dynamic gradient-flow monitoring for PyTorch.
What is Graphyco
Graphyco extracts a formal computational graph from any PyTorch model and monitors gradient flow during training.
- Static topology — Graph density, connectivity coherence, bottleneck ratio, perturbation resilience, and 7 structural invariants in deterministic fixed-point arithmetic.
- Dynamic gradient-flow — Per-node activation/gradient RMS, edge attenuation, bottleneck concentration ($G_{\max}$), forward-backward alignment, temporal stability.
- Live diagnostics — Context managers for training loops with automated vanishing/exploding gradient and dead neuron alerts.
- Export & query — Serialize telemetry to JSON, compare architectures via
QueryEngineor REST API. - Desktop GUI — PySide6 real-time visualization.
Install
pip install graphyco
# with desktop GUI
pip install graphyco[gui]
Full technical documentation: docs/DOCUMENTATION.md
How to Use It
1. One-Line Profiling
import torch.nn as nn
from graphyco import visualize
model = nn.Sequential(nn.Linear(64, 128), nn.ReLU(), nn.Linear(128, 10))
visualize(model, inputs=torch.randn(8, 64), steps=5, port=8000)
2. Static Topology Evaluation
from graphyco import evaluate_model, validate_invariants
result = evaluate_model(model, mode="trace") # or mode="module"
print(f"Nodes: {result['num_nodes']}, Edges: {result['num_edges']}")
print(f"Bottleneck Ratio: {result['topological_bottleneck_ratio']}")
print(f"Resilience: {result['structural_perturbation_resilience']}")
validate_invariants(result['graph_state'])
3. Live Training Monitoring
from graphyco import LiveTrainingMonitor
monitor = LiveTrainingMonitor(model, log_interval=5)
for step in range(100):
with monitor.observe(step):
optimizer.zero_grad()
loss = criterion(model(x), y)
loss.backward()
optimizer.step()
if monitor.has_new_data():
info = monitor.get_latest_bottleneck()
print(f"Step {step}: choke={info['bottleneck_node']} G_max={info['max_concentration']:.2f}")
4. Health Diagnostics
from graphyco import LiveTrainingDiagnostics
diag = LiveTrainingDiagnostics(model, inputs=torch.randn(16, 64))
for step in range(50):
with diag.observe_step(step):
optimizer.zero_grad()
loss = criterion(model(x), y)
loss.backward()
optimizer.step()
health = diag.get_health_snapshot()
print(health.status)
print(health.bottleneck)
print(health.layer_telemetry)
5. Export & Query
from graphyco import extract_benchmark_json, QueryEngine
extract_benchmark_json(model, inputs=x, steps=10, arch_name="MyModel", export_path="benchmark.json")
engine = QueryEngine("benchmark.json")
engine.describe() # single-model summary
engine.describe(siblings=True) # cross-architecture comparison
engine.get_bottlenecks() # ranked bottleneck nodes
engine.get_neighbors("layer_3") # DAG predecessors, successors, siblings
6. CLI
python -m graphyco.visualizer --json benchmark.json
python -m graphyco.visualizer --json benchmark.json --query bottlenecks
python -m graphyco.visualizer --model resnet --steps 10 --export resnet_benchmark.json
Tutorials
Jupyter notebooks in notebooks/tutorials/:
| Notebook | Purpose |
|---|---|
| Quickstart & Model Evaluation | Static graph extraction, topological metrics, invariant validation, perturbation analysis, scale invariance. |
| Live Training Diagnostics | LiveTrainingMonitor and LiveTrainingDiagnostics in training loops, gradient bottleneck tracking, dead neuron detection, anomaly alerts. |
| Benchmark Export & Querying | FX tracing vs module fallback, extract_benchmark_json, QueryEngine summaries, cross-architecture comparison, DAG queries. |
| Live GUI Visualization | PySide6 desktop GUI, real-time training visualization, %gui qt integration, CLI usage. |
Verification
pytest
python validation/validate_framework.py
python validation/validate_dynamic_flow.py
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
graphyco-0.1.1.tar.gz
(44.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
graphyco-0.1.1-py3-none-any.whl
(50.0 kB
view details)
File details
Details for the file graphyco-0.1.1.tar.gz.
File metadata
- Download URL: graphyco-0.1.1.tar.gz
- Upload date:
- Size: 44.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3bd2ce4bb34abd429813c10206fcb60f1b0b4ffa2a7bcd925bfc33e00ba41479
|
|
| MD5 |
10d4301d1a24465a1e21ac180478d57f
|
|
| BLAKE2b-256 |
136d6387c6eba2e739cd2e9baba9e1ed6a17f02b204af334fc69dea1381779f5
|
File details
Details for the file graphyco-0.1.1-py3-none-any.whl.
File metadata
- Download URL: graphyco-0.1.1-py3-none-any.whl
- Upload date:
- Size: 50.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd74dcfbc36dbb14c368a19ec5c59d40f3c9c8c224a9bc20c324fb1f9b364d41
|
|
| MD5 |
eace7243e17ab1158452923b20b57356
|
|
| BLAKE2b-256 |
7831b9e55466a78be35c06d5fbb9fa0d15c19ed8fd06336bf48fa98cab93093c
|