À propos de Vertex AI Neural Architecture Search

Avec Vertex AI Neural Architecture Search, vous pouvez rechercher des architectures neuronales optimales en termes de précision, de latence et de mémoire, ou en vous basant sur une métrique personnalisée.

Déterminer si Vertex AI Neural Architecture Search est le meilleur outil pour mes besoins

  • Vertex AI Neural Architecture Search est un outil d'optimisation haut de gamme, utilisé pour identifier les meilleures architectures neuronales en termes de justesse, avec ou sans contraintes telles que la latence, la mémoire ou une métrique personnalisée. L'espace de recherche des choix d'architecture neuronale possibles peut atteindre 10^20. Il est basé sur une technique qui a généré avec succès plusieurs modèles de vision par ordinateur de pointe au cours des dernières années, y compris Nasnet, MnasNet, EfficientNet, NAS-FPN et SpineNet.
  • Neural Architecture Search n'est pas une solution où vous auriez juste à charger vos données pour obtenir un résultat de qualité, sans phase d'expérimentation. Il s'agit d'un outil de test.
  • Neural Architecture Search n'est pas destiné au réglage des hyperparamètres, par exemple le réglage du taux d'apprentissage ou des paramètres de l'optimiseur. Il ne doit être utilisé que pour une recherche d'architecture. Vous ne devez pas combiner les réglages des hyperparamètres avec Neural Architecture Search.
  • Neural Architecture Search n'est pas recommandé avec des données d'entraînement limitées ou pour des ensembles de données fortement déséquilibrés, dans lesquels certaines classes sont très rares. Si vous utilisez déjà des augmentations élevées pour votre entraînement de référence en raison d'un manque de données, Neural Architecture Search n'est pas recommandé.
  • Vous devez d'abord tester d'autres méthodes et techniques de machine learning traditionnelles et conventionnelles, telles que le réglage des hyperparamètres. Vous ne devez utiliser Neural Architecture Search que si vous n'obtenez pas d'améliorations avec ces méthodes traditionnelles.
  • Vous devez disposer d'une équipe interne de réglage de modèles, qui possède des connaissances générales sur les paramètres d'architecture à modifier et à tester. Ces paramètres d'architecture peuvent inclure, entre autres, la taille du noyau, ou bien le nombre de canaux ou de connexions. Si vous souhaitez explorer un espace de recherche, Neural Architecture Search peut se révéler très utile et réduire d'environ six mois le temps d'ingénierie consacré à l'exploration d'un grand espace de recherche, pouvant cumuler jusqu'à 10^20 choix d'architecture.
  • Neural Architecture Search est destiné aux entreprises qui peuvent consacrer plusieurs milliers de dollars à un test.
  • Neural Architecture Search ne se limite pas aux cas d'utilisation exclusivement basés sur la vision. Actuellement, seuls des espaces de recherche et applications d'entraînement prédéfinis et basés sur la vision sont fournis. Cependant, les clients peuvent également intégrer leurs propres espaces de recherche et applications d'entraînement, non basés sur la vision.
  • Neural Architecture Search n'est pas une approche de type supernet (recherche d'architecture neuronale d'entraînement global, dite "One-shot", ou recherche d'architecture neuronale basée sur le partage de pondération), dans laquelle vous avez simplement à charger vos données et à les utiliser comme solution. La personnalisation d'un supernet n'est pas une mince affaire, elle suppose au contraire des mois d'efforts. Contrairement à un supernet, Neural Architecture Search est hautement personnalisable, permettant de définir des espaces de recherche personnalisés et des récompenses. La personnalisation peut être effectuée en un à deux jours environ.
  • Neural Architecture Search est disponible dans huit régions dans le monde. Vérifiez la disponibilité dans votre région.

Vous devez également prendre connaissance de la section suivante, portant sur les coûts attendus, l'amélioration des résultats et les exigences de quota de GPU, avant d'utiliser Neural Architecture Search.

Coûts attendus, amélioration des résultats et exigences de quota de GPU

Recherche NAS.

