Le déploiement de GPT-NeoX 20B en production et un focus sur Deepspeed

Déployer GPT-NeoX 20B en production est un défi et nous l'avons appris à nos dépens chez NLP Cloud... Dans cet article, nous vous parlons de plusieurs astuces liées à l'utilisation de GPT-NeoX 20B, et surtout de la façon de gérer DeepSpeed en production.

GPT-NeoX

GPT-NeoX 20B

GPT-NeoX 20B est le plus grand modèle open-source de traitement du langage naturel à l'heure où nous écrivons ces lignes.

Il a été publié par EleutherAI il y a deux semaines. Il a été entraîné sur 20 milliards de paramètres, après un an de travail acharné et plein de défis. L'une de leurs principales difficultés semble être la capacité à mettre en place une architecture parallèle appropriée afin que le modèle puisse être entraîné efficacement sur plusieurs GPU.

Leur modèle précédent, GPT-J, a été entraîné sur les TPU de Google et a été conçu pour être utilisé sur des TPU. L'architecture interne de GPT-NeoX 20B est radicalement différente et est conçue pour être utilisée sur des GPU. L'idée est qu'il soit le premier d'une série de modèles encore plus grands (le but ici est de rattraper GPT-3).

GPT-NeoX 20 est un modèle de génération de texte, ce qui signifie qu'il peut écrire du texte pour vous et réaliser presque tous les cas d'utilisation du traitement du langage naturel avec une grande précision : génération de billets de blog, chatbots, classification de textes, analyse de sentiments, extraction de mots-clés, génération de codes, extraction d'entités, classification d'intentions, réponse à des questions, et plus encore...

Il ne fait aucun doute que de nombreux chercheurs et entreprises vont exploiter ce nouveau modèle et obtenir d'excellents résultats. Mais il y a un défi à relever : comment déployer GPT-NeoX 20B ?

Exigences matérielles

Le premier défi auquel on est confronté lorsqu'on essaie de déployer GPT-NeoX 20B en production, est le matériel avancé qu'il requiert.

Il était encore possible de déployer GPT-J sur du matériel grand public, même s'il était très cher. Par exemple, vous pouviez le déployer sur un très bon CPU (même si le résultat était douloureusement lent) ou sur un GPU de jeu avancé comme le NVIDIA RTX 3090. Mais GPT-NeoX 20B est tellement gros que ce n'est plus possible.

Fondamentalement, GPT-NeoX requiert au moins 42 Go de VRAM et 40 Go d'espace disque (et oui, nous parlons ici de la version mince fp16). Peu de GPU répondent à ces exigences. Les principaux sont les NVIDIA A100, A40, et RTX A6000.

Non seulement ces GPU sont très chers, mais il est également difficile de s'en procurer un aujourd'hui en raison de la pénurie mondiale de semi-conducteurs.

La meilleure solution consiste à opter pour une architecture multi-GPU.

Multi-GPU avec Deepspeed

Si vous ne pouvez pas faire tenir votre modèle dans un seul GPU, vous pouvez essayer de le diviser en plusieurs GPU.

Il s'agit d'une option intéressante pour deux raisons. Premièrement, la mise à l'échelle horizontale d'une infrastructure est souvent moins chère que la mise à l'échelle verticale. C'est vrai pour les serveurs et c'est vrai aussi pour les GPU. Deuxièmement, il est plus facile de mettre la main sur plusieurs petits GPU comme le NVIDIA Tesla T4 que sur de plus gros GPU comme le NVIDIA A40.

Malheureusement, la répartition d'un modèle d'apprentissage automatique entre plusieurs GPU est un défi technique. Hugging Face a fait un excellent article sur le parallélisme des modèles et les choix que vous avez. Lisez-le ici. Mais heureusement, EleutherAI a conçu GPT-NeoX 20B de manière à ce qu'il soit facilement parallélisé sur plusieurs GPU, que ce soit pour l'entraînement ou l'inférence.

L'architecture GPT-NeoX est basée sur Deepspeed. Deepspeed est un framework de Microsoft qui a été conçu à l'origine pour paralléliser les entraînements entre plusieurs GPU, et il est de plus en plus utilisé pour l'inférence également. EleutherAI a fait tout le travail difficile, de sorte que la parallélisation de GPT-NeoX est aussi simple que de changer un nombre dans un fichier de configuration.

Parallélisme GPT-NeoX
Extract from the GPT-NeoX docs about parallelism

Cependant, le déploiement de Deepspeed en production pour l'inférence en ligne via une API est difficile... Deepspeed n'a pas été conçu pour être facilement intégré dans des serveurs web. Chez NLP Cloud, nous l'avons appris à nos dépens, mais après un travail acharné, nous avons finalement réussi à trouver un moyen efficace de faire fonctionner Deepspeed et GPT-NeoX derrière notre API.

Astuces d'utilisation

Supposons donc que vous ayez réussi à approvisionner le matériel adéquat et à déployer correctement GPT-NeoX 20B avec Deepspeed. Il y a maintenant quelques mises en garde dont vous devez être conscient.

Premièrement, par rapport à GPT-J, les paramètres (top k, top p, et température) n'ont pas les mêmes effets sur le modèle. Donc si vous avez réussi à trouver une bonne configuration pour GPT-J, ne le prenez pas pour acquis : vous devrez faire de nouveaux tests avec GPT-NeoX.

Enfin, même si la taille d'entrée peut aller jusqu'à 2048 jetons, cela nécessitera plus de mémoire que les 42GB de base mentionnés ci-dessus...

Inférence par lots ?

Les modèles GPT sont assez lents, et GPT-NeoX 20B ne fait pas exception. Afin d'améliorer le débit de votre application, il est donc préférable de travailler sur une solution d'inférence par lots.

Pour l'instant, nous n'avons pas encore trouvé de bonne solution à ce sujet chez NLP Cloud.

Le code de GPT-NeoX est conçu pour que l'on puisse effectuer plusieurs inférences en même temps dans une seule requête. Mais dans nos tests, le temps de réponse augmente linéairement avec le nombre d'inférences, ce qui va à l'encontre de l'objectif de l'inférence par lot...

Conclusion

GPT-NeoX 20B est définitivement difficile à déployer en production. La qualité de la génération de texte est étonnante, mais peu de personnes auront la capacité d'installer réellement ce modèle.

Plus que jamais, il semble que la solution sera de s'appuyer sur un service Cloud comme NLP Cloud afin d'utiliser ce modèle.

Si vous avez des commentaires sur cet article, n'hésitez pas à nous contacter, nous serons ravis de connaître votre opinion à ce sujet !

Julien Salinas
Directeur technique de NLP Cloud