Migra de Vertex AI Feature Store (Legacy) a Bigtable
Migrar una carga de trabajo de administración de atributos de aprendizaje automático desde Vertex AI Feature Store (heredado) a Bigtable puede mejorar el rendimiento y la flexibilidad. En esta guía, se proporciona una descripción general de los conceptos relacionados y el proceso de migración.
Vertex AI Feature Store (heredado) es un entorno administrado que usa Bigtable para su capa de entrega en línea. Ejecutar tu plataforma de IA o tu almacén de atributos directamente en Bigtable sin usar Vertex AI Feature Store (heredado) puede generar velocidades más rápidas y costos reducidos.
Recomendamos una ruta de migración viable mínima enfocada en migrar datos de las tablas subyacentes de Bigtable en Vertex AI Feature Store (Legacy) a una instancia de Bigtable que crees en tu proyecto de Google Cloud .
Beneficios de la migración
La migración a Bigtable ofrece varias ventajas estratégicas y operativas:
- Rentabilidad: Eliminas la prima de administración de nodos específica de Vertex AI Feature Store (heredado), lo que suele reducir los costos de infraestructura.
- Control directo: Obtienes acceso completo a las capacidades de Bigtable. La supervisión de Bigtable expone muchas más métricas que Vertex AI Feature Store (Legacy). También tienes mayor control sobre los diseños y el escalamiento de la arquitectura personalizada.
- Alto rendimiento: Bigtable admite cargas de trabajo de alto rendimiento y funciones de alto rendimiento, como la agregación en escrituras y la búsqueda de vectores.
Integración en varios productos: Obtienes acceso a integraciones de Bigtable, como tablas externas de BigQuery, conectores para Apache Spark, Apache Flink y Kafka Connect, y ETL inversa desde BigQuery.
Captura de datos modificados: Puedes habilitar flujos de cambios para capturar los cambios en tu tabla del almacén de atributos de Bigtable a medida que se producen.
Conceptos clave
En esta sección, se describe cómo Bigtable y BigQuery implementan los conceptos principales de Vertex AI Feature Store (heredado).
Retención de datos
En Bigtable, la retención de datos se administra con la recolección de elementos no utilizados. La recolección de elementos no utilizados es el proceso automático y continuo que consiste en quitar datos caducados y obsoletos de las tablas de Bigtable. Una política de recolección de elementos no utilizados es un conjunto de reglas que creas y que indican cuándo los datos de una función específica, definida en Bigtable como una familia de columnas, ya no son necesarios. Las políticas de recolección de elementos no utilizados se establecen según la marca de tiempo asociada a los datos o la cantidad de versiones que deseas conservar.
La recolección de elementos no utilizados es un proceso en segundo plano, integrado y asíncrono que se lleva a cabo durante la compactación. La recolección de elementos no utilizados se realiza en un horario fijo. Hasta que los datos se borren, aparecerán en los resultados de lectura, pero puedes filtrar las lecturas para excluir estos datos. Para obtener más información, consulta la Descripción general de la recolección de elementos no utilizados.
Además, el almacenamiento por niveles de Bigtable puede ser una solución rentable para los almacenes de atributos en línea que necesitan conservar datos históricos para el entrenamiento de modelos o el cumplimiento de reglamentaciones. El almacenamiento por niveles administra el movimiento de los datos a los que se accede con poca frecuencia desde la publicación en línea en el almacenamiento SSD a un nivel de almacenamiento de menor costo.
Desarrollo de funciones
En Bigtable, puedes implementar el desarrollo de funciones en línea con Bigtable SQL y el desarrollo de funciones sin conexión con BigQuery DataFrames.
Cuando usas Vertex AI Feature Store (heredado), trabajas con APIs para desarrolladores y modelos de datos que se asignan a fuentes de datos subyacentes preparadas en BigQuery. Luego, registras estas fuentes de datos y columnas de atributos específicas en el registro de atributos. Con un almacén de atributos de Bigtable, trabajas directamente con los datos en las instancias subyacentes de BigQuery y Bigtable, sin necesidad de asignar al modelo de datos de Vertex AI Feature Store (legacy).
Desarrollo de funciones en línea
Para el desarrollo de funciones en línea, Bigtable ofrece varias herramientas:
- Biblioteca cliente de Python: Usa la biblioteca cliente de Python para Bigtable y trabaja directamente con los datos en Bigtable.
- GoogleSQL: Usa GoogleSQL para leer y transformar datos en Bigtable. Puedes ejecutar consultas en SQL directamente en la consola de Bigtable o desde la biblioteca cliente de Python.
- Vistas materializadas continuas: Para crear funciones casi en tiempo real que requieren transformaciones y agregaciones recurrentes, usa las vistas materializadas continuas de Bigtable para ejecutar de forma incremental una consulta en SQL en los datos a medida que ingresan en Bigtable.
Desarrollo de funciones sin conexión
Para el desarrollo de atributos sin conexión, BigQuery DataFrames proporciona una interfaz de Python con más de 750 APIs de Pandas y scikit-learn. Estas APIs se implementan a través de la conversión de SQL a las APIs de BigQuery y BigQuery ML. La generación de características de BigQuery DataFrames permite usar funciones de Python integradas y definidas por el usuario. También proporciona sincronización automática de datos con Bigtable para publicar funciones creadas en procesos por lotes y sin conexión, que se describen en la siguiente sección.
Sincronización de funciones en línea y sin conexión
Cuando usas Bigtable directamente para cargas de trabajo de AA, puedes asegurarte de que se importe un valor de atributo sin conexión desde BigQuery y de que ese mismo valor se reutilice para el entrenamiento y la entrega, lo que mantiene sincronizadas las rutas de código para generar atributos entre el entrenamiento y la entrega. Las siguientes tecnologías permiten la sincronización de funciones:
- Sincronización por lotes: La ETL inversa de BigQuery a Bigtable permite exportar los resultados de una consulta de BigQuery a Bigtable. Estas consultas se ejecutan por lotes y se pueden programar directamente desde BigQuery.
- Sincronización de transmisión: Las consultas continuas de BigQuery son instrucciones de SQL que se ejecutan de forma continua y generan filas en una tabla de Bigtable.
- Sincronización desde BigQuery DataFrames: Para capturar atributos sin conexión desarrollados en Python, puedes usar un BigFrames StreamingDataFrame para generar una consulta continua de BigQuery que capture tu lógica de Python para la generación de atributos y sincronice los resultados de los datos con Bigtable.
- Desarrollo de atributos sin conexión directamente en los datos de Bigtable: Puedes compilar atributos sin conexión en BigQuery a partir de los datos almacenados en Bigtable con una tabla externa de BigQuery. Una tabla externa refleja el aspecto de una tabla de BigQuery y ofrece la mayoría de las mismas funciones, como las uniones, las consultas programadas y las funciones avanzadas de BigQuery SQL, sin necesidad de volver a mover los datos al almacenamiento de BigQuery. Para evitar afectar el tráfico de servicio de tu aplicación, puedes usar la computación sin servidores de Data Boost cuando lees datos de Bigtable con tablas externas de BigQuery. El uso de Data Boost es especialmente rentable para las consultas ad hoc. Para usar Data Boost, especifica un perfil de app de Data Boost cuando crees la definición de la tabla externa. Para obtener más información sobre Data Boost, consulta la descripción general de Bigtable Data Boost.
Después de la migración, puedes seguir usando Vertex AI Model Monitoring para hacer un seguimiento de la calidad de tus modelos.
La práctica de usar Bigtable y BigQuery juntos es un patrón común para compilar bases de datos de análisis en tiempo real.
Fases de migración
Para garantizar la continuidad del servicio, la migración suele ejecutarse en las siguientes fases distintas.
Fase 1: Prepara la infraestructura
Antes de comenzar la migración, configura el entorno de destino:
- Crea una instancia de Bigtable en tu proyecto para que funcione como la nueva tienda en línea.
- Crea un conjunto de datos de BigQuery y una tabla para almacenar temporalmente los datos que exportes desde Vertex AI Feature Store (legacy).
- Configura IAM: Asegúrate de que la cuenta que realiza la migración tenga permisos para leer desde el almacén de atributos heredado y escribir en la nueva instancia de Bigtable. Para obtener más información, consulta Control de acceso a Bigtable con IAM y Controla el acceso a los recursos de Vertex AI Feature Store (Legacy).
Fase 2: Define la asignación de esquemas entre Vertex AI Feature Store (heredado) y Bigtable
Revisa y comprende las prácticas recomendadas para el diseño de esquemas de Bigtable. A continuación, se muestra una asignación general de la API de Vertex AI Feature Store (heredado) a la API de Bigtable:
Recurso de Vertex AI Feature Store (heredado)
Componente de Bigtable
FeatureOnlineStoreInstancia de Bigtable
FeatureViewFamilia de columnas
featureValues(lote)Columna (una sola celda por clave)
featureValues(continuo)Columna (varias celdas por clave [control de versiones])
Después de definir la asignación del esquema, crea una tabla de Bigtable que tenga una familia de columnas para cada función en el almacén de funciones de origen.
Fase 3: Extracción y sincronización de datos
En esta fase, migras los datos con un enfoque por niveles según la frecuencia de actualización de los datos.
Sincronización de funciones en tiempo real
Para las funciones que escribas con write_feature_values o llamadas a la API equivalentes, comienza a escribir los mismos datos en la nueva tabla de Bigtable.
- Instala la biblioteca cliente de Python para Bigtable.
- Configura tu aplicación para que escriba datos de atributos de forma simultánea en Vertex AI Feature Store (heredado) y Bigtable. Para obtener más información sobre cómo escribir datos en Bigtable, consulta Escrituras.
Migración de atributos por lotes
A continuación, migra los datos que se almacenaron antes de que comenzaras a realizar escrituras duales. Esto implica mover los datos de Vertex AI Feature Store (heredado) a BigQuery y, luego, a Bigtable.
- Exporta datos del almacén de atributos a BigQuery con las capacidades de exportación de Vertex AI Feature Store (heredado), que te permiten exportar todos los valores o instantáneas. Esto permite que BigQuery funcione como el almacenamiento sin conexión de Vertex AI Feature Store (Legacy).
- Migra los datos históricos de BigQuery a Bigtable con una de las siguientes opciones:
- ETL inverso
- Conector de Bigtable Spark
- Plantilla de Dataflow de BigQuery a Bigtable
Fase 4: Transición de la aplicación y el SDK
El paso final es la transferencia de la capa de aplicación.
- Una vez que se haya completado y probado la migración, deja de escribir en Vertex AI Feature Store (Legacy).
Modifica tu aplicación para que solo use la biblioteca cliente de Python para Bigtable.
En el siguiente ejemplo, se muestra cómo usar Python para extraer un solo atributo de Bigtable.
from google.cloud import bigtable from google.cloud.bigtable import row_filters # Replace 'project_id' and 'instance_id' with your actual IDs. client = bigtable.Client(project=project_id) instance = client.instance(instance_id) #return only the latest feature row_filter = bigtable.row_filters.CellsColumnLimitFilter(1) # Replace 'user1' and 'feature0` with your actual row key and column qualifier. print("Getting a single feature by row key.") key = "user1".encode() row = table.read_row(key, row_filter) cell = row.cells[column_family_id.decode("utf-8")][feature0][0] print(cell.value.decode("utf-8"))Para ver otro ejemplo de cómo leer y escribir datos con las APIs de administración y datos de Bigtable, consulta el ejemplo de Python Hello World.
La biblioteca cliente de Python para Bigtable también te permite usar GoogleSQL para devolver atributos que cumplen con tus criterios de filtro o para realizar transformaciones de los atributos. En el siguiente ejemplo, se muestra cómo llamar a una consulta en SQL de forma asíncrona desde la biblioteca cliente de Bigtable en Python. Para obtener información adicional sobre GoogleSQL para Bigtable, consulta Ejemplos adicionales de SQL.
import asyncio from google.cloud.bigtable.data_async import BigtableDataClient from google.cloud.bigtable_v2.types import ExecuteQueryRequest async def run_bigtable_sql_query(project_id, instance_id, table_id): """ Runs a GoogleSQL query on a Bigtable table using the async client. """ client = BigtableDataClient(project_id=project_id) instance = client.instance(instance_id) table = instance.table(table_id) # Example query: Select a specific row and all columns from a column family # Replace 'my_table' and 'my_cf' with your actual table and column family IDs. # The table name in the SQL must be in the format `dataset.table`, # where dataset is the instance ID and table is the table ID (in backticks). sql_query = f"SELECT _key, my_cf FROM `{instance_id}`.`{table_id}` WHERE _key = 'user_123'" print(f"Executing query: {sql_query}") # The client library automatically handles the SQL execution try: # The query method returns an AsyncPartialRowsIterator results_iterator = await table.query(query=sql_query) async for row in results_iterator: print(f"Row key: {row.row_key.decode('utf-8')}") # Iterate through the cells in the row for col_family, cells in row.cells.items(): for cell in cells: print(f" Column Family: {col_family}, Qualifier: {cell.qualifier.decode('utf-8')}, Value: {cell.value.decode('utf-8')}, Timestamp: {cell.timestamp_micros}") except Exception as e: print(f"An error occurred: {e}") finally: await client.close() if __name__ == "__main__": # TODO(developer): Replace with your project, instance, and table IDs your_project_id = "your-gcp-project-id" your_instance_id = "your-bigtable-instance-id" your_table_id = "your-bigtable-table-id" # Run the asynchronous function asyncio.run(run_bigtable_sql_query(your_project_id, your_instance_id, your_table_id))Comienza a usar las métricas de Bigtable para supervisar la latencia y el procesamiento. Para obtener más información, consulta Supervisión.
Prácticas recomendadas
Después de migrar de Vertex AI Feature Store (heredado) a una implementación de almacén de atributos de Bigtable, debes replicar la lógica interna de optimización y procesamiento previo que antes controlaba el servicio para mantener la estabilidad y el rendimiento.
Limitación adaptable del cliente
El backend de Vertex AI Feature Store (Legacy) utiliza un limitador adaptable del cliente para proteger sus instancias subyacentes de Bigtable de la sobrecarga durante los picos de tráfico o cuando el backend de almacenamiento experimenta errores o latencia alta. Te recomendamos que implementes un limitador similar en el código de tu aplicación para registrar las respuestas del backend y limitar de forma proactiva las solicitudes cuando sea necesario.
Optimización del tamaño del lote y la creación de particiones de solicitudes
Los filtros de filas de Bigtable tienen un límite estricto de 20 KB. Solicitar demasiadas funciones o IDs de entidades en una sola lectura filtrada puede provocar errores en las solicitudes. Para replicar el comportamiento de Vertex AI Feature Store (Legacy), haz lo siguiente:
- IDs de entidades de fragmentos: Limita la cantidad de IDs de entidades por lectura de Bigtable a aproximadamente 100.
- Balancea los lotes de entidades: Para evitar saturar los recursos del cliente o del servidor cuando realices lecturas de varias entidades, toma las siguientes precauciones:
- Divide las entidades en lotes pequeños simultáneos, como 10 entidades por lote.
- Limita la cantidad máxima de solicitudes por lotes simultáneas, por ejemplo, de 10 a 20.
Selección inteligente de filtros
Calcular y aplicar filtros de columnas en el servidor agrega una sobrecarga. Si tu aplicación suele solicitar casi todas las funciones de una familia de columnas (por ejemplo, más del 99.9%), es más eficiente omitir el filtro de columnas y leer la fila completa, y luego filtrar los resultados del lado del cliente.
Simultaneidad y ejecución asíncrona
Para minimizar el tiempo hasta el primer resultado en situaciones de transmisión, usa patrones asíncronos o paquetes de subprocesos para recuperar lotes de entidades en paralelo. Esto garantiza que la aplicación pueda comenzar a procesar los resultados en cuanto se devuelva el primer lote, en lugar de esperar a que se complete una lectura serial grande.
¿Qué sigue?
- Si necesitas ayuda con cargas de trabajo de alto rendimiento o asesoramiento sobre arquitectura, comunícate con tu representante de cuenta.
- Obtén más información sobre la integración de Feast en Bigtable.
- Obtén más información sobre cómo Credit Karma escaló a 60,000 millones de predicciones de modelos por día con Bigtable y BigQuery.