Cette figure représente une courbe Neural Architecture Search typique. L'axe des ordonnées (Y-axis) affiche les récompenses de l'essai, et l'axe des abscisses (X-axis) indique le nombre d'essais lancés. À mesure que le nombre d'essais augmente, le contrôleur commence à trouver des modèles plus performants. Par conséquent, la récompense commence à augmenter. Par la suite, la variance et la croissance de la récompense commencent à diminuer et affichent la convergence. Au moment de la convergence, le nombre d'essais peut varier en fonction de la taille de l'espace de recherche, mais il est de l'ordre de 2 000 essais. Chaque essai est conçu pour être une version plus petite de l'entraînement complet appelé tâche de proxy (proxy-task), qui s'exécute pendant une à deux heures sur deux GPU Nvidia V100. Le client peut arrêter la recherche manuellement à tout moment, et est susceptible d'identifier des modèles de récompense plus élevés que leur point de référence avant le point de convergence. Il peut aussi être préférable d'attendre le point de convergence pour retenir les meilleurs résultats. Après la recherche, l'étape suivante consiste à choisir les 10 meilleurs essais (modèles) et à effectuer un entraînement complet sur ceux-ci.

(Facultatif) Tester l'espace de recherche et l'application d'entraînement MnasNet prédéfinis

Dans ce mode, observez la courbe de recherche ou quelques essais (environ 25), et effectuez un test avec un espace de recherche et une application d'entraînement MnasNet prédéfinis.

Exécution de problème jouet (toy problem) MnasNet.

Dans la figure, la meilleure récompense de la phase 1 commence à monter d'environ 0,30 à l'essai 1 pour atteindre environ 0,37 à l'essai 17. Votre exécution sera peut-être légèrement différente en raison du caractère aléatoire de l'échantillonnage, mais vous devriez constater une légère augmentation au niveau de la meilleure récompense. Notez qu'il s'agit toujours d'une exécution de problème jouet, qui ne constitue aucune démonstration de faisabilité ni validation publique d'analyse comparative.

Le coût de cette exécution est détaillé comme suit :

  • Étape 1 :
    • Nombre d'essais : 25
    • Nombre de GPU par essai : 2
    • Type de GPU : TESLA_T4
    • Nombre de processeurs par essai : 1
    • Type de processeur : n1-highmem-16
    • Durée moyenne de l'entraînement par essai : 3 heures
    • Nombre d'essais parallèles : 6
    • Quota de GPU utilisé : (num-gpus-per-trial * num-parallel-trials) = 12 GPU. Utilisez la région us-central1 pour le test et hébergez les données d'entraînement dans la même région. Aucun quota supplémentaire nécessaire.
    • Durée d'exécution : (total-trials * training-time-per-trial)/(num-parallel-trials) = 12 heures
    • Heures GPU : (total-trials * training-time-per-trial * num-gpus-per-trial) = 150 heures de GPU T4
    • Heures processeur : (total-trials * training-time-per-trial * num-cpus-per-trial) = 75 heures de n1-highmem-16
    • Coût : environ 185 $ Vous pouvez arrêter le job plus tôt pour réduire les coûts. Consultez la page de tarification pour calculer le prix exact.

Comme il s'agit d'un problème jouet, il n'est pas nécessaire d'exécuter un entraînement complet en phase 2 pour les modèles issus de la phase 1. Pour en savoir plus sur l'exécution de la phase 2, consultez le tutoriel 3.

Le notebook MnasNet est utilisé pour cette exécution.

(Facultatif) Démonstration de faisabilité de l'espace de recherche et de l'application d'entraînement MnasNet prédéfinis

Vous pouvez utiliser ce mode si vous souhaitez définir la quasi-réplication d'un résultat MnasNet publié. Selon l'article, MnasNet atteint une justesse (top-1 accuracy) de 75,2 % avec une latence de 78 ms sur un téléphone Pixel, ce qui est 1,8 fois plus rapide que le MobileNetV2, avec une justesse 0,5 % supérieure, et 2,3 fois plus rapide que NASNet, avec une justesse 1,2 % supérieure. Toutefois, cet exemple utilise des GPU et non des TPU pour l'entraînement, ainsi qu'un processeur cloud (n1-highmem-8) pour évaluer la latence. Avec cet exemple, la justesse attendue à l'étape 2 pour MnasNet est de 75,2 % avec une latence de 50 ms sur le processeur cloud (n1-highmem-8).

