Implémenter la récupération à deux tours pour la génération de candidats à grande échelle

Last reviewed 2025-01-16 UTC

Ce document fournit une architecture de référence qui vous montre comment implémenter un workflow de génération de candidats à deux tours de bout en bout avec Vertex AI. Le framework de modélisation à deux tours est une technique de récupération puissante pour les cas d'utilisation de personnalisation, car il apprend la similarité sémantique entre deux entités différentes, telles que les requêtes Web et les éléments candidats.

Ce document s'adresse aux professionnels techniques tels que les data scientists et les ingénieurs en machine learning qui développent des applications de recommandation à grande échelle avec des exigences de diffusion à faible latence. Pour en savoir plus sur les techniques de modélisation, la formulation des problèmes et la préparation des données pour la création d'un modèle à deux tours, consultez Soumettre la récupération profonde à un scaling à l'aide des outils de recommandation TensorFlow et de Vector Search.

Architecture

Le diagramme suivant illustre une architecture permettant d'entraîner un modèle à deux tours et de déployer chaque tour séparément pour différentes tâches de déploiement et de diffusion :

Architecture permettant d'entraîner un modèle à deux tours et de déployer chaque tour séparément.

L'architecture du diagramme comprend les composants suivants :

  • Données d'entraînement : les fichiers d'entraînement sont stockés dans Cloud Storage.
  • Entraînement à deux tours : le modèle à deux tours combiné est entraîné hors connexion à l'aide du service Vertex AI Training. Chaque tour est enregistré séparément et utilisé pour différentes tâches.
  • Tours de requêtes et de candidats enregistrés : une fois les tours entraînés, chacun d'eux est importé séparément dans Vertex AI Model Registry.
  • Tour de requête déployé : le tour de requête enregistré est déployé sur un point de terminaison Vertex AI en ligne.
  • Prédiction par lot des embeddings : la tour de candidats enregistrée est utilisée dans un job de prédiction par lot pour précalculer les représentations d'embedding de tous les éléments candidats disponibles.
  • JSON des embeddings : les embeddings prédits sont enregistrés dans un fichier JSON dans Cloud Storage.
  • Index ANN : Vertex AI Vector Search est utilisé pour créer un index de diffusion configuré pour la recherche du voisin le plus proche approximatif (ANN).
  • Index déployé : l'index ANN est déployé sur un point de terminaison d'index Vertex AI Vector Search.

Produits utilisés

Cette architecture de référence utilise les produits Google Cloud suivants :

  • Vertex AI Training : service d'entraînement entièrement géré qui vous permet d'opérationnaliser l'entraînement de modèles à grande échelle.
  • Vector Search : service de mise en correspondance des similarités vectorielles qui vous permet de stocker, d'indexer et de rechercher des données sémantiquement similaires ou associées.
  • Vertex AI Model Registry : dépôt central dans lequel vous pouvez gérer le cycle de vie de vos modèles de ML.
  • Cloud Storage : store d'objets économique et sans limite pour tout type de données. Les données sont accessibles depuis et en dehors de Google Cloud, et sont répliquées sur plusieurs emplacements à des fins de redondance.

Cas d'utilisation

Pour répondre aux exigences de diffusion à faible latence, les systèmes de recommandation à grande échelle sont souvent déployés en production en tant que systèmes à deux étapes, voire en tant que systèmes à plusieurs étapes. L'objectif de la première étape, la génération de candidats, est de passer au crible une vaste collection d'éléments candidats et de récupérer un sous-ensemble pertinent de centaines d'éléments pour les tâches de filtrage et de classement en aval. Pour optimiser cette tâche de récupération, tenez compte de ces deux objectifs principaux :

  1. Lors de l'entraînement du modèle, apprenez la meilleure représentation du problème ou de la tâche à résoudre, et compilez cette représentation dans des embeddings <query, candidate>.
  2. Pendant la diffusion du modèle, récupérez les éléments pertinents assez rapidement pour répondre aux exigences de latence.

Le schéma suivant montre les composants conceptuels d'un système de recommandation en deux étapes :

Composants conceptuels d&#39;un système de recommandation en deux étapes.

