subtitles/fr/23_what-is-dynamic-padding.srt (120 lines of code) (raw):
1
00:00:05,270 --> 00:00:07,640
Qu'est-ce que le rembourrage dynamique ?
2
00:00:07,640 --> 00:00:12,620
Dans la vidéo « Regroupement des entrées », nous avons vu que pour pouvoir regrouper des entrées
3
00:00:12,620 --> 00:00:17,320
de différentes longueurs dans le même batch, nous devons ajouter des tokens de rembourrage à toutes les
4
00:00:17,320 --> 00:00:20,520
entrées courtes jusqu'à ce qu'elles aient toutes la même longueur.
5
00:00:20,520 --> 00:00:26,300
Ici par exemple, la phrase la plus longue est la troisième, et nous devons ajouter 5, 2 et
6
00:00:26,300 --> 00:00:32,509
7 tokens [PAD] aux autres pour avoir quatre phrases de même longueur.
7
00:00:32,509 --> 00:00:37,530
Lorsque vous traitez un jeu de données complet, il existe différentes stratégies de rembourrage que nous pouvons appliquer.
8
00:00:37,530 --> 00:00:41,870
La plus évidente consiste à remplir tous les éléments du jeu de données à la même longueur : la longueur
9
00:00:41,870 --> 00:00:44,129
de l'échantillon le plus long.
10
00:00:44,129 --> 00:00:48,450
Cela nous donnera alors des batchs qui ont tous la même forme déterminée par la longueur maximale de la séquence
11
00:00:48,450 --> 00:00:49,450
.
12
00:00:49,450 --> 00:00:54,039
L'inconvénient est que les batchs composés de phrases courtes auront beaucoup de tokens de rembourrage
13
00:00:54,039 --> 00:01:00,080
qui introduisent plus de calculs dans le modèle dont nous n'avons finalement pas besoin.
14
00:01:00,080 --> 00:01:05,320
Pour éviter cela, une autre stratégie consiste à remplir les éléments lorsque nous les regroupons,
15
00:01:05,320 --> 00:01:08,240
jusqu'à la phrase la plus longue à l'intérieur du batch.
16
00:01:08,240 --> 00:01:12,880
De cette façon, les batchs composés d'entrées courtes seront plus petits que le batch contenant
17
00:01:12,880 --> 00:01:15,600
la phrase la plus longue de l'jeu de données.
18
00:01:15,600 --> 00:01:19,090
Cela donnera une belle accélération sur CPU et GPU.
19
00:01:19,090 --> 00:01:23,130
L'inconvénient est que tous les batchs auront alors des formes différentes, ce qui ralentit l'entraînement
20
00:01:23,130 --> 00:01:24,790
sur d'autres accélérateurs comme les TPU.
21
00:01:24,790 --> 00:01:28,850
Voyons comment appliquer les deux stratégies en pratique.
22
00:01:28,850 --> 00:01:34,750
Nous avons en fait vu comment appliquer un rembourrage fixe dans la vidéo « Vue d'ensemble de Datasets », lorsque nous avons prétraité
23
00:01:34,750 --> 00:01:39,320
le jeu de données MRPC. Après avoir chargé le jeu de données et le tokenizer, nous avons appliqué la segmentation
24
00:01:39,320 --> 00:01:45,260
à tous les jeux de données avec rembourrage et tronquez pour que tous les échantillons de longueur 128.
25
00:01:45,260 --> 00:01:51,630
En conséquence, si nous passons ce jeu de données à un PyTorch `DataLoader`, nous obtenons des batchs de
26
00:01:51,630 --> 00:01:57,079
forme `batch_siez` (ici 16) par 128.
27
00:01:57,079 --> 00:02:01,950
Pour appliquer un rembourrage dynamique, nous devons reporter le rembourrage à la préparation du batch, nous supprimons donc
28
00:02:01,950 --> 00:02:04,789
cette partie de notre `tokenize_fonction`.
29
00:02:04,789 --> 00:02:08,569
Nous laissons toujours la partie troncature afin que les entrées qui sont plus grandes que la longueur maximale
30
00:02:08,569 --> 00:02:14,069
acceptée par le modèle (généralement 512) soient tronquées à cette longueur.
31
00:02:14,069 --> 00:02:17,629
Ensuite, nous remplissons nos échantillons dynamiquement en utilisant un assembleur de données.
32
00:02:17,629 --> 00:02:22,110
Ces classes de la bibliothèque Transformers sont chargées d'appliquer tout le
33
00:02:22,110 --> 00:02:27,970
traitement final nécessaire avant de former un batch. Ici `DataCollatorWithPadding` remplira les
34
00:02:27,970 --> 00:02:32,200
échantillons à la longueur maximale à l'intérieur du batch de phrases.
35
00:02:32,200 --> 00:02:36,790
Nous le transmettons au `DataLoader` de PyTorch en tant que fonction d'assemblement, puis observons que les batchs
36
00:02:36,790 --> 00:02:42,950
générés ont des longueurs différentes, bien en dessous des 128 d'avant.
37
00:02:42,950 --> 00:02:48,200
Le traitement par batchs dynamique sera presque toujours plus rapide sur CPU et GPU, vous devez donc l'appliquer si
38
00:02:48,200 --> 00:02:49,200
vous le pouvez.
39
00:02:49,200 --> 00:02:53,879
N'oubliez pas de revenir au rembourrage fixe si vous exécutez votre script d'entraînement sur TPU ou si vous avez
40
00:02:53,879 --> 00:03:00,599
besoin de batchs de formes fixes.