Le coût de cette exécution est détaillé comme suit :

  • Recherche de la phase 1 :

    • Nombre d'essais : 2 000
    • Nombre de GPU par essai : 2
    • Type de GPU : TESLA_T4
    • Durée moyenne de l'entraînement par essai : 3 heures
    • Nombre d'essais parallèles : 10
    • Quota de GPU utilisé: (num-gpus-per-trial * num-Parallel-trials) = 20 GPU T4. Ce nombre étant supérieur au quota par défaut, créez une demande de quota à partir de l'interface utilisateur de votre projet. Pour en savoir plus, consultez la section setting_up_path.
    • Durée d'exécution : (total-trials * training-time-per-trial)/(num-parallel-trials)/24 = 25 jours Remarque : Le job se termine au bout de 14 jours. Passé ce délai, vous pouvez réactiver aisément le job de recherche pour 14 jours supplémentaires, à l'aide d'une commande. Si vous disposez d'un quota de GPU plus élevé, l'environnement d'exécution diminue proportionnellement.
    • Heures GPU : (total-trials * training-time-per-trial * num-gpus-per-trial) = 12 000 heures de GPU T4
    • Coût : environ 15 000 $
  • Entraînement complet en phase 2 avec les 10 meilleurs modèles :

    • Nombre d'essais : 10
    • Nombre de GPU par essai : 4
    • Type de GPU : TESLA_T4
    • Durée moyenne de l'entraînement par essai : environ 9 jours
    • Nombre d'essais parallèles : 10
    • Quota de GPU utilisé: (num-gpus-per-trial * num-Parallel-trials) = 40 GPU T4. Ce nombre étant supérieur au quota par défaut, créez une demande de quota à partir de l'interface utilisateur de votre projet. Pour en savoir plus, consultez la section setting_up_path. Vous pouvez également exécuter ce job avec 20 GPU T4, en l'exécutant deux fois avec cinq modèles à la fois, au lieu des 10 modèles en parallèle.
    • Durée d'exécution : (total-trials * training-time-per-trial)/(num-parallel-trials)/24 = environ 9 jours
    • Heures GPU : (total-trials * training-time-per-trial * num-gpus-per-trial) = 8 960 heures de GPU T4
    • Coût : environ 8 000 $

Coût total : environ 23 000 $ Consultez la page de tarification pour calculer le prix exact. Remarque : Cet exemple n'est pas un job d'entraînement standard. L'entraînement complet dure environ neuf jours et est exécuté sur quatre GPU TESLA_T4.

Le notebook MnasNet est utilisé pour cette exécution.

Utiliser votre espace de recherche et vos applications d'entraînement

Nous fournissons un coût approximatif pour un utilisateur personnalisé moyen. Vos besoins peuvent varier en fonction de votre tâche d'entraînement, ainsi que des GPU et des processeurs utilisés. Vous devez disposer d'un quota d'au moins 20 GPU pour une exécution de bout en bout, comme indiqué ici. Remarque : Le gain de performances dépend entièrement de votre tâche. Nous ne pouvons fournir que des exemples, tels que MnasNet, pour constituer des références de gain de performances.

Le coût de cette exécution personnalisée hypothétique est détaillé comme suit :

  • Recherche de la phase 1 :

    • Nombre d'essais : 2 000
    • Nombre de GPU par essai : 2
    • Type de GPU : TESLA_T4
    • Durée moyenne de l'entraînement par essai : 1,5 heure
    • Nombre d'essais parallèles : 10
    • Quota de GPU utilisé: (num-gpus-per-trial * num-Parallel-trials) = 20 GPU T4. Ce nombre étant supérieur au quota par défaut, vous devez créer une demande de quota à partir de l'interface utilisateur de votre projet. Pour en savoir plus, consultez la section Demander un quota d'appareils supplémentaire pour le projet.
    • Durée d'exécution : (total-trials * training-time-per-trial)/(num-parallel-trials)/24 = 12,5 jours
    • Heures GPU : (total-trials * training-time-per-trial * num-gpus-per-trial) = 6 000 heures de GPU T4
    • Coût : environ 7 400 $
  • Entraînement complet en phase 2 avec les 10 meilleurs modèles :

    • Nombre d'essais : 10
    • Nombre de GPU par essai : 2
    • Type de GPU : TESLA_T4
    • Durée moyenne d'un entraînement d'essai : environ quatre jours
    • Nombre d'essais parallèles : 10
    • Quota de GPU utilisé: (num-gpus-per-trial * num-Parallel-trials) = 20 GPU T4. **Ce nombre étant supérieur au quota par défaut, vous devez créer une demande de quota à partir de l'interface utilisateur de votre projet. Pour en savoir plus, consultez la section Demander un quota d'appareils supplémentaire pour le projet. Reportez-vous à la même documentation pour la définition de quotas personnalisés.
    • Durée d'exécution : (total-trials * training-time-per-trial)/(num-parallel-trials)/24 = environ 4 jours
    • Heures GPU : (total-trials * training-time-per-trial * num-gpus-per-trial) = 1 920 heures de GPU T4
    • Coût : environ 2 400 $
  • Pour plus d'informations sur le coût de conception de la tâche de proxy, consultez la section Conception des tâches de proxy. Le coût est semblable à celui de l'entraînement de 12 modèles (la phase 2 dans la figure utilise 10 modèles) :

    • Quota de GPU utilisé : identique à l'exécution de la phase 2 dans la figure.
    • Coût: (12/10) x stage-2-cost-for-10-models = environ 2 880 $

