ml-dash 0.6.0__py3-none-any.whl → 0.6.2__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.
- ml_dash/__init__.py +37 -63
- ml_dash/auth/token_storage.py +267 -226
- ml_dash/auto_start.py +30 -30
- ml_dash/cli.py +16 -2
- ml_dash/cli_commands/api.py +165 -0
- ml_dash/cli_commands/download.py +757 -667
- ml_dash/cli_commands/list.py +146 -13
- ml_dash/cli_commands/login.py +190 -183
- ml_dash/cli_commands/profile.py +92 -0
- ml_dash/cli_commands/upload.py +1291 -1141
- ml_dash/client.py +122 -34
- ml_dash/config.py +119 -119
- ml_dash/experiment.py +1242 -995
- ml_dash/files.py +1051 -340
- ml_dash/log.py +7 -7
- ml_dash/metric.py +359 -100
- ml_dash/params.py +6 -6
- ml_dash/remote_auto_start.py +20 -17
- ml_dash/run.py +231 -0
- ml_dash/snowflake.py +173 -0
- ml_dash/storage.py +1051 -1079
- {ml_dash-0.6.0.dist-info → ml_dash-0.6.2.dist-info}/METADATA +45 -20
- ml_dash-0.6.2.dist-info/RECORD +33 -0
- ml_dash-0.6.0.dist-info/RECORD +0 -29
- {ml_dash-0.6.0.dist-info → ml_dash-0.6.2.dist-info}/WHEEL +0 -0
- {ml_dash-0.6.0.dist-info → ml_dash-0.6.2.dist-info}/entry_points.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: ml-dash
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
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
|
|
@@ -43,6 +43,7 @@ Requires-Dist: imageio-ffmpeg>=0.4.9
|
|
|
43
43
|
Requires-Dist: scikit-image>=0.21.0
|
|
44
44
|
Requires-Dist: rich>=13.0.0
|
|
45
45
|
Requires-Dist: cryptography>=42.0.0
|
|
46
|
+
Requires-Dist: params-proto==3.0.0rc27
|
|
46
47
|
Requires-Dist: keyring>=25.0.0 ; extra == 'auth'
|
|
47
48
|
Requires-Dist: qrcode>=8.0.0 ; extra == 'auth'
|
|
48
49
|
Requires-Dist: pytest>=8.0.0 ; extra == 'dev'
|
|
@@ -67,12 +68,13 @@ Description-Content-Type: text/markdown
|
|
|
67
68
|
|
|
68
69
|
# ML-Dash
|
|
69
70
|
|
|
70
|
-
A simple and flexible SDK for ML experiment
|
|
71
|
+
A simple and flexible SDK for ML experiment tracking and data storage.
|
|
71
72
|
|
|
72
73
|
## Features
|
|
73
74
|
|
|
74
|
-
- **Three Usage Styles**:
|
|
75
|
+
- **Three Usage Styles**: Pre-configured singleton (dxp), context manager, or direct instantiation
|
|
75
76
|
- **Dual Operation Modes**: Remote (API server) or local (filesystem)
|
|
77
|
+
- **OAuth2 Authentication**: Secure device flow authentication for CLI and SDK
|
|
76
78
|
- **Auto-creation**: Automatically creates namespace, project, and folder hierarchy
|
|
77
79
|
- **Upsert Behavior**: Updates existing experiments or creates new ones
|
|
78
80
|
- **Experiment Lifecycle**: Automatic status tracking (RUNNING, COMPLETED, FAILED, CANCELLED)
|
|
@@ -91,50 +93,73 @@ A simple and flexible SDK for ML experiment metricing and data storage.
|
|
|
91
93
|
<td>
|
|
92
94
|
|
|
93
95
|
```bash
|
|
94
|
-
uv add ml-dash
|
|
96
|
+
uv add ml-dash==0.6.2rc1
|
|
95
97
|
```
|
|
96
98
|
|
|
97
99
|
</td>
|
|
98
100
|
<td>
|
|
99
101
|
|
|
100
102
|
```bash
|
|
101
|
-
pip install ml-dash
|
|
103
|
+
pip install ml-dash==0.6.2rc1
|
|
102
104
|
```
|
|
103
105
|
|
|
104
106
|
</td>
|
|
105
107
|
</tr>
|
|
106
108
|
</table>
|
|
107
109
|
|
|
108
|
-
##
|
|
110
|
+
## Quick Start
|
|
109
111
|
|
|
110
|
-
###
|
|
112
|
+
### 1. Authenticate (Required for Remote Mode)
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
ml-dash login
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
This opens your browser for secure OAuth2 authentication. Your credentials are stored securely in your system keychain.
|
|
119
|
+
|
|
120
|
+
### 2. Start Tracking Experiments
|
|
121
|
+
|
|
122
|
+
#### Option A: Use the Pre-configured Singleton (Easiest)
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
from ml_dash.auto_start import dxp
|
|
126
|
+
|
|
127
|
+
# Start experiment (uploads to https://api.dash.ml by default)
|
|
128
|
+
with dxp.run:
|
|
129
|
+
dxp.log("Training started", level="info")
|
|
130
|
+
dxp.params.set(learning_rate=0.001, batch_size=32)
|
|
131
|
+
|
|
132
|
+
for epoch in range(10):
|
|
133
|
+
loss = train_one_epoch()
|
|
134
|
+
dxp.metrics("train").log(loss=loss, epoch=epoch)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### Option B: Create Your Own Experiment
|
|
111
138
|
|
|
112
139
|
```python
|
|
113
140
|
from ml_dash import Experiment
|
|
114
141
|
|
|
115
142
|
with Experiment(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
)
|
|
121
|
-
print(f"Experiment ID: {experiment.id}")
|
|
143
|
+
prefix="alice/my-project/my-experiment",
|
|
144
|
+
dash_url="https://api.dash.ml", # token auto-loaded
|
|
145
|
+
).run as experiment:
|
|
146
|
+
experiment.log("Hello!", level="info")
|
|
147
|
+
experiment.params.set(lr=0.001)
|
|
122
148
|
```
|
|
123
149
|
|
|
124
|
-
|
|
150
|
+
#### Option C: Local Mode (No Authentication Required)
|
|
125
151
|
|
|
126
152
|
```python
|
|
127
153
|
from ml_dash import Experiment
|
|
128
154
|
|
|
129
155
|
with Experiment(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
pass # Your code here
|
|
156
|
+
project="my-project", prefix="my-experiment", dash_root=".dash"
|
|
157
|
+
).run as experiment:
|
|
158
|
+
experiment.log("Running locally", level="info")
|
|
159
|
+
|
|
135
160
|
```
|
|
136
161
|
|
|
137
|
-
See [
|
|
162
|
+
See [docs/getting-started.md](docs/getting-started.md) for more examples.
|
|
138
163
|
|
|
139
164
|
## Development Setup
|
|
140
165
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
ml_dash/__init__.py,sha256=JjKe0VyPxtWJGZU4a7YGxON6jkcrovDowUGKg9mzmNw,1583
|
|
2
|
+
ml_dash/auth/__init__.py,sha256=3lwM-Y8UBHPU1gFW2JNpmXlPVTnkGudWLKNFFKulQfo,1200
|
|
3
|
+
ml_dash/auth/constants.py,sha256=ku4QzQUMNjvyJwjy7AUdywMAZd59jXSxNHZxDiagUWU,280
|
|
4
|
+
ml_dash/auth/device_flow.py,sha256=DQOdPNlZCuU1umZOA_A6WXdRM3zWphnyo9IntToBl_A,7921
|
|
5
|
+
ml_dash/auth/device_secret.py,sha256=qUsz6M9S1GEIukvmz57eJEp57srSx74O4MU9mZEeDlE,1158
|
|
6
|
+
ml_dash/auth/exceptions.py,sha256=IeBwUzoaTyFtPwd4quFOIel49inIzuabe_ChEeEXEWI,725
|
|
7
|
+
ml_dash/auth/token_storage.py,sha256=L18W8J7D1LlCDlY3Q32l0RXeNh0o7YVDQeeGYm64Dgw,8163
|
|
8
|
+
ml_dash/auto_start.py,sha256=62_eZG1qBNAwu6AXduTSo4niCVZ27X52ZK0WEr3yS1o,1812
|
|
9
|
+
ml_dash/cli.py,sha256=BoaBulcqnM88XuV5BQEx_-AQAXJAYSJqpvnHggEII_I,2559
|
|
10
|
+
ml_dash/cli_commands/__init__.py,sha256=bjAmV7MsW-bhtW_4SnLJ0Cfkt9h82vMDC8ebW1Ke8KE,38
|
|
11
|
+
ml_dash/cli_commands/api.py,sha256=tgHB3pvSYv36_RbxsAtiEfjtivnIn7NjdHq0AL2QQGo,4335
|
|
12
|
+
ml_dash/cli_commands/download.py,sha256=ZnRhaDLIM28Dri4-YHLU1fBwC9AAvNoiuut3pkdBhJU,27422
|
|
13
|
+
ml_dash/cli_commands/list.py,sha256=9dK0UbNTvysGM5c8Mkb5XfFNkhMIhtjIP1v9BFo-5ew,15400
|
|
14
|
+
ml_dash/cli_commands/login.py,sha256=zX-urtUrfzg2qOGtKNYQgj6UloN9kzj4zEO6h_xwuNs,6782
|
|
15
|
+
ml_dash/cli_commands/logout.py,sha256=lTUUNyRXqvo61qNkCd4KBrPUujDAHnNqsHkU6bHie0U,1332
|
|
16
|
+
ml_dash/cli_commands/profile.py,sha256=BaSM6BAN3YM4tw95iKV_nypKZxwsB3PoAAejQcYip5E,2351
|
|
17
|
+
ml_dash/cli_commands/upload.py,sha256=Ch1pWC4rU3M9P52Ne_gAlkE7yz4WZKgZlRBG3hpy9_4,44059
|
|
18
|
+
ml_dash/client.py,sha256=TEk-Vt323wBpDPPwX-fFFS7IVF7hS3aBDxn9lewbpls,31455
|
|
19
|
+
ml_dash/config.py,sha256=oz2xvoBh2X_xUXWr92cPD5nFxXMT5LxVNypv5B5O0fA,3116
|
|
20
|
+
ml_dash/experiment.py,sha256=DsEl4q7EksfBApOjd1q4ncX6COSC7Hv2bCeFPbeELC8,39218
|
|
21
|
+
ml_dash/files.py,sha256=bihUHKpdknytLGuGgkcvhh585nziZrvYjiHl6rHnoD0,49227
|
|
22
|
+
ml_dash/log.py,sha256=E-DLg0vejVLLEyShJ_r0LneDMI0XU7XTH5iKWYJe9jI,5298
|
|
23
|
+
ml_dash/metric.py,sha256=ghD1jnuv6dbjV1Jlo7q0mx9UEzpdto2Y1-oDWrSfg04,25809
|
|
24
|
+
ml_dash/params.py,sha256=pPFvknJAJX5uhckzjO1r-HNnKbQFFKDISFmOXNET5eY,9046
|
|
25
|
+
ml_dash/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
ml_dash/remote_auto_start.py,sha256=5fvQDHv1CWEKFb6WAa5_uyEInwV_SvotXjOO_6i6ZKE,1687
|
|
27
|
+
ml_dash/run.py,sha256=C0quTLZXKDAlwstzEiJ75CWCX1pwYrmtMZH3z-ia6Pw,6310
|
|
28
|
+
ml_dash/snowflake.py,sha256=14rEpRU5YltsmmmZW0EMUy_hdv5S5ME9gWVtmdmwfiU,4917
|
|
29
|
+
ml_dash/storage.py,sha256=9mG42pvvWkkracbjCr9Xdp890Nm4XSxL7_JeFbBe28g,33020
|
|
30
|
+
ml_dash-0.6.2.dist-info/WHEEL,sha256=z-mOpxbJHqy3cq6SvUThBZdaLGFZzdZPtgWLcP2NKjQ,79
|
|
31
|
+
ml_dash-0.6.2.dist-info/entry_points.txt,sha256=dYs2EHX1uRNO7AQGNnVaJJpgiy0Z9q7tiy4fHSyaf3Q,46
|
|
32
|
+
ml_dash-0.6.2.dist-info/METADATA,sha256=HvCgXKi2TsP0-K1J5KECG64Nuzs_OnbUCVLBFMT6w2Y,7207
|
|
33
|
+
ml_dash-0.6.2.dist-info/RECORD,,
|
ml_dash-0.6.0.dist-info/RECORD
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
ml_dash/__init__.py,sha256=eO526uX_T_Y5tySTVw2ZN-QCR46120gYPD6DWhenMUw,2228
|
|
2
|
-
ml_dash/auth/__init__.py,sha256=3lwM-Y8UBHPU1gFW2JNpmXlPVTnkGudWLKNFFKulQfo,1200
|
|
3
|
-
ml_dash/auth/constants.py,sha256=ku4QzQUMNjvyJwjy7AUdywMAZd59jXSxNHZxDiagUWU,280
|
|
4
|
-
ml_dash/auth/device_flow.py,sha256=DQOdPNlZCuU1umZOA_A6WXdRM3zWphnyo9IntToBl_A,7921
|
|
5
|
-
ml_dash/auth/device_secret.py,sha256=qUsz6M9S1GEIukvmz57eJEp57srSx74O4MU9mZEeDlE,1158
|
|
6
|
-
ml_dash/auth/exceptions.py,sha256=IeBwUzoaTyFtPwd4quFOIel49inIzuabe_ChEeEXEWI,725
|
|
7
|
-
ml_dash/auth/token_storage.py,sha256=vuWDAhQPdjUwNTJAdoWP-EUDudIJVTNdWkWnvgS4Qgc,8217
|
|
8
|
-
ml_dash/auto_start.py,sha256=u1dSzP7S_ZL2w81Yvft_fS6JysU2z6pfNyMvjtYQe-8,1820
|
|
9
|
-
ml_dash/cli.py,sha256=r55bNa3T_guMnSl2dwsj0WF9Ln-vOGsBmbrooMKYhRI,2103
|
|
10
|
-
ml_dash/cli_commands/__init__.py,sha256=bjAmV7MsW-bhtW_4SnLJ0Cfkt9h82vMDC8ebW1Ke8KE,38
|
|
11
|
-
ml_dash/cli_commands/download.py,sha256=jOUx2aejA_Hz4ttuL8ubFY3pI4j39fYtdn-sZyrYCrE,28674
|
|
12
|
-
ml_dash/cli_commands/list.py,sha256=0G0XMJ8cH8_k37IEjwq20t6obT-tKxZPTxr221UF8KA,9757
|
|
13
|
-
ml_dash/cli_commands/login.py,sha256=0v8UPj_Y-uYmNDfc8Zv6xddFJPx3_VgVNeESYO700b0,7173
|
|
14
|
-
ml_dash/cli_commands/logout.py,sha256=lTUUNyRXqvo61qNkCd4KBrPUujDAHnNqsHkU6bHie0U,1332
|
|
15
|
-
ml_dash/cli_commands/upload.py,sha256=4O9iZOQDOiiBBsoDG1Cr8BqeBGSZZSfc3i-5FERjFtU,46439
|
|
16
|
-
ml_dash/client.py,sha256=TBIPY0ti31hcyWHGW8SexBUNcSzo-aJ4hLlZtMViPD8,28902
|
|
17
|
-
ml_dash/config.py,sha256=aNqX_HT2Yo-BzjFexQ97gQK9xOiBUwuJJ65dKM3oJjs,3481
|
|
18
|
-
ml_dash/experiment.py,sha256=qEwPq8U6YXw-bmEBOZX0yL-4Y8TTZYuFsKtMarq8duA,33913
|
|
19
|
-
ml_dash/files.py,sha256=p9s15eqgGAf-6bZntXkd_YicS6GjSGzEKAN_YoMuAXQ,26541
|
|
20
|
-
ml_dash/log.py,sha256=0yXaNnFwYeBI3tRLHX3kkqWRpg0MbSGwmgjnOfsElCk,5350
|
|
21
|
-
ml_dash/metric.py,sha256=vz3YwO1YBWZ797l7TzD5m9WwNBBXlrATyRRzSti8QS0,17194
|
|
22
|
-
ml_dash/params.py,sha256=S4wHQfv0EQRXRrFbKLuEKTQOLp5eqnALcIk1pZNroBM,9124
|
|
23
|
-
ml_dash/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
ml_dash/remote_auto_start.py,sha256=BAsTu41e9SboeSCn9N2vn4ftoYeUVklcAcNM45HJVGA,1610
|
|
25
|
-
ml_dash/storage.py,sha256=OTMMHSLYHk_MBfo8PyMQBHD8AZ2TFTS8KSMhVhpG-hg,39493
|
|
26
|
-
ml_dash-0.6.0.dist-info/WHEEL,sha256=z-mOpxbJHqy3cq6SvUThBZdaLGFZzdZPtgWLcP2NKjQ,79
|
|
27
|
-
ml_dash-0.6.0.dist-info/entry_points.txt,sha256=dYs2EHX1uRNO7AQGNnVaJJpgiy0Z9q7tiy4fHSyaf3Q,46
|
|
28
|
-
ml_dash-0.6.0.dist-info/METADATA,sha256=UCpvpQfajtLaLvsRQQ84Ci0uNXgsRnNnyIE6NxAASL0,6328
|
|
29
|
-
ml_dash-0.6.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|