Activer le traçage et collecter des commentaires pour un déploiement de flux (préversion)
Remarque
Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service, nous la déconseillons dans des charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.
Après avoir déployé une application d’IA générative en production, les développeurs d’application cherchent à améliorer leur compréhension et à optimiser les performances. Les données de trace de chaque requête, les métriques agrégées et les commentaires des utilisateurs jouent des rôles critiques.
Dans cet article, vous allez apprendre à activer le traçage, et à collecter les métriques agrégées ainsi que les commentaires des utilisateurs pendant la période d’inférence de votre déploiement de flux.
Prérequis
- Azure CLI et l’extension Azure Machine Learning pour Azure CLI. Pour plus d’informations, consultez Installer, configurer et utiliser l’interface CLI (v2).
- Un espace de travail Azure Machine Learning. Si vous n’en avez pas, procédez comme suit dans le Guide de démarrage rapide : Créer des ressources d’espace de travail pour en créer un.
- Une ressource Application Insights. En règle générale, un espace de travail Machine Learning comporte une ressource Application Insights liée par défaut. Si vous souhaitez en utiliser une nouvelle, vous pouvez créer une ressource Application Insights.
- Découvrez comment générer et tester un flux dans le flux d’invite.
- Connaître les bases des points de terminaison en ligne managés. Les points de terminaison en ligne managés fonctionnent de manière scalable et complètement managée avec des machines équipées de processeurs et de GPU puissants dans Azure, lequel vous libère des contraintes de configuration et de gestion de l’infrastructure de déploiement sous-jacente. Pour plus d’informations sur les points de terminaison en ligne managés, consultez Points de terminaison et déploiements en ligne pour l’inférence en temps réel.
- Les contrôles d’accès en fonction du rôle Azure (Azure RBAC) sont utilisés pour accorder l’accès aux opérations dans Azure Machine Learning. Pour que vous puissiez effectuer les étapes décrites dans cet article, votre compte d’utilisateur doit avoir le rôle propriétaire ou contributeur sur l’espace de travail Azure Machine Learning ou un rôle personnalisé autorisant « Microsoft.MachineLearningServices/workspaces/onlineEndpoints/ ». Si vous utilisez Studio pour créer/gérer des points de terminaison/déploiements en ligne, vous avez besoin d’une autre autorisation (« Microsoft.Resources/deployments/write ») de la part du propriétaire du groupe de ressources. Pour plus d’informations, consultez Gérer l’accès à un espace de travail Azure Machine Learning.
Déployer un flux pour l’inférence en temps réel
Une fois que vous avez testé correctement votre flux, qu’il s’agisse d’un flux flexible ou d’un flux DAG, vous pouvez le déployer en production. Dans cet article, nous utilisons l’exemple de déploiement d’un flux vers des points de terminaison en ligne gérés Azure Machine Learning. Pour les flux flexibles, vous devez préparer le fichier flow.flex.yaml
au lieu du fichier flow.dag.yaml
.
Vous pouvez également effectuer le déploiement sur d’autres plateformes, par exemple un conteneur Docker, un cluster Kubernetes, etc..
Remarque
Vous devez utiliser la dernière image de base de flux de prompt pour déployer le flux, afin qu’il prenne en charge l’API de traçage et de collecte de commentaires.
Activer le traçage et collecter des métriques système pour votre déploiement
Si vous utilisez l’IU de Studio pour le déploiement, vous pouvez activer les diagnostics Application Insights dans Paramètres avancés -> Étape de déploiement de l’Assistant Déploiement, afin que les données de traçage et les métriques système soient collectées et envoyées à la ressource Application Insights liée à votre espace de travail.
Si vous utilisez le kit SDK ou l’interface CLI, vous pouvez ajouter une propriété app_insights_enabled: true
dans le fichier yaml de déploiement pour activer la collecte et l’envoi de données à la ressource Application Insights liée à l’espace de travail. Vous pouvez également spécifier d’autres ressources Application Insights en utilisant une variable d’environnement APPLICATIONINSIGHTS_CONNECTION_STRING
dans le fichier yaml de déploiement, comme indiqué ci-dessous. Vous trouverez la chaîne de connexion de votre ressource Application Insights dans la page Vue d’ensemble du portail Azure.
# below is the property in deployment yaml
# app_insights_enabled: true
# you can also use the environment variable
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Remarque
Si vous définissez uniquement app_insights_enabled: true
, mais que votre espace de travail ne comporte pas de ressource Application Insights liée, votre déploiement n’échoue pas, mais aucune donnée n’est collectée.
Si vous spécifiez à la fois app_insights_enabled: true
et la variable d’environnement ci-dessus, les données et les métriques de traçage sont envoyées à la ressource Application Insights liée à l’espace de travail. Ainsi, si vous souhaitez spécifier une autre ressource Application Insights, il vous suffit de conserver la variable d’environnement.
Si vous effectuez un déploiement sur d’autres plateformes, vous pouvez également utiliser la variable d’environnement APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
pour collecter et envoyer les métriques ainsi que les données de trace à la ressource Application Insights spécifiée.
Voir les données de traçage dans Application Insights
Les traces enregistrent des événements spécifiques ou l’état d’une application durant son exécution. Il peut s’agir de données relatives aux appels de fonction, aux valeurs des variables, aux événements système, etc. Les traces permettent de décomposer les composants d’une application en entrées et sorties discrètes, ce qui est très important pour le débogage et la compréhension d’une application. Pour en savoir plus, consultez les informations relatives aux traces OpenTelemetry. Les données de trace sont conformes à la spécification OpenTelemetry.
Vous pouvez voir la trace détaillée dans la ressource Application Insights spécifiée. La capture d’écran suivante montre un exemple d’événement de flux déployé contenant plusieurs nœuds. Dans Application Insights -> Investiguer -> Recherche de transactions, vous pouvez sélectionner chaque nœud pour voir sa trace détaillée.
Les événements de type Dependency enregistrent les appels provenant de vos déploiements. Le nom de cet événement est le nom du dossier de flux. Découvrez plus en détail la recherche de transactions et les diagnostics de transaction dans Application Insights.
Voir les métriques système dans Application Insights
Nom des métriques | Type | Axes analytiques | Description |
---|---|---|---|
token_consumption | counter | - flux - node - llm_engine - token_type : prompt_tokens : jetons d’entrée d’API LLM ; completion_tokens : jetons de réponse d’API LLM ; total_tokens = prompt_tokens + completion tokens |
Métriques de consommation de jetons OpenAI |
flow_latency | histogram | flow, response_code, streaming, response_type | coût d’exécution de la requête, response_type signifie s’il est complet/premier octet/dernier octet |
flow_request | counter | flow, response_code, exception, streaming | nombre de requêtes de flux |
node_latency | histogram | flow, node, run_status | coût d’exécution de nœud |
node_request | counter | flow, node, exception, run_status | nombre d’exécution de nœud |
rpc_latency | histogram | flow, node, api_call | Coût rpc |
rpc_request | counter | flow, node, api_call, exception | nombre de rpcs |
flow_streaming_response_duration | histogram | flux | Coût d’envoi de réponse de streaming, de l’envoi du premier octet à l’envoi du dernier octet |
Vous trouverez la ressource Application Insights par défaut de l’espace de travail dans la page de vue d’ensemble de votre espace de travail au sein du portail Azure.
Ouvrez Application Insights et sélectionnez Utilisation et coûts estimés dans le volet de navigation gauche. Sélectionnez Métriques personnalisées (préversion), puis Avec les dimensionset enregistrez la modification.
Sélectionnez l’onglet Métriques dans le volet de navigation gauche. Sélectionnez Métriques standard PromptFlow dans Espace de noms des Métriques. Vous pouvez explorer les métriques de la liste déroulante Métrique avec différentes méthodes d’agrégation.
Collecter des commentaires et les envoyer à Application Insights
La mise à disposition du flux de prompt fournit une nouvelle API /feedback
pour aider le client à collecter les commentaires. La charge utile de commentaires peut correspondre à toutes sortes de données au format json. Le flux de prompt permet simplement au client d’enregistrer les données de commentaires dans une étendue de trace. Les données seront enregistrées sur le client cible de l’exportateur de trace configuré. Il prend également en charge la propagation de contexte de trace standard OpenTelemetry, c’est-à-dire qu’il respecte le contexte de trace défini dans l’en-tête de requête, et qu’il l’utilise en tant que contexte d’étendue parent de la requête. Vous pouvez tirer profit de la fonctionnalité de suivi distribué pour corréler la trace des commentaires à sa trace des requêtes de conversation.
L’exemple de code suivant montre comment établir le score d’un flux déployé via un point de terminaison géré pour lequel le traçage est activé, et comment envoyer les commentaires à la même étendue de trace que celle de la requête de scoring. Le flux a les entrées question
et chat_hisotry
, et la sortie answer
. Une fois le scoring du point de terminaison effectué, nous collectons les commentaires pour les envoyer à la ressource Application Insights spécifiée au moment du déploiement du flux. Vous devez renseigner la valeur api_key
, ou modifier le code en fonction de votre cas d’usage.
import urllib.request
import json
import os
import ssl
from opentelemetry import trace, context
from opentelemetry.baggage.propagation import W3CBaggagePropagator
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider
# Initialize your tracer
tracer = trace.get_tracer("my.genai.tracer")
trace.set_tracer_provider(TracerProvider())
# Request data goes here
# The example below assumes JSON formatting which may be updated
# depending on the format your endpoint expects.
# More information can be found here:
# https://docs.microsoft.com/azure/machine-learning/how-to-deploy-advanced-entry-script
data = {
"question": "hello",
"chat_history": []
}
body = str.encode(json.dumps(data))
url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/feedback'
# Replace this with the primary/secondary key, AMLToken, or Microsoft Entra ID token for the endpoint
api_key = ''
if not api_key:
raise Exception("A key should be provided to invoke the endpoint")
# The azureml-model-deployment header will force the request to go to a specific deployment.
# Remove this header to have the request observe the endpoint traffic rules
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key), 'azureml-model-deployment': 'basic-chat-deployment' }
try:
with tracer.start_as_current_span('genai-request') as span:
ctx = context.get_current()
TraceContextTextMapPropagator().inject(headers, ctx)
print(headers)
print(ctx)
req = urllib.request.Request(url, body, headers)
response = urllib.request.urlopen(req)
result = response.read()
print(result)
# Now you can process the answer and collect feedback
feedback = "thumbdown" # Example feedback (modify as needed)
# Make another request to save the feedback
feedback_body = str.encode(json.dumps(feedback))
feedback_req = urllib.request.Request(feedback_url, feedback_body, headers)
urllib.request.urlopen(feedback_req)
except urllib.error.HTTPError as error:
print("The request failed with status code: " + str(error.code))
# Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure
print(error.info())
print(error.read().decode("utf8", 'ignore'))
Vous pouvez voir la trace de la requête ainsi que les commentaires dans Application Insights.
Utilisation avancée : exporter une trace vers le service collecteur OpenTelemetry personnalisé
Dans certains cas, vous pouvez être amené à exporter les données de trace vers votre service collecteur OTel déployé, activé par le paramètre « OTEL_EXPORTER_OTLP_ENDPOINT ». Utilisez cet exportateur quand vous souhaitez personnaliser votre propre logique de traitement d’étendue, et votre propre cible persistante de trace.