Conceptos de materialización del conjunto de características
La materialización calcula los valores de características de los datos de origen. Los valores de tiempo de inicio y tiempo de finalización definen una ventana de características. Un trabajo de materialización calcula las características de esta ventana de características. Los valores de características materializados se almacenan en un almacén de materialización en línea o sin conexión. Después de la materialización de datos, todas las consultas de características pueden usar esos valores desde el almacén de materialización.
Sin materialización, una consulta sin conexión de conjunto de características aplica las transformaciones al origen sobre la marcha para calcular las características antes de que la consulta devuelva los valores. Este proceso funciona bien para la fase de creación de prototipos. Sin embargo, para las operaciones de entrenamiento e inferencia, en un entorno de producción, las características deben materializarse antes del entrenamiento o la inferencia. La materialización en esa fase proporciona mayor confiabilidad y disponibilidad.
Exploración de la materialización de características
La interfaz de usuario de Trabajos de materialización muestra el estado de materialización de datos en almacenes de materialización sin conexión y en línea, y una lista de trabajos de materialización.
En una ventana de características:
- En el gráfico de series temporales de la parte superior se muestran los intervalos de datos que se encuentran en la ventana de características, con el estado de materialización, para las tiendas sin conexión y en línea.
- La lista de trabajos de la parte inferior muestra todos los trabajos de materialización con ventanas de procesamiento que se superponen con la ventana de características seleccionada.
Estado de materialización de datos e intervalo de datos
Un intervalo de datos es un período de tiempo en el que el conjunto de características materializa sus valores de características en uno de estos estados:
- Completado (verde): materialización correcta de datos
- Incompleto (rojo): uno o varios trabajos de materialización cancelados o con errores para este intervalo de datos
- Pendiente (azul): uno o varios trabajos de materialización para este intervalo de datos están en curso
- Ninguno (gris): no se envió ningún trabajo de materialización para este intervalo de datos
A medida que se ejecutan trabajos de materialización para el conjunto de características, crean o combinan intervalos de datos:
- Cuando dos intervalos de datos son continuos en la escala de tiempo y tienen el mismo estado de materialización de datos, se convierten en un intervalo de datos
- En un intervalo de datos, cuando una parte de los datos de características se materializa de nuevo y esa parte obtiene un estado de materialización de datos diferente, ese intervalo de datos se divide en varios intervalos de datos
Cuando los usuarios seleccionan una ventana de características, pueden ver varios intervalos de datos en esa ventana con diferentes estados de materialización de datos. Pueden ver varios intervalos de datos que están separados en la escala de tiempo. Por ejemplo, la instantánea anterior tiene 16 intervalos de datos para la ventana de características definida en el almacén de materialización sin conexión.
En un momento dado, un conjunto de características puede tener como máximo 2000 intervalos de datos. Una vez que un conjunto de características alcanza ese límite, no se pueden ejecutar más trabajos de materialización. A continuación, los usuarios deben crear una nueva versión del conjunto de características con la materialización habilitada. Para la nueva versión del conjunto de características, materialice las características en las tiendas sin conexión y en línea desde cero.
Para evitar el límite, los usuarios deben ejecutar trabajos de reposición de antemano para rellenar los huecos en los intervalos de datos. Esto combina los intervalos de datos y reduce el recuento total.
Trabajos de materialización de datos
Antes de ejecutar un trabajo de materialización de datos, habilite las materializaciones de datos sin conexión o en línea en el nivel del conjunto de características.
from azure.ai.ml.entities import (
MaterializationSettings,
MaterializationComputeResource,
)
# Turn on both offline and online materialization on the "accounts" featureset.
accounts_fset_config = fs_client._featuresets.get(name="accounts", version="1")
accounts_fset_config.materialization_settings = MaterializationSettings(
offline_enabled=True,
online_enabled=True,
resource=MaterializationComputeResource(instance_type="standard_e8s_v3"),
spark_configuration={
"spark.driver.cores": 4,
"spark.driver.memory": "36g",
"spark.executor.cores": 4,
"spark.executor.memory": "36g",
"spark.executor.instances": 2,
},
schedule=None,
)
fs_poller = fs_client.feature_sets.begin_create_or_update(accounts_fset_config)
print(fs_poller.result())
Puede enviar los trabajos de materialización de datos como:
- trabajo de reposición: un trabajo de materialización por lotes enviado manualmente
- trabajo de materialización recurrente: un trabajo de materialización automática desencadenado en un intervalo programado.
Advertencia
Los datos ya materializados en la materialización sin conexión o en línea ya no se podrán usar si la materialización de datos sin conexión o en línea está deshabilitada en el nivel de conjunto de características. El estado de materialización de datos en el almacén de materialización sin conexión o en línea se restablecerá a None
.
Puede enviar trabajos de reposición mediante:
- Estado de materialización de datos
- El identificador de trabajo de un trabajo de materialización cancelado o erróneo
Reposición de datos por estado de materialización de datos
El usuario puede enviar una solicitud de reposición con:
- Lista de valores de estado de materialización de datos: Incompleto, Completo o Ninguno
- Una ventana de características (opcional)
from datetime import datetime
from azure.ai.ml.entities import DataAvailabilityStatus
st = datetime(2022, 1, 1, 0, 0, 0, 0)
et = datetime(2023, 6, 30, 0, 0, 0, 0)
poller = fs_client.feature_sets.begin_backfill(
name="transactions",
version="1",
feature_window_start_time=st,
feature_window_end_time=et,
data_status=[DataAvailabilityStatus.NONE],
)
print(poller.result().job_ids)
Después del envío de la solicitud de reposición, se crea un nuevo trabajo de materialización para cada intervalo de datos que tenga un estado de materialización de datos coincidente (Incompleto, Completo o Ninguno). Además, los intervalos de datos pertinentes deben estar dentro de la ventana de características definida. Si el estado de materialización de datos es Pending
para un intervalo de datos, no se envía ningún trabajo de materialización para ese intervalo.
Tanto la hora de inicio como la hora de finalización de la ventana de características son opcionales en la solicitud de reposición:
- Si no se proporciona la hora de inicio de la ventana de características, la hora de inicio se define como la hora de inicio del primer intervalo de datos que no tiene un estado de materialización de datos de
None
. - Si no se proporciona la hora de finalización de la ventana de características, la hora de finalización se define como la hora de finalización del último intervalo de datos que no tiene un estado de materialización de datos de
None
.
Nota:
Si no se han enviado trabajos de reposición o recurrentes para un conjunto de características, el primer trabajo de reposición debe enviarse con una hora de inicio y hora de finalización de la ventana de características.
Este ejemplo tiene estos valores de estado de materialización e intervalo de datos actuales:
Hora de inicio | Hora de finalización | Estado de materialización de datos |
---|---|---|
2023-04-01T04:00:00.000 |
2023-04-02T04:00:00.000 |
None |
2023-04-02T04:00:00.000 |
2023-04-03T04:00:00.000 |
Incomplete |
2023-04-03T04:00:00.000 |
2023-04-04T04:00:00.000 |
None |
2023-04-04T04:00:00.000 |
2023-04-05T04:00:00.000 |
Complete |
2023-04-05T04:00:00.000 |
2023-04-06T04:00:00.000 |
None |
Esta solicitud de reposición tiene estos valores:
- Materialización de datos
data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
- Inicio de la ventana de características =
2023-04-02T12:00:00.000
- Fin de la ventana de características =
2023-04-04T12:00:00.000
Crea estos trabajos de materialización:
- Trabajo 1: ventana de características de proceso [
2023-04-02T12:00:00.000
,2023-04-03T04:00:00.000
) - Trabajo 2: ventana de características de proceso [
2023-04-04T04:00:00.000
,2023-04-04T12:00:00.000
)
Si ambos trabajos se completan correctamente, los nuevos valores de estado de materialización e intervalo de datos se convierten en:
Hora de inicio | Hora de finalización | Estado de materialización de datos |
---|---|---|
2023-04-01T04:00:00.000 |
2023-04-02T04:00:00.000 |
None |
2023-04-02T04:00:00.000 |
2023-04-02T12:00:00.000 |
Incomplete |
2023-04-02T12:00:00.000 |
2023-04-03T04:00:00.000 |
Complete |
2023-04-03T04:00:00.000 |
2023-04-04T04:00:00.000 |
None |
2023-04-04T04:00:00.000 |
2023-04-05T04:00:00.000 |
Complete |
2023-04-05T04:00:00.000 |
2023-04-06T04:00:00.000 |
None |
Se crea un nuevo intervalo de datos el día 2023-04-02, ya que la mitad de ese día ahora tiene un estado de materialización diferente: Complete
. Aunque se ejecutó un nuevo trabajo de materialización durante la mitad del día 2023-04-04, el intervalo de datos no cambia (división) porque el estado de materialización no cambió.
Si el usuario realiza una solicitud de reposición con solo materialización de datos data_status=[DataAvailabilityStatus.Complete, DataAvailabilityStatus.Incomplete]
, sin establecer la hora de inicio y finalización de la ventana de características, la solicitud usa el valor predeterminado de esos parámetros mencionados anteriormente en esta sección y crea estos trabajos:
- Trabajo 1: ventana de características de proceso [
2023-04-02T04:00:00.000
,2023-04-03T04:00:00.000
) - Trabajo 2: ventana de características de proceso [
2023-04-04T04:00:00.000
,2023-04-05T04:00:00.000
)
Compare la ventana de características de estos trabajos de solicitud más recientes y los trabajos de solicitud que se muestran en el ejemplo anterior.
Reposición de datos por identificador de trabajo
También se puede crear una solicitud de reposición con un identificador de trabajo. Esta es una manera cómoda de reintentar un trabajo de materialización con errores o cancelados. En primer lugar, busque el identificador de trabajo del trabajo que se va a reintentar:
- Vaya a la interfaz de usuario Trabajos de materialización del conjunto de características
- Seleccione el Nombre para mostrar de un trabajo específico que tenga un valor de Error Estado
- En la página Información general del trabajo, busque el valor de id. de trabajo correspondiente en la propiedad Name que comienza por
Featurestore-Materialization-
.
poller = fs_client.feature_sets.begin_backfill(
name="transactions",
version=version,
job_id="<JOB_ID_OF_FAILED_MATERIALIZATION_JOB>",
)
print(poller.result().job_ids)
Puede enviar un trabajo de reposición con el identificador de trabajo de un trabajo de materialización con errores o cancelado. En este caso, el estado de los datos de la ventana de características del trabajo de materialización original o cancelado debe ser Incomplete
. Si no se cumple esta condición, el trabajo de reposición por identificador genera un error de usuario. Por ejemplo, un trabajo de materialización con errores podría tener un valor de hora de inicio de ventana de características2023-04-01T04:00:00.000
y un valor 2023-04-09T04:00:00.000
de hora de finalización. Un trabajo de reposición enviado con el identificador de este trabajo con errores solo se realiza correctamente si el estado de los datos en todas partes, en el intervalo de tiempo 2023-04-01T04:00:00.000
a 2023-04-09T04:00:00.000
, es Incomplete
.
Guía y procedimientos recomendados
Establecer una programación source_delay
adecuada y recurrente
La propiedad source_delay
de los datos de origen indica el retraso entre el tiempo de adquisición de los datos listos para el consumo, en comparación con el tiempo de evento de generación de datos. Un evento que se produjo en el momento t
llega a la tabla de datos de origen en el momento t + x
, debido a la latencia de la canalización de datos ascendente. El valor x
es el retraso de origen.
Para una configuración adecuada, la programación de trabajos de materialización recurrente tiene en cuenta la latencia. El trabajo recurrente genera características para el período de tiempo [schedule_trigger_time - source_delay - schedule_interval, schedule_trigger_time - source_delay)
.
materialization_settings:
schedule:
type: recurrence
interval: 1
frequency: Day
start_time: "2023-04-15T04:00:00.000"
En este ejemplo se define un trabajo diario que se desencadena a las 4:00 a.m., a partir del 15/4/2023. En función de la configuración source_delay
, la ejecución del trabajo del 1/5/2023 genera características en diferentes ventanas de tiempo:
source_delay=0
genera valores de características en la ventana[2023-04-30T04:00:00.000, 2023-05-01T04:00:00.000)
source_delay=2hours
genera valores de características en la ventana[2023-04-30T02:00:00.000, 2023-05-01T02:00:00.000)
source_delay=4hours
genera valores de características en la ventana[2023-04-30T00:00:00.000, 2023-05-01T00:00:00.000)
Actualizar almacén de materialización
Antes de actualizar una tienda de características en línea o un almacén de materialización sin conexión, todos los conjuntos de características de ese almacén de características deben tener deshabilitada la materialización en línea o sin conexión correspondiente. La operación de actualización produce un error como UserError
, si algunos conjuntos de características tienen habilitada la materialización.
El estado de materialización de los datos en el almacén de materialización sin conexión o en línea se restablece si la materialización sin conexión o en línea está deshabilitada en un conjunto de características. El restablecimiento representa los datos materializados inutilizables. Si la materialización sin conexión o en línea del conjunto de características está habilitada más adelante, los usuarios deben volver a enviar sus trabajos de materialización.
Arranque de datos en línea
El arranque de datos en línea solo es aplicable si los trabajos de materialización sin conexión enviados se han completado correctamente. Si inicialmente solo se ha habilitado la materialización sin conexión para un conjunto de características y la materialización en línea se habilita más adelante, entonces:
El estado de materialización de datos predeterminado de los datos en el almacén en línea es
None
Cuando se envía un trabajo de materialización en línea, los datos con estado de materialización
Complete
en el almacén sin conexión se usan para calcular las características en línea. Esto se denomina arranque de datos en línea. El arranque de datos en línea ahorra costo computacional porque reutiliza las características ya calculadas guardadas en el almacén de materialización sin conexión. Esta tabla resume los valores de estado de datos sin conexión y en línea en intervalos de datos que darían lugar a un arranque de datos en línea:Hora de inicio Hora de finalización Estado de los datos sin conexión Estado de los datos en línea Arranque de datos en línea 2023-04-01T04:00:00.000
2023-04-02T04:00:00.000
None
None
No 2023-04-02T04:00:00.000
2023-04-03T04:00:00.000
Incomplete
None
No 2023-04-03T04:00:00.000
2023-04-04T04:00:00.000
Pending
None
No se envió ningún trabajo de materialización 2023-04-04T04:00:00.000
2023-04-05T04:00:00.000
Complete
None
Sí
Solucionar errores y modificaciones de datos de origen
Algunos escenarios modifican los datos de origen debido a un error u otros motivos después de la materialización de datos. En estos casos, una actualización de datos de características, para una ventana de características específica en varios intervalos de datos, puede resolver datos de características erróneos u obsoletos. Envíe la solicitud de materialización para la resolución de datos de características erróneos u obsoletos en la ventana de características, para los estados de datos None
, Complete
y Incomplete
.
Debe enviar una solicitud de materialización para una actualización de datos de características solo cuando la ventana de características no contenga ningún intervalo de datos con un estado de datos Pending
.
Rellenar los huecos
En el almacén de materialización, los datos materializados pueden tener huecos porque:
- Un trabajo de materialización nunca se envió para la ventana de características
- se produjeron errores en los trabajos de materialización enviados para la ventana de características o se cancelaron
En este caso, envíe una solicitud de materialización en la ventana de características de data_status=[DataAvailabilityStatus.NONE,DataAvailabilityStatus.Incomplete]
para rellenar los huecos. Una única solicitud de materialización rellena todos los huecos de la ventana de características.