Coût total : environ 12 680 $ Consultez la page de tarification pour calculer le prix exact.

Ces coûts de recherche pour la phase 1 correspondent à la recherche jusqu'à ce que le point de convergence soit atteint et pour un gain de performances maximal. Toutefois, n'attendez pas que la recherche arrive au point de convergence. Vous allez vraisemblablement constater un gain de performances moindre avec un coût de recherche plus faible en exécutant l'entraînement complet de phase 2 avec le meilleur modèle jusqu'à présent, si la courbe recherche/récompense a commencé à augmenter. Par exemple, dans le cas du graphique de recherche présenté précédemment, n'attendez pas que les 2 000 essais de convergence soient atteints. Vous aurez probablement trouvé de meilleurs modèles au bout de 700 ou de 1 200 essais, et pouvez exécuter pour ceux-ci un entraînement complet de phase 2. Vous pouvez toujours arrêter la recherche plus tôt pour réduire les coûts. Vous pouvez également effectuer un entraînement complet de phase 2 en parallèle, pendant la recherche, mais assurez-vous de disposer d'un quota de GPU adéquat pour permettre l'exécution d'un job parallèle supplémentaire.

Résumé des performances et des coûts

Le tableau suivant récapitule certains points de données avec différents cas d'utilisation, ainsi que les performances et les coûts associés.

Tableau de synthèse.

Cas d'utilisation et fonctionnalités

Les fonctionnalités de Neural Architecture Search sont flexibles et faciles à utiliser. Un utilisateur débutant peut utiliser des espaces de recherche prédéfinis, des applications d'entraînement prédéfinies et des notebooks sans autre configuration pour commencer à explorer Vertex AI Neural Architecture Search pour son ensemble de données. Dans le même temps, un utilisateur expert peut utiliser NAS avec son application d'entraînement personnalisée, son espace de recherche personnalisé et son appareil d'inférence personnalisé, et même étendre la recherche d'architecture à des cas d'utilisation autres que la vision.

Neural Architecture Search propose des applications d'entraînement et des espaces de recherche prédéfinis à exécuter sur des GPU pour les cas d'utilisation suivants :

  • Résultats des applications d'entraînement TensorFlow avec des ensembles de données publics publiés dans un notebook
    • Détection d'objets au sein d'images avec des espaces de recherche de bout en bout (SpineNet)
    • Classification avec des espaces de recherche de réseau backbone prédéfinis (MnasNet)
    • Détection d'objets de type nuage de points 3D via LiDAR, avec des espaces de recherche prédéfinis de bout en bout
    • Recherche avec contraintes de mémoire et de latence pour le ciblage d'appareils
  • Applications d'entraînement PyTorch à n'utiliser que comme exemple de tutoriel
    • Exemple d'espace de recherche de segmentation d'image médicale 3D PyTorch
    • Classification MnasNet basée sur PyTorch
    • Recherche avec contraintes de mémoire et de latence pour le ciblage d'appareils
  • Autres espaces de recherche prédéfinis basés sur TensorFlow, intégrant du code
    • Scaling de modèles
    • Augmentation des données

