ato 2.0.0__py3-none-any.whl → 2.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ato might be problematic. Click here for more details.
- {ato-2.0.0.dist-info → ato-2.0.3.dist-info}/METADATA +231 -98
- {ato-2.0.0.dist-info → ato-2.0.3.dist-info}/RECORD +5 -5
- {ato-2.0.0.dist-info → ato-2.0.3.dist-info}/WHEEL +0 -0
- {ato-2.0.0.dist-info → ato-2.0.3.dist-info}/licenses/LICENSE +0 -0
- {ato-2.0.0.dist-info → ato-2.0.3.dist-info}/top_level.txt +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ato
|
|
3
|
-
Version: 2.0.
|
|
4
|
-
Summary: A
|
|
3
|
+
Version: 2.0.3
|
|
4
|
+
Summary: A frameworkless integration layer for ML pipelines. Ato doesn't compete with frameworks — it restores freedom between them.
|
|
5
5
|
Author: ato contributors
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/yourusername/ato
|
|
8
8
|
Project-URL: Repository, https://github.com/yourusername/ato
|
|
9
9
|
Project-URL: Documentation, https://github.com/yourusername/ato#readme
|
|
10
10
|
Project-URL: Issues, https://github.com/yourusername/ato/issues
|
|
11
|
-
Keywords:
|
|
11
|
+
Keywords: config management,experiment tracking,hyperparameter optimization,lightweight,composable,namespace isolation,machine learning
|
|
12
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
14
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -32,37 +32,95 @@ Provides-Extra: distributed
|
|
|
32
32
|
Requires-Dist: torch>=1.8.0; extra == "distributed"
|
|
33
33
|
Dynamic: license-file
|
|
34
34
|
|
|
35
|
-
# Ato
|
|
35
|
+
# Ato: A Tiny Orchestrator
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
it’s about where they belong.
|
|
39
|
-
The core fits in a few hundred lines because it doesn’t need to fight Python — it flows with it.
|
|
37
|
+
## A frameworkless integration layer for Python and ML pipelines
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
**Ato doesn't compete with frameworks — it restores freedom between them.**
|
|
40
|
+
|
|
41
|
+
Every framework tries to own your workflow.
|
|
42
|
+
Ato doesn't. It just gives you the **handles to connect them**.
|
|
43
|
+
|
|
44
|
+
Unlike Hydra, MLflow, or W&B — which build ecosystems —
|
|
45
|
+
Ato provides **structural boundaries** that let you compose, track, and optimize
|
|
46
|
+
without surrendering control to any single system.
|
|
47
|
+
|
|
48
|
+
You can:
|
|
49
|
+
- **Chain** configs from multiple sources (Hydra YAML, OpenMMLab, raw Python)
|
|
50
|
+
- **Merge** them with explicit priority control — and **debug** the exact merge order
|
|
51
|
+
- **Track** experiments in SQLite with zero setup — or sync to MLflow/W&B when you need dashboards
|
|
52
|
+
- **Optimize** hyperparameters with built-in Hyperband — or use Optuna/Ray Tune alongside
|
|
53
|
+
|
|
54
|
+
Ato keeps everything **transparent** and **Pythonic**.
|
|
55
|
+
No magic. No vendor lock-in. Just composable pieces you control.
|
|
56
|
+
|
|
57
|
+
<details>
|
|
58
|
+
<summary><strong>Design Philosophy</strong></summary>
|
|
59
|
+
|
|
60
|
+
Ato was designed from a simple realization:
|
|
61
|
+
**frameworks solve composition, but they also create coupling.**
|
|
62
|
+
|
|
63
|
+
When I built Ato, I didn't know Hydra existed.
|
|
64
|
+
But I did know I wanted something that wouldn't **own** my workflow —
|
|
65
|
+
something that could **compose** with whatever came next.
|
|
66
|
+
|
|
67
|
+
That constraint led to three design principles:
|
|
68
|
+
|
|
69
|
+
1. **Structural neutrality** — Ato has no opinion on your stack.
|
|
70
|
+
It's a layer, not a platform.
|
|
42
71
|
|
|
43
|
-
**
|
|
44
|
-
|
|
45
|
-
|
|
72
|
+
2. **Explicit boundaries** — Each module (ADict, Scope, SQLTracker, HyperOpt) is independent.
|
|
73
|
+
Use one, use all, or mix with other tools. No forced dependencies.
|
|
74
|
+
|
|
75
|
+
3. **Debuggable composition** — When configs merge from 5 sources, you should see **why** a value was set.
|
|
76
|
+
Ato's `manual` command shows the exact merge order — a feature no other tool has.
|
|
77
|
+
|
|
78
|
+
This isn't minimalism for its own sake.
|
|
79
|
+
It's **structural restraint** — interfering only where necessary,
|
|
80
|
+
and staying out of the way everywhere else.
|
|
81
|
+
|
|
82
|
+
</details>
|
|
83
|
+
|
|
84
|
+
---
|
|
46
85
|
|
|
47
86
|
## Why Ato?
|
|
48
87
|
|
|
49
|
-
|
|
88
|
+
Ato solves a problem that frameworks create: **workflow ownership**.
|
|
89
|
+
|
|
90
|
+
| Framework Approach | Ato's Approach |
|
|
91
|
+
|-------------------|----------------|
|
|
92
|
+
| Hydra owns config composition | Ato **composes** Hydra configs + raw Python + CLI args |
|
|
93
|
+
| MLflow owns experiment tracking | Ato tracks locally in SQLite, **or** syncs to MLflow |
|
|
94
|
+
| W&B owns hyperparameter search | Ato provides Hyperband, **or** you use Optuna/Ray |
|
|
95
|
+
| Each framework wants to be **the** system | Ato is **a layer** you control |
|
|
96
|
+
|
|
97
|
+
**Ato is for teams who want:**
|
|
98
|
+
- Config flexibility without framework lock-in
|
|
99
|
+
- Experiment tracking without mandatory cloud platforms
|
|
100
|
+
- Hyperparameter optimization without opaque black boxes
|
|
101
|
+
- The ability to **change tools** without rewriting pipelines
|
|
102
|
+
|
|
103
|
+
### What Makes Ato Structurally Different
|
|
104
|
+
|
|
105
|
+
These aren't features — they're **architectural decisions** that frameworks can't replicate without breaking their own abstractions:
|
|
50
106
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
107
|
+
| Capability | Why Frameworks Can't Do This | What It Enables |
|
|
108
|
+
|------------|------------------------------|-----------------|
|
|
109
|
+
| **MultiScope** (namespace isolation) | Frameworks use global config namespaces | Multiple teams can own separate config scopes without key collisions. No `model_lr` vs `data_lr` prefixing needed. |
|
|
110
|
+
| **`manual` command** (merge order debugging) | Frameworks show final configs, not merge logic | See **why** a value was set — trace exact merge order across defaults, named configs, CLI args, and lazy evaluation. |
|
|
111
|
+
| **Structural hashing** | Frameworks track values, not structure | Detect when experiment **architecture** changes (not just hyperparameters). Critical for reproducibility. |
|
|
112
|
+
| **Offline-first tracking** | Frameworks assume centralized platforms | Zero-setup SQLite tracking. No servers, no auth, no vendor lock-in. Sync to MLflow/W&B only when needed. |
|
|
55
113
|
|
|
56
114
|
### Developer Experience
|
|
57
115
|
|
|
58
|
-
- **Zero
|
|
59
|
-
- **CLI-first
|
|
60
|
-
- **Framework
|
|
116
|
+
- **Zero boilerplate** — Auto-nested configs (`cfg.model.backbone.depth = 50` just works), lazy evaluation, attribute access
|
|
117
|
+
- **CLI-first** — Override any config from command line without touching code: `python train.py model.backbone=%resnet101%`
|
|
118
|
+
- **Framework agnostic** — Works with PyTorch, TensorFlow, JAX, or pure Python. No framework-specific decorators or magic.
|
|
61
119
|
|
|
62
120
|
## Quick Start
|
|
63
121
|
|
|
64
122
|
```bash
|
|
65
|
-
pip install ato
|
|
123
|
+
pip install ato
|
|
66
124
|
```
|
|
67
125
|
|
|
68
126
|
### 30-Second Example
|
|
@@ -99,7 +157,8 @@ if __name__ == '__main__':
|
|
|
99
157
|
- [SQL Tracker: Experiment Tracking](#sql-tracker-experiment-tracking)
|
|
100
158
|
- [Hyperparameter Optimization](#hyperparameter-optimization)
|
|
101
159
|
- [Best Practices](#best-practices)
|
|
102
|
-
- [
|
|
160
|
+
- [Roadmap](#roadmap-expanding-boundaries-without-breaking-neutrality)
|
|
161
|
+
- [Working with Existing Tools](#working-with-existing-tools)
|
|
103
162
|
|
|
104
163
|
---
|
|
105
164
|
|
|
@@ -1088,6 +1147,52 @@ MIT License
|
|
|
1088
1147
|
|
|
1089
1148
|
---
|
|
1090
1149
|
|
|
1150
|
+
## Roadmap: Expanding Boundaries Without Breaking Neutrality
|
|
1151
|
+
|
|
1152
|
+
Ato's design constraint is **structural neutrality** — adding capabilities without creating dependencies.
|
|
1153
|
+
|
|
1154
|
+
### Planned: Local Dashboard (Optional Module)
|
|
1155
|
+
|
|
1156
|
+
A lightweight HTML dashboard for teams that want visual exploration **without** committing to MLflow/W&B:
|
|
1157
|
+
|
|
1158
|
+
**What it adds:**
|
|
1159
|
+
- Metric comparison & trends (read-only view of SQLite data)
|
|
1160
|
+
- Run history & artifact browsing
|
|
1161
|
+
- Config diff visualization (including structural hash changes)
|
|
1162
|
+
- Interactive hyperparameter analysis
|
|
1163
|
+
|
|
1164
|
+
**Design constraints:**
|
|
1165
|
+
- **No hard dependency** — Ato core works 100% without the dashboard
|
|
1166
|
+
- **Separate process** — Dashboard reads from SQLite; doesn't block or modify runs
|
|
1167
|
+
- **Zero lock-in** — Remove the dashboard, and your training code doesn't change
|
|
1168
|
+
- **Composable** — Use it alongside MLflow/W&B, or replace either one
|
|
1169
|
+
|
|
1170
|
+
### Why This Fits Ato's Philosophy
|
|
1171
|
+
|
|
1172
|
+
The dashboard is **not** a platform — it's a **view** into data you already own (SQLite).
|
|
1173
|
+
|
|
1174
|
+
| What It Doesn't Do | Why That Matters |
|
|
1175
|
+
|--------------------|------------------|
|
|
1176
|
+
| Doesn't store data | You can delete it without losing experiments |
|
|
1177
|
+
| Doesn't require auth | No accounts, no vendors, no network calls |
|
|
1178
|
+
| Doesn't modify configs | Pure read-only visualization |
|
|
1179
|
+
| Doesn't couple to Ato's core | Works with any SQLite database |
|
|
1180
|
+
|
|
1181
|
+
This preserves Ato's design principle: **provide handles, not ownership.**
|
|
1182
|
+
|
|
1183
|
+
### Modular Adoption Path
|
|
1184
|
+
|
|
1185
|
+
| What You Need | What You Use |
|
|
1186
|
+
|---------------|--------------|
|
|
1187
|
+
| Just configs | `ADict` + `Scope` — no DB, no UI |
|
|
1188
|
+
| Headless tracking | Add SQLTracker — still no UI |
|
|
1189
|
+
| Local visualization | Add dashboard daemon — run/stop anytime |
|
|
1190
|
+
| Team collaboration | Sync to MLflow/W&B dashboards |
|
|
1191
|
+
|
|
1192
|
+
**Guiding principle:** Ato remains a set of **independent, composable tools** — not a platform you commit to.
|
|
1193
|
+
|
|
1194
|
+
---
|
|
1195
|
+
|
|
1091
1196
|
## Contributing
|
|
1092
1197
|
|
|
1093
1198
|
Contributions are welcome! Please feel free to submit issues or pull requests.
|
|
@@ -1102,80 +1207,108 @@ pip install -e .
|
|
|
1102
1207
|
|
|
1103
1208
|
---
|
|
1104
1209
|
|
|
1105
|
-
##
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
|
1117
|
-
|
|
1118
|
-
| **
|
|
1119
|
-
|
|
|
1120
|
-
|
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
|
1152
|
-
|
|
1153
|
-
| **
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
**
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1210
|
+
## Working with Existing Tools
|
|
1211
|
+
|
|
1212
|
+
**Ato is an integration layer, not a replacement.**
|
|
1213
|
+
|
|
1214
|
+
It's designed to **compose** with Hydra, MLflow, W&B, and whatever tools you already use.
|
|
1215
|
+
The goal isn't to compete — it's to **give you handles** for connecting systems without coupling your workflow to any single platform.
|
|
1216
|
+
|
|
1217
|
+
### Composition Strategy
|
|
1218
|
+
|
|
1219
|
+
Ato provides three structural capabilities that frameworks don't:
|
|
1220
|
+
|
|
1221
|
+
| What Ato Adds | Why It Matters | How It Composes |
|
|
1222
|
+
|---------------|----------------|-----------------|
|
|
1223
|
+
| **MultiScope** | True namespace isolation | Multiple config sources (Hydra, raw Python, CLI) coexist without key collisions |
|
|
1224
|
+
| **`manual` command** | Config merge order visualization | Debug **why** a value was set — see exact merge order across all sources |
|
|
1225
|
+
| **Offline-first tracking** | Zero-setup SQLite tracking | Track locally, **then** sync to MLflow/W&B only when you need dashboards |
|
|
1226
|
+
|
|
1227
|
+
These aren't "features" — they're **structural boundaries** that let you compose tools freely.
|
|
1228
|
+
|
|
1229
|
+
### Ato + Hydra: Designed to Compose
|
|
1230
|
+
|
|
1231
|
+
Ato has **native Hydra composition** via `compose_hierarchy()`:
|
|
1232
|
+
|
|
1233
|
+
```python
|
|
1234
|
+
from ato.adict import ADict
|
|
1235
|
+
|
|
1236
|
+
# Load Hydra-style configs directly
|
|
1237
|
+
config = ADict.compose_hierarchy(
|
|
1238
|
+
root='configs',
|
|
1239
|
+
config_filename='config',
|
|
1240
|
+
select={'model': 'resnet50', 'data': 'imagenet'},
|
|
1241
|
+
overrides={'model.lr': 0.01}
|
|
1242
|
+
)
|
|
1243
|
+
|
|
1244
|
+
# Now add Ato's structural boundaries:
|
|
1245
|
+
# - MultiScope for independent namespaces
|
|
1246
|
+
# - `manual` command to debug merge order
|
|
1247
|
+
# - SQLite tracking without MLflow overhead
|
|
1248
|
+
```
|
|
1249
|
+
|
|
1250
|
+
**You're not replacing Hydra** — you're **extending** it with namespace isolation and debuggable composition.
|
|
1251
|
+
|
|
1252
|
+
### Integration Matrix
|
|
1253
|
+
|
|
1254
|
+
Ato is designed to work **between** frameworks:
|
|
1255
|
+
|
|
1256
|
+
| Tool | What It Owns | What Ato Adds |
|
|
1257
|
+
|------|--------------|---------------|
|
|
1258
|
+
| **Hydra** | Config composition from YAML | MultiScope (namespace isolation) + merge debugging |
|
|
1259
|
+
| **MLflow** | Centralized experiment platform | Local-first SQLite tracking + structural hashing |
|
|
1260
|
+
| **W&B** | Cloud-based tracking + dashboards | Offline tracking + sync when ready |
|
|
1261
|
+
| **OpenMMLab** | Config inheritance (`_base_`) | Direct import via `load_mm_config()` |
|
|
1262
|
+
| **Optuna/Ray Tune** | Advanced hyperparameter search | Built-in Hyperband + composable with their optimizers |
|
|
1263
|
+
|
|
1264
|
+
### Composition Patterns
|
|
1265
|
+
|
|
1266
|
+
**Pattern 1: Ato as the integration layer**
|
|
1267
|
+
```
|
|
1268
|
+
Hydra (config source) → Ato (composition + tracking) → MLflow (dashboards)
|
|
1269
|
+
```
|
|
1270
|
+
|
|
1271
|
+
**Pattern 2: Ato for local development**
|
|
1272
|
+
```
|
|
1273
|
+
Local experiments: Ato (full stack)
|
|
1274
|
+
Production: Ato → MLflow (centralized tracking)
|
|
1275
|
+
```
|
|
1276
|
+
|
|
1277
|
+
**Pattern 3: Gradual adoption**
|
|
1278
|
+
```
|
|
1279
|
+
Start: Ato alone (zero dependencies)
|
|
1280
|
+
Scale: Add Hydra for complex configs
|
|
1281
|
+
Collaborate: Sync to W&B for team dashboards
|
|
1282
|
+
```
|
|
1283
|
+
|
|
1284
|
+
### When to Use What
|
|
1285
|
+
|
|
1286
|
+
**Use Ato alone** when:
|
|
1287
|
+
- You want zero external dependencies
|
|
1288
|
+
- You need namespace isolation (MultiScope)
|
|
1289
|
+
- You want to debug config merge order
|
|
1290
|
+
|
|
1291
|
+
**Compose with Hydra** when:
|
|
1292
|
+
- Your team already has Hydra YAML configs
|
|
1293
|
+
- You need deep config hierarchies + namespace isolation
|
|
1294
|
+
- You want to see **why** a Hydra config set a value (`manual` command)
|
|
1295
|
+
|
|
1296
|
+
**Compose with MLflow/W&B** when:
|
|
1297
|
+
- You want local-first tracking with optional cloud sync
|
|
1298
|
+
- You need structural hashing + offline SQLite
|
|
1299
|
+
- You're migrating between tracking platforms
|
|
1300
|
+
|
|
1301
|
+
**You don't need Ato** if:
|
|
1302
|
+
- You're fully committed to a single framework ecosystem
|
|
1303
|
+
- You don't need debuggable config composition
|
|
1304
|
+
- You never switch between tools
|
|
1305
|
+
|
|
1306
|
+
### What Ato Doesn't Do
|
|
1307
|
+
|
|
1308
|
+
Ato intentionally **doesn't** build an ecosystem:
|
|
1309
|
+
- No web dashboards → Use MLflow/W&B
|
|
1310
|
+
- No model registry → Use MLflow
|
|
1311
|
+
- No dataset versioning → Use DVC/W&B
|
|
1312
|
+
- No plugin marketplace → Use Hydra
|
|
1313
|
+
|
|
1314
|
+
**Ato's goal:** Stay out of your way. Provide handles. Let you change tools without rewriting code.
|
|
@@ -11,8 +11,8 @@ ato/db_routers/sql/schema.py,sha256=3eRF1oMnoebEh1QA39aqgcnTSe0h9JAXBfExAD0sPGY,
|
|
|
11
11
|
ato/hyperopt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
12
|
ato/hyperopt/base.py,sha256=Wtu3l9FPB32exoUYEHKQf3r19U_l24_i-rle429uFbY,5188
|
|
13
13
|
ato/hyperopt/hyperband.py,sha256=05qGvff0UAec4bTaaiCFa-FBRG0fIdVATaZu4vUiV5M,4233
|
|
14
|
-
ato-2.0.
|
|
15
|
-
ato-2.0.
|
|
16
|
-
ato-2.0.
|
|
17
|
-
ato-2.0.
|
|
18
|
-
ato-2.0.
|
|
14
|
+
ato-2.0.3.dist-info/licenses/LICENSE,sha256=xrPRlaFeOLIYXHXJOsc7dhA2h1Jrcjw8t63M7OcVN6c,1071
|
|
15
|
+
ato-2.0.3.dist-info/METADATA,sha256=676RCPgQwliZ2DTDxb91AIvR__jq_h2YFauwzSjwEWQ,37901
|
|
16
|
+
ato-2.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
17
|
+
ato-2.0.3.dist-info/top_level.txt,sha256=Ea_cEtrnO1ir26dBT1CK_Mj6vK36sd9oSAu6WjtQkAU,4
|
|
18
|
+
ato-2.0.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|