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.
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 ?
# 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, ]))
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, ]))
si img.device.type == 'npu' : _assert_image_npu(img) renvoie F_npu.resize(img, size=size, interpolation=interpolation.value)
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 %. %.
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"