Le matériel Shengteng CANN DVPP accélère le prétraitement des données de formation, solution conviviale au goulot d'étranglement du prétraitement du processeur hôte

Cet article est partagé par la communauté Huawei Cloud « Ascend CANN 7.0 Black Technology : prétraitement des données de formation à l'accélération matérielle DVPP, solution conviviale au goulot d'étranglement du prétraitement du processeur hôte », auteur : Ascend CANN.

Avec le développement rapide de l’intelligence artificielle, de plus en plus de scénarios d’application nécessitent l’utilisation de modèles d’apprentissage automatique et d’apprentissage profond. La formation des modèles de réseau d'IA est généralement divisée en deux parties clés, l'une est le prétraitement des données de formation et l'autre la formation des modèles. Comment améliorer les performances de traitement des deux est devenu la clé pour améliorer les performances de formation des modèles. Généralement, le prétraitement du chargement des données est traité par le processeur hôte, tandis que les calculs de formation du modèle sont traités sur le NPU ou le GPU. Les deux sont généralement exécutés en parallèle, de sorte que le temps d'une itération de formation est généralement le maximum des deux temps de traitement.

Lors de l'exécution de calculs de formation de modèles sur NPU/GPU, afin d'utiliser pleinement les ressources informatiques, le traitement des données par lots est généralement utilisé. Par conséquent, en général, afin d'améliorer le débit global, la valeur du lot sera définie relativement grande. Le numéro de lot commun est 256/512. Par conséquent, les exigences de vitesse pour le prétraitement des données seront relativement élevées. Pour les frameworks d'IA, une réponse courante consiste à utiliser plusieurs processus CPU pour le traitement simultané. Par exemple, la vision torche du framework PyTorch prend en charge la concurrence multi-processus et utilise plusieurs processus CPU pour le prétraitement des données afin de répondre au pipeline informatique des NPU/GPU. traitement.

Cependant, avec l'augmentation exponentielle de la puissance et des performances de calcul des NPU, le processus de prétraitement des données du processeur hôte est progressivement devenu un goulot d'étranglement en termes de performances. Le temps de formation de bout en bout du modèle sera allongé en raison du goulot d'étranglement du prétraitement des données. Dans ce cas, comment résoudre le goulot d'étranglement des performances et améliorer les performances d'exécution du modèle de bout en bout ?

 
Examinons un processus de prétraitement torchvision :
# Code de chargement des données 
    traindir = os.path.join(args.data, 'train') 
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) 
    train_dataset = datasets. ImageFolder( 
        traindir, 
        transforms.Compose([ 
            transforms.RandomResizedCrop(224), 
            transforms.RandomHorizontalFlip(), 
            transforms.ToTensor(), 
            normalize, 
        ]))
Connaissez-vous ces fonctions d’interface ? En fait, DVPP sur le NPU peut également effectuer des traitements similaires, tels que le décodage d'image, la mise à l'échelle d'image, le retournement, etc. DVPP est un module sur le NPU spécifiquement utilisé pour le prétraitement des données et est totalement indépendant des calculs NN. Alors, comment laisser DVPP prendre en charge la logique de prétraitement de torchvision ? C'est très simple, juste deux lignes de code pour le faire :
import torchvision_npu # Importer le package torchvision_npu 
    # Code de chargement des données 
    traindir = os.path.join(args.data, 'train') 
    normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225 ]) 
    torchvision_npu.set_image_backend('npu') # Définit le backend de traitement d'image sur npu 
    train_dataset = datasets.ImageFolder( 
        traindir, 
        transforms.Compose([ 
            transforms.RandomResizedCrop(224), 
            transforms.RandomHorizontalFlip(), 
            transforms.ToTensor(), 
            normaliser, 
        ]))
N'est-ce pas très pratique ? Les ingénieurs en algorithmes d'IA n'ont pas besoin de modifier le flux de traitement de torchvision, n'ont pas besoin de comprendre l'implémentation de l'interface DVPP et n'ont pas besoin d'écrire du code C/C++, et ce sont toutes les contributions de torchvision_npu. Functional.py est réimplémenté dans torchvision_npu. Dans chaque interface de prétraitement, si elle est jugée comme des données de type npu, la logique de traitement de npu sera utilisée :
si img.device.type == 'npu' : _assert_image_npu(img) renvoie F_npu.resize(img, size=size, interpolation=interpolation.value)
Functional_npu.py appelle en interne l'opérateur de redimensionnement de npu pour le traitement, puis appelle le traitement matériel DVPP via l'interface AscendCL :
return torch.ops.torchvision.npu_resize(img, size=sizes, mode=mode)
return torch.ops.torchvision.npu_resize(img, size=sizes, mode=mode)

