trainml 0.5.16__py3-none-any.whl → 1.0.0__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.
Files changed (53) hide show
  1. examples/local_storage.py +0 -2
  2. tests/integration/test_checkpoints_integration.py +4 -3
  3. tests/integration/test_datasets_integration.py +5 -3
  4. tests/integration/test_jobs_integration.py +33 -27
  5. tests/integration/test_models_integration.py +7 -3
  6. tests/integration/test_volumes_integration.py +2 -2
  7. tests/unit/cli/test_cli_checkpoint_unit.py +312 -1
  8. tests/unit/cloudbender/test_nodes_unit.py +112 -0
  9. tests/unit/cloudbender/test_providers_unit.py +96 -0
  10. tests/unit/cloudbender/test_regions_unit.py +106 -0
  11. tests/unit/cloudbender/test_services_unit.py +141 -0
  12. tests/unit/conftest.py +23 -10
  13. tests/unit/projects/test_project_data_connectors_unit.py +39 -0
  14. tests/unit/projects/test_project_datastores_unit.py +37 -0
  15. tests/unit/projects/test_project_members_unit.py +46 -0
  16. tests/unit/projects/test_project_services_unit.py +65 -0
  17. tests/unit/projects/test_projects_unit.py +17 -1
  18. tests/unit/test_auth_unit.py +17 -2
  19. tests/unit/test_checkpoints_unit.py +256 -71
  20. tests/unit/test_datasets_unit.py +218 -68
  21. tests/unit/test_exceptions.py +133 -0
  22. tests/unit/test_gpu_types_unit.py +11 -1
  23. tests/unit/test_jobs_unit.py +1014 -95
  24. tests/unit/test_main_unit.py +20 -0
  25. tests/unit/test_models_unit.py +218 -70
  26. tests/unit/test_trainml_unit.py +627 -3
  27. tests/unit/test_volumes_unit.py +211 -70
  28. tests/unit/utils/__init__.py +1 -0
  29. tests/unit/utils/test_transfer_unit.py +4260 -0
  30. trainml/__init__.py +1 -1
  31. trainml/checkpoints.py +56 -57
  32. trainml/cli/__init__.py +6 -3
  33. trainml/cli/checkpoint.py +18 -57
  34. trainml/cli/dataset.py +17 -57
  35. trainml/cli/job/__init__.py +11 -53
  36. trainml/cli/job/create.py +51 -24
  37. trainml/cli/model.py +14 -56
  38. trainml/cli/volume.py +18 -57
  39. trainml/datasets.py +50 -55
  40. trainml/jobs.py +239 -68
  41. trainml/models.py +51 -55
  42. trainml/projects/projects.py +2 -2
  43. trainml/trainml.py +50 -16
  44. trainml/utils/__init__.py +1 -0
  45. trainml/utils/auth.py +641 -0
  46. trainml/utils/transfer.py +587 -0
  47. trainml/volumes.py +48 -53
  48. {trainml-0.5.16.dist-info → trainml-1.0.0.dist-info}/METADATA +3 -3
  49. {trainml-0.5.16.dist-info → trainml-1.0.0.dist-info}/RECORD +53 -47
  50. {trainml-0.5.16.dist-info → trainml-1.0.0.dist-info}/LICENSE +0 -0
  51. {trainml-0.5.16.dist-info → trainml-1.0.0.dist-info}/WHEEL +0 -0
  52. {trainml-0.5.16.dist-info → trainml-1.0.0.dist-info}/entry_points.txt +0 -0
  53. {trainml-0.5.16.dist-info → trainml-1.0.0.dist-info}/top_level.txt +0 -0
trainml/volumes.py CHANGED
@@ -10,7 +10,7 @@ from .exceptions import (
10
10
  SpecificationError,
11
11
  TrainMLException,
12
12
  )
13
- from .connections import Connection
13
+ from trainml.utils.transfer import upload, download
14
14
 
15
15
 
16
16
  class Volumes(object):
@@ -56,7 +56,9 @@ class Volumes(object):
56
56
  return volume
57
57
 
58
58
  async def remove(self, id, **kwargs):
59
- await self.trainml._query(f"/volume/{id}", "DELETE", dict(**kwargs, force=True))
59
+ await self.trainml._query(
60
+ f"/volume/{id}", "DELETE", dict(**kwargs, force=True)
61
+ )
60
62
 
61
63
 
62
64
  class Volume:
@@ -120,56 +122,45 @@ class Volume:
120
122
  )
