Skip to content

Commit 0daa2c7

Browse files
feat(models): add method to show model usage (#381)
This inmplements a function in the Gradient Python package to access current and historic deployments of one or more models. A user can optionally filter on the basis of: - Model name; - Model project; and - Deployment cluster and can specify the max number of models (generally if no model name is specified) and number of recent deployments of each model to return in the result set. By way of example: ``` >>> import json >>> from gradient import models >>> >>> >>> deployed_models = models.get_model_usage( ... model_name='some-model', ... projectId='asdf1234', ... clusterId='4321fdsa', ... num_models=10, ... num_deployments=100, ... api_key=os.getenv('PS_API_KEY') ... ) >>> print( ... json.dumps(deployed_models, indent=4) >>> ) [ { "id": 1, "name": "sample-model", "dtCreated": "2022-01-14T15:12:48.092Z", "deploymentSpecs": { "nodes": [ { "id": "697dd23c-51d2-476e-8638-543e3c8a7cb9", "dtCreated": "2022-01-14T15:13:54.087Z", "externalApplied": "2022-01-20T00:07:45.848Z", "actor": { "fullName": null, "email": "[email protected]" }, "deployment": { "name": "test-model", "id": "c195321d-0e7d-4ba9-b747-933764bc9347" }, "cluster": { "fqdn": "local.paperspacegradient.com", "name": "dev-cluster" }, "endpointUrl": "dc195321d0e7d4ba9b747933764bc9347.local.paperspacegradient.com" }, { "id": "eb23e623-a6d3-44a8-a6bd-1820e2670d29", "dtCreated": "2022-01-19T19:29:52.829Z", "externalApplied": "2022-01-20T00:07:45.848Z", "actor": { "fullName": null, "email": "[email protected]" }, "deployment": { "name": "test-model", "id": "c195321d-0e7d-4ba9-b747-933764bc9347" }, "cluster": { "fqdn": "local.paperspacegradient.com", "name": "dev-cluster" }, "endpointUrl": "dc195321d0e7d4ba9b747933764bc9347.local.paperspacegradient.com" } ] } } ] ```
1 parent 10b4034 commit 0daa2c7

File tree

2 files changed

+208
-25
lines changed

2 files changed

+208
-25
lines changed
Lines changed: 144 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,149 @@
11
from .clusters import ListClusters
2-
from .datasets import ListDatasets, CreateDataset, DeleteDataset, GetDataset, GetDatasetRef, UpdateDataset
3-
from .dataset_tags import ListDatasetTags, GetDatasetTag, SetDatasetTag, DeleteDatasetTag
4-
from .dataset_versions import ListDatasetVersions, CreateDatasetVersion, DeleteDatasetVersion, \
5-
GenerateDatasetVersionPreSignedS3Urls, GetDatasetVersion, UpdateDatasetVersion
2+
from .datasets import (
3+
ListDatasets,
4+
CreateDataset,
5+
DeleteDataset,
6+
GetDataset,
7+
GetDatasetRef,
8+
UpdateDataset
9+
)
10+
from .dataset_tags import (
11+
ListDatasetTags,
12+
GetDatasetTag,
13+
SetDatasetTag,
14+
DeleteDatasetTag
15+
)
16+
from .dataset_versions import (
17+
ListDatasetVersions,
18+
CreateDatasetVersion,
19+
DeleteDatasetVersion,
20+
GenerateDatasetVersionPreSignedS3Urls,
21+
GetDatasetVersion,
22+
UpdateDatasetVersion
23+
)
624

7-
from .deployments import ListDeployments, CreateDeployment, StartDeployment, StopDeployment, DeleteDeployment, \
8-
UpdateDeployment, GetDeployment, GetDeploymentMetrics, ListDeploymentMetrics, StreamDeploymentMetrics, ListDeploymentLogs
9-
10-
from .gradient_deployments import create_deployment, list_deployments, delete_deployment, get_deployment, update_deployment
25+
from .deployments import (
26+
ListDeployments,
27+
CreateDeployment,
28+
StartDeployment,
29+
StopDeployment,
30+
DeleteDeployment,
31+
UpdateDeployment,
32+
GetDeployment,
33+
GetDeploymentMetrics,
34+
ListDeploymentMetrics,
35+
StreamDeploymentMetrics,
36+
ListDeploymentLogs
37+
)
1138

12-
from .experiments import ListExperiments, GetExperiment, ListExperimentLogs, StartExperiment, StopExperiment, \
13-
CreateSingleNodeExperiment, CreateMultiNodeExperiment, RunSingleNodeExperiment, RunMultiNodeExperiment, \
14-
CreateMpiMultiNodeExperiment, RunMpiMultiNodeExperiment, DeleteExperiment, GetExperimentMetrics, ListExperimentMetrics, \
39+
from .gradient_deployments import (
40+
create_deployment,
41+
list_deployments,
42+
delete_deployment,
43+
get_deployment,
44+
update_deployment
45+
)
46+
from .experiments import (
47+
ListExperiments,
48+
GetExperiment,
49+
ListExperimentLogs,
50+
StartExperiment,
51+
StopExperiment,
52+
CreateSingleNodeExperiment,
53+
CreateMultiNodeExperiment,
54+
RunSingleNodeExperiment,
55+
RunMultiNodeExperiment,
56+
CreateMpiMultiNodeExperiment,
57+
RunMpiMultiNodeExperiment,
58+
DeleteExperiment,
59+
GetExperimentMetrics,
60+
ListExperimentMetrics,
1561
StreamExperimentMetrics
16-
from .hyperparameter import CreateHyperparameterJob, CreateAndStartHyperparameterJob, ListHyperparameterJobs, \
17-
GetHyperparameterTuningJob, StartHyperparameterTuningJob
18-
from .jobs import ListJobs, ListResources, ListJobArtifacts, ListJobLogs, GetJob, GetJobMetrics, ListJobMetrics, StreamJobMetrics
62+
)
63+
from .hyperparameter import (
64+
CreateHyperparameterJob,
65+
CreateAndStartHyperparameterJob,
66+
ListHyperparameterJobs,
67+
GetHyperparameterTuningJob,
68+
StartHyperparameterTuningJob
69+
)
70+
from .jobs import (
71+
ListJobs,
72+
ListResources,
73+
ListJobArtifacts,
74+
ListJobLogs,
75+
GetJob,
76+
GetJobMetrics,
77+
ListJobMetrics,
78+
StreamJobMetrics
79+
)
1980
from .machine_types import ListMachineTypes
20-
from .machines import CheckMachineAvailability, CreateMachine, CreateResource, StartMachine, StopMachine, \
21-
RestartMachine, GetMachine, UpdateMachine, GetMachineUtilization
22-
from .models import DeleteModel, ListModels, UploadModel, GetModel, ListModelFiles, CreateModel
23-
from .notebooks import CreateNotebook, DeleteNotebook, GetNotebook, ListNotebooks, GetNotebookMetrics, ListNotebookMetrics, \
24-
StreamNotebookMetrics, StopNotebook, StartNotebook, ForkNotebook, ListNotebookArtifacts, ListNotebookLogs
25-
from .projects import CreateProject, ListProjects, DeleteProject, GetProject
26-
from .secrets import ListSecrets, SetSecret, DeleteSecret, EphemeralSecret
27-
from .storage_providers import ListStorageProviders, CreateStorageProvider, DeleteStorageProvider, \
28-
GetStorageProvider, UpdateStorageProvider
29-
from .tensorboards import CreateTensorboard, GetTensorboard, ListTensorboards, UpdateTensorboard, DeleteTensorboard
30-
from .workflows import ListWorkflows, GetWorkflow, ListWorkflowRuns, GetWorkflowRun, CreateWorkflow, CreateWorkflowRun, ListWorkflowLogs
81+
from .machines import (
82+
CheckMachineAvailability,
83+
CreateMachine,
84+
CreateResource,
85+
StartMachine,
86+
StopMachine,
87+
RestartMachine,
88+
GetMachine,
89+
UpdateMachine,
90+
GetMachineUtilization
91+
)
92+
from .models import (
93+
DeleteModel,
94+
ListModels,
95+
UploadModel,
96+
GetModel,
97+
ListModelFiles,
98+
CreateModel,
99+
get_model_usage
100+
)
101+
from .notebooks import (
102+
CreateNotebook,
103+
DeleteNotebook,
104+
GetNotebook,
105+
ListNotebooks,
106+
GetNotebookMetrics,
107+
ListNotebookMetrics,
108+
StreamNotebookMetrics,
109+
StopNotebook,
110+
StartNotebook,
111+
ForkNotebook,
112+
ListNotebookArtifacts,
113+
ListNotebookLogs
114+
)
115+
from .projects import (
116+
CreateProject,
117+
ListProjects,
118+
DeleteProject,
119+
GetProject
120+
)
121+
from .secrets import (
122+
ListSecrets,
123+
SetSecret,
124+
DeleteSecret,
125+
EphemeralSecret
126+
)
127+
from .storage_providers import (
128+
ListStorageProviders,
129+
CreateStorageProvider,
130+
DeleteStorageProvider,
131+
GetStorageProvider,
132+
UpdateStorageProvider
133+
)
134+
from .tensorboards import (
135+
CreateTensorboard,
136+
GetTensorboard,
137+
ListTensorboards,
138+
UpdateTensorboard,
139+
DeleteTensorboard
140+
)
141+
from .workflows import (
142+
ListWorkflows,
143+
GetWorkflow,
144+
ListWorkflowRuns,
145+
GetWorkflowRun,
146+
CreateWorkflow,
147+
CreateWorkflowRun,
148+
ListWorkflowLogs
149+
)

gradient/api_sdk/repositories/models.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from .. import serializers, s3_uploader
33
from ..repositories.common import ListResources, DeleteResource, CreateResource, GetResource
44
from ..sdk_exceptions import ResourceFetchingError
5+
from gql import gql
6+
from ..graphql import graphql_client
57

68

79
class ParseModelDictMixin(object):
@@ -160,3 +162,65 @@ def _get_request_json(self, kwargs):
160162
json_["size"] = True
161163

162164
return json_
165+
166+
167+
def get_model_usage(num_models=100, num_deployments=100, cluster_id=None,
168+
project_id=None, model_name=None, api_key=None):
169+
client = graphql_client(api_key)
170+
query = gql(
171+
"""
172+
query modelDeployments(
173+
$firstModels: Int,
174+
$firstSpecs: Int,
175+
$clusterId: String,
176+
$projectId: String,
177+
$name: String
178+
) {
179+
modelDeployments(
180+
name: $name,
181+
projectId: $projectId,
182+
first: $firstModels
183+
) {
184+
nodes {
185+
id
186+
name
187+
dtCreated
188+
deploymentSpecs(
189+
first: $firstSpecs,
190+
clusterId: $clusterId
191+
) {
192+
nodes {
193+
id
194+
dtCreated
195+
externalApplied
196+
actor {
197+
fullName
198+
email
199+
}
200+
deployment {
201+
name
202+
id
203+
}
204+
cluster {
205+
fqdn
206+
name
207+
}
208+
endpointUrl
209+
}
210+
}
211+
}
212+
}
213+
}
214+
"""
215+
)
216+
params = {
217+
'firstModels': num_models,
218+
'firstSpecs': num_deployments,
219+
'clusterId': cluster_id,
220+
'projectId': project_id,
221+
'name': model_name,
222+
}
223+
return client.execute(
224+
query,
225+
variable_values=params
226+
)['modelDeployments']['nodes']

0 commit comments

Comments
 (0)