Dans le schéma, la génération de candidats filtre des millions d'éléments candidats. Le classement filtre ensuite les centaines d'éléments candidats obtenus pour renvoyer des dizaines d'éléments recommandés.

L'architecture de référence de ce document entraîne un modèle de récupération à deux tours. Dans l'architecture, chaque tour est un réseau de neurones qui traite les caractéristiques des requêtes ou des éléments candidats, puis produit une représentation d'embedding de ces caractéristiques. Chaque tour est déployée séparément, car chaque tour sera utilisée pour différentes tâches en production :

  • Tour candidat : le tour candidat est utilisé pour précalculer les embeddings de tous les éléments candidats. Les embeddings précalculés sont déployés sur un point de terminaison d'index Vertex AI Vector Search optimisé pour la récupération à faible latence.
  • Tour déployé : lors de la diffusion en ligne, le tour de requête déployé convertit les requêtes utilisateur brutes en représentations d'embedding. Les représentations vectorielles continues sont ensuite utilisées pour rechercher des représentations vectorielles continues d'éléments similaires dans l'index déployé.

Les architectures à deux tours sont idéales pour de nombreuses tâches de récupération, car elles capturent la relation sémantique entre les entités de requête et candidates, et les mappent à un espace d'intégration partagé. Lorsque les entités sont mappées à un espace d'embedding partagé, les entités sémantiquement similaires sont regroupées plus près les unes des autres. Par conséquent, si vous calculez les embeddings vectoriels d'une requête donnée, vous pouvez rechercher les éléments candidats les plus proches (les plus semblables) dans l'espace d'embedding. Le principal avantage d'une telle architecture est la possibilité de dissocier l'inférence des représentations de requêtes et de candidats. Ce découplage présente principalement deux avantages :

  • Vous pouvez diffuser de nouveaux éléments sans réentraîner un nouveau vocabulaire d'éléments. En fournissant un ensemble de caractéristiques d'éléments à la tour d'éléments candidats, vous pouvez calculer les embeddings d'éléments pour n'importe quel ensemble de candidats, même ceux qui n'ont pas été vus lors de l'entraînement. Cette opération permet de résoudre le problème de démarrage à froid.
    • La tour candidate peut prendre en charge un ensemble arbitraire d'éléments candidats, y compris ceux qui n'ont pas encore interagi avec le système de recommandation. Cette compatibilité est possible, car les architectures à deux tours traitent des fonctionnalités de contenu et de métadonnées riches sur chaque paire <query, candidate>. Ce type de traitement permet au système de décrire un élément inconnu en termes d'éléments qu'il connaît.
  • Vous pouvez optimiser l'inférence de récupération en précalculant tous les embeddings d'éléments candidats. Ces embeddings précalculés peuvent être indexés et déployés dans une infrastructure de diffusion optimisée pour la récupération à faible latence.
    • Le co-apprentissage des tours vous permet de décrire des éléments en termes de requêtes et inversement. Si vous disposez de la moitié d'une paire, comme une requête, et que vous devez rechercher l'autre élément correspondant, vous pouvez précalculer la moitié de l'équation à l'avance. La précomputation vous permet de prendre le reste de la décision le plus rapidement possible.

Considérations de conception

Cette section fournit des conseils pour vous aider à développer une architecture de génération de candidats dans Google Cloud qui répond à vos besoins en termes de sécurité et de performances. Les conseils de cette section ne sont pas exhaustifs. En fonction de vos besoins spécifiques, vous pouvez choisir de prendre en compte d'autres facteurs de conception et compromis.

Sécurité

Vertex AI Vector Search est compatible avec les déploiements de points de terminaison publics et de cloud privé virtuel (VPC). Si vous souhaitez utiliser un réseau VPC, commencez par suivre Configurer une connexion d'appairage de réseaux VPC. Si l'index Vector Search est déployé dans un périmètre VPC, les utilisateurs doivent accéder aux ressources associées à partir du même réseau VPC. Par exemple, si vous développez à partir de Vertex AI Workbench, vous devez créer l'instance Workbench dans le même réseau VPC que le point de terminaison d'index déployé. De même, tout pipeline censé créer un point de terminaison ou déployer un index sur un point de terminaison doit s'exécuter dans le même réseau VPC.

