Modèle Bytedance déploiement à grande échelle combat réel
1. Introduction au contexte
Dans ByteDance, les applications basées sur l'apprentissage profond fleurissent partout. Alors que les ingénieurs se concentrent sur les effets de modèle, ils doivent également prêter attention à la cohérence et aux performances des services en ligne. Cela nécessite généralement une division du travail entre des experts en algorithmes et des experts en ingénierie. Ce mode entraîne des coûts relativement élevés, tels que le dépannage et la vérification des différences.
Avec la popularité du framework PyTorch/TensorFlow, la formation des modèles d'apprentissage en profondeur et le raisonnement en ligne ont été unifiés. Les développeurs n'ont qu'à prêter attention à la logique de l'algorithme spécifique et à appeler l'API Python du framework pour terminer le processus de vérification de la formation. , le modèle peut être facilement exporté et le travail de raisonnement est complété par un moteur C++ unifié hautes performances. Expérience développeur améliorée, de la formation au déploiement.
Cependant, un service complet comporte généralement de nombreuses logiques métier telles que le pré-traitement/post-traitement. Ce type de logique traite généralement diverses entrées dans des Tensors, puis les entre dans le modèle. traités au format Target, certains scénarios typiques sont les suivants :
- Bert
- Resnet
Notre objectif est de fournir des solutions de formation et d'inférence automatisées et unifiées pour le processus de bout en bout ci-dessus, et atténuer le développement manuel du processus d'inférence, des différences d'alignement et d'autres problèmes pour obtenir une solution de déploiement unifiée à grande échelle.
2. Problèmes fondamentaux
PyTorch/TensorFlow et d'autres frameworks ont relativement résolu le problème de la formation/inférence de modèle unifié, de sorte que le calcul du modèle lui-même n'a pas le problème de l'intégration de la formation et de l'inférence (l'optimisation des performances de l'opérateur n'est pas dans le cadre de cette discussion).
Le problème principal à résoudre est le suivant : le pré-traitement et le post-traitement doivent fournir une formation performante et une solution intégrée push.
Pour ce type de logique, TensorFlow 2.x fournit tf.function (pas encore complet) et PyTorch fournit TorchScript, qui, sans exception, sélectionne un sous-ensemble de la syntaxe Python native. Mais même si elle est si puissante, il reste des problèmes qui ne peuvent être ignorés :
- Performance : La plupart de cette solution est basée sur l'implémentation de machines virtuelles. La solution de machine virtuelle est flexible et très contrôlable, mais la plupart des machines virtuelles sont en deep learning. les frameworks n’ont généralement pas de performances suffisantes. En complément, le cadre a été conçu pour l'informatique Tensor au début. Le coût de chaque opérateur dans l'informatique matricielle est très élevé et le coût de répartition et de planification des machines virtuelles peut être ignoré. Cependant, les frais généraux liés au portage vers un langage de programmation sont difficiles à ignorer, et écrire trop de code deviendra un goulot d'étranglement en termes de performances. Selon les tests, les performances de l'interpréteur TorchScript ne représentent qu'environ 1/5 de celles de Python, et les performances de tf.function sont encore pires.
- Fonctions incomplètes : en fait, lorsqu'elles sont appliquées à des scénarios réels, nous pouvons encore trouver de nombreuses fonctions importantes que tf.function/TorchScript ne prend pas en charge. Par exemple : les ressources personnalisées ne peuvent pas être empaquetées et ne peuvent sérialiser que les types intégrés ; uniquement lors du traitement des octets, Unicode comme le chinois provoquera des différences ; le conteneur doit être isomorphe et ne prend pas en charge les types personnalisés, etc...
De plus, il existe de nombreuses tâches d'apprentissage non approfondies, comme il y en a encore beaucoup tâches d'apprentissage non approfondies dans le traitement du langage naturel Les applications ou sous-tâches d'apprentissage profond, telles que l'étiquetage de séquences, le décodage de modèles de langage, la construction de caractéristiques artificielles de modèles arborescents et d'autres tâches, ont généralement des paradigmes de fonctionnalités plus flexibles, mais en même temps, elles ont Une solution intégrée de formation et de push de bout en bout n'a pas été entièrement mise en œuvre. Il reste encore beaucoup de travail de développement et de vérification de l'exactitude.
Afin de résoudre les problèmes ci-dessus, nous avons développé une solution de prétraitement basée sur la compilation : MATXScript !
3. MATXScript
Dans le développement d'algorithmes d'apprentissage profond, les développeurs utilisent généralement Python pour des itérations et des expérimentations rapides, tout en utilisant C++ pour développer des services en ligne hautes performances, dans lesquels la vérification de l'exactitude et le développement de services deviendront un fardeau plus lourd !
MatxScript (https://github.com/bytedance/matxscript) est un compilateur AOT pour le sous-langage Python, qui peut traduire automatiquement Python en C++ et fournir des fonctions d'empaquetage et de publication en un clic. L'utilisation de MATXScript permet aux développeurs d'itérer rapidement sur les modèles tout en déployant des services hautes performances à moindre coût.
L'architecture de base est la suivante :
- La couche la plus basse est une bibliothèque de base pure C++/CUDA, développée par des experts opérateurs hautes performances.
- En plus de la bibliothèque de base, la bibliothèque Python est encapsulée selon la convention et peut être utilisée dans le processus de formation.
- Lorsque l'inférence est nécessaire, MATXScript peut être utilisé pour traduire le code Python en code C++ équivalent, le compiler dans une bibliothèque de liens dynamiques, ajouter le modèle et d'autres ressources dépendantes, puis le conditionner et le publier ensemble.
Parmi eux, le rôle du compilateur est très critique, et son processus principal est le suivant :
Grâce au processus ci-dessus, le code de prétraitement écrit par l'utilisateur peut être compilé dans un JitOp dans le Pipeline, afin de relier le pré- et post-traitement au modèle, nous avons également développé un système de traçage (le design de l'interface fait référence à PyTorch), avec l'architecture suivante :
Basé sur MATXScript, nous pouvons utiliser le même ensemble de code pour la formation et l'inférence, ce qui réduit considérablement le coût de déploiement du modèle. Dans le même temps, l'architecture et l'algorithme sont découplés et les étudiants en algorithme peuvent travailler entièrement en Python. Les étudiants en architecture se concentrent sur le développement du compilateur et l'optimisation du runtime. Dans ByteDance, cette solution a été vérifiée par un déploiement à grande échelle !
4. Un petit test
Ici, nous prenons le prétraitement de texte anglais le plus simple comme exemple pour montrer comment utiliser MATXScript.
Objectif : convertir un morceau de texte anglais en index
- Écrire une logique de recherche de dictionnaire de base
class Text2Ids: def __init__(self) -> None: self.table: Dict[str, int] = { "hello": 0, "world": 1, "[UNK]": 2, } def lookup(self, word: str) return self.table.get(word, 2) def__call__ (self, words: List[str]) return [self.lookup(w) for w in words]
- Write Pipeline
import matx class WorkFlow: def __init__(self): # 此处会进行代码编译,Python 代码自动编译封装为 Callable 对象 self.text2ids = matx.script(Text2Ids)() def process(self, texts): ids = self.text2ids(texts) return ids # test handler = WorkFlow() print(handler.process("hello world unknown")) # output: [0, 1, 2]
- Tracer l'exportation sur le disque
# dump mod = matx.trace(handler.process, "hello world") print(mod.run({"texts": "hello world"})) mod.save('./my_dir') # load mod = matx.load('./my_dir', -1) print(mod.run({"texts": "hello world"}))
- C++ Load
#include <string> #include <vector> #include <map> #include <iostream> #include <matxscript/pipeline/tx_session.h> using namespace ::matxscript::runtime; int main() { // test case std::unordered_map<std::string, RTValue> feed_dict; feed_dict.emplace("texts", Unicode(U"hello world")); std::vector<std::pair<std::string, RTValue>> result; const char* module_path = "./my_dir"; const char* module_name = "model.spec.json"; { // -1 mean cpu auto sess = TXSession::Load(module_path, module_name, -1); auto result = sess->Run(feed_dict); for (auto& r : result) { std::cout << "key: " << r.first << ", value: " << r.second << std::endl; } } return 0; }
Terminez le le code peut être trouvé sur : https://github.com/bytedance/matxscript/tree/main/examples/text2ids
Résumé : Ce qui précède est une logique de prétraitement très simple implémentée en Python pur et peut être chargée par un C++ général. code Run, combinons le modèle pour montrer un véritable cas multimodal de bout en bout !
5. Cas multimodal
Ici, nous prenons comme exemple le multimodal graphique et textuel (Bert+Resnet). Le modèle est écrit à l'aide de PyTorch pour montrer le travail réel de formation et de déploiement.
- Configurer l'environnement
a. Configurer l'infrastructure telle que gcc/cuda (généralement les étudiants en exploitation et maintenance l'ont déjà fait)
b Installer MATXScript et les bibliothèques de base développées sur cette base (texte, vision, etc.) - . Écrivez le code du modèle
a. Il est omis ici. Vous pouvez vous référer à des articles ou à d'autres implémentations open source pour le faire vous-même - Écrivez le code de prétraitement
a.
a. TextPipeline peut être utilisé comme une classe Python normale. Connectez-vous simplement à l'ensemble de donnéesb VisionPipeline implique un prétraitement GPU et est plus adapté au traitement par lots. Vous devez construire un DataLoader séparément (enterrez un point ici, nous ouvrirons la source. DataLoader multithread interne de ByteDance plus tard)
- Ajouter Téléchargez le code du modèle et commencez la formation
Exportez le modèle d'inférence de bout en bout- Résumé : Après les étapes ci-dessus, nous pouvons terminer la formation de bout en bout & release work, et l'ensemble du processus est complété avec du code Python pur et peut être entièrement complété par les étudiants en algorithme qui le contrôlent eux-mêmes. Bien entendu, s'il existe des problèmes de performances dans le calcul du modèle lui-même, celui-ci peut également être effectué en coulisse grâce à la modification et à l'optimisation automatiques de l'image.
- Remarque : pour des exemples de code complets, voir https://github.com/bytedance/matxscript/tree/main/examples/e2e_multi_modal
from typing import List, Dict, Tuple import libcut import matx class Vocabulary: ... def utf8_decoder(s: List[bytes]): return [x.decode() for x in s] class TextNDArrayBuilder: ... class TextPipeline: def __init__(self, mode: str = "eval"): self.mode = mode self.cut_engine = libcut.Cutter('/path/to/cut_models', ...) self.vocab = matx.script(Vocabulary)('/path/to/vocab.txt') self.decoder = matx.script(utf8_decoder) self.input_builder = matx.script(TextNDArrayBuilder)(self.vocab) def process(self, text: List[bytes]): # List[bytes] 是对齐 C++ 的 vector<string> text: List[str] = self.decoder(text) words: List[List[str]] = self.cut_engine(text) batch_ids: List[List[int]] = self.vocab(words) input_ids, segment_ids, mask_ids = self.input_builder(batch_ids, 32) if self.mode == "train": return input_ids.torch(), segment_ids.torch(), mask_ids.torch() return input_ids, segment_ids, mask_ids
from typing import List, Dict, Tuple import matx from matx import vision class VisionPipeline: def __init__(self, device_id: int = 0, mode: str = "eval", image_size: int = 224,): self.is_training = mode == 'train' self.mode = mode ... def process(self, image,): if self.is_training: decode_nds = self.random_crop_decode(image) flip_nds = self.random_flip(decode_nds) resize_nds = self.resize(flip_nds) transpose_nd = self.transpose_norm(resize_nds, vision.SYNC) else: decode_nds = self.decode(image) resize_nds = self.resize(decode_nds) crop_nds = self.center_crop(resize_nds) transpose_nd = self.transpose_norm(crop_nds, vision.SYNC) if self.mode == "trace": return transpose_nd return transpose_nd.torch()
VII. Plus d'informations
Nous sommes l'équipe du système d'apprentissage automatique Bytedance-AML, engagée à fournir à l'entreprise un cadre intégré unifié de formation et de promotion de haute performance, et à servir également la coopération via la plateforme d'apprentissage automatique Volcano Engine Pour entreprises, la plate-forme d'apprentissage automatique Volcano Engine devrait fournir un support lié à MATX à partir de 2023, y compris des environnements miroir prédéfinis, des échantillons publics de scénarios courants, un support technique lors de l'accès et de l'utilisation en entreprise, etc., ce qui permet d'obtenir une formation et une inférence à faible coût. scénarios. Effets d’accélération et d’intégration. Bienvenue pour en savoir plus sur nos produits sur https://www.volcengine.com/product/ml-platform.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Écrit précédemment, nous discutons aujourd'hui de la manière dont la technologie d'apprentissage profond peut améliorer les performances du SLAM (localisation et cartographie simultanées) basé sur la vision dans des environnements complexes. En combinant des méthodes d'extraction de caractéristiques approfondies et de correspondance de profondeur, nous introduisons ici un système SLAM visuel hybride polyvalent conçu pour améliorer l'adaptation dans des scénarios difficiles tels que des conditions de faible luminosité, un éclairage dynamique, des zones faiblement texturées et une gigue importante. Notre système prend en charge plusieurs modes, notamment les configurations étendues monoculaire, stéréo, monoculaire-inertielle et stéréo-inertielle. En outre, il analyse également comment combiner le SLAM visuel avec des méthodes d’apprentissage profond pour inspirer d’autres recherches. Grâce à des expériences approfondies sur des ensembles de données publiques et des données auto-échantillonnées, nous démontrons la supériorité du SL-SLAM en termes de précision de positionnement et de robustesse du suivi.