La gamme complète de fonctionnalités de Neural Architecture Search peut être facilement utilisée pour les architectures personnalisées et les cas d'utilisation suivants :

  • Un langage Neural Architecture Search permettant de définir un espace de recherche personnalisé sur les architectures neuronales possibles et d'intégrer cet espace de recherche à du code d'entraînement personnalisé.
  • Espaces de recherche prédéfinis et prêts à l'emploi avec du code
  • Application d'entraînement prédéfinie et prête à l'emploi, intégrant du code, exécutée sur GPU.
  • Service géré pour la recherche d'architecture, y compris :
    • Un contrôleur de Neural Architecture Search qui échantillonne l'espace de recherche pour trouver la meilleure architecture.
    • Fichier Docker et bibliothèques prédéfinis avec du code pour calculer la latence, les FLOPS et la mémoire sur du matériel personnalisé
  • Des tutoriels permettant de découvrir l'utilisation de la recherche d'architecture neuronale.
  • Un ensemble d'outils permettant de concevoir des tâches de proxy.
  • Des conseils et exemples pour définir un entraînement PyTorch efficace avec Vertex AI.
  • Compatibilité avec les bibliothèques pour créer des rapports sur les métriques personnalisées et les analyser
  • UI de Cloud Console permettant de surveiller et de gérer les tâches
  • Notebooks faciles à utiliser pour lancer la recherche
  • Compatibilité avec les bibliothèques pour gérer l'utilisation des ressources GPU/CPU par niveau de précision par projet ou par job
  • Client de recherche d'architecture neuronale basé sur Python pour créer des images Docker, lancer des jobs de recherche d'architecture neuronale et reprendre un job de recherche lancé précédemment.
  • Service client basé sur l'interface utilisateur de la console Google Cloud.

Contexte

Neural Architecture Search est une technique permettant d'automatiser la conception des réseaux de neurones. Il a généré plusieurs modèles de vision par ordinateur de pointe au cours des dernières années, y compris les suivants :

Les modèles obtenus sont à l'avant-garde dans les trois principales classes de problèmes de vision par ordinateur : classification d'images, détection d'objets et segmentation.

Neural Architecture Search vous permet d'optimiser les modèles de justesse, de latence et de mémoire dans le même essai, ce qui réduit le temps nécessaire au déploiement des modèles. Neural Architecture Search explore de nombreux types de modèles : le contrôleur propose des modèles de ML, les entraîne et les évalue, puis effectue une itération plus de 1 000 fois pour trouver les meilleures solutions avec une contrainte de latence et/ou de mémoire sur les appareils cibles. La figure suivante montre les principaux composants du framework de recherche d'architecture :

Composants d'un framework Neural Architecture Search.

  • Modèle : architecture neuronale avec des opérations et des connexions.
  • Espace de recherche : espace des modèles possibles (opérations et connexions) pouvant être créé et optimisé.
  • Code d'entraînement Docker : code d'entraînement pouvant être personnalisé par l'utilisateur pour entraîner et évaluer un modèle, et calculer sa justesse.
  • Appareil d'inférence : matériel (par exemple, CPU ou GPU) sur lequel la latence du modèle et l'utilisation de la mémoire sont calculées.
  • Récompense : combinaison des métriques d'un modèle, telles que la justesse, la latence, la mémoire et autres permettant de le classer.
  • Contrôleur NAS : algorithme d'orchestration qui (a) échantillonne les modèles de l'espace de recherche, (b) reçoit les récompenses des modèles et (c) fournit l'ensemble suivant de modèles suggérés à évaluer pour trouver les modèles les plus optimaux.

Tâches de configuration de l'utilisateur

Neural Architecture Search propose une application d'entraînement prédéfinie intégrée aux espaces de recherche prédéfinis qui peut être facilement utilisée avec les notebooks fournis sans configuration supplémentaire.

Cependant, la plupart des utilisateurs doivent utiliser leurs outils d'entraînement personnalisés, leurs espaces de recherche personnalisés, leurs métriques personnalisées (mémoire, latence, temps d'entraînement, etc…) et leurs récompenses personnalisées (combinaison de justesse, de latence, etc…). Pour ce faire, vous devez :

  • Définissez un espace de recherche personnalisé à l'aide du langage Neural Architecture Search fourni.
  • Intégrez la définition de l'espace de recherche dans le code de l'application d'entraînement.
  • Ajoutez des rapports sur les métriques personnalisées au code de l'application d'entraînement.
  • Ajoutez une récompense personnalisée au code de l'application d'entraînement.
  • Créez un conteneur d'entraînement et utilisez-le pour démarrer des tâches Neural Architecture Search.