121
123
  return resp
122
124
 
123
- async def get_connection_utility_url(self):
124
- resp = await self.trainml._query(
125
- f"/volume/{self._id}/download",
126
- "GET",
127
- dict(project_uuid=self._project_uuid),
128
- )
129
- return resp
130
-
131
- def get_connection_details(self):
132
- if self._volume.get("vpn"):
133
- details = dict(
134
- entity_type="volume",
135
- project_uuid=self._volume.get("project_uuid"),
136
- cidr=self._volume.get("vpn").get("cidr"),
137
- ssh_port=self._volume.get("vpn").get("client").get("ssh_port"),
138
- input_path=(
139
- self._volume.get("source_uri")
140
- if self.status in ["new", "downloading"]
141
- else None
142
- ),
143
- output_path=(
144
- self._volume.get("output_uri")
145
- if self.status == "exporting"
146
- else None
147
- ),
148
- )
149
- else:
150
- details = dict()
151
- return details
152
-
153
125
  async def connect(self):
154
- if self.status in ["ready", "failed"]:
155
- raise SpecificationError(
156
- "status",
157
- f"You can only connect to downloading or exporting volumes.",
158
- )
159
- if self.status == "new":
160
- await self.wait_for("downloading")
161
- connection = Connection(
162
- self.trainml, entity_type="volume", id=self.id, entity=self
163
- )
164
- await connection.start()
165
- return connection.status
126
+ if self.status not in ["downloading", "exporting"]:
127
+ if self.status == "new":
128
+ await self.wait_for("downloading")
129
+ else:
130
+ raise SpecificationError(
131
+ "status",
132
+ f"You can only connect to downloading or exporting volumes.",
133
+ )
166
134
 
167
- async def disconnect(self):
168
- connection = Connection(
169
- self.trainml, entity_type="volume", id=self.id, entity=self
170
- )
171
- await connection.stop()
172
- return connection.status
135
+ # Refresh to get latest entity data
136
+ await self.refresh()
137
+
138
+ if self.status == "downloading":
139
+ # Upload task - get auth_token, hostname, and source_uri from volume
140
+ auth_token = self._volume.get("auth_token")
141
+ hostname = self._volume.get("hostname")
142
+ source_uri = self._volume.get("source_uri")
143
+
144
+ if not auth_token or not hostname or not source_uri:
145
+ raise SpecificationError(
146
+ "status",
147
+ f"Volume in downloading status missing required connection properties (auth_token, hostname, source_uri).",
148
+ )
149
+
150
+ await upload(hostname, auth_token, source_uri)
151
+ elif self.status == "exporting":
152
+ # Download task - get auth_token, hostname, and output_uri from volume
153
+ auth_token = self._volume.get("auth_token")
154
+ hostname = self._volume.get("hostname")
155
+ output_uri = self._volume.get("output_uri")
156
+
157
+ if not auth_token or not hostname or not output_uri:
158
+ raise SpecificationError(
159
+ "status",
160
+ f"Volume in exporting status missing required connection properties (auth_token, hostname, output_uri).",
161
+ )
162
+
163
+ await download(hostname, auth_token, output_uri)
173
164
 
174
165
  async def remove(self, force=False):
