Plus rapide et plus simple | meilleures pratiques d'allocation et d'optimisation de la mémoire voler PaddlePaddle paddle

Temple Yun dans le fond de la non concave

rapports Qubit | Numéro public QbitAI

paddle Fly (de PaddlePaddle) pour fournir aux utilisateurs une technologie de pointe, facile à utiliser, en tenant compte de la récupération de la mémoire et des stratégies d'optimisation de la mémoire réutilisation, Max Lot propriétés de taille supérieure à cadre standard ouvert source, dans YOLOv3, Mask- Transformateur, BERT, DeepLab V3 + sur sur les performances de la mémoire modèle RCNN avec cadre standard ouvert source pour la foire, les étudiants intéressés peuvent essayer sur un ensemble de aperçu des données.

Conditions d'essai Comme suit:

  • Version Paddle: 1.5.0
  • Version tensorflow: 1.12.0, 1.14.0
  • Version Pytorch: 1.0.1, 1.1.0
  • GPU: Tesla V100-SXM2
  • CPU: Intel (R) Xeon (R) Or 6148 CPU @ 2.40GHz, 38 noyau
  • conducteur NVIDA: 418,39
  • NCCL VERSION: 2.4.2
  • CUDNN VERSION: 7.4.2.24,7.5.0.56
  • CUDA VERSION: 9.0.176, mode mono-carte

1. Stratégie d'allocation mémoire pagaie mouche

Parce que les appels système CUDA natif cudaMalloc et cudaFree sont des opérations synchronisées est beaucoup de temps. Afin d'accélérer la mémoire de la mouche de la stratégie d'allocation de mémoire pré-alloué détaillent comme indiqué ci-dessous:

(1) lorsque l'allocation mémoire la taille de l'requested_size, définir la taille d'une cellule de mémoire, dénommé chunk_size, chunk_size FLAGS_fraction_of_gpu_memory_to_use déterminé par la variable d'environnement, caractérisé en ce chunk_size partagent la mémoire, la valeur par défaut est de 0,92, à savoir, cadre pré-alloué graphiques 92 % de la mémoire.

  • Si requested_size < = Chunk_size, le cadre pool de mémoire pré-alloué taille de bloc de chunk_size, et séparés des rendements de blocs requested_size la taille de segment. Après chaque application sera allouée à partir du bloc de mémoire.
  • Si requested_size >  chunk_size, le cadre appelle directement la taille de requested_size de distribution cudaMalloc de mémoire retournée.

(2) la taille de la durée de free_size de libération de la mémoire,

  • Si free_size < = Chunk_size, la trame sera pré-alloué bloc de mémoire dans le dos, au lieu de retourner directement au CUDA.
  • Si free_size >  chunk_size, le cadre sera un cudaFree d'appel direct l'arrière de la mémoire à CUDA.

REMARQUE: Si la mémoire occupée par d'autres tâches, la proportion du morceau peut être ajustée de manière appropriée pour faire en sorte que le cadre peut être pré-affecté au correpondante, comme il peut être alloué 40% de la carte mémoire peut être disposé sur le GPU:

pré-export FLAGS_fraction_of_gpu_memory_to_use = 0,4 # mémoire GPU 40%

rappeler : Chunk devrait être pris en compte aussi grande que possible, que si vous voulez mesurer la quantité d'utilisation de la mémoire réelle du réseau, vous pouvez définir la comptabilisation de 0, occupation de la mémoire observée nvidia-smi AFFICHE.

2. palette de stratégie d'optimisation de la mémoire Fly

En plus de pré-allouer de la mémoire, volant offre palette une variété de fins générales des méthodes d'optimisation de la mémoire afin que l'utilisation de la mémoire sous le même modèle de réseau et la configuration aussi petite que possible, afin de soutenir la formation d'une taille de lot plus important, pour améliorer l'efficacité de la formation, voici les plus importants les deux méthodes, à savoir, les politiques et les stratégies GC (Collection de déchets) iNPLACE

2.1 Stratégie GC: récupération rapide des déchets de mémoire

Principe GC (Collection de déchets) est la libération rapide de l'espace mémoire des variables inutiles dans la phase d'exploitation, pour atteindre l'objectif de la mémoire d'économie. GC prennent effet sur l'utilisation de l'Exécuteur, quand ParallelExecutor faire le modèle de formation / prévoir.

environnement politique GC est contrôlée par trois variables:

(1)  FLAGS_eager_delete_tensor_gb

stratégies GC permettent commutateur, type double, la valeur par défaut est -1. la politique GC accumule une certaine quantité de déchets de mémoire après la sortie de la réunification, le contrôle FLAGS_eager_delete_tensor_gb des ordures de mémoire de seuil, l'unité est GB. Il recommande aux utilisateurs de définir FLAGS_eager_delete_tensor_gb = 0.

  • Si FLAGS_eager_delete_tensor_gb = 0, puis une fois la mémoire est immédiatement le recyclage des déchets, économiser le plus de mémoire.
  • Si FLAGS_eager_delete_tensor_gb = 1, la mémoire à ordures 1G accumulée après la récupération de déclenchement.
  • Si FLAGS_eager_delete_tensor_gb < 0, la politique GC fermée.

