Exécutez votre modèle d’IA aussi près que possible de vos données

Exécutez votre modèle d’IA aussi près que possible de vos données

Introduction

Aujourd’hui, nous sommes heureux d’annoncer une version préliminaire de RedisAI, en collaboration avec [tensor]travailler. RedisAI est un module Redis pour servir des tenseurs et exécuter des modèles d’apprentissage en profondeur. Dans cet article de blog, nous vous expliquerons les capacités de ce nouveau module, ce qu’il permet et pourquoi nous pensons qu’il change la donne pour les modèles d’apprentissage automatique et d’apprentissage en profondeur (ML/DL).

RedisAI est apparu pour deux raisons principales. Premièrement, parce que le déplacement de vos données vers un hôte qui exécute votre modèle d’intelligence artificielle (IA) coûte cher et que chaque milliseconde compte dans les expériences instantanées d’aujourd’hui. Deuxièmement, parce que servir des modèles a toujours été un défi DevOps. Nous avons construit RedisAI pour que vous puissiez exécuter votre modèle là où se trouvent les données, et facilement servir, mettre à jour et assemblez vos modèles à partir de plusieurs back-ends à l’intérieur de Redis.

La localité des données est importante

redisai robotPour illustrer pourquoi nous pensons que la colocalité (l’exécution de votre modèle ML/DL là où se trouvent vos données) est importante, considérons un exemple d’application de chatbot. Les chatbots utilisent généralement des réseaux de neurones récurrents (RNN), souvent organisés en architectures seq2seq pour présenter une réponse à une phrase d’entrée. Des modèles plus avancés préservent le contexte de la conversation sous la forme d’un tenseur d’état intermédiaire numérique, utilisant deux tenseurs d’entrée et deux tenseurs de sortie. En entrée, le modèle prend le dernier message de l’utilisateur, et un état intermédiaire représentant l’historique de la conversation. Sa sortie est une réponse au message et au nouvel état intermédiaire.

redisai models 1

Cet état intermédiaire doit être conservé dans une base de données pour prendre en charge l’interaction spécifique à l’utilisateur, tout comme une session, donc Redis est un excellent choix ici. Le modèle du chatbot aurait pu être déployé dans Spark, enveloppé dans une application Flask ou toute autre solution DIY. Lors de la réception d’une demande de chat d’un utilisateur, l’application de service doit récupérer l’état intermédiaire de Redis. Puisqu’il n’y a pas de type de données natif dans Redis pour un tenseur, la base de données devrait d’abord effectuer une désérialisation, et après l’exécution du modèle RNN, elle devrait s’assurer que le dernier état intermédiaire a été sérialisé et renvoyé à Redis.

redisai whiteboard 1

Compte tenu de la complexité temporelle d’un RNN, des cycles CPU perdus lors de la sérialisation/désérialisation et de la surcharge réseau coûteuse, nous savions que nous avions besoin d’une meilleure solution qui pourrait garantir une excellente expérience utilisateur.

Avec RedisAI, nous introduisons un nouveau type de données appelé Tensor. Avec un ensemble de simples commandes, vous pouvez obtenir et définir des Tensors à partir de votre client préféré. Nous introduisons également deux types de données supplémentaires, les modèles et les scripts, pour les fonctionnalités d’exécution des modèles.

redisai models

Les modèles sont définis avec des informations sur l’appareil sur lequel ils doivent s’exécuter (CPU ou GPU) et des paramètres spécifiques au backend. RedisAI dispose de plusieurs backends intégrés, tels que TensorFlow et Pytorch, et nous travaillons à la prise en charge prochaine d’ONNXRuntime. Ce runtime pour ONNX et ONNX-ML ajoute la prise en charge des modèles d’apprentissage automatique “traditionnels”. Ce qui est bien, cependant, c’est que la commande d’exécution d’un Model est indépendante de son backend :

AI.MODELRUN model_key INPUTS input_key1 … OUTPUTS output_key1 ..

Cela vous permet de dissocier votre choix de backend (une décision généralement prise par des scientifiques des données) des services d’application utilisant ces modèles pour fournir des fonctionnalités. Changer de modèle est aussi simple que de définir une nouvelle clé dans Redis. RedisAI gère toutes les demandes d’exécution de modèles dans des files d’attente de traitement et les exécute sur des threads séparés, tandis que Redis reste réactif à toutes les autres commandes.

