Ce document fournit une architecture de référence qui vous explique 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, comme 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 du problème et la préparation des données pour créer 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:
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 combiné à deux tours est entraîné hors connexion à l'aide du service Vertex AI Training. Chaque tour est enregistrée séparément et utilisée pour différentes tâches.
- Tours de requête et de candidat enregistrées: une fois les tours entraînées, chacune d'elles est importée séparément dans Vertex AI Model Registry.
- Tour de requêtes déployée: la tour de requêtes enregistrée est déployée sur un point de terminaison en ligne Vertex AI.
- Prédire des représentations vectorielles continues par lot: la tour de candidats enregistrée est utilisée dans une tâche de prédiction par lot pour précalculer les représentations vectorielles continues de tous les éléments candidats disponibles.
- Embeddings JSON: les embeddings prédits sont enregistrés dans un fichier JSON dans Cloud Storage.
- Index ANN: Vertex AI Vector Search permet de créer un index de diffusion configuré pour la recherche de voisin le plus proche approximatif (ANN).
- Index déployé: l'index ANN est déployé sur un point de terminaison d'index Vector Search Vertex AI.
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 outils de recommandation à grande échelle sont souvent déployés en production en tant que systèmes à deux étapes, et parfois en tant que systèmes à plusieurs étapes. L'objectif de la première étape, la génération de candidats, est d'examiner une grande 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:
- Lors de l'entraînement du modèle, découvrez la meilleure représentation du problème ou de la tâche à résoudre, puis compilez cette représentation en représentations vectorielles continues
<query, candidate>
. - Lors de la diffusion du modèle, récupérez les éléments pertinents suffisamment 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:
Dans le diagramme, la génération de candidats filtre des millions d'éléments candidats. Le classement filtre ensuite les centaines d'éléments candidats 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 basé sur deux tours. Dans l'architecture, chaque tour est un réseau de neurones qui traite des caractéristiques de requête ou d'éléments candidats, puis produit une représentation d'encapsulation de ces caractéristiques. Chaque tour est déployée séparément, car elle sera utilisée pour différentes tâches en production:
- Tour des candidats: la tour des candidats permet de précalculer les représentations vectorielles continues pour 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ée: lors de la diffusion en ligne, la tour de requêtes déployée convertit les requêtes utilisateur brutes en représentations d'encapsulation. 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 la requête et les entités candidates, et les mappent sur un espace d'embedding 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 dans l'espace d'embedding les éléments candidats les plus proches (les plus similaires). L'avantage principal d'une telle architecture est la possibilité de dissocier l'inférence des représentations de requête et de candidat. Les avantages de ce découplage sont principalement au nombre de deux:
- Vous pouvez diffuser de nouveaux éléments (fraîches) sans avoir à réentraîner un nouveau vocabulaire d'éléments. En fournissant n'importe quel ensemble de caractéristiques d'éléments à la tour des éléments candidats, vous pouvez calculer les représentations vectorielles continues des éléments pour n'importe quel ensemble de candidats, même ceux qui ne sont pas vus pendant l'entraînement. Effectuer ce calcul permet de résoudre le problème de démarrage à froid.
- La tour des candidats peut prendre en charge un ensemble arbitraire d'éléments candidats, y compris les éléments qui n'ont pas encore interagi avec le système de recommandation. Cette compatibilité est possible, car les architectures à deux tours traitent les fonctionnalités de contenu et de métadonnées riches de 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.
- La tour des candidats peut prendre en charge un ensemble arbitraire d'éléments candidats, y compris les éléments qui n'ont pas encore interagi avec le système de recommandation. Cette compatibilité est possible, car les architectures à deux tours traitent les fonctionnalités de contenu et de métadonnées riches de chaque paire
- Vous pouvez optimiser l'inférence de récupération en précalculant tous les représentations vectorielles continues des éléments candidats. Ces représentations vectorielles continues précalculées peuvent être indexées et déployées 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. Le précalcul vous permet de prendre le reste des décisions aussi rapidement que possible.
Considérations de conception
Cette section fournit des conseils pour vous aider à développer dans Google Cloud une architecture de génération de candidats 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 exigences spécifiques, vous pouvez choisir de prendre en compte d'autres facteurs de conception et compromis.
Sécurité
La recherche vectorielle Vertex AI est compatible avec les déploiements de points de terminaison publics et VPC (cloud privé virtuel). Si vous souhaitez utiliser un réseau VPC, commencez par suivre la section 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 effectuez le développement à partir de Vertex AI Workbench, vous devez créer l'instance de Workbench dans le même réseau VPC que le point de terminaison de l'index déployé. De même, tout pipeline censé créer un point de terminaison ou déployer un indice sur un point de terminaison doit s'exécuter sur 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 du profileur TensorBoard Open Source.
En transmettant l'argument –profiler
dans la tâche d'entraînement, vous autorisez le rappel TensorFlow à profiler un nombre défini de lots pour chaque époque. Le profil capture les traces du processeur hôte et du matériel GPU ou TPU de l'appareil. Les traces fournissent des informations sur la consommation de ressources de la tâche d'entraînement. Pour éviter les erreurs liées à une mémoire insuffisante, nous vous recommandons de commencer avec une durée de profil comprise entre deux et 10 étapes d'entraînement, et d'augmenter si nécessaire.
Pour découvrir 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 la section Optimiser les performances des GPU. Pour en savoir plus sur l'optimisation des performances, consultez la section Optimiser les performances de TensorFlow à l'aide de Profiler.
Exploiter 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. Il est recommandé d'utiliser pleinement les accélérateurs d'entraînement pour la gestion des coûts, car ils constituent 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 tâches, car l'absence de temps d'inactivité réduit la consommation globale de ressources.
Pour que l'accélérateur soit pleinement utilisé, vous devez généralement effectuer plusieurs itérations pour trouver 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 de ce cas d'utilisation sont trop volumineux pour tenir dans la mémoire, des goulots d'étranglement se produisent généralement entre le stockage, les VM hôtes et l'accélérateur.
Le schéma suivant montre les étapes conceptuelles d'un pipeline d'entrée d'entraînement 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 l'accélérateur (GPU ou TPU). L'appareil est chargé d'accélérer la boucle d'entraînement, tandis que l'hôte est chargé de fournir des données d'entraînement à l'appareil et de recevoir les 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 les performances de l'appareil.
Améliorer les performances du pipeline d'entrée
- Lire des données à partir d'un espace de stockage: pour améliorer les lectures de données, essayez le cache, le prefetching, les modèles d'accès séquentiels et les E/S parallèles.
- Prétraitement des 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. - Envoyer des données à l'appareil: pour réduire la durée globale de la tâche, 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 dans 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 mini-lot, vous pouvez rencontrer des erreurs de mémoire insuffisante et une divergence de modèle.
- Vectorisez 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, vous encourez des frais généraux 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 d'augmenter la capacité avant de l'étendre. Par conséquent, vous devez choisir un appareil plus grand et plus puissant avant d'utiliser plusieurs appareils moins puissants. Nous vous recommandons de procéder à l'ajustement de la manière suivante:
- Nœud de calcul unique + appareil unique
- Nœud de calcul unique et appareil plus puissant
- Nœud de calcul unique et plusieurs appareils
- Entraînement distribué
Évaluer le rappel par rapport à la latence pour la recherche vectorielle ANN
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 l'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 véritables voisins les plus proches d'un vecteur de requête donné. L'utilisation d'index de force brute n'est pas destinée à un usage en production, mais elle fournit une bonne référence lorsque vous calculez le rappel lors de l'ajustement de l'index.
Pour évaluer le rappel par rapport à la latence, vous déployez les représentations vectorielles continues candidates précalculées dans un indice configuré pour la recherche par ANN et dans un autre indice configuré pour la recherche par force brute. L'index par force brute renvoie les voisins les plus proches absolus, mais cela prend généralement plus de temps qu'une recherche ANN. Vous pouvez être prêt à sacrifier une partie de la capacité de rappel pour gagner en latence de récupération, mais ce compromis doit être évalué. Voici d'autres caractéristiques qui ont 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'encapsulation, qui devient finalement 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 finalement déterminé par le modèle. Les dimensions de l'index ANN doivent correspondre aux dimensions des vecteurs de requête et de tour candidate.
- Balise de filtrage et de regroupement: les balises peuvent fournir des fonctionnalités puissantes pour adapter les résultats à différents cas d'utilisation de production. Il est recommandé de comprendre comment les balises influencent les candidats récupérés et ont un impact sur les performances.
- Nombre d'ANN: l'augmentation de cette valeur augmente le rappel et peut augmenter proportionnellement la latence.
- Pourcentage de nœuds feuilles à rechercher: le pourcentage de nœuds feuilles à rechercher est l'option la plus critique pour évaluer le rappel par rapport au compromis de latence. L'augmentation de cette valeur augmente le rappel et peut augmenter proportionnellement la latence.
Étape suivante
Pour découvrir d'autres architectures de référence, schémas et bonnes pratiques, consultez le Centre d'architecture cloud.
Contributeurs
Auteurs :
- Jordan Totten | Ingénieur client
- Jeremy Wortz | Ingénieur client
- Lakshmanan Sethu | Responsable de compte technique
Autre contributeur: Kaz Sato | Developer Advocate