Jetons un coup d'œil aux performances après remplacement. En prenant comme exemple l'image JPEG la plus courante avec une résolution de 375*500 dans ImageNet, il faut 6,801 ms pour effectuer l'opération de prétraitement sur le processeur :

L'utilisation de DVPP peut non seulement accélérer le prétraitement des données, mais également exécuter de manière asynchrone les tâches de livraison de l'hôte et les tâches des périphériques. L'ensemble du processus ne prend que 2,25 ms, ce qui permet d'économiser plus de 60 % de temps dans le traitement d'une seule image.

Au cours du processus de formation ResNet50, le traitement des données par lots 512 ne prend que 1,152 s, et l'avantage en termes de performances est plus évident dans le scénario de traitement multi-processus de prétraitement.

Basé sur le serveur de formation Atlas 800T A2, ResNet50 utilise DVPP pour accélérer le prétraitement des données. Un seul P n'a besoin que de 6 processus de prétraitement pour exécuter pleinement la puissance de calcul du NPU ; lors de l'utilisation du prétraitement CPU, 12 processus de prétraitement sont nécessaires pour obtenir le résultat correspondant. L'effet réduit considérablement la dépendance des performances vis-à-vis du processeur hôte.

Dans un scénario de réseau typique, basé sur le serveur de formation Atlas 800T A2, lorsque le prétraitement du processeur devient un goulot d'étranglement en termes de performances, l'accélération du prétraitement DVPP peut être utilisée pour obtenir une amélioration significative de la vitesse de formation de l'ensemble du réseau. amélioré de 25 % et MobileNetV1 est amélioré de 38 %. %.

Le prétraitement est accéléré à l'aide d'un accélérateur matériel indépendant, DVPP, qui peut réduire efficacement la dépendance à l'égard du processeur hôte et éviter une défaillance des performances du NPU due à des performances limitées du processeur. Dans le même temps, l'accélérateur matériel DVPP indépendant sur le NPU est utilisé pour le prétraitement, qui peut être traité en parallèle avec le NN sans s'affecter mutuellement, et les données peuvent auto-fermer la boucle dans l'appareil. L'accélération du prétraitement DVPP est activée pour la première fois dans un scénario de formation, comblant ainsi les lacunes des performances de prétraitement de la formation NPU.

Shengteng CANN dispose d'un ensemble relativement riche d'opérateurs de prétraitement intégrés. Tout en continuant à enrichir la bibliothèque d'opérateurs de prétraitement torchvision, il améliorera également encore le processus de distribution et d'exécution des opérateurs de prétraitement, permettant un meilleur traitement du pipeline et une réduction des données. continue d'améliorer la compétitivité des produits de Shengteng CANN et de répondre aux besoins d'un plus large éventail de scénarios commerciaux.

Cliquez pour suivre et découvrir les nouvelles technologies de Huawei Cloud dès que possible~

 

Alibaba Cloud a subi une grave panne et tous les produits ont été affectés (restaurés). Tumblr a refroidi le système d'exploitation russe Aurora OS 5.0. La nouvelle interface utilisateur a été dévoilée Delphi 12 & C++ Builder 12, RAD Studio 12. De nombreuses sociétés Internet recrutent en urgence des programmeurs Hongmeng. L'heure d'UNIX est sur le point d'entrer dans l'ère des 1,7 milliards (déjà entrée). Meituan recrute des troupes et envisage de développer l'application du système Hongmeng. Amazon développe un système d'exploitation basé sur Linux pour se débarrasser de la dépendance d'Android à l'égard de .NET 8 sous Linux. La taille indépendante est réduit de 50 %. Sortie de FFmpeg 6.1 "Heaviside"
{{o.name}}
{{m.nom}}

Je suppose que tu aimes

Origine my.oschina.net/u/4526289/blog/10141767
conseillé
Classement