Optimisation des performances

Cette section décrit les facteurs à prendre en compte lorsque vous utilisez cette architecture de référence pour concevoir une topologie dans Google Cloud qui répond aux exigences de performances de vos charges de travail.

Profiler les tâches d'entraînement

Pour optimiser les pipelines d'entrée de données et le graphique d'entraînement global, nous vous recommandons de profiler les performances d'entraînement avec Cloud Profiler. Profiler est une implémentation gérée de TensorBoard Profiler Open Source.

En transmettant l'argument –profiler dans le job d'entraînement, vous permettez au rappel TensorFlow de profiler un certain nombre de lots pour chaque époque. Le profil capture les traces du processeur hôte et du GPU ou du TPU de l'appareil. Les traces fournissent des informations sur la consommation de ressources du job d'entraînement. Pour éviter les erreurs liées à une mémoire insuffisante, nous vous recommandons de commencer par une durée de profil comprise entre 2 et 10 étapes d'entraînement, puis d'augmenter cette durée si nécessaire.

Pour savoir comment utiliser Profiler avec Vertex AI Training et Vertex AI TensorBoard, consultez Profiler les performances d'entraînement des modèles. Pour connaître les bonnes pratiques de débogage, consultez Optimiser les performances des GPU. Pour savoir comment optimiser les performances, consultez Optimiser les performances de TensorFlow à l'aide de Profiler.

Utiliser pleinement les accélérateurs

Lorsque vous associez des accélérateurs d'entraînement tels que des GPU NVIDIA ou des Cloud TPU, il est important de les utiliser pleinement. L'utilisation complète des accélérateurs d'entraînement est une bonne pratique pour la gestion des coûts, car les accélérateurs sont le composant le plus coûteux de l'architecture. L'utilisation complète des accélérateurs d'entraînement est également une bonne pratique pour l'efficacité des jobs, car l'absence de temps d'inactivité entraîne une consommation globale de ressources plus faible.

Pour que l'accélérateur soit pleinement utilisé, vous devez généralement effectuer quelques itérations pour identifier le goulot d'étranglement, l'optimiser, puis répéter ces étapes jusqu'à ce que l'utilisation de l'appareil d'accélération soit acceptable. Étant donné que de nombreux ensembles de données pour ce cas d'utilisation sont trop volumineux pour tenir en mémoire, les goulots d'étranglement se trouvent généralement entre le stockage, les VM hôtes et l'accélérateur.

Le schéma suivant illustre les étapes conceptuelles d'un pipeline d'entrée d'entraînement ML :

Étapes conceptuelles d&#39;un pipeline d&#39;entrée d&#39;entraînement de ML.

Dans le diagramme, les données sont lues à partir du stockage et prétraitées. Une fois les données prétraitées, elles sont envoyées à l'appareil. Pour optimiser les performances, commencez par déterminer si les performances globales sont limitées par le processeur hôte ou par le périphérique d'accélération (GPU ou TPU). L'appareil est responsable de l'accélération de la boucle d'entraînement, tandis que l'hôte est responsable de l'alimentation des données d'entraînement à l'appareil et de la réception des résultats de l'appareil. Les sections suivantes décrivent comment résoudre les goulots d'étranglement en améliorant les performances du pipeline d'entrée et de l'appareil.

Améliorer les performances du pipeline d'entrée
  • Lecture des données à partir du stockage : pour améliorer la lecture des données, essayez la mise en cache, la prefetching, les modèles d'accès séquentiel et les E/S parallèles.
  • Prétraiter les données : pour améliorer le prétraitement des données, configurez le traitement parallèle pour l'extraction et la transformation des données, et ajustez la transformation interleave dans le pipeline d'entrée des données.
  • Envoi de données à l'appareil : pour réduire la durée globale du job, transférez les données de l'hôte vers plusieurs appareils en parallèle.
