Skip to content

Commit

Permalink
Momo lookback windown/offset (Azure#33462)
Browse files Browse the repository at this point in the history
* lookback window/offset

* e2e tests

* e2e tests

* pylint
  • Loading branch information
nemanjarajic authored Dec 12, 2023
1 parent 6ce48c1 commit cf9b263
Show file tree
Hide file tree
Showing 11 changed files with 158 additions and 81 deletions.
2 changes: 1 addition & 1 deletion sdk/ml/azure-ai-ml/assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "python",
"TagPrefix": "python/ml/azure-ai-ml",
"Tag": "python/ml/azure-ai-ml_9bd27ef67e"
"Tag": "python/ml/azure-ai-ml_f133080b91"
}
10 changes: 5 additions & 5 deletions sdk/ml/azure-ai-ml/azure/ai/ml/_schema/monitoring/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ def make(self, data, **kwargs):
class BaselineDataRangeSchema(metaclass=PatchedSchemaMeta):
window_start = fields.Str()
window_end = fields.Str()
trailing_window_size = fields.Str()
trailing_window_offset = fields.Str()
lookback_window_size = fields.Str()
lookback_window_offset = fields.Str()

@post_load
def make(self, data, **kwargs):
Expand All @@ -74,7 +74,7 @@ class ProductionDataSchema(metaclass=PatchedSchemaMeta):
input_data = UnionField(union_fields=[NestedField(DataInputSchema), NestedField(MLTableInputSchema)])
data_context = StringTransformedEnum(allowed_values=[o.value for o in MonitorDatasetContext])
pre_processing_component = fields.Str()
data_window_size = fields.Str()
data_window = NestedField(BaselineDataRangeSchema)

@post_load
def make(self, data, **kwargs):
Expand Down Expand Up @@ -187,7 +187,7 @@ class FADProductionDataSchema(metaclass=PatchedSchemaMeta):
keys=StringTransformedEnum(allowed_values=[o.value for o in FADColumnNames]), values=fields.Str()
)
pre_processing_component = fields.Str()
data_window_size = fields.Str()
data_window = NestedField(BaselineDataRangeSchema)

@post_load
def make(self, data, **kwargs):
Expand Down Expand Up @@ -283,7 +283,7 @@ def make(self, data, **kwargs):
class LlmDataSchema(metaclass=PatchedSchemaMeta):
input_data = UnionField(union_fields=[NestedField(DataInputSchema), NestedField(MLTableInputSchema)])
data_column_names = fields.Dict()
data_window_size = fields.Str()
data_window = NestedField(BaselineDataRangeSchema)

@post_load
def make(self, data, **kwargs):
Expand Down
160 changes: 105 additions & 55 deletions sdk/ml/azure-ai-ml/azure/ai/ml/entities/_monitoring/signals.py

Large diffs are not rendered by default.

24 changes: 18 additions & 6 deletions sdk/ml/azure-ai-ml/azure/ai/ml/operations/_schedule_operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,9 @@ def _resolve_monitor_schedule_arm_id( # pylint:disable=too-many-branches,too-ma
type=self._data_operations.get(model_inputs_name, model_inputs_version).type,
),
data_context=MonitorDatasetContext.MODEL_INPUTS,
data_window_size="P7D",
data_window=BaselineDataRange(
lookback_window_size="default", lookback_window_offset="P0D"
),
)
if not signal.reference_data:
signal.reference_data = ReferenceData(
Expand All @@ -379,7 +381,9 @@ def _resolve_monitor_schedule_arm_id( # pylint:disable=too-many-branches,too-ma
type=self._data_operations.get(model_inputs_name, model_inputs_version).type,
),
data_context=MonitorDatasetContext.MODEL_INPUTS,
data_window=BaselineDataRange(trailing_window_size="P7D", trailing_window_offset="P7D"),
data_window=BaselineDataRange(
lookback_window_size="P7D", lookback_window_offset="default"
),
)
elif not mdc_input_enabled and not (signal.production_data and signal.reference_data):
# if target or baseline dataset is absent and data collector for input is not enabled,
Expand All @@ -401,7 +405,9 @@ def _resolve_monitor_schedule_arm_id( # pylint:disable=too-many-branches,too-ma
type=self._data_operations.get(model_outputs_name, model_outputs_version).type,
),
data_context=MonitorDatasetContext.MODEL_OUTPUTS,
data_window_size="P7D",
data_window=BaselineDataRange(
lookback_window_size="default", lookback_window_offset="P0D"
),
)
if not signal.reference_data:
signal.reference_data = ReferenceData(
Expand All @@ -410,7 +416,9 @@ def _resolve_monitor_schedule_arm_id( # pylint:disable=too-many-branches,too-ma
type=self._data_operations.get(model_outputs_name, model_outputs_version).type,
),
data_context=MonitorDatasetContext.MODEL_OUTPUTS,
data_window=BaselineDataRange(trailing_window_size="P7D", trailing_window_offset="P7D"),
data_window=BaselineDataRange(
lookback_window_size="P7D", lookback_window_offset="default"
),
)
elif not mdc_output_enabled and not (signal.production_data and signal.reference_data):
# if target dataset is absent and data collector for output is not enabled,
Expand All @@ -433,15 +441,19 @@ def _resolve_monitor_schedule_arm_id( # pylint:disable=too-many-branches,too-ma
type=self._data_operations.get(model_inputs_name, model_inputs_version).type,
),
data_context=MonitorDatasetContext.MODEL_INPUTS,
data_window_size="P7D",
data_window=BaselineDataRange(
lookback_window_size="default", lookback_window_offset="P0D"
),
),
FADProductionData(
input_data=Input(
path=f"{model_outputs_name}:{model_outputs_version}",
type=self._data_operations.get(model_outputs_name, model_outputs_version).type,
),
data_context=MonitorDatasetContext.MODEL_OUTPUTS,
data_window_size="P7D",
data_window=BaselineDataRange(
lookback_window_size="default", lookback_window_offset="P0D"
),
),
]
elif not mdc_output_enabled and not signal.production_data:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,10 @@ def test_default_data_window_size_recurrence(self, test_path) -> None:

# null out lookback
for signal in schedule.create_monitor.monitoring_signals.values():
signal.production_data.data_window_size = None
signal.production_data.data_window.lookback_window_size = None

# test minute
override_frequency_interval_and_check_window_size(schedule, "minute", 1, 1)
override_frequency_interval_and_check_window_size(schedule, "minute", 5, 1)
override_frequency_interval_and_check_window_size(schedule, "hour", 5, 1)
override_frequency_interval_and_check_window_size(schedule, "day", 6, 6)
override_frequency_interval_and_check_window_size(schedule, "week", 2, 14)
Expand All @@ -102,8 +102,9 @@ def override_frequency_interval_and_check_window_size(
):
schedule.trigger.frequency = frequency
schedule.trigger.interval = interval

for signal in schedule.create_monitor.monitoring_signals.values():
signal.production_data.data_window_size = None
signal.production_data.data_window.lookback_window_size = None

to_rest_schedule = schedule._to_rest_object()
for signal in to_rest_schedule.properties.action.monitor_definition.signals.values():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ create_monitor:
path: azureml:Direct:1
data_context: test
data_window:
trailing_window_size: P30D
trailing_window_offset: P7D
lookback_window_size: P30D
lookback_window_offset: P7D
test_static:
input_data:
type: mltable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,17 @@ create_monitor:
type: mltable
path: azureml:Direct:1
data_context: test
data_window_size: P60D
data_window:
lookback_window_size: P60D
lookback_window_offset: P0D
reference_data:
input_data:
type: mltable
path: azureml:Direct:1
data_context: test
data_window:
trailing_window_size: P30D
trailing_window_offset: P30D
lookback_window_size: P30D
lookback_window_offset: P30D
metric_thresholds:
numerical:
jensen_shannon_distance: 0.5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ create_monitor:
type: mltable
path: azureml:Direct:1
data_context: test
data_window_size: "P60D"
data_window:
lookback_window_size: P60D
lookback_window_offset: P0D
reference_data:
input_data:
type: mltable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ create_monitor:
data_context: model_inputs
data_column_names:
correlation_id: inference_correlation_id
data_window_size: P7D
data_window:
lookback_window_size: P7D
lookback_window_offset: P0D
- input_data:
path: azureml:my_model_outputs_data:1
type: mltable
Expand All @@ -43,7 +45,9 @@ create_monitor:
prediction: is_fraud
prediction_probability: is_fraud_probability
correlation_id: inference_correlation_id
data_window_size: P7D
data_window:
lookback_window_size: P7D
lookback_window_offset: P0D
reference_data:
input_data:
path: azureml:my_model_training_data:1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,17 @@ create_monitor:
- input_data:
path: azureml:my_model_inputs_data:1
type: mltable
data_window_size: P7D
data_window:
lookback_window_size: P7D
lookback_window_offset: P0D
data_column_names:
correlation_id: inference_correlation_id
- input_data:
path: azureml:my_model_outputs_data:1
type: mltable
data_window_size: P7D
data_window:
lookback_window_size: P7D
lookback_window_offset: P0D
data_column_names:
prediction: is_fraud
prediction_probability: is_fraud_probability
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ create_monitor:
type: mltable
path: azureml:Direct:1
data_context: test
data_window_size: "P60D"
data_window:
lookback_window_size: P60D
lookback_window_offset: P0D
reference_data:
input_data:
type: mltable
Expand Down

0 comments on commit cf9b263

Please sign in to comment.