175
166
  await self.trainml._query(
@@ -208,7 +199,9 @@ class Volume:
208
199
  if msg_handler:
209
200
  msg_handler(data)
210
201
  else:
211
- timestamp = datetime.fromtimestamp(int(data.get("time")) / 1000)
202
+ timestamp = datetime.fromtimestamp(
203
+ int(data.get("time")) / 1000
204
+ )
212
205
  print(
213
206
  f"{timestamp.strftime('%m/%d/%Y, %H:%M:%S')}: {data.get('msg').rstrip()}"
214
207
  )
@@ -237,7 +230,7 @@ class Volume:
237
230
  async def wait_for(self, status, timeout=300):
238
231
  if self.status == status:
239
232
  return
240
- valid_statuses = ["downloading", "ready", "archived"]
233
+ valid_statuses = ["downloading", "ready", "exporting", "archived"]
241
234
  if not status in valid_statuses:
242
235
  raise SpecificationError(
243
236
  "status",
@@ -252,7 +245,9 @@ class Volume:
252
245
  )
253
246
  POLL_INTERVAL_MIN = 5
254
247
  POLL_INTERVAL_MAX = 60
255
- POLL_INTERVAL = max(min(timeout / 60, POLL_INTERVAL_MAX), POLL_INTERVAL_MIN)
248
+ POLL_INTERVAL = max(
249
+ min(timeout / 60, POLL_INTERVAL_MAX), POLL_INTERVAL_MIN
250
+ )
256
251
  retry_count = math.ceil(timeout / POLL_INTERVAL)
257
252
  count = 0
258
253
  while count < retry_count:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: trainml
3
- Version: 0.5.16
3
+ Version: 1.0.0
4
4
  Summary: trainML client SDK and command line utilities
5
5
  Home-page: https://github.com/trainML/trainml-cli
6
6
  Author: trainML
@@ -12,8 +12,8 @@ Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.8
13
13
  Requires-Python: >=3.8
14
14
  Description-Content-Type: text/markdown
15
- Requires-Dist: aiodocker
16
15
  Requires-Dist: aiohttp
16
+ Requires-Dist: aiofiles
17
17
  Requires-Dist: boto3
18
18
  Requires-Dist: Click (>8)
19
19
  Requires-Dist: python-jose[cryptography]
@@ -190,7 +190,7 @@ To list all datasets:
190
190
  trainml dataset list
191
191
  ```
192
192
 
193
- To connect to a job that requires the [connection capability](https://docs.trainml.ai/reference/connection-capability):
193
+ To connect to a job that uses the "local" file transfer method:
194
194
 
195
195
  ```
196
196
  trainml job connect <job ID or name>
@@ -1,16 +1,16 @@
1
1
  examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  examples/create_dataset_and_training_job.py,sha256=Ht6soyBZxt8qA9Fp6zAW2syGEdasvyYp-qvQqE18g6k,1178
3
- examples/local_storage.py,sha256=w8iAeqr5CLOCOkNrqGzEDtybjDGGY7SQUqeE0ibMUrM,1745
3
+ examples/local_storage.py,sha256=vI67RbDjWvXovUv9ahoj81KJIJxXdIU2J4PwT_vCalI,1687
4
4
  examples/training_inference_pipeline.py,sha256=SNr4RFT9y69F9G9tMD8ONUbJmXRFrq1yxynq-FbfEf8,2334
5
5
  tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  tests/integration/conftest.py,sha256=otgb7lZu62_5zAMAsPpr0U2j0h5lApPlDRCiu7ZfDr8,1135
7
- tests/integration/test_checkpoints_integration.py,sha256=RbOHZK-fjj2xvYo1XDa6H0war43Qe_1PbiNFndVY87o,3239
8
- tests/integration/test_datasets_integration.py,sha256=sV88UAMM0IyVVum3zvxfYFbqmR8W4skNWE7jQxbc9ms,3529
7
+ tests/integration/test_checkpoints_integration.py,sha256=pUu8PyBdnpJjHhcFe76SqgOvhNbNAiLk1dFXvKiwPpg,3219
8
+ tests/integration/test_datasets_integration.py,sha256=TfyAMBjLrIVRW-3h0mox69ll7P-_5KQMSyX8toTR2k0,3518
9
9
  tests/integration/test_environments_integration.py,sha256=0IckhJvQhd8j4Ouiu0hMq2b7iA1dbZpZYmknyfWjsFM,1403
10
10
  tests/integration/test_gpu_types_integration.py,sha256=V2OncokZWWVq_l5FSmKEDM4EsWrmpB-zKiVPt-we0aY,1256
11
- tests/integration/test_jobs_integration.py,sha256=_c33hYpub3VoWiFY-dAzTVyB66U3n5yvMxoRR-pskHg,25263
12
- tests/integration/test_models_integration.py,sha256=Kwh8MQ0hOaecclAPq07LBEtAxoZB3rx-yamq0WGtWEA,2906
13
- tests/integration/test_volumes_integration.py,sha256=W5DeuuKCBx3C89LRWc0jhAZjJEREuPiawTLUnqpPrjg,3299
11
+ tests/integration/test_jobs_integration.py,sha256=AQnnoSR75Qqm2XouEUCiVt-6wQbxf8c7iVY9c16lAmQ,25386
12
+ tests/integration/test_models_integration.py,sha256=VAyiXel3E8dAizDALpYYtgazek07y-tIErIhGIS8BXc,2924
13
+ tests/integration/test_volumes_integration.py,sha256=0_D0-mY72_UdZH6clwl-hGwg-yqF8c7mJ70cyyHaBH0,3268
14
14
  tests/integration/cloudbender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  tests/integration/cloudbender/conftest.py,sha256=jBYUHKJioI-WHM-d0Y4lq5pD4LiOPINj6K9kQkgaGWY,777
16
16
  tests/integration/cloudbender/test_providers_integration.py,sha256=mQn2dr4oMpctCVCVs53G5P0Raa0U2uBxEYjZtFFSvTg,1327
@@ -26,21 +26,22 @@ tests/integration/projects/test_projects_members_integration.py,sha256=bEc9AqC-Y
26
26
  tests/integration/projects/test_projects_secrets_integration.py,sha256=dnIT0KiHnXBVP-azfw8MCspTjX7q1ic03rz8XZNijvU,1520
27
27
  tests/integration/projects/test_projects_services_integration.py,sha256=3DpOtVMIdG_Icp4s7JxMT70ZDKC1wMD8imkKjlQChb0,1569
28
28
  tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- tests/unit/conftest.py,sha256=hLfECgT0w4pVZABrpK4UUUeaX1aDzQvj8-erWTGBjHA,35588
30
- tests/unit/test_auth_unit.py,sha256=nfhlOCR7rUsn_MaD8QQtBc2v0k8pIxqbzGgRAZK1WGc,858
31
- tests/unit/test_checkpoints_unit.py,sha256=7bgpEnjkfETgbEHmYApyD_htEWAUVZdposyYVClU3tQ,15965
29
+ tests/unit/conftest.py,sha256=7pLqYwSo2ApqWNtBTj7SQwSGl1R2haxOCoUyUzoFkl8,35592
30
+ tests/unit/test_auth_unit.py,sha256=o6mqzEmqWqvWirMitcHZtn_ScNoQ5jZ20HWrA4OVnPs,1413
31
+ tests/unit/test_checkpoints_unit.py,sha256=dAgzXVmdqUyYrzysWM8GrlEM4xJYOf-IH7WB4v87IC4,21914
32
32
  tests/unit/test_connections_unit.py,sha256=FzN2ddQxNpjxzNGUsXhjTk0HnD24wSPelPTL4o_r-Ho,5507
33
- tests/unit/test_datasets_unit.py,sha256=YL_wU-NiXvPFOK_jM8l9q5cZGztsMkgQorggYaLt6Lc,15910
33
+ tests/unit/test_datasets_unit.py,sha256=xyaHdqDzHetGA2QQ1Vh4j-h_FjC-EC5pb3VTay8sfGY,21135
34
34
  tests/unit/test_environments_unit.py,sha256=1QFGf1xwM0yKCyVHT_Xi0DX8g0Aelr0mcqAImEXJfQU,1882
35
- tests/unit/test_exceptions.py,sha256=3tAok6kAU1QRjN7qTNVYuSGWDg7IEoK__OXFLyzLr7k,906
36
- tests/unit/test_gpu_types_unit.py,sha256=c9ie6YSYT5onBnlmHvHWON9WgQiJ1eO2C-4Tk-UPQHg,2054
37
- tests/unit/test_jobs_unit.py,sha256=bZxN9HUfHCyQCjZCZGn6WFIhu8S5FU1z5ZG9sgH2XEg,26835
38
- tests/unit/test_models_unit.py,sha256=Wg2QsoKqtSFSVf-1tt4sA6OcwMTkSHYPcUBQQOmZCgY,15091
39
- tests/unit/test_trainml_unit.py,sha256=8vAKvFD1xYsx_VY4HFVa0b1MUlMoNApY6TO8r7vI-UQ,1701
40
- tests/unit/test_volumes_unit.py,sha256=DF3kFtkIfuZjwacBRpdmMGlPvV7vxaxUAhlstWj2V4w,15382
35
+ tests/unit/test_exceptions.py,sha256=uAhCXjbzA_m4No49bzbbBoYtvV0TldvxYYJPikcMZH0,5749
36
+ tests/unit/test_gpu_types_unit.py,sha256=KmlmckRb-Faw8vfCl95HAHB51qei9HNElcN16V2gJfg,2526
37
+ tests/unit/test_jobs_unit.py,sha256=byjdqe1TGEPCp5ExU5IS1tcu9eGotf1s2j-lA3FO058,63964
38
+ tests/unit/test_main_unit.py,sha256=aC4-BsdE_bQoR61c0z0ZWOgfCaphSjgVyW1hIZqbSfk,627
39
+ tests/unit/test_models_unit.py,sha256=S-WwRH-I3XE_ie6u-GQtwo95v-X6YeEBl5QFB76dauE,20127
40
+ tests/unit/test_trainml_unit.py,sha256=N8yMUiSzA5A6ewMH-R2y9O5U8LDQwzEnHMLlwl4DjXI,23756
41
+ tests/unit/test_volumes_unit.py,sha256=MH7CddtRFhH3Bn3k_SPVyt0EiramjLAYP0Kn4n4Sz5E,20185
41
42
  tests/unit/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
43
  tests/unit/cli/conftest.py,sha256=w6p_2URicywJKUCtY79tSD_mx8cwJtxHbK_Lu3grOYs,236
43
- tests/unit/cli/test_cli_checkpoint_unit.py,sha256=6gO6PWWxNJiL520mhTFkSUJT7p5-dptLwUgDjPeHNrA,702
44
+ tests/unit/cli/test_cli_checkpoint_unit.py,sha256=2MGaSRmjechSgcgwQUQ1HwasROMnf93icLJRpjUOWek,11830
44
45
  tests/unit/cli/test_cli_datasets_unit.py,sha256=46LSaGHn21r3Xsd8GUDMTXTqU83m4puLY7U5XehkbMk,653
45
46
  tests/unit/cli/test_cli_environment_unit.py,sha256=7FFKFPVa6yqJqujTXD_tsSUDruW5KhlLgShPZTn1Eio,683
46
47
  tests/unit/cli/test_cli_gpu_unit.py,sha256=FIq3tQIDmeD-pvxkhJKMykfnlWcVxho2vRkoCMXgQxE,650
@@ -66,39 +67,41 @@ tests/unit/cloudbender/test_data_connectors_unit.py,sha256=qy97mNAcy_xEkh8obBobH
66
67
  tests/unit/cloudbender/test_datastores_unit.py,sha256=5XUczUrOQ2Zgfb2IbJeEtYxbBWRltEVJ1KIC_UeQjEY,5281
67
68
  tests/unit/cloudbender/test_device_configs_unit.py,sha256=lzyCuF7MRoQrtJVTQFL27lqPnRwQFv25htPgJqDuQI8,5714
68
69
  tests/unit/cloudbender/test_devices_unit.py,sha256=QBWnlOe1tw_XNA_i-yDHkmpGvtK36f2u1HhoXquoVaE,9103
69
- tests/unit/cloudbender/test_nodes_unit.py,sha256=BDpfJXCBNNpLt5rhJMk2BVXDQ_4QSmxoVrO_YPs6xBU,6231
70
- tests/unit/cloudbender/test_providers_unit.py,sha256=OgxifgC1IqLH8DNMKXy1Ne9_7a75ea6kHEOfRSRoQuQ,4373
71
- tests/unit/cloudbender/test_regions_unit.py,sha256=BbJICLIQmlotpA1UmLD0KTW_H9g2UW0J8ZYzQk1_Xjc,6299
72
- tests/unit/cloudbender/test_services_unit.py,sha256=fYJx-W89HD-EYkO32_v33X40VxipUfWQCy13FZO2fcA,5220
70
+ tests/unit/cloudbender/test_nodes_unit.py,sha256=xiXHixKFH0NL1b4sp4oT_0XiLIDifCsglVloZSaWXdc,10928
71
+ tests/unit/cloudbender/test_providers_unit.py,sha256=lDKYGP2pROxb-dtDVPz5Sz55ggnK68hAvsIy6AzL5tw,8588
72
+ tests/unit/cloudbender/test_regions_unit.py,sha256=DJhkBJ-5jHKxCwCAdtV041xzIfjTGrKE77DzEFX-5Nc,10961
73
+ tests/unit/cloudbender/test_services_unit.py,sha256=R4Vu3lq2jT_qQaxwRk449oqAhYrMFbCNp3KS4Pke_Hc,10956
73
74
  tests/unit/projects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
75
  tests/unit/projects/test_project_credentials_unit.py,sha256=ObTaJ7_g0MP5N-0qHWdeYips0in1j_4UkOhXXI2FFwo,3480
75
- tests/unit/projects/test_project_data_connectors_unit.py,sha256=uQPFx6rwYMWZz1IJkns_LdM5gccyHSIaKb3k8zmfSkY,3385
76
- tests/unit/projects/test_project_datastores_unit.py,sha256=kcoaSs54gGqJ9gwPMpP6KHAPRvDJtdJpm49s4aYYt3E,3129
77
- tests/unit/projects/test_project_members_unit.py,sha256=C5N6jzT7zM3eL3_bXEddddBHPFJ3617T0lYluBjMy78,3466
76
+ tests/unit/projects/test_project_data_connectors_unit.py,sha256=BceR9nqcrR_8fHXG2la4h4tMRrn2vUHptFDVhHCx0uU,5004
77
+ tests/unit/projects/test_project_datastores_unit.py,sha256=VRl8ksYJKGa0m-PbBu1YVeBx_lIEry6Cu8mWPivQ_hs,4646
78
+ tests/unit/projects/test_project_members_unit.py,sha256=OJbiRdDzUbhefiM5y5qDhjHzy0eRCwsWuwfV_2NEZsI,5097
78
79
  tests/unit/projects/test_project_secrets_unit.py,sha256=StVlY-ZR3CKxXAt9NL8hTkXUEdgGESH0m6foEPXKE-4,3276
79
- tests/unit/projects/test_project_services_unit.py,sha256=ZK5nz78RAmmaCrAwYBd34t87dh6etU-7snLB_xukZHM,3331
80
- tests/unit/projects/test_projects_unit.py,sha256=8rJ40bJ7YszEsoL6D02Muey-sgRjqFmMoR-R3IiP_Ig,3810
81
- trainml/__init__.py,sha256=5RqjjlFqQb0tJN9ZO6I5XfCCpFj5SC32ic8y55SYHOM,433
80
+ tests/unit/projects/test_project_services_unit.py,sha256=qGYVcs8CPF7DklPUQS3th8rZ42LGfeXiFsV__WTzUYg,6140
81
+ tests/unit/projects/test_projects_unit.py,sha256=baI9-HRRSs4IPd82329zHWRGPYjNlJQ1qG4Hngcu6ds,4409
82
+ tests/unit/utils/__init__.py,sha256=VDy3m4Lfazpey8NMzHWdgcs3T9aaXWuH7pglIjCnZW0,38
83
+ tests/unit/utils/test_transfer_unit.py,sha256=seYUQwQK93kiZjfXEF_3ZN40za3xUTU61oXIyC4na0o,188309
84
+ trainml/__init__.py,sha256=x88iUSASEoNJBZtUWRPzi7pu4ndKVwD073w6FrZztPE,432
82
85
  trainml/__main__.py,sha256=JgErYkiskih8Y6oRwowALtR-rwQhAAdqOYWjQraRIPI,59
83
86
  trainml/auth.py,sha256=clbx5S5prJ3u62aEESdBXIHF_HmreQ-L1ShxcyWQNDs,26565
84
- trainml/checkpoints.py,sha256=Hg3_Si7ohzsv4_8JIjoj9pMRpHNZRWKC5R2gtgmp01s,8790
87
+ trainml/checkpoints.py,sha256=KEDS3xRZa1h5tsT6ZEsS5aanOfC-S_8yaeX52JubO4E,8924
85
88
  trainml/connections.py,sha256=h-S1NZbOkaXpIlpRStA6q-3eXc_OMlFWOLzF8R9SVG8,20029
86
- trainml/datasets.py,sha256=dxTZbK-cnr8eoq48KAx2TZNK1ndcFveTVBtaNK2QyJ0,8600
89
+ trainml/datasets.py,sha256=T3z5iOMfFXYea002iPuVBURl0_Eia5nKLC4bOYmySXI,8690
87
90
  trainml/environments.py,sha256=OH4o08zXZ7IJ2CiA1rPnys2Fl45r8qvQHfM2mCBRAIc,1507
88
91
  trainml/exceptions.py,sha256=Qdof2fKRvbMiwarX1VSw1XJXXJjY71H4U3v05nE7-7g,5468
89
92
  trainml/gpu_types.py,sha256=mm-dwfYc02192bmYPIJmzesndyBcoOdkKYBaYZXOUwU,1901
90
- trainml/jobs.py,sha256=6iaZUz69v6NCSuM0jiSd6j8gElB3JOTuOZuVt2VtAHQ,17947
91
- trainml/models.py,sha256=SpVNt9oZMu70m_3VjO9j_QYexw_z-yRqMhIuJXPs4Vg,8284
92
- trainml/trainml.py,sha256=c-Qxiarv170RaQn0O1wJ6h9RP8e17M15KFg3Rh2ckZc,11902
93
- trainml/volumes.py,sha256=7T0ZN_Xq3qk4yzw7YYxC0rxH3KqlqADd6HOZCkAfCR4,8443
94
- trainml/cli/__init__.py,sha256=Gvj6oGSEtgpb40ACtiVeMD93GM-uy15MG6VlX6rwdwA,4346
95
- trainml/cli/checkpoint.py,sha256=8Rh4bmFwJ4DKlIjHK-FLTeRynABqKCgIUGRtbQhAsX4,7170
93
+ trainml/jobs.py,sha256=bpe8R1mm38TcV0goN0YN7ZlnGOzalfumDnJzNMfEFKs,24928
94
+ trainml/models.py,sha256=PmbTNQKFlPqfRbq93UMpmo5za9qbNFmQdx6BKdejLXA,8339
95
+ trainml/trainml.py,sha256=srQ_r_kxsn3mwDWoaIa-Sh5SA_yhjjysGB6-vWJrXJ4,12724
96
+ trainml/volumes.py,sha256=4Y8wWMymGWKOopRU3yV3NMyTrO2FrDJzdH7dN3hg8yQ,8533
97
+ trainml/cli/__init__.py,sha256=rNiCPZpAeQSbZwceyQv0zmejzILVz5Km2lCiLw4uqjE,4330
98
+ trainml/cli/checkpoint.py,sha256=feiqjeBn4HedBEQgPfENL8AtDeP76t2n-Sdcx9-A30o,6020
96
99
  trainml/cli/connection.py,sha256=ELV6bPL30dzttFNxDU7Fb74R8oPL_E70k7TcJEzbwtQ,1700
97
- trainml/cli/dataset.py,sha256=Pc00M6t7hGoRzCxznmmkijsWhG4PhIfG7UkrwtwykTY,6871
100
+ trainml/cli/dataset.py,sha256=VNKjzYasKTUtVnOI58LW1Gq1VUyZcp7fTeQT9gw-1Xs,5721
98
101
  trainml/cli/environment.py,sha256=dfm_T8OlCM5M8dLyOQBapJl3eFuVIku2P4JO6V0cYVQ,1019
99
102
  trainml/cli/gpu.py,sha256=CMcQyl2qbUgc2bc-gvUVT6X7bq2-sgiCHl3hyZ6kFWM,883
100
- trainml/cli/model.py,sha256=hR23E6ttRXcLk-RofkPK6wUXMO7OU6sT6jTEHTmUg9Q,6111
101
- trainml/cli/volume.py,sha256=kDUss93N78DT-YlLjC6I3jEq5nBWfRNNR5M4tY_F_Zg,6246
103
+ trainml/cli/model.py,sha256=Vb889aUxbwBXaA7ptRlIVMEBD8JaKLdE7qAzl0WZ8hE,4963
104
+ trainml/cli/volume.py,sha256=T0hyBftupyES06YvZcG6LsqMvik8g7VkvotoDLwtAiQ,5135
102
105
  trainml/cli/cloudbender/__init__.py,sha256=tKkL8TzD9nEeRtf1OEYM4XZJWb0-rGMPTmLIdA5G_SY,592
103
106
  trainml/cli/cloudbender/data_connector.py,sha256=q0Hqeh5w00Zkmh61fzO3pNR6EmQfoLQ2DbgJ5ZBx1UM,3606
104
107
  trainml/cli/cloudbender/datastore.py,sha256=j67VUoYZOFWP0F7WK8V7fft8HlT4uqauAu0WH-9Dkes,3323
@@ -107,8 +110,8 @@ trainml/cli/cloudbender/node.py,sha256=iN_WaPCxOhtgDtnSsIFAEMGADG4MKiLjWoez6YSYw
107
110
  trainml/cli/cloudbender/provider.py,sha256=oFjZWKfFQjNY7OtDu7nUdfv-RTmQc_Huuug963D3BdA,1726
108
111
  trainml/cli/cloudbender/region.py,sha256=X6-FYOb-pGpOEazn-NbsYSwa9ergB7FGATFkTe4a8Pk,2892
109
112
  trainml/cli/cloudbender/service.py,sha256=Wh6ycEuECiKL7qpFhc4IyO1rR5lvLtIHk3S475_R6pk,3147
110
- trainml/cli/job/__init__.py,sha256=ljY-ELeXhXQ7txASbJEKGBom7OXfNyy7sWILz3nxRAE,6545
111
- trainml/cli/job/create.py,sha256=MDf53CFua58uJoW4n9FZT1XERJOvAYunEc8tcuO6WQ8,35098
113
+ trainml/cli/job/__init__.py,sha256=_yfyKEkwH6756usqSbmoGOXMv945v0VjQcCAi9fwFzU,5379
114
+ trainml/cli/job/create.py,sha256=DegZYOggCNOSCUzeMTmpSrQRSMlYrUSV4XcElaocf5g,35157
112
115
  trainml/cli/project/__init__.py,sha256=HDcJUbKMHhz4Thrvpst5hnywFqzsv0XWmvfKNRi8zuo,1918
113
116
  trainml/cli/project/credential.py,sha256=gByXKiYf5sJeNRtuXWcercWv8P2IzO5TjT8Ypp4mCR8,3443
114
117
  trainml/cli/project/data_connector.py,sha256=KLDhpNJfwcJkcmyuJRgcVH70Jf73619O9ddYP8vhMvk,1411
@@ -130,12 +133,15 @@ trainml/projects/credentials.py,sha256=6WqHy_-SZZwqE4rULLF8gSyeRVmfsUxqZBuCjBXyx
130
133
  trainml/projects/data_connectors.py,sha256=WZATdUq4vE3x47Ny5HDwPD7lIUx0syjaSE9BmFWNuEg,2216
131
134
  trainml/projects/datastores.py,sha256=qocqD5mGfm2V_wh36CEh3oldnIeJg57ppc6CM129Dkk,2095
132
135
  trainml/projects/members.py,sha256=7fptZ2leIQEUiRtvd3z15RTOJyPafzc5wwQLNxICElQ,2826
133
- trainml/projects/projects.py,sha256=5_6HUg9ZYq8v69QPgC4Yfd_DM0OlZd8tnxh2ahjOgm0,2890
136
+ trainml/projects/projects.py,sha256=0GIKLV1ZTP_LY9bvXKwiDe_I10YkVAhDUlc4AbdDFVM,2840
134
137
  trainml/projects/secrets.py,sha256=TIvBd3rAvd4lF3pm5qR98UslHjldzlnzn_n9yvpmLgg,2160
135
138
  trainml/projects/services.py,sha256=rI-uFmojqOTNLbqBeX6gaSwMkI6LKzRuJthQCH0A2h4,2771
136
- trainml-0.5.16.dist-info/LICENSE,sha256=s0lpBxhSSUEpMavwde-Vb6K_K7xDCTTvSpNznVqVGR0,1069
137
- trainml-0.5.16.dist-info/METADATA,sha256=GDO0AdwQL4W28hICeO73fSvtQLu062dl-qyx3CrMSpY,7346
138
- trainml-0.5.16.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
139
- trainml-0.5.16.dist-info/entry_points.txt,sha256=OzBDm2wXby1bSGF02jTVxzRFZLejnbFiLHXhKdW3Bds,63
140
- trainml-0.5.16.dist-info/top_level.txt,sha256=Y1kLFRWKUW7RG8BX7cvejHF_yW8wBOaRYF1JQHENY4w,23
141
- trainml-0.5.16.dist-info/RECORD,,
139
+ trainml/utils/__init__.py,sha256=YGZaaZGxeZ1Lz8ScoIx_qCDbNHsvmNORJTxC8Bxd_ro,39
140
+ trainml/utils/auth.py,sha256=v28FItj3zj5nrfXBt2GM5Av1y-1Ug5G39ejS5wrWh0U,26573
141
+ trainml/utils/transfer.py,sha256=GA31XbbR-9FOP4rYbm8EMhbEHISlmjSTgHohVP0dU-0,22395
142
+ trainml-1.0.0.dist-info/LICENSE,sha256=s0lpBxhSSUEpMavwde-Vb6K_K7xDCTTvSpNznVqVGR0,1069
143
+ trainml-1.0.0.dist-info/METADATA,sha256=OouGnOpI8T1jqDEHHVGPZjTQXO-SeHpxoQieldQMiWI,7288
144
+ trainml-1.0.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
145
+ trainml-1.0.0.dist-info/entry_points.txt,sha256=OzBDm2wXby1bSGF02jTVxzRFZLejnbFiLHXhKdW3Bds,63
146
+ trainml-1.0.0.dist-info/top_level.txt,sha256=Y1kLFRWKUW7RG8BX7cvejHF_yW8wBOaRYF1JQHENY4w,23
147
+ trainml-1.0.0.dist-info/RECORD,,