Les scripts peuvent s’exécuter à la fois sur les CPU et les GPU, et vous permettent de manipuler les Tensors via TorchScript, un langage spécifique au domaine de type Python pour les opérations Tensor. Cela vous permet de pré-traiter vos données d’entrée avant d’exécuter votre modèle et de post-traiter les résultats, par exemple pour assembler différents modèles afin d’améliorer les performances.

redisai data structures
Présentation des structures de données et des backends de RedisAI

Une autre fonctionnalité intéressante est la possibilité d’exécuter plusieurs commandes via un commande de graphe acyclique dirigé (DAG), que nous ajouterons prochainement à RedisAI. Cela vous permettra de combiner plusieurs commandes RedisAI en une seule opération atomique, comme l’exécution de plusieurs instances d’un modèle sur différents appareils et l’assemblage des résultats en calculant la moyenne des prédictions avec un script. A l’aide du moteur DAG, les calculs sont exécutés en parallèle puis joints. Pour une liste complète et plus détaillée des fonctionnalités, visitez redisai.io.

La nouvelle architecture pourrait être simplifiée comme ceci :

redisai whiteboard 2

Modèle servant un défi DevOps rendue facile

Prendre du code directement à partir de vos notebooks Jupyter et le placer dans une application flask peut ne pas offrir les meilleures garanties en production. Comment pouvez-vous être sûr que vous utilisez vos ressources de manière optimale ? Que se passe-t-il avec l’état intermédiaire de notre exemple de chatbot lorsque votre hôte tombe en panne ? Vous pourriez finir par réinventer la roue des fonctionnalités Redis existantes.
D’un autre côté, traiter avec des solutions très opiniâtres peut être difficile, car elles ont tendance à être moins composables que prévu.

L’objectif de RedisAI est d’amener la philosophie Redis au service des modèles d’IA. Étant donné que nous implémentons des Tensors, des modèles et des scripts en tant que structures de données Redis complètes, ils héritent de toutes les fonctionnalités d’entreprise de Redis. Si vous avez besoin de mettre à l’échelle la diffusion de modèles, vous pouvez simplement mettre à l’échelle votre cluster Redis. Vous pouvez également utiliser les fonctionnalités de haute disponibilité de Redis Enterprise pour vous assurer que votre modèle et vos Tensors sont toujours disponibles. Étant donné que Redis évolue facilement, vous pouvez ajouter autant de modèles que vous le souhaitez ou devez exécuter en production, ce qui réduit vos coûts d’infrastructure et votre coût total de possession.

Enfin, RedisAI s’intègre parfaitement dans l’écosystème Redis existant, vous permettant de tout faire, de la réutilisation des flux pour les données d’entrée et des flux de données de sortie classés, en utilisant RedisGears pour effectuer des traductions correctes entre les structures de données, en passant par l’adoption de RedisGraph pour maintenir votre ontologie à jour. et plus.

Conclusion et la suite

À court terme, nous voulons rendre RedisAI généralement disponible, y compris sa prise en charge des trois principaux backends ML/DL (Tensorflow, Pytorch et ONNXRuntime). Dans notre prochaine phase, nous aimerions que ces backends soient chargés dynamiquement, ce qui vous permettra de charger uniquement les backends spécifiques dont vous avez besoin pour les appareils sur lesquels vous souhaitez les exécuter. Par exemple, cela vous permettrait d’utiliser Tensorflow Lite pour vos cas d’utilisation Edge.

Une autre fonctionnalité que nous prévoyons de mettre en œuvre dans un avenir proche est appelée autobatching, qui examinera les files d’attente et consolidera automatiquement les appels vers les mêmes modèles pour extraire les derniers éléments d’efficacité. De plus, RedisAI exposera également des mesures sur le comportement de vos modèles, et nous examinerons la fonctionnalité DAG expliquée précédemment.

Nous sommes impatients d’entendre tous vos commentaires, alors n’hésitez pas à nous contacter ou à commenter github.

Development Source

Related Posts

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Clés Redis dans la RAM |  Redis

Clés Redis dans la RAM | Redis

No Comment

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *