ml-dash 0.6.6__py3-none-any.whl → 0.6.9__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ml-dash
3
- Version: 0.6.6
3
+ Version: 0.6.9
4
4
  Summary: ML experiment tracking and data storage
5
5
  Keywords: machine-learning,experiment-tracking,mlops,data-storage
6
6
  Author: Ge Yang, Tom Tao
@@ -68,10 +68,11 @@ Description-Content-Type: text/markdown
68
68
 
69
69
  # ML-Dash
70
70
 
71
- A simple and flexible SDK for ML experiment tracking and data storage.
71
+ A simple and flexible SDK for ML experiment tracking and data storage with background buffering for high-performance training.
72
72
 
73
73
  ## Features
74
74
 
75
+ ### Core Features
75
76
  - **Three Usage Styles**: Pre-configured singleton (dxp), context manager, or direct instantiation
76
77
  - **Dual Operation Modes**: Remote (API server) or local (filesystem)
77
78
  - **OAuth2 Authentication**: Secure device flow authentication for CLI and SDK
@@ -82,6 +83,13 @@ A simple and flexible SDK for ML experiment tracking and data storage.
82
83
  - **Rich Metadata**: Tags, bindrs, descriptions, and custom metadata support
83
84
  - **Simple API**: Minimal configuration, maximum flexibility
84
85
 
86
+ ### Performance Features (New in 0.6.7)
87
+ - **Background Buffering**: Non-blocking I/O operations eliminate training interruptions
88
+ - **Automatic Batching**: Time-based (5s) and size-based (100 items) flush triggers
89
+ - **Track API**: Time-series data tracking for robotics, RL, and sequential experiments
90
+ - **Numpy Image Support**: Direct saving of numpy arrays as PNG/JPEG images
91
+ - **Parallel Uploads**: ThreadPoolExecutor for efficient file uploads
92
+
85
93
  ## Installation
86
94
 
87
95
  <table>
@@ -93,14 +101,14 @@ A simple and flexible SDK for ML experiment tracking and data storage.
93
101
  <td>
94
102
 
95
103
  ```bash
96
- uv add ml-dash==0.6.2rc1
104
+ uv add ml-dash
97
105
  ```
98
106
 
99
107
  </td>
100
108
  <td>
101
109
 
102
110
  ```bash
103
- pip install ml-dash==0.6.2rc1
111
+ pip install ml-dash
104
112
  ```
105
113
 
106
114
  </td>