(2)  FLAGS_memory_fraction_of_eager_deletion

GC drapeau de stratégie d'ajustement, de type double, la valeur par défaut est 1, l'intervalle de , ou seulement pour une utilisation ParallelExecutor CompiledProgram + with_data_parallel occasions. GC variable interne en fonction de la taille de la mémoire occupée par les variables dans l'ordre décroissant, et avant la récupération que variable grande mémoire FLAGS_memory_fraction_of_eager_deletion. Il a recommandé de maintenir les valeurs par défaut, à savoir: FLAGS_memory_fraction_of_eager_deletion = 1.

  • Si FLAGS_memory_fraction_of_eager_deletion = 0,6, indique que la reprise seulement 60% d'une grande utilisation de la mémoire de la variable de mémoire.
  • Si FLAGS_memory_fraction_of_eager_deletion = 0, cela signifie que la mémoire n'est pas récupéré toute stratégie variable GC fermée.
  • Si FLAGS_memory_fraction_of_eager_deletion = 1, il indique que la récupération de la mémoire de toutes les variables.

(3) FLAGS_fast_eager_deletion_mode

Commutateur stratégie de GC rapide, type bool, la valeur par défaut est vrai, exprimé à l'aide de la politique GC rapide. politique rapide de GC ne sera pas attendre la fin de la libération directe de CUDA La mémoire du noyau. Il recommande aux utilisateurs de maintenir la valeur par défaut, ce qui FLAGS_fast_eager_deletion_mode = True.

2.2 Stratégie Inplace: Op Sortie d'entrée interne complexe

Inplace stratégie principe est la sortie de l'espace mémoire avec entrée multiplexés Op Op. Par exemple, les opérations d'entrée et de sortie remodèlent un même espace mémoire réutilisable.

la politique INPLACE peut prendre effet ou utiliser ParallelExecutor CompiledProgram plus de with_data_parallel faire modèle de formation et de prévision, par le réglage BuildStrategy.

manière spécifique:

build_strategy = fluid.BuildStrategy () build_strategy.enable_inplace = True # stratégie INPLACE ouverte compiled_program = fluid.CompiledProgram (train_program) .with_data_parallel (loss_name = loss.name, build_strategy = build_strategy)

En raison de certains problèmes sur la conception actuelle, après ouverture politique inplace variable doit assurer le suivi chercher pour var.persistable = True, c'est parce que quand il est ouvert de stratégie Inplace, espace mémoire non persistable de variables peuvent être multiplexées avec d'autres variables, entraînant erreur chercher un résultat, afin d'éviter que le réglage persistable variables sont multiplexés vont chercher, pour assurer l'exactitude de la sortie.

C'est la suivante: Si vous suivez les variables doivent chercher pour la perte et acc, vous devez définir:

loss.persistable = True acc.persistable = True

Nous fixons activement le problème et un correctif dans la prochaine version, et la stratégie de Inplace ouverte par défaut.

3. Optimisation mémoire des meilleures pratiques (meilleures pratiques)

Nous recommandons la meilleure stratégie d'optimisation de la mémoire sont les suivants:

(1) Piscine en mémoire préalloués :

FLAGS_fraction_of_gpu_memory_to_use = 0,92

(2) politique ouverte GC, cadre :

FLAGS_eager_delete_tensor_gb = 0. FLAGS_memory_fraction_of_eager_deletion = 1 FLAGS_fast_eager_deletion_mode = True

(3) paramètre de stratégie ouverte Inplace :

build_strategy.enable_inplace = True, en fetch_list loss.persistable = True acc.persistable = True

4. Les résultats de la stratégie d'optimisation trouvé

Plus tôt, nous avons appris, la politique GC comme les principales stratégies d'optimisation de la mémoire pour voler paddle, Inplace est une stratégie secondaire, le modèle peut être encore réduite dans la stratégie d'utilisation de la mémoire GC basée sur l'aide à augmenter encore la taille du lot maximale. En général, l'utilisation de la stratégie d'optimisation de la mémoire GC pour répondre aux besoins de la grande majorité de votre modèle, si vous voulez continuer à améliorer votre taille de lot, nous vous recommandons d'ouvrir la stratégie Inplace comme un supplément.

Nous modèle Transformer comme un exemple pour examiner l'effet pratique des stratégies d'optimisation:

4.1. Transformer le modèle introduit le principe de

