Améliorer les performances de quantification dans TVM
Cet article examine des moyens d'améliorer la quantification dans les modèles d'apprentissage profond en utilisant TVM.
― 7 min lire
Table des matières
La Quantification est une méthode utilisée en deep learning pour rendre les modèles plus petits et plus rapides. Ça fonctionne en changeant la manière dont les nombres sont stockés dans un modèle. Normalement, les modèles utilisent des nombres à virgule flottante de 32 bits, mais avec la quantification, on passe à des entiers de 8 bits. Ce changement aide à réduire la mémoire nécessaire et accélère les calculs sans trop nuire à la précision.
C'est quoi TVM ?
TVM, ou Tensor Virtual Machine, est un outil open-source qui aide à exécuter des modèles de deep learning sur différents types de matériel. C'est conçu pour aider les développeurs de machine learning à faire tourner leurs modèles efficacement sur divers appareils. TVM a deux parties principales qui optimisent la performance des modèles. La première partie se concentre sur la façon dont les données circulent à travers le modèle, tandis que la deuxième partie améliore l'utilisation de la mémoire par le modèle.
Le défi de la quantification dans TVM
Même si beaucoup d'études ont discuté des avantages de la quantification pour réduire le temps et la mémoire utilisés pour faire tourner un modèle, on a remarqué que la version quantifiée des modèles dans TVM ne performait souvent pas comme prévu. Quand les gens utilisent la quantification en 8 bits, ils s'attendent généralement à ce que le modèle tourne à peu près deux fois plus vite qu'avec des nombres de 32 bits. Pourtant, dans TVM, cette version quantifiée tournait parfois plus lentement, presque deux fois plus longtemps que la version à pleine précision.
Dans notre recherche, on a examiné de près pourquoi ça se passait ainsi et trouvé des moyens de rendre la quantification en 8 bits plus efficace dans TVM. On s'est concentré sur deux types de tâches : celles où les calculs sont la principale limite (computation-bound) et celles où l'utilisation de la mémoire est la principale limite (memory-bound).
Types de tâches
Tâches computation-bound
Les tâches computation-bound sont celles où le principal défi vient de la puissance de calcul nécessaire. Ce genre de tâche implique généralement des calculs lourds, comme multiplier des matrices ou réaliser des convolutions. En machine learning, beaucoup de tâches entrent dans cette catégorie parce qu'elles demandent un effort computationnel important pour faire des prédictions ou entraîner des modèles. Par exemple, si on exécute un modèle avec une taille de lot de un, on voit que la quantification peut aider. C'est parce qu'elle utilise des opérations arithmétiques plus simples avec moins de ressources comparé aux procédures standards de 32 bits.
Certains matériels sont mieux adaptés pour effectuer des calculs en basse précision que pour les calculs en haute précision. Ça signifie que les calculs utilisant des nombres de 8 bits peuvent souvent être faits plus rapidement que ceux avec des nombres de 32 bits.
Tâches memory-bound
Les tâches memory-bound sont différentes parce qu'elles sont limitées par la rapidité avec laquelle les données peuvent être déplacées vers et depuis la mémoire. De grandes entrées peuvent causer des ralentissements quand le système a du mal à transférer des données entre la mémoire et le processeur. Ce problème apparaît souvent avec des tailles de lots plus grandes (ex : 8, 64 ou 256) puisque ces tâches demandent plus de mémoire pour les données d'entrée et les calculs.
En réduisant la taille des nombres de 32 bits à 8 bits avec la quantification, on peut économiser pas mal de mémoire. Cette taille plus petite signifie que moins de données ont besoin d'être déplacées entre la mémoire et le processeur, ce qui peut aider à améliorer la vitesse.
Mise en place des expériences
Pour voir comment la quantification affecte la performance, on a regardé un modèle appelé ResNet18 compilé par TVM. On a exécuté ce modèle sur un système puissant avec un CPU à 8 cœurs et une bonne quantité de mémoire. Dans nos expériences, on a testé différentes tailles de nombres et mises en page pour voir comment cela influençait la performance. Chaque test impliquait de faire tourner le modèle encore et encore, en prenant la moyenne du temps pris pour chaque exécution.
Résolution des problèmes de performance
Pendant nos tests, on a constaté que la quantification faisait tourner le modèle plus lentement que prévu. Après avoir examiné la configuration, on a identifié un bug qui causait la sous-performance du modèle quantifié. Une fois le bug corrigé, le modèle quantifié a commencé à montrer de meilleures Performances.
On a aussi découvert que TVM dispose de différents types d'exécutants pour faire tourner les modèles. Un exécutant est meilleur pour les modèles statiques avec des opérations fixes, tandis que l'autre est plus adapté aux modèles dynamiques qui peuvent changer. Pour nos expériences, on est passé à l'exécutant de modèles statiques, ce qui nous a permis d'optimiser le modèle quantifié de manière plus efficace. Après ce changement, on a vu une amélioration significative des performances.
Analyse des performances computation-bound
Avec le bug corrigé et le bon exécutant en place, on a cherché à améliorer encore plus les performances pour les tâches computation-bound. On s'est concentré sur l'optimisation des convolutions dans notre modèle, car elles demandent beaucoup de calculs.
Cependant, on a appris que toutes les stratégies d'optimisation ne fonctionnent pas bien ensemble. Différents réglages dans TVM mènent à des résultats de performance différents parce que certaines stratégies sont déjà bien réglées pour certaines tâches. Les améliorations varient selon la façon dont la configuration spécifique et les plannings correspondent aux tâches exécutées.
Par exemple, le spatial packing est une technique qui aide à accélérer l'accès à la mémoire pour les tâches en changeant la façon dont les données sont stockées. L'objectif est de faciliter l'accès aux données par le matériel, ce qui aide à améliorer la performance. Ce changement peut entraîner une augmentation significative de la vitesse pour les calculs.
Analyse des performances memory-bound
En plus des avantages en matière de calcul, la quantification aide aussi à l'utilisation de la mémoire. En utilisant des entiers de 8 bits au lieu de nombres à virgule flottante de 32 bits, on peut réduire la quantité de mémoire requise par le modèle et la fréquence à laquelle il doit aller chercher des données.
On a remarqué qu'avec des tailles de lot plus grandes, les avantages d'une bande passante mémoire réduite devenaient encore plus clairs. Enregistrer les résultats intermédiaires dans un format de plus haute précision maintenait toujours les gains de performance de l'utilisation de la quantification en 8 bits, garantissant qu'on ne perdait pas de précision pendant les calculs.
Conclusion
La quantification peut être un outil puissant pour améliorer l'efficacité des modèles de deep learning, surtout quand elle est mise en œuvre correctement dans un système comme TVM. En comprenant les forces et les faiblesses des tâches computation-bound et memory-bound, on peut mieux appliquer la quantification pour obtenir des améliorations significatives de performance.
Grâce à un réglage minutieux et à la résolution de problèmes dans le modèle, on peut faire de la quantification un atout plutôt qu'une faiblesse. Ce travail ouvre des voies pour d'autres optimisations et prépare le terrain pour utiliser ces techniques puissantes dans des applications concrètes.
Titre: Analyzing Quantization in TVM
Résumé: There has been many papers in academic literature on quantizing weight tensors in deep learning models to reduce inference latency and memory footprint. TVM also has the ability to quantize weights and support low-bit computations. Although quantization is typically expected to improve inference time, in TVM, the performance of 8-bit quantization does not meet the expectations. Typically, when applying 8-bit quantization to a deep learning model, it is usually expected to achieve around 50% of the full-precision inference time. However, in this particular case, not only does the quantized version fail to achieve the desired performance boost, but it actually performs worse, resulting in an inference time that is about 2 times as slow as the non-quantized version. In this project, we thoroughly investigate the reasons behind the underperformance and assess the compatibility and optimization opportunities of 8-bit quantization in TVM. We discuss the optimization of two different types of tasks: computation-bound and memory-bound, and provide a detailed comparison of various optimization techniques in TVM. Through the identification of performance issues, we have successfully improved quantization by addressing a bug in graph building. Furthermore, we analyze multiple optimization strategies to achieve the optimal quantization result. The best experiment achieves 163.88% improvement compared with the TVM compiled baseline in inference time for the compute-bound task and 194.98% for the memory-bound task.
Auteurs: Mingfei Guo
Dernière mise à jour: 2023-08-19 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2308.10905
Source PDF: https://arxiv.org/pdf/2308.10905
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.