Dans la vague actuelle de changements technologiques rapides, l'intelligence artificielle (IA), l'apprentissage automatique (ML) et l'apprentissage profond (DL) sont comme des étoiles brillantes, à la tête de la nouvelle vague des technologies de l'information. Ces trois mots apparaissent fréquemment dans diverses discussions de pointe et applications pratiques, mais pour de nombreux explorateurs novices dans ce domaine, leurs significations spécifiques et leurs connexions internes peuvent encore être entourées de mystère. Alors regardons d'abord cette photo. On constate qu’il existe une corrélation étroite et une relation progressive entre l’apprentissage profond, l’apprentissage automatique et l’intelligence artificielle. Le deep learning est un domaine spécifique du machine learning, et le machine learning

Près de 20 ans se sont écoulés depuis que le concept d'apprentissage profond a été proposé en 2006. L'apprentissage profond, en tant que révolution dans le domaine de l'intelligence artificielle, a donné naissance à de nombreux algorithmes influents. Alors, selon vous, quels sont les 10 meilleurs algorithmes pour l’apprentissage profond ? Voici les meilleurs algorithmes d’apprentissage profond, à mon avis. Ils occupent tous une position importante en termes d’innovation, de valeur d’application et d’influence. 1. Contexte du réseau neuronal profond (DNN) : Le réseau neuronal profond (DNN), également appelé perceptron multicouche, est l'algorithme d'apprentissage profond le plus courant lorsqu'il a été inventé pour la première fois, jusqu'à récemment en raison du goulot d'étranglement de la puissance de calcul. années, puissance de calcul, La percée est venue avec l'explosion des données. DNN est un modèle de réseau neuronal qui contient plusieurs couches cachées. Dans ce modèle, chaque couche transmet l'entrée à la couche suivante et

