Capture des données - Amazon SageMaker

Capture des données

Pour utiliser Model Monitor, configurez votre point de terminaison d'inférence en temps réel afin de capturer les données à partir des requêtes et des réponses, et stockez les données capturées dans Amazon S3. Model Monitor compare les métriques de ces données à une référence que vous créez pour le modèle. Pour de plus amples informations sur la création d'une référence, veuillez consulter Création d'une référence.

Note

Pour éviter tout impact sur les requêtes d'inférence, Data Capture cesse de capturer les requêtes à des niveaux élevés d'utilisation du disque. Nous vous recommandons de maintenir l'utilisation du disque en dessous de 75 % pour que la capture des données continue de capturer les requêtes.

Pour configurer la capture de données

  1. Tout d'abord, configurez les compartiments Amazon S3 que Model Monitor utilise pour stocker les données capturées.

    import boto3 import re import json from sagemaker import get_execution_role, session region= boto3.Session().region_name role = get_execution_role() print("RoleArn: {}".format(role)) # You can use a different bucket, but make sure the role you chose for this notebook # has s3:PutObject permissions. This is the bucket into which the data is captured bucket = session.Session(boto3.Session()).default_bucket() print("Demo Bucket: {}".format(bucket)) prefix = 'sagemaker/DEMO-ModelMonitor' data_capture_prefix = '{}/datacapture'.format(prefix) s3_capture_upload_path = 's3://{}/{}'.format(bucket, data_capture_prefix) reports_prefix = '{}/reports'.format(prefix) s3_report_path = 's3://{}/{}'.format(bucket,reports_prefix) code_prefix = '{}/code'.format(prefix) s3_code_preprocessor_uri = 's3://{}/{}/{}'.format(bucket,code_prefix, 'preprocessor.py') s3_code_postprocessor_uri = 's3://{}/{}/{}'.format(bucket,code_prefix, 'postprocessor.py') print("Capture path: {}".format(s3_capture_upload_path)) print("Report path: {}".format(s3_report_path)) print("Preproc Code path: {}".format(s3_code_preprocessor_uri)) print("Postproc Code path: {}".format(s3_code_postprocessor_uri))
  2. Ensuite, chargez le modèle pré-entraîné dans Amazon S3.

    model_file = open("model/your-prediction-model.tar.gz", 'rb') s3_key = os.path.join(prefix, 'your-prediction-model.tar.gz') boto3.Session().resource('s3').Bucket(bucket).Object(s3_key).upload_fileobj(model_file)
  3. Configurez les données que vous voulez capturer en les configurant dans une structure DataCaptureConfig. Avec cette configuration, vous pouvez capturer la charge utile de la demande et/ou la charge utile de la réponse.

    from sagemaker.model_monitor import DataCaptureConfig endpoint_name = 'your-pred-model-monitor-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("EndpointName={}".format(endpoint_name)) data_capture_config=DataCaptureConfig( enable_capture = True, sampling_percentage=100, destination_s3_uri=s3_capture_upload_path)
  4. Activez la capture des données en transmettant la configuration que vous avez créée à l'étape précédente lors du déploiement du modèle.

    predictor = model.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge', endpoint_name=endpoint_name data_capture_config=data_capture_config)
  5. Appelez le point de terminaison pour lui envoyer des données et obtenir des inférences en temps réel. Comme vous avez activé la capture des données aux étapes précédentes, la charge utile des requêtes et réponses et certaines métadonnées supplémentaires sont enregistrées à l'emplacement Amazon S3 que vous avez spécifié dans DataCaptureConfig.

    from sagemaker.predictor import RealTimePredictor import time predictor = RealTimePredictor(endpoint=endpoint_name,content_type='text/csv') # get a subset of test data for a quick test !head -120 test_data/test-dataset-input-cols.csv > test_data/test_sample.csv print("Sending test traffic to the endpoint {}. \nPlease wait...".format(endpoint_name)) with open('test_data/test_sample.csv', 'r') as f: for row in f: payload = row.rstrip('\n') response = predictor.predict(data=payload) time.sleep(0.5) print("Done!")
  6. Affichez les données capturées en répertoriant les fichiers de capture de données stockés dans Amazon S3. Il peut y avoir différents fichiers de différentes périodes, organisés en fonction de l'heure de l'invocation.

    s3_client = boto3.Session().client('s3') current_endpoint_capture_prefix = '{}/{}'.format(data_capture_prefix, endpoint_name) result = s3_client.list_objects(Bucket=bucket, Prefix=current_endpoint_capture_prefix) capture_files = [capture_file.get("Key") for capture_file in result.get('Contents')] print("Found Capture Files:") print("\n ".join(capture_files))

    Le format du chemin d'accès Amazon S3 est le suivant :

    s3://{destination-bucket-prefix}/{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename.jsonl