Transformer est dans le document « L'attention est tout ce qu'il faut » pour terminer la traduction automatique proposée (la traduction automatique, MT) et une autre séquence à la séquence (séquence à la séquence, Seq2Seq) une nouvelle tâche d'apprentissage structure du réseau. Qui utilise également un codeur tâche Seq2Seq typique - structure de trame décodeur (encodeur décodeur), mais par rapport au cycle précédent réseau de neurones largement utilisé (Recurrent Neural Network, RNN), en utilisant pleinement l'attention (l'attention) mécanisme pour obtenir la séquence à la séquence en cours de modélisation, l'ensemble du réseau représenté sur la figure 1.

1. Structure réseau transformateur de la figure.

Codeur empilement d'une pluralité de la même couche, chaque couche composée principalement de longue attention (attention Multi-tête) et une action directe entièrement connecté (Feed-Forward) Réseau ces deux sous-couche.

Attention, multi-tête  Ici, pour la réalisation indépendante Attention, Attention par rapport à un mécanisme simple, qui reçoit en entrée le résultat du calcul sont multiples voies de conversion de l'attention, et de nouveau tous les résultats épissage linéaire transformation en tant que sortie. En se référant à la figure 2, dans lequel le produit scalaire est utilisé Attention (produit scalaire) et le processus après le produit scalaire de l'échelle afin d'éviter produit scalaire excessive entre dans la région de saturation softmax.

Feed-Forward  emplacement réseau de chaque séquence sera le même calcul (-sage Position), qui est utilisé dans la transformation linéaire RELU deux être activés structure intermédiaire.

En outre, chacun des sous-couche et couche supplémentaire de connexion résiduelle soumis normalisation et le modèle de propagation afin de faciliter la convergence du gradient.

2. Attention, multi-tête figure.

Codeur et décodeur ayant une structure similaire, mais par rapport à la couche de composition codeur, composition décodeur dans la couche de plus une attention à têtes multiples est réalisé sous-couche d'attention de la sortie du codeur à l'autre Attention Encoder-Decoder modèles Seq2Seq existent également.

4.2. Stratégies d'optimisation de la mémoire trouvées dans le modèle d'effet transformateur

La mise en place du projet conformément au modèle, le vrai test des résultats d'optimisation de la mémoire, avant et après la Inplace ouverte, les changements dans l'utilisation de la mémoire et la taille des lots maximale dans le tableau suivant:

Vous pouvez le voir, la stratégie de GC est très important pour l'optimisation de la mémoire, bien que la stratégie Inplace dans ce cas n'a pas amélioré quantité de mémoire, mais peut améliorer considérablement la taille du lot maximale, a également une signification pratique.

Si vous rejoignez le groupe QQ officiel, vous rencontrerez un grand nombre d'étudiants partageant les mêmes idées à l'apprentissage profond, QQ groupe officiel: 432676488.

Si vous voulez en savoir plus sur le contenu pertinent plus hélice de vol, voir les documents suivants.

Télécharger la dernière version de Paddle liquide v1.5, s'il vous plaît consulter les liens suivants:

https://www.paddlepaddle.org.cn?fr=lzw3

- FIN -

recrutement sincère

Qubits recrutent éditeur / journaliste, basé à Zhongguancun de Beijing. Nous attendons de talent, des étudiants enthousiastes de nous rejoindre! Détails, s'il vous plaît interface de dialogue qubit numéro public (QbitAI), réponse mot "recrutement".

Qubit QbitAI · manchettes sur la signature de

' « suivre les nouvelles technologies AI dynamiques et de produits

Pourquoi Surchauffe à pulvériser IKEA? IKEA est le seul exprimer pressé de vous laisser les magasins
Précédent
Pentium T33 sera publié le 12 positionnement petite puissance de prendre SUV 1.6L
Prochain
compagnons de portage d'ancrage Betta mâle essayer de manger Wuhan, « le restaurant le plus cher, » 1970 yuans la consommation par habitant
5 jours Fun PyTorch apprentissage en profondeur, des tutoriels intégrés sont des exemples de ressources Shu de GAN à mot
Qui ont des rêves, de la première voiture à vapeur a dit qu'il bénéficierait au cours de l'année
radar laser véhicule sans pilote de coupure d'impression 3D: il ne peut pas voir cette boîte étrange
Le site de Tesla: Autopilot chemins de migration chinoise, les voitures électriques ne sont pas peur d'exprimer âne piétons
Wen Gongyi Zhengzhou Luda café rencontre le « fleuve Jaune Tour » ligne fine courte vidéo activités créatives ouvertes aujourd'hui
première livraison de la Chine pilote automatique Unicorn: parking entièrement autonome, $ les coûts de matériel de niveau
CycleGAN amélioré! dessin animé Jia Jia avec l'Asie et les autres avant-face modèle de transformation, mur rupture dimensions
montage Rejeté, Google prédire avec précision les différences de généralisation DNN, mais aussi la collecte de données open-source | IPSC
PDD rumeurs de faux YM course principale, a lancé la « lettre de l'avocat mis en garde, » sans détour: non humaine
50 ans de retour oncle à Cambridge PhD AI, AI robot de R & D laitue revenu
Officiel: Manchester United Boge Ba a été élu le meilleur joueur du jeu