Selon les informations du 13 juin, selon le compte public « Volcano Engine » de Byte, l'assistant d'intelligence artificielle de Xiaomi « Xiao Ai » a conclu une coopération avec Volcano Engine. Les deux parties réaliseront une expérience interactive d'IA plus intelligente basée sur le grand modèle beanbao. . Il est rapporté que le modèle beanbao à grande échelle créé par ByteDance peut traiter efficacement jusqu'à 120 milliards de jetons de texte et générer 30 millions de contenus chaque jour. Xiaomi a utilisé le grand modèle Doubao pour améliorer les capacités d'apprentissage et de raisonnement de son propre modèle et créer un nouveau « Xiao Ai Classmate », qui non seulement saisit plus précisément les besoins des utilisateurs, mais offre également une vitesse de réponse plus rapide et des services de contenu plus complets. Par exemple, lorsqu'un utilisateur pose une question sur un concept scientifique complexe, &ldq

Récemment, DiffusionModel a réalisé des progrès significatifs dans le domaine de la génération d'images, offrant des opportunités de développement sans précédent aux tâches de génération d'images et de génération de vidéos. Malgré les résultats impressionnants, les propriétés de débruitage itératif en plusieurs étapes inhérentes au processus d'inférence des modèles de diffusion entraînent des coûts de calcul élevés. Récemment, une série d’algorithmes de distillation de modèles de diffusion ont vu le jour pour accélérer le processus d’inférence des modèles de diffusion. Ces méthodes peuvent être grossièrement divisées en deux catégories : i) distillation préservant la trajectoire ; ii) distillation par reconstruction de trajectoire ; Toutefois, ces deux types de méthodes sont limitées par le plafond d’effet limité ou par les changements dans le domaine de la production. Afin de résoudre ces problèmes, l'équipe technique de ByteDance a proposé un consensus de segmentation de trajectoire appelé Hyper-SD.

