En este documento, se proporciona una arquitectura de referencia que muestra cómo implementar un flujo de trabajo de generación de candidatos de dos túneles de extremo a extremo con Vertex AI. El framework de modelado de dos túneles es una técnica de recuperación potente para 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 y 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 , el planteamiento de problemas y la preparación de datos para compilar un modelo de dos túneles , 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 túneles y, luego, implementar cada túnel 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 túneles: El modelo combinado de dos túneles se entrena sin conexión con el servicio de Vertex AI Training. Cada túnel se guarda por separado y se usa para diferentes tareas.
- Túneles de consulta y candidatos registrados: Después de entrenar los túneles, cada uno se sube por separado a Vertex AI Model Registry.
- Túnel de consulta implementado: El túnel de consulta registrado se implementa en un extremo en línea de Vertex AI.
- Embeddings de predicción por lotes: El túnel de candidatos registrado se usa en un trabajo de predicción por lotes para calcular previamente las representaciones de embeddings de todos los elementos candidatos disponibles.
- JSON de embeddings: Los embeddings predichos se guardan en un archivo JSON en Cloud Storage.
- Índice ANN: Se usa Vertex AI Vector Search para crear un índice de entrega que esté configurado para la búsqueda de vecinos más cercanos aproximados (ANN).
- Índice implementado: El índice ANN se implementa en un extremo de índice de Vertex AI Vector Search.
Productos usados
En esta arquitectura de referencia, se usan los siguientes Google Cloud productos:
- Vertex AI Training: Un servicio de entrenamiento completamente administrado que te permite poner en funcionamiento el entrenamiento de modelos a gran escala.
- Vector Search: 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: Un repositorio central en el que puedes administrar el ciclo de vida de los modelos de AA.
- Cloud Storage: Un almacén de objetos de bajo costo y sin límites para varios tipos de datos. Se puede acceder a los datos desde y hacia Google Cloud Google Cloud, y estos se replican en las ubicaciones para aumentar la redundancia.
Caso de uso
Para cumplir con los requisitos de entrega de baja latencia, los recomendadores a gran escala suelen implementarse 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 examinar una gran colecció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, considera estos dos objetivos principales:
- Durante el entrenamiento de modelos, aprende la mejor representación del problema o
la tarea que se debe resolver y compila esta representación en
<query, candidate>embeddings. - Durante la entrega del modelo, recupera los elementos relevantes con la rapidez suficiente para cumplir con los requisitos de latencia.
En el siguiente diagrama, se muestran los componentes conceptuales de un recomendador 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 docenas de elementos recomendados.
La arquitectura de referencia de este documento entrena un modelo de recuperación basado en dos túneles. En la arquitectura, cada túnel es una red neuronal que procesa las funciones de consulta o de elementos candidatos y, luego, produce una representación de embeddings de esas funciones. Cada túnel se implementa por separado, ya que se usará para diferentes tareas en producción:
- Túnel de candidatos: El túnel de candidatos se usa para calcular previamente los embeddings de todos los elementos candidatos. Los embeddings calculados previamente se implementan en un extremo de índice de Vertex AI Vector Search optimizado para la recuperación de baja latencia.
- Túnel implementado: Durante la entrega en línea, el túnel de consulta implementado convierte las consultas de usuarios sin procesar en representaciones de embeddings. Luego, las representaciones de embeddings se usan para buscar embeddings de elementos similares en el índice implementado.
Las arquitecturas de dos torres son ideales para muchas tareas de recuperación, ya que una arquitectura de dos torres captura la relación semántica de las entidades de consulta y candidatas, y las asigna a un espacio de embedding compartido. Cuando las entidades se asignan a un espacio de embeddings compartido, las entidades semánticamente similares se agrupan más cerca. Por lo tanto, si calculas los embeddings de vectores de una consulta determinada, puedes buscar en el espacio de embeddings los elementos candidatos más cercanos (más similares). El principal beneficio de esta arquitectura es la capacidad de separar la inferencia de las representaciones de consulta y candidatas. Las ventajas de esta separación son principalmente dos:
- Puedes entregar elementos nuevos (actualizados) sin volver a entrenar un vocabulario de elementos nuevos. Si ingresas cualquier conjunto de funciones de elementos al túnel de elementos candidatos, puedes calcular los embeddings 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.
- El túnel 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 túneles
procesan contenido enriquecido y funciones de metadatos sobre cada
<query, candidate>par. Este tipo de procesamiento permite que el sistema describa un elemento desconocido en términos de elementos que conoce.
- El túnel 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 túneles
procesan contenido enriquecido y funciones de metadatos sobre cada
- Puedes optimizar la inferencia de recuperación calculando previamente todos los embeddings de elementos candidatos. Estos embeddings calculados previamente se pueden indexar e implementar en una infraestructura de entrega optimizada para la recuperación de baja latencia.
- El aprendizaje conjunto de los túneles te permite describir elementos en términos de consultas y viceversa. Si tienes una mitad de un par, como una consulta, y necesitas buscar el otro elemento correspondiente, puedes calcular previamente la mitad de la ecuación. El cálculo previo te permite tomar el resto de la decisión 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 satisfaga 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
Vertex AI Vector Search admite implementaciones de extremos públicos y de nube privada virtual (VPC). Si deseas usar una red de VPC, comienza siguiendo los pasos para configurar una conexión de intercambio de tráfico entre redes de VPC . Si el índice de Vector Search 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 dentro de la misma red de VPC que el extremo de índice implementado. Del mismo modo, cualquier canalización que se espere que cree un extremo o implemente 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 las 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 crees perfiles de rendimiento de entrenamiento con Cloud Profiler. Profiler es una implementación administrada de TensorBoard Profiler de código abierto .
Si pasas el argumento –profiler en el trabajo de entrenamiento, habilitas la devolución de llamada de TensorFlow para crear perfiles de una cantidad determinada de lotes para cada época. El perfil captura seguimientos de la CPU del host y del hardware de la GPU o TPU del dispositivo. Los seguimientos 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 de perfil de entre 2 y 10 pasos de entrenamiento, y que aumentes según sea necesario.
Para obtener información sobre cómo usar Profiler con Vertex AI Training y Vertex AI TensorBoard, consulta Rendimiento del entrenamiento de modelos de perfil. 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.
Usa los aceleradores por completo
Cuando adjuntas aceleradores de entrenamiento, como las GPU de NVIDIA o las TPU de Cloud, 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 de inactividad genera un menor consumo general de recursos.
Para mantener un acelerador completamente utilizado, por lo general, realizas algunas iteraciones para encontrar el cuello de botella, optimizarlo y, luego, repetir estos pasos hasta que el uso del dispositivo acelerador sea aceptable. Debido a que muchos de los conjuntos de datos para este caso de uso son demasiado grandes para caber en la memoria, los cuellos de botella suelen encontrarse entre el almacenamiento, las VMs del 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 preprocesan. Después de preprocesar los datos, se envían al dispositivo. Para optimizar el rendimiento, comienza por determinar 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 ingresar datos de entrenamiento al dispositivo y recibir resultados de este. 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
- Lectura de datos del almacenamiento: Para mejorar las lecturas de datos, prueba el almacenamiento en caché, prefetching, los patrones de acceso secuencial, y la E/S paralela.
- Preprocesamiento de datos: Para mejorar el preprocesamiento de datos, configura
el procesamiento paralelo
para la extracción y transformación de datos, y ajusta la
interleavetransformación en la canalización de entrada de datos. - Envío de datos al dispositivo: Para reducir el tiempo general del trabajo, 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 bucle de entrenamiento. Si aumentas el tamaño del minilote, aumentas el paralelismo entre las operaciones y mejoras la reutilización de 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, puedes experimentar errores de memoria insuficiente y divergencia 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, debes aplicar la operación de transformación en 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 escales verticalmente antes de escalar horizontalmente. Esto significa que debes elegir un dispositivo más grande y potente antes de usar varios dispositivos menos potentes. Te recomendamos que reduzcas la escala de la siguiente manera:
- Un solo trabajador + un solo dispositivo
- Un solo trabajador + un dispositivo más potente
- Un solo trabajador + varios dispositivos
- Entrenamiento distribuido
Evalúa la recuperación en función de la latencia para la búsqueda de vectores ANN
Para evaluar los beneficios de la búsqueda ANN, puedes medir la latencia y la recuperación de una consulta determinada. Para ayudar con el ajuste del índice, Vertex AI Vector Search proporciona la capacidad de crear un índice de fuerza bruta. Los índices de fuerza bruta realizarán una búsqueda exhaustiva, a expensas de una mayor latencia, para encontrar los verdaderos vecinos más cercanos para un vector de consulta determinado. El uso de índices de fuerza bruta no está destinado al uso en producción, pero proporciona una buena línea de base cuando calculas la recuperación durante el ajuste del índice.
Para evaluar la recuperación en función de la latencia, implementa los embeddings de candidatos calculados previamente en un índice configurado para la búsqueda 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 ANN. Es posible que estés dispuesto a sacrificar algo de recuperación para obtener ganancias en la latencia de recuperación, pero se debe evaluar esta compensación. Las características adicionales que afectan la recuperación y la latencia incluyen las siguientes:
- Parámetros de modelado: Muchas decisiones de modelado afectan el espacio de embeddings, que, en última instancia, se convierte en el índice de entrega. 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 ANN deben coincidir con las dimensiones de los vectores de los túneles de consulta y candidatos.
- Etiquetas de filtrado y aglomeración: Las etiquetas pueden proporcionar capacidades potentes para adaptar los resultados a diferentes casos de uso de producción. Es una práctica recomendada comprender cómo las etiquetas influyen en los candidatos recuperados y afectan el rendimiento.
- Recuento de ANN: Aumentar este valor aumenta la recuperación y puede aumentar la latencia de manera proporcional.
- Porcentaje de nodos de hoja para buscar: El porcentaje de nodos de hoja para buscar es la opción más importante para evaluar la compensación de la recuperación en función de la latencia. Aumentar este valor aumenta la recuperación y puede aumentar la latencia de manera proporcional.
¿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 | Defensor de desarrolladores sénior