En este documento, se proporciona una arquitectura de referencia que te muestra cómo implementar un flujo de trabajo de generación de candidatos de dos torres de extremo a extremo con Vertex AI. El framework de modelado de dos torres es una técnica de recuperación potente para los casos de uso de personalización, ya que aprende la similitud semántica entre dos entidades diferentes, como las consultas web y los elementos candidatos.
Este documento está dirigido a profesionales técnicos, como científicos de datos e ingenieros de aprendizaje automático, que desarrollan aplicaciones de recomendación a gran escala con requisitos de entrega de baja latencia. Para obtener más información sobre las técnicas de modelado, la formulación de problemas y la preparación de datos para compilar un modelo de dos torres, consulta Escala la recuperación profunda con los recomendadores de TensorFlow y Vector Search.
Arquitectura
En el siguiente diagrama, se muestra una arquitectura para entrenar un modelo de dos torres y implementar cada torre por separado para diferentes tareas de implementación y entrega:
La arquitectura del diagrama incluye los siguientes componentes:
- Datos de entrenamiento: Los archivos de entrenamiento se almacenan en Cloud Storage.
- Entrenamiento de dos torres: El modelo combinado de dos torres se entrena sin conexión con el servicio de Vertex AI Training. Cada torre se guarda por separado y se usa para diferentes tareas.
- Búsqueda registrada y torres candidatas: Después de que se entrenan las torres, cada una se sube por separado a Vertex AI Model Registry.
- Torre de consulta implementada: La torre de consulta registrada se implementa en un extremo en línea de Vertex AI.
- Predicción por lotes de las incorporaciones: La torre de candidatos registrada se usa en un trabajo de predicción por lotes para precalcular las representaciones de incorporación de todos los elementos candidatos disponibles.
- Embeddings JSON: Las incorporaciones previstas se guardan en un archivo JSON en Cloud Storage.
- Índice de ANN: La Búsqueda de vectores de Vertex AI se usa para crear un índice de publicación que está configurado para la búsqueda de vecino más cercano aproximado (ANN).
- Índice implementado: El índice de ANN se implementa en un extremo del índice de la Búsqueda de vectores de Vertex AI.
Productos usados
En esta arquitectura de referencia, se usan los siguientes productos de Google Cloud :
- Vertex AI Training: Es un servicio de entrenamiento completamente administrado que te permite poner en funcionamiento el entrenamiento de modelos a gran escala.
- Búsqueda de vectores: Es un servicio de coincidencia de similitud de vectores que te permite almacenar, indexar y buscar datos semánticamente similares o relacionados.
- Vertex AI Model Registry: Es un repositorio central en el que puedes administrar el ciclo de vida de tus modelos de AA.
- Cloud Storage: Un depósito de objetos de bajo costo y sin límites para varios tipos de datos. Se puede acceder a los datos desde dentro y desde fuera de Google Cloud, y estos se replican en las ubicaciones para aumentar la redundancia.
Caso de uso
Para cumplir con los requisitos de publicación de latencia baja, los recomendadores a gran escala a menudo se implementan en producción como sistemas de dos etapas o, a veces, como sistemas de varias etapas. El objetivo de la primera etapa, la generación de candidatos, es analizar una gran recopilación de elementos candidatos y recuperar un subconjunto relevante de cientos de elementos para las tareas de filtrado y clasificación posteriores. Para optimizar esta tarea de recuperación, ten en cuenta estos dos objetivos principales:
- Durante el entrenamiento de modelos, aprende la mejor representación del problema o
tarea que se debe resolver y compila esta representación en
incorporaciones de
<query, candidate>
. - Durante la entrega del modelo, recupera los elementos relevantes lo suficientemente rápido como para cumplir con los requisitos de latencia.
En el siguiente diagrama, se muestran los componentes conceptuales de un recommender de dos etapas:
En el diagrama, la generación de candidatos filtra millones de elementos candidatos. Luego, la clasificación filtra los cientos de elementos candidatos resultantes para mostrar decenas de elementos recomendados.
La arquitectura de referencia de este documento entrena un modelo de recuperación basado en dos torres. En la arquitectura, cada torre es una red neuronal que procesa las características de la consulta o del elemento candidato y, luego, produce una representación de incorporación de esas características. Cada torre se implementa por separado, ya que se usará para diferentes tareas en producción:
- Torre de candidatos: La torre de candidatos se usa para precalcular las incorporaciones de todos los elementos candidatos. Las incorporaciones calculadas previamente se implementan en un extremo de índice de Vertex AI Vector Search que está optimizado para la recuperación de baja latencia.
- Torre implementada: Durante la publicación en línea, la torre de consultas implementada convierte las consultas sin procesar de los usuarios en representaciones de incorporación. Luego, las representaciones de incorporación se usan para buscar incorporaciones de elementos similares en el índice implementado.
Las arquitecturas de dos torres son ideales para muchas tareas de recuperación, ya que capturan la relación semántica de la consulta y las entidades candidatas, y las asignan a un espacio de incorporación compartido. Cuando las entidades se asignan a un espacio de incorporación compartido, las entidades semánticamente similares se agrupan más cerca. Por lo tanto, si calculas las incorporaciones de vectores de una consulta determinada, puedes buscar en el espacio de incorporaciones los elementos candidatos más cercanos (más similares). El beneficio principal de esta arquitectura es la capacidad de desacoplar la inferencia de las representaciones de consulta y candidatas. Las ventajas de esta desvinculación son principalmente dos:
- Puedes publicar elementos nuevos (actualizados) sin volver a entrenar un vocabulario de elementos nuevos. Si alimentas cualquier conjunto de atributos de elementos a la torre de elementos candidatos, puedes calcular las incorporaciones de elementos para cualquier conjunto de candidatos, incluso aquellos que no se ven durante el entrenamiento. Realizar este cálculo ayuda a abordar el problema de inicio en frío.
- La torre de candidatos puede admitir un conjunto arbitrario de elementos candidatos, incluidos los elementos que aún no interactuaron con el sistema de recomendación. Esta compatibilidad es posible porque las arquitecturas de dos torres procesan contenido enriquecido y funciones de metadatos sobre cada par de
<query, candidate>
. Este tipo de procesamiento permite que el sistema describa un elemento desconocido en términos de los elementos que conoce.
- La torre de candidatos puede admitir un conjunto arbitrario de elementos candidatos, incluidos los elementos que aún no interactuaron con el sistema de recomendación. Esta compatibilidad es posible porque las arquitecturas de dos torres procesan contenido enriquecido y funciones de metadatos sobre cada par de
- Para optimizar la inferencia de recuperación, puedes precalcular todas las incorporaciones de elementos candidatas. Estas incorporaciones calculadas previamente se pueden indexar y, luego, implementar en una infraestructura de entrega optimizada para la recuperación de baja latencia.
- El aprendizaje conjunto de las torres te permite describir elementos en términos de consultas y viceversa. Si tienes la mitad de un par, como una consulta, y necesitas buscar el otro elemento correspondiente, puedes calcular previamente la mitad de la ecuación. El preprocesamiento te permite tomar el resto de las decisiones lo más rápido posible.
Consideraciones del diseño
En esta sección, se proporciona orientación para ayudarte a desarrollar una arquitectura de generación de candidatos en Google Cloud que cumpla con tus necesidades de seguridad y rendimiento. La guía de esta sección no está completa. Según tus requisitos específicos, puedes considerar factores de diseño y compensaciones adicionales.
Seguridad
Vector Search de Vertex AI admite implementaciones de extremos públicos y de nube privada virtual (VPC). Si deseas usar una red de VPC, comienza por seguir las instrucciones de Configura una conexión de intercambio de tráfico entre redes de VPC. Si el índice de Búsqueda vectorial se implementa dentro de un perímetro de VPC, los usuarios deben acceder a los recursos asociados desde la misma red de VPC. Por ejemplo, si desarrollas desde Vertex AI Workbench, debes crear la instancia de Workbench en la misma red de VPC que el extremo del índice implementado. Del mismo modo, cualquier canalización que se espera que cree un extremo o implante un índice en un extremo debe ejecutarse dentro de la misma red de VPC.
Optimización del rendimiento
En esta sección, se describen los factores que debes tener en cuenta cuando usas esta arquitectura de referencia para diseñar una topología en Google Cloud que cumpla con los requisitos de rendimiento de tus cargas de trabajo.
Trabajos de entrenamiento de perfiles
Para optimizar las canalizaciones de entrada de datos y el gráfico de entrenamiento general, te recomendamos que generes perfiles del rendimiento del entrenamiento con Cloud Profiler. El generador de perfiles es una implementación administrada del TensorBoard Profiler de código abierto.
Cuando pasas el argumento –profiler
en el trabajo de entrenamiento, habilitas la devolución de llamada de TensorFlow para generar perfiles de una cantidad determinada de lotes para cada época. El perfil captura registros de la CPU del host y de la GPU o el hardware de la TPU del dispositivo. Los registros proporcionan información sobre el consumo de recursos del trabajo de entrenamiento. Para evitar errores de memoria insuficiente, te recomendamos que comiences con una duración del perfil de entre 2 y 10 pasos de entrenamiento y que la aumentes según sea necesario.
Para obtener información sobre cómo usar Profiler con el entrenamiento de Vertex AI y Vertex AI TensorBoard, consulta Genera perfiles del rendimiento del entrenamiento de modelos. Para conocer las prácticas recomendadas de depuración, consulta Optimiza el rendimiento de las GPU. Para obtener información sobre cómo optimizar el rendimiento, consulta Optimiza el rendimiento de TensorFlow con el generador de perfiles.
Aprovecha los aceleradores al máximo
Cuando conectas aceleradores de entrenamiento, como GPUs de NVIDIA o Cloud TPU, es importante mantenerlos completamente utilizados. El uso completo de los aceleradores de entrenamiento es una práctica recomendada para la administración de costos, ya que los aceleradores son el componente más costoso de la arquitectura. El uso completo de los aceleradores de entrenamiento también es una práctica recomendada para la eficiencia del trabajo, ya que no tener tiempo inactivo genera menos consumo general de recursos.
Para mantener un acelerador completamente utilizado, por lo general, se realizan algunas iteraciones para encontrar el cuello de botella, optimizarlo y, luego, repetir estos pasos hasta que la utilización del dispositivo del acelerador sea aceptable. Debido a que muchos de los conjuntos de datos de este caso de uso son demasiado grandes para caber en la memoria, los cuellos de botella suelen ocurrir entre el almacenamiento, las VMs host y el acelerador.
En el siguiente diagrama, se muestran las etapas conceptuales de una canalización de entrada de entrenamiento de AA:
En el diagrama, los datos se leen del almacenamiento y se procesan previamente. Después de que los datos se preprocesan, se envían al dispositivo. Para optimizar el rendimiento, primero determina si el rendimiento general está limitado por la CPU del host o por el dispositivo acelerador (GPU o TPU). El dispositivo es responsable de acelerar el bucle de entrenamiento, mientras que el host es responsable de enviar datos de entrenamiento al dispositivo y recibir resultados del dispositivo. En las siguientes secciones, se describe cómo resolver los cuellos de botella mejorando el rendimiento de la canalización de entrada y el rendimiento del dispositivo.
Mejora el rendimiento de la canalización de entrada
- Leer datos del almacenamiento: Para mejorar las lecturas de datos, prueba el almacenamiento en caché, la prefetching, los patrones de acceso secuencial y la E/S en paralelo.
- Preprocesamiento de datos: Para mejorar el procesamiento previo de datos, configura el procesamiento en paralelo para la extracción y transformación de datos, y ajusta la transformación
interleave
en la canalización de entrada de datos. - Enviar datos al dispositivo: Para reducir el tiempo total de la tarea, transfiere datos del host a varios dispositivos en paralelo.
Mejora el rendimiento del dispositivo
- Aumenta el tamaño del minilote. Los minilotes son la cantidad de muestras de entrenamiento que usa cada dispositivo en una iteración de un ciclo de entrenamiento. Si aumentas el tamaño del minilote, aumentas el paralelismo entre las operaciones y mejoras la reutilización de los datos. Sin embargo, el minilote debe poder caber en la memoria con el resto del programa de entrenamiento. Si aumentas demasiado el tamaño del minilote, es posible que experimentes errores de memoria insuficiente y divergencias del modelo.
- Vectoriza las funciones definidas por el usuario. Por lo general, las transformaciones de datos se pueden expresar como una función definida por el usuario que describe cómo transformar cada elemento de un conjunto de datos de entrada. Para vectorizar esta función, aplicas la operación de transformación a un lote de entradas a la vez en lugar de transformar un elemento a la vez. Cualquier función definida por el usuario tiene una sobrecarga relacionada con la programación y la ejecución. Cuando transformas un lote de entradas, incurres en la sobrecarga una vez por lote, en lugar de una vez por elemento del conjunto de datos.
Escala verticalmente antes de escalar horizontalmente
Cuando configures los recursos de procesamiento para tus trabajos de entrenamiento, te recomendamos que realices el escalamiento vertical antes que el horizontal. Esto significa que debes elegir un dispositivo más grande y potente antes de usar varios dispositivos menos potentes. Te recomendamos que realices la escala de la siguiente manera:
- Un solo trabajador y un solo dispositivo
- Un solo trabajador y un dispositivo más potente
- Un solo trabajador y varios dispositivos
- Entrenamiento distribuido
Evalúa la recuperación en función de la latencia para la búsqueda de vectores de ANN
Para evaluar los beneficios de la búsqueda de ANN, puedes medir la latencia y la recuperación de una consulta determinada. Para ayudar con la optimización del índice, la Búsqueda de vectores de Vertex AI proporciona la capacidad de crear un índice de fuerza bruta. Los índices de fuerza bruta realizarán una búsqueda exhaustiva, a costa de una latencia más alta, para encontrar los vecinos más cercanos reales de un vector de consulta determinado. El uso de índices de fuerza bruta no está diseñado para el uso en producción, pero proporciona un buen modelo de referencia cuando se calcula la recuperación durante el ajuste del índice.
Para evaluar la recuperación en función de la latencia, debes implementar las incorporaciones candidatas precalculadas en un índice configurado para la búsqueda de ANN y en otro índice configurado para la búsqueda de fuerza bruta. El índice de fuerza bruta mostrará los vecinos más cercanos absolutos, pero, por lo general, tardará más que una búsqueda de ANN. Es posible que estés dispuesto a sacrificar parte de la recuperación para obtener ganancias en la latencia de recuperación, pero se debe evaluar esta compensación. Entre las características adicionales que afectan la recuperación y la latencia, se incluyen las siguientes:
- Parámetros de modelado: Muchas decisiones de modelado afectan el espacio de incorporación, que, en última instancia, se convierte en el índice de publicación. Compara los candidatos que se recuperan para los índices que se compilan a partir de modelos de recuperación superficiales y profundos.
- Dimensiones: Las dimensiones son otro aspecto que, en última instancia, determina el modelo. Las dimensiones del índice de ANN deben coincidir con las dimensiones de la consulta y los vectores de torre candidatos.
- Agrupamiento y filtrado de etiquetas: Las etiquetas pueden proporcionar funciones potentes para adaptar los resultados a diferentes casos de uso de producción. Se recomienda comprender cómo las etiquetas influyen en los candidatos recuperados y afectan el rendimiento.
- Cantidad de ANN: Aumentar este valor aumenta la recuperación y puede aumentar proporcionalmente la latencia.
- Porcentaje de nodos hoja para buscar: El porcentaje de nodos hoja para buscar es la opción más importante para evaluar la recuperación en función de la compensación de latencia. Aumentar este valor aumenta la recuperación y puede aumentar proporcionalmente la latencia.
¿Qué sigue?
Para obtener más información sobre las arquitecturas de referencia, los diagramas y las prácticas recomendadas, explora Cloud Architecture Center.
Colaboradores
Autores:
- Jordan Totten | Ingeniero de Atención al cliente
- Jeremy Wortz | Ingeniero de Atención al cliente
- Lakshmanan Sethu | Administrador técnico de cuentas
Otro colaborador: Kaz Sato | Developer Advocate del personal