Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Interrogation d'entités de lignée
Amazon génère SageMaker automatiquement des graphiques des entités de lignage lorsque vous les utilisez. Vous pouvez interroger ces données pour répondre à diverses questions. Vous pouvez interroger vos entités de lignée pour :
Récupérer tous les jeux de données impliqués dans la création d'un modèle.
Récupérer toutes les tâches impliquées dans la création d'un point de terminaison.
Récupérer tous les modèles utilisant un jeu de données.
Récupérer tous les points de terminaison qui utilisent un modèle.
Récupérer les points de terminaison qui proviennent d'un jeu de données précis.
Récupérer l'exécution du pipeline qui a créé une tâche d'entraînement.
Récupérer les relations entre les entités à des fins d'enquête, de gouvernance et de reproductibilité.
Récupérer tous les essais en aval qui utilisent l'artefact.
Récupérer tous les essais en amont qui utilisent l'artefact.
Récupérer la liste des artefacts qui utilisent l'URI S3 fourni.
Récupérer les artefacts en amont qui utilisent l'artefact de jeu de données.
Récupérer les artefacts en aval qui utilisent l'artefact de jeu de données.
Récupérer les jeux de données qui utilisent l'artefact d'image.
Récupérer les actions qui utilisent le contexte.
Récupérer les tâches de traitement qui utilisent le point de terminaison.
Récupérer les tâches de transformation qui utilisent le point de terminaison.
Récupérer les composants d'essai qui utilisent le point de terminaison.
Récupérez le ARN pour l'exécution du pipeline associé au groupe de packages de modèles.
Récupérer tous les artefacts qui utilisent l'action.
Récupérer tous les jeux de données en amont qui utilisent l'action d'approbation de package de modèles.
Récupérer le package de modèles à partir de l'action d'approbation de package de modèles
Récupérer les contextes de point de terminaison en aval qui utilisent le point de terminaison.
Récupérez le ARN pour l'exécution du pipeline associé au composant d'essai.
Récupérer les jeux de données qui utilisent le composant d'essai.
Récupérer les modèles qui utilisent le composant d'essai.
Explorer votre lignée à des fins de visualisation.
Limites
L'interrogation de lignée n'est pas disponible dans les régions suivantes :
Afrique (Le Cap) – af-south
Asie-Pacifique (Jakarta) : ap-southeast-3
Asie-Pacifique (Osaka) – ap-northeast-3
Europe (Milan) – eu-south-1
Europe (Espagne) — eu-south-2
Israël (Tel Aviv) – il-central-1
La profondeur maximale des relations à découvrir est actuellement limitée à 10.
Le filtrage se limite aux propriétés suivantes : date de dernière modification, date de création, type et type d'entité de lignée.
Démarrer avec l'interrogation des entités de lignage
Il existe deux méthodes simples pour démarrer :
Amazon SageMaker SDK pour Python
qui a défini de nombreux cas d'utilisation courants.
Les exemples suivants montrent comment utiliser le LineageQuery
et pour créer des requêtes LineageFilter
APIs afin de répondre à des questions sur le graphe de lignage et d'extraire des relations entre entités pour quelques cas d'utilisation.
Exemple Utilisation du LineageQuery
API pour rechercher des associations d'entités
from sagemaker.lineage.context import Context, EndpointContext from sagemaker.lineage.action import Action from sagemaker.lineage.association import Association from sagemaker.lineage.artifact import Artifact, ModelArtifact, DatasetArtifact from sagemaker.lineage.query import ( LineageQuery, LineageFilter, LineageSourceEnum, LineageEntityEnum, LineageQueryDirectionEnum, ) # Find the endpoint context and model artifact that should be used for the lineage queries. contexts = Context.list(source_uri=endpoint_arn) context_name = list(contexts)[0].context_name endpoint_context = EndpointContext.load(context_name=context_name)
Exemple Rechercher tous les jeux de données associés à un point de terminaison
# Define the LineageFilter to look for entities of type `ARTIFACT` and the source of type `DATASET`. query_filter = LineageFilter( entities=[LineageEntityEnum.ARTIFACT], sources=[LineageSourceEnum.DATASET] ) # Providing this `LineageFilter` to the `LineageQuery` constructs a query that traverses through the given context `endpoint_context` # and find all datasets. query_result = LineageQuery(sagemaker_session).query( start_arns=[endpoint_context.context_arn], query_filter=query_filter, direction=LineageQueryDirectionEnum.ASCENDANTS, include_edges=False, ) # Parse through the query results to get the lineage objects corresponding to the datasets dataset_artifacts = [] for vertex in query_result.vertices: dataset_artifacts.append(vertex.to_lineage_object().source.source_uri) pp.pprint(dataset_artifacts)
Exemple Rechercher les modèles associés à un point de terminaison
# Define the LineageFilter to look for entities of type `ARTIFACT` and the source of type `MODEL`. query_filter = LineageFilter( entities=[LineageEntityEnum.ARTIFACT], sources=[LineageSourceEnum.MODEL] ) # Providing this `LineageFilter` to the `LineageQuery` constructs a query that traverses through the given context `endpoint_context` # and find all datasets. query_result = LineageQuery(sagemaker_session).query( start_arns=[endpoint_context.context_arn], query_filter=query_filter, direction=LineageQueryDirectionEnum.ASCENDANTS, include_edges=False, ) # Parse through the query results to get the lineage objects corresponding to the model model_artifacts = [] for vertex in query_result.vertices: model_artifacts.append(vertex.to_lineage_object().source.source_uri) # The results of the `LineageQuery` API call return the ARN of the model deployed to the endpoint along with # the S3 URI to the model.tar.gz file associated with the model pp.pprint(model_artifacts)
Exemple Rechercher les composants d'évaluation associés au point de terminaison
# Define the LineageFilter to look for entities of type `TRIAL_COMPONENT` and the source of type `TRAINING_JOB`. query_filter = LineageFilter( entities=[LineageEntityEnum.TRIAL_COMPONENT], sources=[LineageSourceEnum.TRAINING_JOB], ) # Providing this `LineageFilter` to the `LineageQuery` constructs a query that traverses through the given context `endpoint_context` # and find all datasets. query_result = LineageQuery(sagemaker_session).query( start_arns=[endpoint_context.context_arn], query_filter=query_filter, direction=LineageQueryDirectionEnum.ASCENDANTS, include_edges=False, ) # Parse through the query results to get the ARNs of the training jobs associated with this Endpoint trial_components = [] for vertex in query_result.vertices: trial_components.append(vertex.arn) pp.pprint(trial_components)
Exemple Changer le point focal de la lignée
La LineageQuery
peut être modifiée pour avoir différents start_arns
qui modifient le point focal de la lignée. En outre, le LineageFilter
peut prendre plusieurs sources et entités pour étendre la portée de la requête.
Dans l'exemple suivant, nous utilisons le modèle comme point focal de la lignée et nous recherchons les points de terminaison et les jeux de données qui lui sont associés.
# Get the ModelArtifact model_artifact_summary = list(Artifact.list(source_uri=model_package_arn))[0] model_artifact = ModelArtifact.load(artifact_arn=model_artifact_summary.artifact_arn) query_filter = LineageFilter( entities=[LineageEntityEnum.ARTIFACT], sources=[LineageSourceEnum.ENDPOINT, LineageSourceEnum.DATASET], ) query_result = LineageQuery(sagemaker_session).query( start_arns=[model_artifact.artifact_arn], # Model is the starting artifact query_filter=query_filter, # Find all the entities that descend from the model, i.e. the endpoint direction=LineageQueryDirectionEnum.DESCENDANTS, include_edges=False, ) associations = [] for vertex in query_result.vertices: associations.append(vertex.to_lineage_object().source.source_uri) query_result = LineageQuery(sagemaker_session).query( start_arns=[model_artifact.artifact_arn], # Model is the starting artifact query_filter=query_filter, # Find all the entities that ascend from the model, i.e. the datasets direction=LineageQueryDirectionEnum.ASCENDANTS, include_edges=False, ) for vertex in query_result.vertices: associations.append(vertex.to_lineage_object().source.source_uri) pp.pprint(associations)
Exemple Utilisation de LineageQueryDirectionEnum.BOTH
pour rechercher des relations ascendantes et descendantes
Lorsque la direction est définie sur BOTH
, la requête parcourt le graphique pour trouver les relations ascendantes et descendantes. Cette traversée s'effectue non seulement à partir du nœud de départ, mais aussi de chaque nœud visité. Par exemple, si une tâche d'entraînement est exécutée deux fois et que les deux modèles générés par la tâche d'entraînement sont déployés sur des points de terminaison, le résultat de la requête avec la direction définie sur BOTH
affiche les deux points de terminaison. En effet, la même image est utilisée pour l'entraînement et le déploiement du modèle. Étant donné que l'image est commune au modèle, le start_arn
et les deux points de terminaison apparaissent dans le résultat de la requête.
query_filter = LineageFilter( entities=[LineageEntityEnum.ARTIFACT], sources=[LineageSourceEnum.ENDPOINT, LineageSourceEnum.DATASET], ) query_result = LineageQuery(sagemaker_session).query( start_arns=[model_artifact.artifact_arn], # Model is the starting artifact query_filter=query_filter, # This specifies that the query should look for associations both ascending and descending for the start direction=LineageQueryDirectionEnum.BOTH, include_edges=False, ) associations = [] for vertex in query_result.vertices: associations.append(vertex.to_lineage_object().source.source_uri) pp.pprint(associations)
Exemple Directions dans LineageQuery
- ASCENDANTS
versus DESCENDANTS
Pour comprendre la direction dans le graphique de lignée, prenez le graphique de relations d'entité suivant - Jeu de données -> Tâche d'entraînement -> Modèle -> Point de terminaison
Le point de terminaison est un descendant du modèle, et le modèle est un descendant du jeu de données. De même, le modèle est un ascendant du point de terminaison. Le paramètre direction
peut être utilisé pour spécifier si la requête doit renvoyer des entités descendantes ou ascendantes de l'entité dans start_arns
. Si le start_arns
contient un modèle et que la direction est DESCENDANTS
, la requête renvoie le point de terminaison. Si la direction est ASCENDANTS
, la requête renvoie le jeu de données.
# In this example, we'll look at the impact of specifying the direction as ASCENDANT or DESCENDANT in a `LineageQuery`. query_filter = LineageFilter( entities=[LineageEntityEnum.ARTIFACT], sources=[ LineageSourceEnum.ENDPOINT, LineageSourceEnum.MODEL, LineageSourceEnum.DATASET, LineageSourceEnum.TRAINING_JOB, ], ) query_result = LineageQuery(sagemaker_session).query( start_arns=[model_artifact.artifact_arn], query_filter=query_filter, direction=LineageQueryDirectionEnum.ASCENDANTS, include_edges=False, ) ascendant_artifacts = [] # The lineage entity returned for the Training Job is a TrialComponent which can't be converted to a # lineage object using the method `to_lineage_object()` so we extract the TrialComponent ARN. for vertex in query_result.vertices: try: ascendant_artifacts.append(vertex.to_lineage_object().source.source_uri) except: ascendant_artifacts.append(vertex.arn) print("Ascendant artifacts : ") pp.pprint(ascendant_artifacts) query_result = LineageQuery(sagemaker_session).query( start_arns=[model_artifact.artifact_arn], query_filter=query_filter, direction=LineageQueryDirectionEnum.DESCENDANTS, include_edges=False, ) descendant_artifacts = [] for vertex in query_result.vertices: try: descendant_artifacts.append(vertex.to_lineage_object().source.source_uri) except: # Handling TrialComponents. descendant_artifacts.append(vertex.arn) print("Descendant artifacts : ") pp.pprint(descendant_artifacts)
Exemple SDKfonctions d'assistance pour faciliter les requêtes de lignage
Les classes EndpointContext
ModelArtifact
, et DatasetArtifact
ont des fonctions d'assistance qui sont des enveloppes LineageQuery
API pour faciliter l'exploitation de certaines requêtes de lignage. L'exemple suivant montre comment utiliser cette fonction d'assistance.
# Find all the datasets associated with this endpoint datasets = [] dataset_artifacts = endpoint_context.dataset_artifacts() for dataset in dataset_artifacts: datasets.append(dataset.source.source_uri) print("Datasets : ", datasets) # Find the training jobs associated with the endpoint training_job_artifacts = endpoint_context.training_job_arns() training_jobs = [] for training_job in training_job_artifacts: training_jobs.append(training_job) print("Training Jobs : ", training_jobs) # Get the ARN for the pipeline execution associated with this endpoint (if any) pipeline_executions = endpoint_context.pipeline_execution_arn() if pipeline_executions: for pipeline in pipelines_executions: print(pipeline) # Here we use the `ModelArtifact` class to find all the datasets and endpoints associated with the model dataset_artifacts = model_artifact.dataset_artifacts() endpoint_contexts = model_artifact.endpoint_contexts() datasets = [dataset.source.source_uri for dataset in dataset_artifacts] endpoints = [endpoint.source.source_uri for endpoint in endpoint_contexts] print("Datasets associated with this model : ") pp.pprint(datasets) print("Endpoints associated with this model : ") pp.pprint(endpoints) # Here we use the `DatasetArtifact` class to find all the endpoints hosting models that were trained with a particular dataset # Find the artifact associated with the dataset dataset_artifact_arn = list(Artifact.list(source_uri=training_data))[0].artifact_arn dataset_artifact = DatasetArtifact.load(artifact_arn=dataset_artifact_arn) # Find the endpoints that used this training dataset endpoint_contexts = dataset_artifact.endpoint_contexts() endpoints = [endpoint.source.source_uri for endpoint in endpoint_contexts] print("Endpoints associated with the training dataset {}".format(training_data)) pp.pprint(endpoints)
Exemple Obtention d'une visualisation de graphique de lignée
Une classe d'assistance Visualizer
est fournie dans l'exemple de bloc-notes visualizer.pyStartArns
s'affiche. La visualisation montre StartArns
les relations avec les autres entités de lignage renvoyées lors de l'query_lineage
APIaction.
# Graph APIs # Here we use the boto3 `query_lineage` API to generate the query response to plot. from visualizer import Visualizer query_response = sm_client.query_lineage( StartArns=[endpoint_context.context_arn], Direction="Ascendants", IncludeEdges=True ) viz = Visualizer() viz.render(query_response, "Endpoint") query_response = sm_client.query_lineage( StartArns=[model_artifact.artifact_arn], Direction="Ascendants", IncludeEdges=True ) viz.render(query_response, "Model")