Programar trabalhos de monitoramento
O Amazon SageMaker Model Monitor oferece a capacidade de monitorar os dados coletados de seus endpoints em tempo real. Você pode monitorar seus dados em uma programação recorrente ou pode monitorá-los uma vez, imediatamente. Você pode criar uma programação de monitoramento com a API CreateMonitoringSchedule
.
Com uma programação de monitoramento, o SageMaker pode começar a processar trabalhos para analisar os dados coletados durante um determinado período. No trabalho de processamento, o SageMaker compara o conjunto de dados para a análise atual com as estatísticas de linha de base e as restrições fornecidas por você. Em seguida, o SageMaker gera um relatório de violações. Além disso, as métricas do CloudWatch são emitidas para cada atributo em análise.
O SageMaker fornece um contêiner pré-criado para realizar análises em conjuntos de dados tabulares. Se preferir, você pode optar por trazer seu próprio contêiner conforme descrito no tópico Compatibilidade com seus próprios contêineres com o Amazon SageMaker Model Monitor.
Você pode criar uma programação de monitoramento de modelo para seu trabalho de transformação de lotes ou endpoint em tempo real. Use os recursos da linha de base (restrições e estatísticas) para comparar com o tráfego em tempo real ou com as entradas de trabalhos em lotes.
exemplo atribuições de linha de base
No exemplo a seguir, o conjunto de dados de treinamento usado para treinar o modelo foi carregado no Amazon S3. Se ele já tiver no Amazon S3, você poderá apontar diretamente para ele.
# copy over the training dataset to Amazon S3 (if you already have it in Amazon S3, you could reuse it) baseline_prefix = prefix + '/baselining' baseline_data_prefix = baseline_prefix + '/data' baseline_results_prefix = baseline_prefix + '/results' baseline_data_uri = 's3://{}/{}'.format(bucket,baseline_data_prefix) baseline_results_uri = 's3://{}/{}'.format(bucket, baseline_results_prefix) print('Baseline data uri: {}'.format(baseline_data_uri)) print('Baseline results uri: {}'.format(baseline_results_uri))
training_data_file = open("test_data/training-dataset-with-header.csv", 'rb') s3_key = os.path.join(baseline_prefix, 'data', 'training-dataset-with-header.csv') boto3.Session().resource('s3').Bucket(bucket).Object(s3_key).upload_fileobj(training_data_file)
exemplo programação para análises recorrentes
Se você estiver programando um monitor de modelo para o endpoint em tempo real, use as estatísticas e as restrições de linha de base para comparar com o tráfego em tempo real. O trecho de código a seguir mostra o formato geral que você usa para programar um monitor de modelo para um endpoint em tempo real. Este exemplo programa o monitor do modelo para ser executado de hora em hora.
from sagemaker.model_monitor import CronExpressionGenerator from time import gmtime, strftime mon_schedule_name = 'my-model-monitor-schedule-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) my_default_monitor.create_monitoring_schedule( monitor_schedule_name=mon_schedule_name, endpoint_input=EndpointInput( endpoint_name=endpoint_name, destination="/opt/ml/processing/input/endpoint" ), post_analytics_processor_script=s3_code_postprocessor_uri, output_s3_uri=s3_report_path, statistics=my_default_monitor.baseline_statistics(), constraints=my_default_monitor.suggested_constraints(), schedule_cron_expression=CronExpressionGenerator.hourly(), enable_cloudwatch_metrics=True, )
exemplo programação para análise única
Você também pode programar a análise para ser executada uma vez sem repetição, transmitindo argumentos como os seguintes para o método create_monitoring_schedule
:
schedule_cron_expression=CronExpressionGenerator.now(), data_analysis_start_time="-PT1H", data_analysis_end_time="-PT0H",
Nesses argumentos, o parâmetro schedule_cron_expression
programa a análise para ser executada uma vez, imediatamente, com o valor CronExpressionGenerator.now()
. Para qualquer programação com essa configuração, os parâmetros data_analysis_start_time
e data_analysis_end_time
são obrigatórios. Esses parâmetros definem a hora de início e a hora de término de uma janela de análise. Defina esses horários como deslocamentos relativos à hora atual e use o formato de duração ISO 8601. Neste exemplo, os horários -PT1H
e -PT0H
definem uma janela entre uma hora no passado e a hora atual. Com essa programação, a análise avalia somente os dados que foram coletados durante a janela especificada.
exemplo programação para um trabalho de transformação de lotes
O trecho de código a seguir mostra o formato geral que você usa para programar um monitor de modelo para um trabalho de transformação de lotes.
from sagemaker.model_monitor import ( CronExpressionGenerator, BatchTransformInput, MonitoringDatasetFormat, ) from time import gmtime, strftime mon_schedule_name = 'my-model-monitor-schedule-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) my_default_monitor.create_monitoring_schedule( monitor_schedule_name=mon_schedule_name, batch_transform_input=BatchTransformInput( destination="opt/ml/processing/input", data_captured_destination_s3_uri=s3_capture_upload_path, dataset_format=MonitoringDatasetFormat.csv(header=False), ), post_analytics_processor_script=s3_code_postprocessor_uri, output_s3_uri=s3_report_path, statistics=my_default_monitor.baseline_statistics(), constraints=my_default_monitor.suggested_constraints(), schedule_cron_expression=CronExpressionGenerator.hourly(), enable_cloudwatch_metrics=True, )
desc_schedule_result = my_default_monitor.describe_schedule() print('Schedule status: {}'.format(desc_schedule_result['MonitoringScheduleStatus']))