Skip to content

Commit

Permalink
feat(models): add method to show model usage (#381)
Browse files Browse the repository at this point in the history
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": "admin@paperspace.com"
                    },
                    "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": "admin@paperspace.com"
                    },
                    "deployment": {
                        "name": "test-model",
                        "id": "c195321d-0e7d-4ba9-b747-933764bc9347"
                    },
                    "cluster": {
                        "fqdn": "local.paperspacegradient.com",
                        "name": "dev-cluster"
                    },
                    "endpointUrl": "dc195321d0e7d4ba9b747933764bc9347.local.paperspacegradient.com"
                }
            ]
        }
    }
]
```
  • Loading branch information
cwetherill-ps committed Jan 21, 2022
1 parent 10b4034 commit 0daa2c7
Show file tree
Hide file tree
Showing 2 changed files with 208 additions and 25 deletions.
169 changes: 144 additions & 25 deletions gradient/api_sdk/repositories/__init__.py
@@ -1,30 +1,149 @@
from .clusters import ListClusters
from .datasets import ListDatasets, CreateDataset, DeleteDataset, GetDataset, GetDatasetRef, UpdateDataset
from .dataset_tags import ListDatasetTags, GetDatasetTag, SetDatasetTag, DeleteDatasetTag
from .dataset_versions import ListDatasetVersions, CreateDatasetVersion, DeleteDatasetVersion, \
GenerateDatasetVersionPreSignedS3Urls, GetDatasetVersion, UpdateDatasetVersion
from .datasets import (
ListDatasets,
CreateDataset,
DeleteDataset,
GetDataset,
GetDatasetRef,
UpdateDataset
)
from .dataset_tags import (
ListDatasetTags,
GetDatasetTag,
SetDatasetTag,
DeleteDatasetTag
)
from .dataset_versions import (
ListDatasetVersions,
CreateDatasetVersion,
DeleteDatasetVersion,
GenerateDatasetVersionPreSignedS3Urls,
GetDatasetVersion,
UpdateDatasetVersion
)

from .deployments import ListDeployments, CreateDeployment, StartDeployment, StopDeployment, DeleteDeployment, \
UpdateDeployment, GetDeployment, GetDeploymentMetrics, ListDeploymentMetrics, StreamDeploymentMetrics, ListDeploymentLogs

from .gradient_deployments import create_deployment, list_deployments, delete_deployment, get_deployment, update_deployment
from .deployments import (
ListDeployments,
CreateDeployment,
StartDeployment,
StopDeployment,
DeleteDeployment,
UpdateDeployment,
GetDeployment,
GetDeploymentMetrics,
ListDeploymentMetrics,
StreamDeploymentMetrics,
ListDeploymentLogs
)

from .experiments import ListExperiments, GetExperiment, ListExperimentLogs, StartExperiment, StopExperiment, \
CreateSingleNodeExperiment, CreateMultiNodeExperiment, RunSingleNodeExperiment, RunMultiNodeExperiment, \
CreateMpiMultiNodeExperiment, RunMpiMultiNodeExperiment, DeleteExperiment, GetExperimentMetrics, ListExperimentMetrics, \
from .gradient_deployments import (
create_deployment,
list_deployments,
delete_deployment,
get_deployment,
update_deployment
)
from .experiments import (
ListExperiments,
GetExperiment,
ListExperimentLogs,
StartExperiment,
StopExperiment,
CreateSingleNodeExperiment,
CreateMultiNodeExperiment,
RunSingleNodeExperiment,
RunMultiNodeExperiment,
CreateMpiMultiNodeExperiment,
RunMpiMultiNodeExperiment,
DeleteExperiment,
GetExperimentMetrics,
ListExperimentMetrics,
StreamExperimentMetrics
from .hyperparameter import CreateHyperparameterJob, CreateAndStartHyperparameterJob, ListHyperparameterJobs, \
GetHyperparameterTuningJob, StartHyperparameterTuningJob
from .jobs import ListJobs, ListResources, ListJobArtifacts, ListJobLogs, GetJob, GetJobMetrics, ListJobMetrics, StreamJobMetrics
)
from .hyperparameter import (
CreateHyperparameterJob,
CreateAndStartHyperparameterJob,
ListHyperparameterJobs,
GetHyperparameterTuningJob,
StartHyperparameterTuningJob
)
from .jobs import (
ListJobs,
ListResources,
ListJobArtifacts,
ListJobLogs,
GetJob,
GetJobMetrics,
ListJobMetrics,
StreamJobMetrics
)
from .machine_types import ListMachineTypes
from .machines import CheckMachineAvailability, CreateMachine, CreateResource, StartMachine, StopMachine, \
RestartMachine, GetMachine, UpdateMachine, GetMachineUtilization
from .models import DeleteModel, ListModels, UploadModel, GetModel, ListModelFiles, CreateModel
from .notebooks import CreateNotebook, DeleteNotebook, GetNotebook, ListNotebooks, GetNotebookMetrics, ListNotebookMetrics, \
StreamNotebookMetrics, StopNotebook, StartNotebook, ForkNotebook, ListNotebookArtifacts, ListNotebookLogs
from .projects import CreateProject, ListProjects, DeleteProject, GetProject
from .secrets import ListSecrets, SetSecret, DeleteSecret, EphemeralSecret
from .storage_providers import ListStorageProviders, CreateStorageProvider, DeleteStorageProvider, \
GetStorageProvider, UpdateStorageProvider
from .tensorboards import CreateTensorboard, GetTensorboard, ListTensorboards, UpdateTensorboard, DeleteTensorboard
from .workflows import ListWorkflows, GetWorkflow, ListWorkflowRuns, GetWorkflowRun, CreateWorkflow, CreateWorkflowRun, ListWorkflowLogs
from .machines import (
CheckMachineAvailability,
CreateMachine,
CreateResource,
StartMachine,
StopMachine,
RestartMachine,
GetMachine,
UpdateMachine,
GetMachineUtilization
)
from .models import (
DeleteModel,
ListModels,
UploadModel,
GetModel,
ListModelFiles,
CreateModel,
get_model_usage
)
from .notebooks import (
CreateNotebook,
DeleteNotebook,
GetNotebook,
ListNotebooks,
GetNotebookMetrics,
ListNotebookMetrics,
StreamNotebookMetrics,
StopNotebook,
StartNotebook,
ForkNotebook,
ListNotebookArtifacts,
ListNotebookLogs
)
from .projects import (
CreateProject,
ListProjects,
DeleteProject,
GetProject
)
from .secrets import (
ListSecrets,
SetSecret,
DeleteSecret,
EphemeralSecret
)
from .storage_providers import (
ListStorageProviders,
CreateStorageProvider,
DeleteStorageProvider,
GetStorageProvider,
UpdateStorageProvider
)
from .tensorboards import (
CreateTensorboard,
GetTensorboard,
ListTensorboards,
UpdateTensorboard,
DeleteTensorboard
)
from .workflows import (
ListWorkflows,
GetWorkflow,
ListWorkflowRuns,
GetWorkflowRun,
CreateWorkflow,
CreateWorkflowRun,
ListWorkflowLogs
)
64 changes: 64 additions & 0 deletions gradient/api_sdk/repositories/models.py
Expand Up @@ -2,6 +2,8 @@
from .. import serializers, s3_uploader
from ..repositories.common import ListResources, DeleteResource, CreateResource, GetResource
from ..sdk_exceptions import ResourceFetchingError
from gql import gql
from ..graphql import graphql_client


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

return json_


def get_model_usage(num_models=100, num_deployments=100, cluster_id=None,
project_id=None, model_name=None, api_key=None):
client = graphql_client(api_key)
query = gql(
"""
query modelDeployments(
$firstModels: Int,
$firstSpecs: Int,
$clusterId: String,
$projectId: String,
$name: String
) {
modelDeployments(
name: $name,
projectId: $projectId,
first: $firstModels
) {
nodes {
id
name
dtCreated
deploymentSpecs(
first: $firstSpecs,
clusterId: $clusterId
) {
nodes {
id
dtCreated
externalApplied
actor {
fullName
email
}
deployment {
name
id
}
cluster {
fqdn
name
}
endpointUrl
}
}
}
}
}
"""
)
params = {
'firstModels': num_models,
'firstSpecs': num_deployments,
'clusterId': cluster_id,
'projectId': project_id,
'name': model_name,
}
return client.execute(
query,
variable_values=params
)['modelDeployments']['nodes']

0 comments on commit 0daa2c7

Please sign in to comment.