Améliorer les performances de l'appareil
  • Augmenter la taille du mini-lot : Les mini-lots correspondent au nombre d'échantillons d'entraînement utilisés par chaque appareil lors d'une itération d'une boucle d'entraînement. En augmentant la taille des mini-lots, vous augmentez le parallélisme entre les opérations et améliorez la réutilisation des données. Toutefois, le mini-lot doit pouvoir tenir dans la mémoire avec le reste du programme d'entraînement. Si vous augmentez trop la taille du minibatch, vous risquez de rencontrer des erreurs de mémoire insuffisante et une divergence du modèle.
  • Vectoriser les fonctions définies par l'utilisateur En règle générale, les transformations de données peuvent être exprimées sous la forme d'une fonction définie par l'utilisateur qui décrit comment transformer chaque élément d'un ensemble de données d'entrée. Pour vectoriser cette fonction, vous appliquez l'opération de transformation à un lot d'entrées à la fois au lieu de transformer un élément à la fois. Toute fonction définie par l'utilisateur comporte des frais généraux liés à la planification et à l'exécution. Lorsque vous transformez un lot d'entrées, les frais généraux sont facturés une fois par lot, au lieu d'une fois par élément de l'ensemble de données.
Effectuer un scaling à la hausse avant d'effectuer un scaling horizontal

Lorsque vous configurez les ressources de calcul pour vos jobs d'entraînement, nous vous recommandons de les augmenter avant de les étendre. Cela signifie que vous devez choisir un appareil plus grand et plus puissant avant d'utiliser plusieurs appareils moins puissants. Nous vous recommandons de faire évoluer votre activité de la manière suivante :

  1. Un seul employé et un seul appareil
  2. Un seul nœud de calcul + un appareil plus puissant
  3. Un seul nœud de calcul et plusieurs appareils
  4. Entraînement distribué

Pour évaluer les avantages de la recherche ANN, vous pouvez mesurer la latence et le rappel d'une requête donnée. Pour vous aider à ajuster les index, Vertex AI Vector Search vous permet de créer un index par force brute. Les index par force brute effectuent une recherche exhaustive, au détriment d'une latence plus élevée, pour trouver les vrais voisins les plus proches d'un vecteur de requête donné. L'utilisation d'index de force brute n'est pas prévue pour la production, mais elle fournit une bonne référence lorsque vous calculez le rappel lors de l'optimisation de l'index.

Pour évaluer le rappel par rapport à la latence, vous déployez les embeddings candidats précalculés dans un index configuré pour la recherche ANN et dans un autre index configuré pour la recherche par force brute. L'index par force brute renvoie les voisins les plus proches absolus, mais la recherche ANN prend généralement plus de temps. Vous pouvez être prêt à sacrifier une partie du rappel de récupération pour gagner en latence de récupération, mais ce compromis doit être évalué. Voici d'autres caractéristiques ayant un impact sur le rappel et la latence :

  • Paramètres de modélisation : de nombreuses décisions de modélisation ont un impact sur l'espace d'intégration, qui devient en fin de compte l'index de diffusion. Comparez les candidats récupérés pour les index créés à partir de modèles de récupération superficiels et profonds.
  • Dimensions : les dimensions sont un autre aspect qui est en fin de compte déterminé par le modèle. Les dimensions de l'index ANN doivent correspondre à celles des vecteurs de la tour de requête et de la tour candidate.
  • Tags de regroupement et de filtrage : les tags peuvent offrir de puissantes fonctionnalités pour adapter les résultats à différents cas d'utilisation de production. Il est recommandé de comprendre comment les tags influencent les candidats récupérés et l'impact sur les performances.
  • Nombre d'ANN : l'augmentation de cette valeur augmente le rappel et peut entraîner une augmentation proportionnelle de la latence.
  • Pourcentage de nœuds feuilles à rechercher : le pourcentage de nœuds feuilles à rechercher est l'option la plus importante pour évaluer le compromis entre rappel et latence. L'augmentation de cette valeur augmente le rappel et peut augmenter la latence de manière proportionnelle.

Étapes suivantes

Pour découvrir d'autres architectures de référence, schémas et bonnes pratiques, consultez le Centre d'architecture cloud.

Contributeurs

Auteurs :

Autre contributeur : Kaz Sato | Staff Developer Advocate