@@ -159,7 +167,75 @@ with Experiment(
159
167
 
160
168
  ```
161
169
 
162
- See [docs/getting-started.md](docs/getting-started.md) for more examples.
170
+ ## New Features in 0.6.7
171
+
172
+ ### 🚀 Background Buffering (Non-blocking I/O)
173
+
174
+ All write operations are now buffered and executed in background threads:
175
+
176
+ ```python
177
+ with Experiment("my-project/exp").run as experiment:
178
+ for i in range(10000):
179
+ # Non-blocking! Returns immediately
180
+ experiment.log(f"Step {i}")
181
+ experiment.metrics("train").log(loss=loss, accuracy=acc)
182
+ experiment.files("frames").save_image(frame, to=f"frame_{i}.jpg")
183
+
184
+ # All data automatically flushed when context exits
185
+ ```
186
+
187
+ Configure buffering via environment variables:
188
+ ```bash
189
+ export ML_DASH_BUFFER_ENABLED=true
190
+ export ML_DASH_FLUSH_INTERVAL=5.0
191
+ export ML_DASH_LOG_BATCH_SIZE=100
192
+ ```
193
+
194
+ ### 📊 Track API (Time-Series Data)
195
+
196
+ Perfect for robotics, RL, and sequential experiments:
197
+
198
+ ```python
199
+ with Experiment("robotics/training").run as experiment:
200
+ for step in range(1000):
201
+ # Track robot position over time
202
+ experiment.track("robot/position").append({
203
+ "step": step,
204
+ "x": position[0],
205
+ "y": position[1],
206
+ "z": position[2]
207
+ })
208
+
209
+ # Track control signals
210
+ experiment.track("robot/control").append({
211
+ "step": step,
212
+ "motor1": ctrl[0],
213
+ "motor2": ctrl[1]
214
+ })
215
+ ```
216
+
217
+ ### 🖼️ Numpy Image Support
218
+
219
+ Save numpy arrays directly as images (PNG/JPEG):
220
+
221
+ ```python
222
+ import numpy as np
223
+
224
+ with Experiment("vision/training").run as experiment:
225
+ # From MuJoCo, OpenCV, PIL, etc.
226
+ pixels = renderer.render() # numpy array
227
+
228
+ # Save as PNG (lossless)
229
+ experiment.files("frames").save_image(pixels, to="frame.png")
230
+
231
+ # Save as JPEG with quality control
232
+ experiment.files("frames").save_image(pixels, to="frame.jpg", quality=85)
233
+
234
+ # Auto-detection also works
235
+ experiment.files("frames").save(pixels, to="frame.jpg")
236
+ ```
237
+
238
+ See [CHANGELOG.md](CHANGELOG.md) for complete release notes.
163
239
 
164
240
  ## Development Setup
165
241
 
@@ -6,20 +6,21 @@ ml_dash/auth/device_secret.py,sha256=qUsz6M9S1GEIukvmz57eJEp57srSx74O4MU9mZEeDlE
6
6
  ml_dash/auth/exceptions.py,sha256=IeBwUzoaTyFtPwd4quFOIel49inIzuabe_ChEeEXEWI,725
7
7
  ml_dash/auth/token_storage.py,sha256=L18W8J7D1LlCDlY3Q32l0RXeNh0o7YVDQeeGYm64Dgw,8163
8
8
  ml_dash/auto_start.py,sha256=FHTTui33bxfk5rHf-VY2RFcd2JQ_LsNpkUu7Qtpc-GY,1721
9
+ ml_dash/buffer.py,sha256=i4-PZ703_yuKJPAXpmWBGm8jHAAdIBqiA0NIZQEc3wo,26201
9
10
  ml_dash/cli.py,sha256=X8LsQA8Wfa1XuXsbvePaGo6NYer7f8CNzy33VT3jrqg,2740
10
11
  ml_dash/cli_commands/__init__.py,sha256=bjAmV7MsW-bhtW_4SnLJ0Cfkt9h82vMDC8ebW1Ke8KE,38
11
12
  ml_dash/cli_commands/api.py,sha256=NekZEJGWNpIfB6YrsrOw7kw7rZKjVudwgJWPZIy6ANQ,4535
12
13
  ml_dash/cli_commands/create.py,sha256=i6LPA6vefpHUeXncBNzQsLnwF5EM2uF6IX4g7vTDYXo,4400
13
- ml_dash/cli_commands/download.py,sha256=LeZXjQSEPIxZALuo90fj8RHjFWIbtGPE0F625sD3cU8,28054
14
- ml_dash/cli_commands/list.py,sha256=oc_yJXFhsvGgr3JedG2j7747yX69Qc546geIi4DQ54k,16129
14
+ ml_dash/cli_commands/download.py,sha256=Jw-ZeVH8SL9t2yRNCwSmQ0qUOzI4_iWGWt7SwAfM4Ig,33853
15
+ ml_dash/cli_commands/list.py,sha256=H442wOAcWYtDwq6BS7lpZbkKhqfTXBCHGctbw8zT1Zw,20841
15
16
  ml_dash/cli_commands/login.py,sha256=zX-urtUrfzg2qOGtKNYQgj6UloN9kzj4zEO6h_xwuNs,6782
16
17
  ml_dash/cli_commands/logout.py,sha256=lTUUNyRXqvo61qNkCd4KBrPUujDAHnNqsHkU6bHie0U,1332
17
- ml_dash/cli_commands/profile.py,sha256=BaSM6BAN3YM4tw95iKV_nypKZxwsB3PoAAejQcYip5E,2351
18
- ml_dash/cli_commands/upload.py,sha256=1kTmnw4hAevl5mtB1GKlzEh2sPoudv0LTUNhCg0dIXs,45459
19
- ml_dash/client.py,sha256=VYOW-JNtHEonHoeS7InbyMXKRSrWFcRjo7onhqkGXKg,54659
18
+ ml_dash/cli_commands/profile.py,sha256=AsdwAA2bmSTVnYyJ31iddkSwYJfYqJ60V1UGjFpa3YI,5869
19
+ ml_dash/cli_commands/upload.py,sha256=SSUfXC3qoNpoFvPM_ia-ing_N50LNiAvMy9op6FM9Ew,49664
20
+ ml_dash/client.py,sha256=L-FZysVAuIovJJZ1MlDMPhOPJFyL77pMuBxtucG88x8,62005
20
21
  ml_dash/config.py,sha256=oz2xvoBh2X_xUXWr92cPD5nFxXMT5LxVNypv5B5O0fA,3116
21
- ml_dash/experiment.py,sha256=JCLSWJMOSHQ-dAfR4hOwB07BpNoXzbWTY9lk4VOVRKY,37678
22
- ml_dash/files.py,sha256=bihUHKpdknytLGuGgkcvhh585nziZrvYjiHl6rHnoD0,49227
22
+ ml_dash/experiment.py,sha256=sq5Bu-vcKhzTQlUsI6SzIHUZyUkxn7ZSMp_AbhFe4Bw,43462
23
+ ml_dash/files.py,sha256=tGJCTxPfd9vmfvIEqstZjzLvqmHzMZffPXHz0jU9bYU,54441
23
24
  ml_dash/log.py,sha256=E-DLg0vejVLLEyShJ_r0LneDMI0XU7XTH5iKWYJe9jI,5298
24
25
  ml_dash/metric.py,sha256=ghD1jnuv6dbjV1Jlo7q0mx9UEzpdto2Y1-oDWrSfg04,25809
25
26
  ml_dash/params.py,sha256=pPFvknJAJX5uhckzjO1r-HNnKbQFFKDISFmOXNET5eY,9046
@@ -27,8 +28,9 @@ ml_dash/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
28
  ml_dash/remote_auto_start.py,sha256=5fvQDHv1CWEKFb6WAa5_uyEInwV_SvotXjOO_6i6ZKE,1687
28
29
  ml_dash/run.py,sha256=_a1l5qswwMgrhvajx_lI-I5IXhfHDeH3hfLAJ7Uk_Gs,8847
29
30
  ml_dash/snowflake.py,sha256=14rEpRU5YltsmmmZW0EMUy_hdv5S5ME9gWVtmdmwfiU,4917
30
- ml_dash/storage.py,sha256=jJ0mYCeBIMQ_dQeNLaCiW0fndsliG68w-TmCI1HyYZc,32926
31
- ml_dash-0.6.6.dist-info/WHEEL,sha256=z-mOpxbJHqy3cq6SvUThBZdaLGFZzdZPtgWLcP2NKjQ,79
32
- ml_dash-0.6.6.dist-info/entry_points.txt,sha256=dYs2EHX1uRNO7AQGNnVaJJpgiy0Z9q7tiy4fHSyaf3Q,46
33
- ml_dash-0.6.6.dist-info/METADATA,sha256=ARlHyG-ZdMBqW-WSJjjaKuqwo2bm2M5X7ENkZ-yI0Z0,7203
34
- ml_dash-0.6.6.dist-info/RECORD,,
31
+ ml_dash/storage.py,sha256=x1W-dK6wQY36-LVOJ4kA8Dn07ObNQuIErQWJ3b0PoGY,44910
32
+ ml_dash/track.py,sha256=Dfg1ZnmKZ_FlE5ZfG8Qld_wN4RIMs3nrOxrxwf3thiY,8164
33
+ ml_dash-0.6.9.dist-info/WHEEL,sha256=z-mOpxbJHqy3cq6SvUThBZdaLGFZzdZPtgWLcP2NKjQ,79
34
+ ml_dash-0.6.9.dist-info/entry_points.txt,sha256=dYs2EHX1uRNO7AQGNnVaJJpgiy0Z9q7tiy4fHSyaf3Q,46
35
+ ml_dash-0.6.9.dist-info/METADATA,sha256=f2YU7ukCO9VmIQ1zrctXaRBOA5D6t5caT89JLMD6Sxw,9535
36
+ ml_dash-0.6.9.dist-info/RECORD,,