Le schéma suivant illustre ce processus :

Configuration de Neural Architecture Search dans l'environnement utilisateur.

Service Neural Architecture Search en fonctionnement

Une fois que vous avez configuré le conteneur d'entraînement à utiliser, le service Neural Architecture Search lance ensuite plusieurs conteneurs d'entraînement en parallèle sur plusieurs périphériques GPU. Vous pouvez contrôler le nombre d'essais parallèles pour l'entraînement et le nombre total d'essais à lancer. Chaque conteneur d'entraînement reçoit une architecture suggérée à partir de l'espace de recherche. Le conteneur d'entraînement crée le modèle suggéré, effectue l'entraînement et l'évaluation, puis renvoie les récompenses au service Neural Architecture Search. Au fur et à mesure de ce processus, le service Neural Architecture Search utilise les commentaires liés aux récompenses pour trouver des architectures de modèles toujours plus optimales. Une fois la recherche effectuée, vous avez accès aux métriques signalées pour une analyse plus approfondie.

Service Neural Architecture Search en fonctionnement.

Présentation du parcours utilisateur pour Neural Architecture Search

Voici les principales étapes à suivre pour effectuer un test Neural Architecture Search :

  • Configurations et définitions :

    • Identifiez l'ensemble de données étiqueté et spécifiez le type de tâche (détection ou segmentation, par exemple).
    • Personnalisez le code de l'application d'entraînement :
      • Utilisez un espace de recherche prédéfini ou définissez un espace de recherche personnalisé à l'aide du langage Neural Architecture Search.
      • Intégrez la définition de l'espace de recherche dans le code de l'application d'entraînement.
      • Ajoutez des rapports sur les métriques personnalisées au code de l'application d'entraînement.
      • Ajoutez une récompense personnalisée au code de l'application d'entraînement.
    • Créez un conteneur d'entraînement.
    • Configurez les paramètres de l'essai de recherche pour un entraînement partiel (tâche de proxy). Dans l'idéal, l'entraînement de recherche doit se terminer rapidement (par exemple au bout de 30 à 60 minutes) pour assurer un entraînement partiel des modèles :
      • Époques minimales nécessaires pour que les modèles échantillonnés collectent des récompenses. Les époques minimales n'ont pas besoin d'assurer la convergence des modèles.
      • Hyperparamètres (par exemple, taux d'apprentissage).
  • Exécutez la recherche localement pour vous assurer que le conteneur intégré à l'espace de recherche peut fonctionner correctement.

  • Démarrez la tâche de recherche Google Cloud (étape 1) avec cinq essais de test et vérifiez que ceux-ci répondent aux objectifs d'exécution et de justesse.

  • Démarrez la tâche de recherche Google Cloud (étape 1) avec +1 000 essais.

    • Dans le cadre de la recherche, définissez également un intervalle régulier pour entraîner les N premiers modèles (étape 2) :

      • Hyperparamètres et algorithme de recherche d'hyperparamètres. L'étape 2 utilise généralement une configuration semblable à l'étape 1, mais avec des valeurs plus élevées pour certains paramètres (étapes/époques d'entraînement et nombre de canaux par exemple).
      • Critères d'arrêt (nombre d'époques).
  • Analysez les métriques signalées et/ou visualisez les architectures pour obtenir des insights.

Un test de recherche d'architecture peut être suivi d'un test de recherche de scaling, puis d'un test de recherche d'augmentation.

Ordre de lecture de la documentation

  1. (Obligatoire) Configurer votre environnement
  2. (Obligatoire) Tutoriels
  3. (Obligatoire uniquement pour les clients PyTorch) Entraînement PyTorch efficace avec des données cloud
  4. (Obligatoire) Bonnes pratiques et suggestion de workflow
  5. (Obligatoire) Conception des tâches de proxy
  6. (Obligatoire uniquement si vous utilisez des applications d'entraînement prédéfinies) Utiliser des espaces de recherche prédéfinis et une application d'entraînement prédéfinie

Références