Convolutional Neural Network (CNN) et Transformer sont deux modèles d'apprentissage en profondeur différents qui ont montré d'excellentes performances sur différentes tâches. CNN est principalement utilisé pour les tâches de vision par ordinateur telles que la classification d'images, la détection de cibles et la segmentation d'images. Il extrait les caractéristiques locales de l'image via des opérations de convolution et effectue une réduction de dimensionnalité des caractéristiques et une invariance spatiale via des opérations de pooling. En revanche, Transformer est principalement utilisé pour les tâches de traitement du langage naturel (NLP) telles que la traduction automatique, la classification de texte et la reconnaissance vocale. Il utilise un mécanisme d'auto-attention pour modéliser les dépendances dans des séquences, évitant ainsi le calcul séquentiel dans les réseaux neuronaux récurrents traditionnels. Bien que ces deux modèles soient utilisés pour des tâches différentes, ils présentent des similitudes dans la modélisation des séquences.

Editeur | Radis Skin Depuis la sortie du puissant AlphaFold2 en 2021, les scientifiques utilisent des modèles de prédiction de la structure des protéines pour cartographier diverses structures protéiques dans les cellules, découvrir des médicaments et dresser une « carte cosmique » de chaque interaction protéique connue. Tout à l'heure, Google DeepMind a publié le modèle AlphaFold3, capable d'effectuer des prédictions de structure conjointe pour des complexes comprenant des protéines, des acides nucléiques, de petites molécules, des ions et des résidus modifiés. La précision d’AlphaFold3 a été considérablement améliorée par rapport à de nombreux outils dédiés dans le passé (interaction protéine-ligand, interaction protéine-acide nucléique, prédiction anticorps-antigène). Cela montre qu’au sein d’un cadre unique et unifié d’apprentissage profond, il est possible de réaliser

Selon le compte public WeChat officiel du gouvernement du district de Nanshan « Innovation Nanshan », le projet du Shenzhen ByteDance Houhai Center a récemment réalisé d'importants progrès. Selon la China Construction First Engineering Bureau Construction and Development Company, la structure principale du projet a été achevée trois jours avant la date prévue. Cette nouvelle signifie que la zone centrale de Nanshan Houhai inaugurera un nouveau bâtiment emblématique. Le projet Shenzhen ByteDance Houhai Center est situé dans la zone centrale de Houhai, dans le district de Nanshan. Il s'agit du bâtiment du siège social de Toutiao Technology Co., Ltd. La superficie totale de construction est de 77 400 mètres carrés, avec une hauteur d'environ 150 mètres et un total de 4 étages souterrains et 32 étages hors sol. Il est rapporté que le projet du Shenzhen ByteDance Houhai Center deviendra un immeuble innovant de très grande hauteur intégrant des bureaux, des divertissements, de la restauration et d'autres fonctions. Ce projet aidera Shenzhen à promouvoir l'intégration de l'industrie Internet
