trainml 0.5.0__py3-none-any.whl → 0.5.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.
- tests/integration/test_jobs_integration.py +13 -18
- tests/unit/cli/cloudbender/test_cli_device_unit.py +38 -0
- tests/unit/cloudbender/test_datastores_unit.py +20 -0
- tests/unit/cloudbender/test_device_configs_unit.py +21 -0
- tests/unit/cloudbender/test_devices_unit.py +270 -0
- tests/unit/cloudbender/test_nodes_unit.py +43 -0
- tests/unit/cloudbender/test_providers_unit.py +16 -0
- tests/unit/cloudbender/test_regions_unit.py +18 -0
- tests/unit/cloudbender/test_reservations_unit.py +20 -0
- tests/unit/conftest.py +54 -3
- tests/unit/test_auth.py +1 -1
- trainml/__init__.py +1 -1
- trainml/auth.py +3 -7
- trainml/cli/cloudbender/__init__.py +1 -0
- trainml/cli/cloudbender/device.py +157 -0
- trainml/cli/dataset.py +1 -3
- trainml/cli/job/create.py +3 -3
- trainml/cli/model.py +2 -0
- trainml/cloudbender/cloudbender.py +2 -0
- trainml/cloudbender/datastores.py +8 -0
- trainml/cloudbender/device_configs.py +8 -0
- trainml/cloudbender/devices.py +190 -0
- trainml/cloudbender/nodes.py +22 -0
- trainml/cloudbender/providers.py +8 -0
- trainml/cloudbender/regions.py +8 -0
- trainml/cloudbender/reservations.py +8 -0
- trainml/datasets.py +25 -14
- trainml/gpu_types.py +5 -0
- trainml/models.py +22 -3
- trainml/trainml.py +2 -1
- {trainml-0.5.0.dist-info → trainml-0.5.2.dist-info}/METADATA +1 -1
- {trainml-0.5.0.dist-info → trainml-0.5.2.dist-info}/RECORD +36 -32
- {trainml-0.5.0.dist-info → trainml-0.5.2.dist-info}/LICENSE +0 -0
- {trainml-0.5.0.dist-info → trainml-0.5.2.dist-info}/WHEEL +0 -0
- {trainml-0.5.0.dist-info → trainml-0.5.2.dist-info}/entry_points.txt +0 -0
- {trainml-0.5.0.dist-info → trainml-0.5.2.dist-info}/top_level.txt +0 -0
trainml/datasets.py
CHANGED
|
@@ -37,8 +37,7 @@ class Datasets(object):
|
|
|
37
37
|
source_type=source_type,
|
|
38
38
|
source_uri=source_uri,
|
|
39
39
|
source_options=kwargs.get("source_options"),
|
|
40
|
-
project_uuid=kwargs.get("project_uuid")
|
|
41
|
-
or self.trainml.active_project,
|
|
40
|
+
project_uuid=kwargs.get("project_uuid") or self.trainml.active_project,
|
|
42
41
|
)
|
|
43
42
|
payload = {k: v for k, v in data.items() if v is not None}
|
|
44
43
|
logging.info(f"Creating Dataset {name}")
|
|
@@ -119,11 +118,13 @@ class Dataset:
|
|
|
119
118
|
entity_type="dataset",
|
|
120
119
|
project_uuid=self._dataset.get("project_uuid"),
|
|
121
120
|
cidr=self._dataset.get("vpn").get("cidr"),
|
|
122
|
-
ssh_port=self._dataset.get("vpn")
|
|
123
|
-
.get("
|
|
124
|
-
.
|
|
125
|
-
|
|
126
|
-
output_path=
|
|
121
|
+
ssh_port=self._dataset.get("vpn").get("client").get("ssh_port"),
|
|
122
|
+
input_path=self._dataset.get("source_uri")
|
|
123
|
+
if self.status in ["new", "downloading"]
|
|
124
|
+
else None,
|
|
125
|
+
output_path=self._dataset.get("output_uri")
|
|
126
|
+
if self.status == "exporting"
|
|
127
|
+
else None,
|
|
127
128
|
)
|
|
128
129
|
else:
|
|
129
130
|
details = dict()
|
|
@@ -133,7 +134,7 @@ class Dataset:
|
|
|
133
134
|
if self.status in ["ready", "failed"]:
|
|
134
135
|
raise SpecificationError(
|
|
135
136
|
"status",
|
|
136
|
-
f"You can only connect to
|
|
137
|
+
f"You can only connect to downloading or exporting datasets.",
|
|
137
138
|
)
|
|
138
139
|
if self.status == "new":
|
|
139
140
|
await self.wait_for("downloading")
|
|
@@ -167,15 +168,27 @@ class Dataset:
|
|
|
167
168
|
self.__init__(self.trainml, **resp)
|
|
168
169
|
return self
|
|
169
170
|
|
|
171
|
+
async def export(self, output_type, output_uri, output_options=dict()):
|
|
172
|
+
resp = await self.trainml._query(
|
|
173
|
+
f"/dataset/{self._id}/export",
|
|
174
|
+
"POST",
|
|
175
|
+
dict(project_uuid=self._project_uuid),
|
|
176
|
+
dict(
|
|
177
|
+
output_type=output_type,
|
|
178
|
+
output_uri=output_uri,
|
|
179
|
+
output_options=output_options,
|
|
180
|
+
),
|
|
181
|
+
)
|
|
182
|
+
self.__init__(self.trainml, **resp)
|
|
183
|
+
return self
|
|
184
|
+
|
|
170
185
|
def _get_msg_handler(self, msg_handler):
|
|
171
186
|
def handler(data):
|
|
172
187
|
if data.get("type") == "subscription":
|
|
173
188
|
if msg_handler:
|
|
174
189
|
msg_handler(data)
|
|
175
190
|
else:
|
|
176
|
-
timestamp = datetime.fromtimestamp(
|
|
177
|
-
int(data.get("time")) / 1000
|
|
178
|
-
)
|
|
191
|
+
timestamp = datetime.fromtimestamp(int(data.get("time")) / 1000)
|
|
179
192
|
print(
|
|
180
193
|
f"{timestamp.strftime('%m/%d/%Y, %H:%M:%S')}: {data.get('msg').rstrip()}"
|
|
181
194
|
)
|
|
@@ -212,9 +225,7 @@ class Dataset:
|
|
|
212
225
|
return
|
|
213
226
|
POLL_INTERVAL_MIN = 5
|
|
214
227
|
POLL_INTERVAL_MAX = 60
|
|
215
|
-
POLL_INTERVAL = max(
|
|
216
|
-
min(timeout / 60, POLL_INTERVAL_MAX), POLL_INTERVAL_MIN
|
|
217
|
-
)
|
|
228
|
+
POLL_INTERVAL = max(min(timeout / 60, POLL_INTERVAL_MAX), POLL_INTERVAL_MIN)
|
|
218
229
|
retry_count = math.ceil(timeout / POLL_INTERVAL)
|
|
219
230
|
count = 0
|
|
220
231
|
while count < retry_count:
|
trainml/gpu_types.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
from trainml.exceptions import TrainMLException
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
class GpuTypes(object):
|
|
@@ -6,6 +7,10 @@ class GpuTypes(object):
|
|
|
6
7
|
self.trainml = trainml
|
|
7
8
|
|
|
8
9
|
async def list(self):
|
|
10
|
+
if not self.trainml.project:
|
|
11
|
+
raise TrainMLException(
|
|
12
|
+
"Active project not configured. Run 'trainml configure' to select an active project."
|
|
13
|
+
)
|
|
9
14
|
resp = await self.trainml._query(
|
|
10
15
|
f"/project/{self.trainml.project}/gputypes", "GET"
|
|
11
16
|
)
|
trainml/models.py
CHANGED
|
@@ -115,18 +115,23 @@ class Model:
|
|
|
115
115
|
project_uuid=self._model.get("project_uuid"),
|
|
116
116
|
cidr=self._model.get("vpn").get("cidr"),
|
|
117
117
|
ssh_port=self._model.get("vpn").get("client").get("ssh_port"),
|
|
118
|
-
input_path=self._model.get("source_uri")
|
|
119
|
-
|
|
118
|
+
input_path=self._model.get("source_uri")
|
|
119
|
+
if self.status in ["new", "downloading"]
|
|
120
|
+
else None,
|
|
121
|
+
output_path=self._model.get("output_uri")
|
|
122
|
+
if self.status == "exporting"
|
|
123
|
+
else None,
|
|
120
124
|
)
|
|
121
125
|
else:
|
|
122
126
|
details = dict()
|
|
127
|
+
logging.debug(f"Connection Details: {details}")
|
|
123
128
|
return details
|
|
124
129
|
|
|
125
130
|
async def connect(self):
|
|
126
131
|
if self.status in ["ready", "failed"]:
|
|
127
132
|
raise SpecificationError(
|
|
128
133
|
"status",
|
|
129
|
-
f"You can only connect to
|
|
134
|
+
f"You can only connect to downloading or exporting models.",
|
|
130
135
|
)
|
|
131
136
|
if self.status == "new":
|
|
132
137
|
await self.wait_for("downloading")
|
|
@@ -160,6 +165,20 @@ class Model:
|
|
|
160
165
|
self.__init__(self.trainml, **resp)
|
|
161
166
|
return self
|
|
162
167
|
|
|
168
|
+
async def export(self, output_type, output_uri, output_options=dict()):
|
|
169
|
+
resp = await self.trainml._query(
|
|
170
|
+
f"/model/{self._id}/export",
|
|
171
|
+
"POST",
|
|
172
|
+
dict(project_uuid=self._project_uuid),
|
|
173
|
+
dict(
|
|
174
|
+
output_type=output_type,
|
|
175
|
+
output_uri=output_uri,
|
|
176
|
+
output_options=output_options,
|
|
177
|
+
),
|
|
178
|
+
)
|
|
179
|
+
self.__init__(self.trainml, **resp)
|
|
180
|
+
return self
|
|
181
|
+
|
|
163
182
|
def _get_msg_handler(self, msg_handler):
|
|
164
183
|
def handler(data):
|
|
165
184
|
if data.get("type") == "subscription":
|
trainml/trainml.py
CHANGED
|
@@ -28,7 +28,7 @@ async def delayed_close(ws):
|
|
|
28
28
|
class TrainML(object):
|
|
29
29
|
def __init__(self, **kwargs):
|
|
30
30
|
self._version = version("trainml")
|
|
31
|
-
CONFIG_DIR = os.path.expanduser(
|
|
31
|
+
CONFIG_DIR = kwargs.get("config_dir") or os.path.expanduser(
|
|
32
32
|
os.environ.get("TRAINML_CONFIG_DIR") or "~/.trainml"
|
|
33
33
|
)
|
|
34
34
|
try:
|
|
@@ -50,6 +50,7 @@ class TrainML(object):
|
|
|
50
50
|
or "trainml.ai"
|
|
51
51
|
)
|
|
52
52
|
self.auth = Auth(
|
|
53
|
+
config_dir=CONFIG_DIR,
|
|
53
54
|
domain_suffix=self.domain_suffix,
|
|
54
55
|
user=kwargs.get("user"),
|
|
55
56
|
key=kwargs.get("key"),
|
|
@@ -8,15 +8,15 @@ tests/integration/test_checkpoints_integration.py,sha256=Ev-GxXiBupOi3KduYoEMhb2
|
|
|
8
8
|
tests/integration/test_datasets_integration.py,sha256=jskX8y9moLvAkZLcQL4iSBrUXSGGuWJ95Vw1JuxxwD8,3424
|
|
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=
|
|
11
|
+
tests/integration/test_jobs_integration.py,sha256=0fMg7kOjQMotEo40XnerAamqhhRbb4pz0ZhmvVrwlb0,23342
|
|
12
12
|
tests/integration/test_models_integration.py,sha256=xJPq_3m0Cf1liMH8e49ON_L3MO5XcPtJIz_MD9plkyU,2848
|
|
13
13
|
tests/integration/test_projects_integration.py,sha256=_tmMRFFBe29WaWWuEy3_0j7SKyJc_60JS99hgJUHTG4,1492
|
|
14
14
|
tests/integration/test_providers_integration.py,sha256=bBVvlSDLCnofSaD36OB21KlinEKeK04gPB--bbHJiP0,1419
|
|
15
15
|
tests/integration/cloudbender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
16
|
tests/integration/cloudbender/test_providers_integration.py,sha256=oV8ydFsosDZ_Z1Dkg2IN-ZhWuIl5e_HkHAORMsOsAJc,1473
|
|
17
17
|
tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
tests/unit/conftest.py,sha256=
|
|
19
|
-
tests/unit/test_auth.py,sha256=
|
|
18
|
+
tests/unit/conftest.py,sha256=AZfqMjB6qXyJdH6cRpxrZK4ciioG6HJTQIIDDkJB2H8,29059
|
|
19
|
+
tests/unit/test_auth.py,sha256=nfhlOCR7rUsn_MaD8QQtBc2v0k8pIxqbzGgRAZK1WGc,858
|
|
20
20
|
tests/unit/test_checkpoints_unit.py,sha256=4Add2DXZCuriSZ0atvOXc8fsEGMaEfPhYmT8Q3UgP5E,16008
|
|
21
21
|
tests/unit/test_connections_unit.py,sha256=FzN2ddQxNpjxzNGUsXhjTk0HnD24wSPelPTL4o_r-Ho,5507
|
|
22
22
|
tests/unit/test_datasets_unit.py,sha256=lVNoBZu4RIiJK26gbUPOUAra_k0YS2GcnjJDnT7UV6Y,15879
|
|
@@ -39,60 +39,64 @@ tests/unit/cli/test_cli_model_unit.py,sha256=fE-CRVg8gbtDlwrKBkf-hc9x7EhFlYeE3jl
|
|
|
39
39
|
tests/unit/cli/test_cli_project_unit.py,sha256=1tEfwXJqnac41bDtvYcN_gpScnb4UY6s5dHfTl-0YoQ,1756
|
|
40
40
|
tests/unit/cli/cloudbender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
41
|
tests/unit/cli/cloudbender/test_cli_datastore_unit.py,sha256=DQWDjqg4viBZRONi00nVzqF9rJ5qKOKRub9pKbTmMWU,1381
|
|
42
|
+
tests/unit/cli/cloudbender/test_cli_device_unit.py,sha256=2BSMyXQ8fOzNKh_-pa_tx7fy_GCdNlGLNvkiA7vuV7s,1342
|
|
42
43
|
tests/unit/cli/cloudbender/test_cli_node_unit.py,sha256=KbK7axJ1L4y4sN7KQRpOVIqphnNpi0aFW4-HlYLtwnI,1316
|
|
43
44
|
tests/unit/cli/cloudbender/test_cli_provider_unit.py,sha256=Rm-tRNPbTTB7ZzkkIpLfDp_pEYfqihjB0ZYk_EPQUfs,781
|
|
44
45
|
tests/unit/cli/cloudbender/test_cli_region_unit.py,sha256=iH5AbrzZ-R2EJ-Bd2HFN7FN2lTpkr3-pCLR59ZVvdQU,1262
|
|
45
46
|
tests/unit/cli/cloudbender/test_cli_reservation_unit.py,sha256=9y4FhcUwti7OzKYaJ23YAgOpx-dBIYj_0i--xaIk8YU,1407
|
|
46
47
|
tests/unit/cloudbender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
-
tests/unit/cloudbender/test_datastores_unit.py,sha256=
|
|
48
|
-
tests/unit/cloudbender/test_device_configs_unit.py,sha256=
|
|
49
|
-
tests/unit/cloudbender/
|
|
50
|
-
tests/unit/cloudbender/
|
|
51
|
-
tests/unit/cloudbender/
|
|
52
|
-
tests/unit/cloudbender/
|
|
53
|
-
|
|
48
|
+
tests/unit/cloudbender/test_datastores_unit.py,sha256=54mPokxhrRjlkBfqpmeA_q-PLml-HUNNit91aQVTpCg,5398
|
|
49
|
+
tests/unit/cloudbender/test_device_configs_unit.py,sha256=lzyCuF7MRoQrtJVTQFL27lqPnRwQFv25htPgJqDuQI8,5714
|
|
50
|
+
tests/unit/cloudbender/test_devices_unit.py,sha256=QBWnlOe1tw_XNA_i-yDHkmpGvtK36f2u1HhoXquoVaE,9103
|
|
51
|
+
tests/unit/cloudbender/test_nodes_unit.py,sha256=BDpfJXCBNNpLt5rhJMk2BVXDQ_4QSmxoVrO_YPs6xBU,6231
|
|
52
|
+
tests/unit/cloudbender/test_providers_unit.py,sha256=OgxifgC1IqLH8DNMKXy1Ne9_7a75ea6kHEOfRSRoQuQ,4373
|
|
53
|
+
tests/unit/cloudbender/test_regions_unit.py,sha256=BbJICLIQmlotpA1UmLD0KTW_H9g2UW0J8ZYzQk1_Xjc,6299
|
|
54
|
+
tests/unit/cloudbender/test_reservations_unit.py,sha256=nWEZ_p9EF2C49nbgL7Dt4NG2Irmyt94ZqJJQDyNfGFI,5624
|
|
55
|
+
trainml/__init__.py,sha256=PACqklwvG2CiPJqOAaEZLAgJyM6nllgNp0p12pqDYUc,432
|
|
54
56
|
trainml/__main__.py,sha256=JgErYkiskih8Y6oRwowALtR-rwQhAAdqOYWjQraRIPI,59
|
|
55
|
-
trainml/auth.py,sha256=
|
|
57
|
+
trainml/auth.py,sha256=gruZv27nhttrCbhcVQTH9kZkF2uMm1E06SwA_2pQAHQ,26565
|
|
56
58
|
trainml/checkpoints.py,sha256=726yaeTHzIPvkQ-BhqmvJ6u0s1Oh732N6UAFbuWEv0Q,8274
|
|
57
59
|
trainml/connections.py,sha256=h-S1NZbOkaXpIlpRStA6q-3eXc_OMlFWOLzF8R9SVG8,20029
|
|
58
|
-
trainml/datasets.py,sha256=
|
|
60
|
+
trainml/datasets.py,sha256=5zhxpmK12aA7iXp4n-8bD00Tie7bi3LU0tPNJKdnZlY,7935
|
|
59
61
|
trainml/environments.py,sha256=OH4o08zXZ7IJ2CiA1rPnys2Fl45r8qvQHfM2mCBRAIc,1507
|
|
60
62
|
trainml/exceptions.py,sha256=hhR78fI8rbU3fWQ-kUsgxOLyYP8D2bQcjLjrskqPG0Q,3724
|
|
61
|
-
trainml/gpu_types.py,sha256=
|
|
63
|
+
trainml/gpu_types.py,sha256=mm-dwfYc02192bmYPIJmzesndyBcoOdkKYBaYZXOUwU,1901
|
|
62
64
|
trainml/jobs.py,sha256=cUuiMvtJSFSupv2jy7fqAvUOkO8FRLfBDe3RuSZUjfE,17807
|
|
63
|
-
trainml/models.py,sha256=
|
|
65
|
+
trainml/models.py,sha256=Lqs3OJMuOZXx8cfGFNC3JZ8nVK6l9_jU1xM1Uw1c5UQ,7750
|
|
64
66
|
trainml/projects.py,sha256=Jk-0xhEgBFPIVMAK_Szxp3B-h-tJJSIEtTF8JWAYzo8,5209
|
|
65
67
|
trainml/providers.py,sha256=97VegYVSeK0BuYv04hfBY_awNBbGz_GR_mdDrknfO-A,1844
|
|
66
|
-
trainml/trainml.py,sha256=
|
|
68
|
+
trainml/trainml.py,sha256=OrDXkJiStA_fTkwl0HX529n-cPCQUTVfdMOX-w0u1Oo,11045
|
|
67
69
|
trainml/cli/__init__.py,sha256=-lA19Djkvqr1I-5PWoONgzHia-Lkg0J45dzt7qbetD8,4338
|
|
68
70
|
trainml/cli/checkpoint.py,sha256=8Rh4bmFwJ4DKlIjHK-FLTeRynABqKCgIUGRtbQhAsX4,7170
|
|
69
71
|
trainml/cli/connection.py,sha256=ELV6bPL30dzttFNxDU7Fb74R8oPL_E70k7TcJEzbwtQ,1700
|
|
70
|
-
trainml/cli/dataset.py,sha256=
|
|
72
|
+
trainml/cli/dataset.py,sha256=Pc00M6t7hGoRzCxznmmkijsWhG4PhIfG7UkrwtwykTY,6871
|
|
71
73
|
trainml/cli/environment.py,sha256=dfm_T8OlCM5M8dLyOQBapJl3eFuVIku2P4JO6V0cYVQ,1019
|
|
72
74
|
trainml/cli/gpu.py,sha256=CMcQyl2qbUgc2bc-gvUVT6X7bq2-sgiCHl3hyZ6kFWM,883
|
|
73
75
|
trainml/cli/job.py,sha256=Xh_542a2rjAjhXyq8WG9ZEySboq_MmFQ7sCqYJYRXcM,4302
|
|
74
|
-
trainml/cli/model.py,sha256=
|
|
76
|
+
trainml/cli/model.py,sha256=hR23E6ttRXcLk-RofkPK6wUXMO7OU6sT6jTEHTmUg9Q,6111
|
|
75
77
|
trainml/cli/project.py,sha256=iar4-Aic6k0O6HWfxB5vJ5EtjS4aAaw2g8wW7H-3Bjk,3522
|
|
76
78
|
trainml/cli/provider.py,sha256=eaklYo0IUOGeyZ0ziZZz6UhOZ50Py4ewaPtWA9UDCqU,1594
|
|
77
|
-
trainml/cli/cloudbender/__init__.py,sha256=
|
|
79
|
+
trainml/cli/cloudbender/__init__.py,sha256=ewat7I7PvHQEW0a8zuky28kuMwtjL-gFQOAQmG0mmJA,534
|
|
78
80
|
trainml/cli/cloudbender/datastore.py,sha256=gJ-comfAq65uiPoONQ35UIDLNVN7QKMf3l_2EcTN6zY,3478
|
|
81
|
+
trainml/cli/cloudbender/device.py,sha256=KGZCFwwvS4tWsWuudrhlvquu_IFtV7LCUAOmCajicic,3453
|
|
79
82
|
trainml/cli/cloudbender/node.py,sha256=iN_WaPCxOhtgDtnSsIFAEMGADG4MKiLjWoez6YSYwZI,3843
|
|
80
83
|
trainml/cli/cloudbender/provider.py,sha256=oFjZWKfFQjNY7OtDu7nUdfv-RTmQc_Huuug963D3BdA,1726
|
|
81
84
|
trainml/cli/cloudbender/region.py,sha256=X6-FYOb-pGpOEazn-NbsYSwa9ergB7FGATFkTe4a8Pk,2892
|
|
82
85
|
trainml/cli/cloudbender/reservation.py,sha256=z2oMYwp-w_Keo1DepKUtuRnwiGz2VscVHDYWEFap1gs,3569
|
|
83
86
|
trainml/cli/job/__init__.py,sha256=ljY-ELeXhXQ7txASbJEKGBom7OXfNyy7sWILz3nxRAE,6545
|
|
84
|
-
trainml/cli/job/create.py,sha256=
|
|
87
|
+
trainml/cli/job/create.py,sha256=QDxHTSpiAjdnmGxUhBASwSNbL1pYqGoCV12UnB-c4N4,34655
|
|
85
88
|
trainml/cloudbender/__init__.py,sha256=iE29obtC0_9f0IhRvHQcG5aY58fVhVYipTakpjAhdss,64
|
|
86
|
-
trainml/cloudbender/cloudbender.py,sha256=
|
|
87
|
-
trainml/cloudbender/datastores.py,sha256=
|
|
88
|
-
trainml/cloudbender/device_configs.py,sha256=
|
|
89
|
-
trainml/cloudbender/
|
|
90
|
-
trainml/cloudbender/
|
|
91
|
-
trainml/cloudbender/
|
|
92
|
-
trainml/cloudbender/
|
|
93
|
-
trainml
|
|
94
|
-
trainml-0.5.
|
|
95
|
-
trainml-0.5.
|
|
96
|
-
trainml-0.5.
|
|
97
|
-
trainml-0.5.
|
|
98
|
-
trainml-0.5.
|
|
89
|
+
trainml/cloudbender/cloudbender.py,sha256=rAc93mtMaa3tWLi-NT4tiqO664MCPkhlGG9oNYSmimQ,634
|
|
90
|
+
trainml/cloudbender/datastores.py,sha256=biVGifedc3r1DcuxsfCQh-f1Tw4HcJMMJfdgHxPfkKM,3506
|
|
91
|
+
trainml/cloudbender/device_configs.py,sha256=DJWiGFaOE4C4xLE1BLDAiEjeL4T00R3FA_pb1xnSOr4,3399
|
|
92
|
+
trainml/cloudbender/devices.py,sha256=QORNmKdLJoqGZmeWXRnivC1JmNBIw-ebvf4bsoem3r8,5660
|
|
93
|
+
trainml/cloudbender/nodes.py,sha256=7HV2VLmxiUcJ-Kc6AAXS3M8C_XO-HKmaVgJpPdVnBQk,4332
|
|
94
|
+
trainml/cloudbender/providers.py,sha256=-gkdiTu6Ah2znUuyyc3ZuRALagW8s1-OgqVjtlvc1AU,2036
|
|
95
|
+
trainml/cloudbender/regions.py,sha256=Aqc_MeLVAeEv21e-lR5u8x1eintqUhZT2DBiQG3AcEE,3570
|
|
96
|
+
trainml/cloudbender/reservations.py,sha256=rOrGXWIUHON4ad2aufEcvK4Yv_Mv3dDoScUtLJE8LWw,3586
|
|
97
|
+
trainml-0.5.2.dist-info/LICENSE,sha256=s0lpBxhSSUEpMavwde-Vb6K_K7xDCTTvSpNznVqVGR0,1069
|
|
98
|
+
trainml-0.5.2.dist-info/METADATA,sha256=RGNR1MBae8_fsnjuBRWPTi0d2fGR7ctzdSP5YOwC2Og,7345
|
|
99
|
+
trainml-0.5.2.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
|
100
|
+
trainml-0.5.2.dist-info/entry_points.txt,sha256=OzBDm2wXby1bSGF02jTVxzRFZLejnbFiLHXhKdW3Bds,63
|
|
101
|
+
trainml-0.5.2.dist-info/top_level.txt,sha256=Y1kLFRWKUW7RG8BX7cvejHF_yW8wBOaRYF1JQHENY4w,23
|
|
102
|
+
trainml-0.5.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|