Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker

Το αυξανόμενο μέγεθος των μοντέλων γλώσσας είναι μια από τις μεγαλύτερες τάσεις στην επεξεργασία φυσικής γλώσσας (NLP) τα τελευταία χρόνια. Από το 2018, έχουμε δει πρωτοφανή ανάπτυξη και ανάπτυξη ολοένα και μεγαλύτερων μοντέλων γλώσσας, συμπεριλαμβανομένων του BERT και των παραλλαγών του, GPT-2, T-NLG και GPT-3 (175 δισεκατομμύρια παράμετροι).

Αυτά τα μοντέλα έχουν ξεπεράσει τα όρια πιθανών αρχιτεκτονικών καινοτομιών. Αντιμετωπίζουμε πολλές προκλήσεις κατά την εκπαίδευση μοντέλων βαθιάς μάθησης μεγάλης κλίμακας, ειδικά το νέο κύμα των γενετικών προεκπαιδευμένων μετασχηματιστών. Αυτές οι προκλήσεις περιλαμβάνουν περιορισμούς υλικού και συμβιβασμούς με υπολογισμούς και αποτελεσματικότητα. Για να ξεπεραστούν αυτές οι προκλήσεις του παραλληλισμού μοντέλων και δεδομένων, το AWS προσφέρει ένα ευρύ φάσμα δυνατοτήτων.

Σε αυτήν την ανάρτηση, εισάγουμε δύο κύριες προσεγγίσεις: την παραλληλοποίηση δεδομένων και την παραλληλοποίηση μοντέλων χρησιμοποιώντας Amazon Sage Maker, και συζητήστε τα υπέρ και τα κατά τους.

Το μοντέλο

Για το μοντέλο γλώσσας, χρησιμοποιούμε Transformers, που εισάγονται στην εργασία Η προσοχή είναι το μόνο που χρειάζεστε. Οι μετασχηματιστές είναι μοντέλα βαθιάς εκμάθησης που έχουν σχεδιαστεί για να αποφεύγουν σκόπιμα τις παγίδες των RNN βασιζόμενοι σε έναν μηχανισμό αυτοπροσοχής για να αντλούν παγκόσμιες εξαρτήσεις μεταξύ εισόδου και εξόδου. Η αρχιτεκτονική του μοντέλου Transformer επιτρέπει σημαντικά καλύτερη παραλληλοποίηση και μπορεί να επιτύχει υψηλή απόδοση σε σχετικά σύντομο χρόνο εκπαίδευσης. Βασισμένο στην επιτυχία των Transformers, BERT, που παρουσιάστηκε στην εφημερίδα BERT: Προ-κατάρτιση Deep Bidirectional Transformers για κατανόηση γλωσσών, προστέθηκε αμφίδρομη προεκπαίδευση για γλωσσική αναπαράσταση. Εμπνευσμένο από την εργασία Cloze, το BERT είναι προεκπαιδευμένο με μοντελοποίηση μάσκας γλώσσας (MLM), στο οποίο το μοντέλο μαθαίνει να ανακτά τις αρχικές λέξεις για τυχαία καλυμμένα διακριτικά. Το μοντέλο BERT είναι επίσης προεκπαιδευμένο στην εργασία πρόβλεψης επόμενης πρότασης (NSP) για να προβλέψει εάν δύο προτάσεις είναι σε σωστή σειρά ανάγνωσης. Από την έλευση του το 2018, το BERT και οι παραλλαγές του έχουν χρησιμοποιηθεί ευρέως σε γλωσσικά μοντέλα.

Ξεκινάμε δημιουργώντας δύο επίπεδα ενσωμάτωσης για ενσωμάτωση διακριτικού και θέσης. Οι ενσωματώσεις εισόδου είναι το άθροισμα των ενσωματώσεων διακριτικών και των ενσωματώσεων θέσης.

class TokenAndPositionEmbedding(tf.keras.layers.Layer): """ Creates two separate embedding layers: one for tokens and one for token index (positions). """ def __init__(self, maxlen, vocab_size, embed_dim): super(TokenAndPositionEmbedding, self).__init__() self.token_emb = tf.keras.layers.Embedding(input_dim=vocab_size, output_dim=embed_dim) self.pos_emb = tf.keras.layers.Embedding(input_dim=maxlen, output_dim=embed_dim) def call(self, x): maxlen = tf.shape(x)[-1] # positions are represented by a token's index positions = tf.range(start=0, limit=maxlen, delta=1) positions = self.pos_emb(positions) # token embedding x = self.token_emb(x) # return sum as input return x + positions

Στη συνέχεια, ορίζουμε ένα μπλοκ αποκωδικοποιητή μετασχηματιστή με δύο υποστρώματα: ένα στρώμα αυτο-προσοχής πολλαπλών κεφαλών και ένα απλό πλήρως συνδεδεμένο δίκτυο προώθησης τροφοδοσίας που ακολουθείται από κανονικοποίηση και εγκατάλειψη του στρώματος:

class TransformerBlock(tf.keras.layers.Layer): def __init__(self, embed_dim, num_heads, ff_dim, rate=0.1): # self attention layer super(TransformerBlock, self).__init__() self.att = tf.keras.layers.MultiHeadAttention( num_heads=num_heads, key_dim=embed_dim) # feed forward layer self.ffn = [tf.keras.layers.Dense(ff_dim, activation="relu"), tf.keras.layers.Dense(embed_dim)] # layer normalization self.layernorm1 = tf.keras.layers.LayerNormalization(epsilon=1e-6) self.layernorm2 = tf.keras.layers.LayerNormalization(epsilon=1e-6) # dropout self.dropout1 = tf.keras.layers.Dropout(rate) self.dropout2 = tf.keras.layers.Dropout(rate) def call(self, inputs): # getting batch size and seq len from input shape input_shape = tf.shape(inputs) batch_size = input_shape[0] seq_len = input_shape[1] # decoder casual mask casual_mask = casual_attention_mask(batch_size, seq_len, seq_len, tf.bool) # self attention forward pass attention_output = self.att(inputs, inputs, attention_mask=causal_mask) # dense layers, dropout and normalization attention_output = self.dropout1(attention_output) ffn_output = self.ffn[0](out1) ffn_output = self.ffn[1](ffn_output) out2 = self.dropout2(ffn_output) return self.layernorm2(out1 + out2)

Τέλος, δημιουργούμε το μοντέλο γλώσσας μας με το προηγούμενο επίπεδο ενσωμάτωσης και μπλοκ μετασχηματιστή:

class MyModel(tf.keras.Model): def __init__(self, maxlen, vocab_size, embed_dim, num_heads, feed_forward_dim, num_layers, learning_rate): super(MyModel, self).__init__(maxlen, vocab_size, embed_dim, num_heads, feed_forward_dim, num_layers, learning_rate) # embedding layer self.embedding_layer = TokenAndPositionEmbedding(maxlen, vocab_size, embed_dim) # transformer blocks self.transformer_blocks = [ TransformerBlock(embed_dim, num_heads, feed_forward_dim) for i in range(num_layers) ] # last dense layer self.dense = tf.keras.layers.Dense(vocab_size) def call(self, inputs, training=None): x_emb = self.embedding_layer(inputs) x = x_emb for transformer_block in self.transformer_blocks: x = transformer_block(x) outputs = self.dense(x) return [outputs, x_emb] def init_train_settings(maxlen, vocab_size, embed_dim, num_heads, feed_forward_dim, num_layers, learning_rate): """ Creates model, optimizer and loss function """ model = MyModel(maxlen, vocab_size, embed_dim, num_heads, feed_forward_dim, num_layers, learning_rate) loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate) return model, optimizer, loss_fn

Ανάλογα με τις υπερπαραμέτρους σας, μπορείτε να κλιμακώσετε αυτό το μοντέλο από χιλιάδες παραμέτρους σε δισεκατομμύρια παραμέτρους. Η κύρια πρόκληση με τα μοντέλα δισεκατομμυρίων παραμέτρων είναι ότι δεν μπορείτε να φιλοξενήσετε το μοντέλο σε μία παρουσία και πρέπει να διανείμετε το μοντέλο σε πολλούς κόμβους για εκπαίδευση και εξαγωγή συμπερασμάτων.

Το σύνολο δεδομένων

Στα πειράματά μας χρησιμοποιήσαμε το Δεδομένα στοίβας. Το Pile είναι ένα σύνολο δεδομένων αγγλικού κειμένου χωρητικότητας 800 GiB που έχει σχεδιαστεί για την εκπαίδευση γλωσσικών μοντέλων μεγάλης κλίμακας. Δημιουργείται από 22 διαφορετικά και υψηλής ποιότητας σύνολα δεδομένων, συμπεριλαμβανομένων τόσο των καθιερωμένων συνόλων δεδομένων NLP όσο και των νεοεισαχθέντων.

Το σύνολο δεδομένων δημιουργείται από μια ποικιλία πηγών δεδομένων, συμπεριλαμβανομένων βιβλίων. Αποθετήρια GitHub. ιστοσελίδες; αρχεία καταγραφής συνομιλιών? και έγγραφα ιατρικής, φυσικής, μαθηματικών, πληροφορικής και φιλοσοφίας. Συγκεκριμένα, χρησιμοποιεί τις ακόλουθες πηγές: Pile-CC, PubMed Central, ArXiv, GitHub, the FreeLaw Project, Stack Exchange, US Patent and Trademark Office, PubMed, Ubuntu, IRC, HackerNews, YouTube, PhilPapers, Books3, Project Gutenberg ( PG-19), OpenSubtitles, English Wikipedia, DM Mathematics, EuroParl, το Enron Emails corpus και NIH ExPorter. Περιλαμβάνει επίσης τα OpenWebText2 και BookCorpus2, τα οποία είναι επεκτάσεις των αρχικών συνόλων δεδομένων OpenWebText και BookCorpus, αντίστοιχα. Η ποικιλομορφία των πηγών δεδομένων μπορεί να βελτιώσει τη γενική γνώση μεταξύ τομέων και, κατά συνέπεια, να βελτιώσει τις δυνατότητες γενίκευσης κατάντη.

Η κύρια πρόκληση με αυτό το σύνολο δεδομένων είναι το τεράστιο μέγεθος. το σύνολο δεδομένων έχει 825 GiB κειμένου, το οποίο μεταφράζεται σε 4.2 TiB προεπεξεργασμένων και συμπιεσμένων σημείων δεδομένων. Παρόμοια με τις προκλήσεις που αντιμετωπίζουμε με την εκπαίδευση και τη φιλοξενία των μοντέλων, η εκπαίδευση ενός μοντέλου με αυτό το σύνολο δεδομένων σε μία μόνο περίπτωση θα πάρει πολύ χρόνο και δεν είναι πρακτική.

Η λύση μας είναι να αναλύσουμε το σύνολο δεδομένων σε περίπου 1 GiB κομμάτια δεδομένων, να φορτώσουμε και να προεπεξεργαζόμαστε τα χαρακτηριστικά στο Σύνολο δεδομένων TensorFlow αντικείμενα και αποθηκεύστε τα μέσα Amazon Elastic File Service (Amazon EFS). Τα σύνολα δεδομένων TensorFlow παρέχουν μια εύχρηστη και υψηλής απόδοσης γραμμή δεδομένων που ενσωματώνεται καλά με τα μοντέλα μας. Το Amazon EFS είναι μια εύχρηστη υπηρεσία που μας δίνει τη δυνατότητα να δημιουργήσουμε ένα κοινόχρηστο σύστημα αρχείων που κλιμακώνεται αυτόματα καθώς προστίθενται και διαγράφονται αρχεία. Επιπλέον, το Amazon EFS είναι σε θέση να εκραγεί σε υψηλότερα επίπεδα απόδοσης όταν χρειάζεται, κάτι που είναι κρίσιμο για τη γραμμή εκπαίδευσης δεδομένων και μοντέλων μας.

Στη συνέχεια, εξετάζουμε κατανεμημένες στρατηγικές εκπαίδευσης για την αντιμετώπιση αυτών των προκλήσεων.

Κατανεμημένη εκπαίδευση

Σε αυτό το έργο, αντιμετωπίσαμε δύο προκλήσεις: την κλιμάκωση του μεγέθους του μοντέλου και τον όγκο δεδομένων. Η αύξηση του μεγέθους του μοντέλου και του αριθμού των εκπαιδεύσιμων παραμέτρων μπορεί να οδηγήσει σε καλύτερη ακρίβεια, αλλά υπάρχει ένα όριο στο μοντέλο που μπορείτε να χωρέσετε σε μία μνήμη GPU ή ακόμα και σε πολλές GPU σε μία μόνο παρουσία. Επιπλέον, τα μεγαλύτερα μεγέθη μοντέλων χρειάζονται περισσότερο χρόνο για εκπαίδευση.

Μπορείτε να αντιμετωπίσετε αυτές τις προκλήσεις με δύο διαφορετικούς τρόπους: παραλληλισμό δεδομένων και παραλληλισμό μοντέλων. Με τον παραλληλισμό δεδομένων, εκτελούμε Στοχαστική Κλίση Κάθοδος (SGD) διανέμοντας τις εγγραφές μιας μίνι παρτίδας σε διαφορετικές συσκευές για να επιταχύνουμε την εκπαίδευση. Ωστόσο, η παράλληλη εκπαίδευση δεδομένων συνοδεύεται από επιπλέον πολυπλοκότητα στον υπολογισμό του μέσου όρου βαθμίδας mini-batch με διαβαθμίσεις από όλες τις συσκευές, ένα βήμα που ονομάζεται AllReduce, το οποίο γίνεται πιο δύσκολο καθώς μεγαλώνει το εκπαιδευτικό σύμπλεγμα. Κατά τη χρήση του παραλληλισμού δεδομένων, πρέπει να είμαστε σε θέση να προσαρμόσουμε το μοντέλο και ένα μεμονωμένο σημείο δεδομένων σε μια συσκευή (CPU ή GPU), κάτι που αποτελεί περιοριστικό παράγοντα στα πειράματά μας, επειδή το μέγεθος ενός τόσο μεγάλου μοντέλου είναι πολύ μεγαλύτερο από τη μνήμη της μοναδικής GPU Μέγεθος.

Μια άλλη λύση είναι η χρήση παραλληλισμού μοντέλων, η οποία χωρίζει το μοντέλο σε πολλές συσκευές. Ο παραλληλισμός μοντέλων είναι η διαδικασία διαχωρισμού ενός μοντέλου μεταξύ πολλαπλών συσκευών ή κόμβων (όπως στιγμιότυπα εξοπλισμένα με GPU) και δημιουργίας μιας αποτελεσματικής διοχέτευσης για την εκπαίδευση του μοντέλου σε αυτές τις συσκευές για τη μεγιστοποίηση της χρήσης GPU.

Παραλληλισμός δεδομένων

Ο παραλληλισμός των δεδομένων είναι η πιο κοινή προσέγγιση για πολλαπλές GPU ή κατανεμημένη εκπαίδευση. Μπορείτε να ομαδοποιήσετε τα δεδομένα σας, να τα στείλετε σε πολλές συσκευές (η καθεμία φιλοξενεί ένα αναπαραγόμενο μοντέλο) και στη συνέχεια να συγκεντρώσει τα αποτελέσματα. Πειραματιστήκαμε με δύο πακέτα για παραλληλοποίηση δεδομένων: Horovod και το Η SageMaker διανέμει παράλληλη βιβλιοθήκη δεδομένων.

Το Horovod είναι ένα κατανεμημένο πλαίσιο εκπαίδευσης βαθιάς μάθησης για TensorFlow, Keras, PyTorch και Apache MXNet. Για να χρησιμοποιήσουμε το Horovod, ακολουθήσαμε την ακόλουθη διαδικασία:

  1. Εκκίνηση εκτελώντας hvd.init().
  2. Συνδέστε κάθε συσκευή με μια ενιαία διαδικασία. Η πρώτη διεργασία ή εργαζόμενος σχετίζεται με την πρώτη συσκευή, η δεύτερη διαδικασία σχετίζεται με τη δεύτερη συσκευή και ούτω καθεξής.
  3. Προσαρμόστε τον ρυθμό εκμάθησης με βάση τον αριθμό των συσκευών.
  4. Τυλίξτε το βελτιστοποιητή hvd.DistributedOptimizer.
  5. Μεταδώστε τις αρχικές καταστάσεις της μεταβλητής από τον πρώτο εργαζόμενο με κατάταξη 0 σε όλες τις άλλες διεργασίες. Αυτό είναι απαραίτητο για να διασφαλιστεί η συνεπής προετοιμασία όλων των εργαζομένων όταν η εκπαίδευση ξεκινά με τυχαία βάρη ή αποκαθίσταται από ένα σημείο ελέγχου.
  6. Βεβαιωθείτε ότι μόνο η συσκευή 0 μπορεί να αποθηκεύσει σημεία ελέγχου για να αποτρέψει άλλους εργαζόμενους να τα αλλοιώσουν.

Ακολουθεί το σενάριο εκπαίδευσης:

import horovod.tensorflow as hvd
# Initialize Horovod
hvd.init() # Pin GPU to be used to process local rank (one GPU per process)
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True)
if gpus: tf.config.experimental.set_visible_devices(gpus[hvd.local_rank()], 'GPU') # Build model
... @tf.function
def training_step(texts, labels, first_batch): with tf.GradientTape() as tape: predictions = model(texts, training=True) loss = loss_fn(labels, predictions[0]) # Horovod: add Horovod Distributed GradientTape. tape = hvd.DistributedGradientTape(tape) grads = tape.gradient(loss, model.trainable_variables) opt.apply_gradients(zip(grads, model.trainable_variables)) # Horovod: broadcast initial variable states from rank 0 to all other processes. # This is necessary to ensure consistent initialization of all workers when # training is started with random weights or restored from a checkpoint. # # Note: broadcast should be done after the first gradient step to ensure optimizer # initialization. if first_batch: hvd.broadcast_variables(model.variables, root_rank=0) hvd.broadcast_variables(opt.variables(), root_rank=0) return loss # Horovod: adjust number of steps based on number of GPUs.
for batch, (texts, labels) in enumerate(dataset.take(10000 // hvd.size())): loss = training_step(texts, labels, batch == 0) if batch % 10 == 0 and hvd.local_rank() == 0: print('Step #%dtLoss: %.6f' % (batch, loss)) # Horovod: save checkpoints only on worker 0 to prevent other workers from
# corrupting it.
if hvd.rank() == 0: checkpoint.save(checkpoint_dir)

Η παράλληλη βιβλιοθήκη δεδομένων SageMaker μας δίνει τη δυνατότητα να κλιμακώνουμε την προπόνησή μας με σχεδόν γραμμική αποτελεσματικότητα, επιταχύνοντας την εκπαίδευσή μας με ελάχιστες αλλαγές κώδικα. Η βιβλιοθήκη εκτελεί ένα έθιμο AllReduce λειτουργία και βελτιστοποιεί την επικοινωνία συσκευής με συσκευή αξιοποιώντας πλήρως την υποδομή δικτύου του AWS και Amazon Elastic Compute Cloud Τοπολογία στιγμιότυπου (Amazon EC2). Για να χρησιμοποιήσουμε την παράλληλη βιβλιοθήκη δεδομένων SageMaker, ακολουθήσαμε την ακόλουθη διαδικασία:

  1. Εισαγωγή και αρχικοποίηση sdp.init().
  2. Συνδέστε κάθε συσκευή με μία smdistributed.dataparallel διαδικασία με local_rank. sdp.tensorflow.local_rank() μας δίνει την τοπική κατάταξη συσκευών. Ο αρχηγός είναι ο βαθμός 0 και οι εργαζόμενοι είναι οι βαθμοί 1, 2, 3 κ.ο.κ.
  3. Προσαρμόστε τον ρυθμό εκμάθησης με βάση τον αριθμό των συσκευών.
  4. Τυλίξτε tf.GradientTape με DistributedGradientTape κανω AllReduce.
  5. Μεταδώστε τις αρχικές μεταβλητές του μοντέλου από τον κόμβο οδηγό σε όλους τους κόμβους εργαζομένων.
  6. Βεβαιωθείτε ότι μόνο η συσκευή 0 μπορεί να αποθηκεύσει σημεία ελέγχου.

Παραλληλισμός μοντέλου

Μπορούμε να προσαρμόσουμε τις υπερπαραμέτρους για να διατηρήσουμε το μοντέλο αρκετά μικρό ώστε να εκπαιδεύεται χρησιμοποιώντας μια μοναδική GPU ή μπορούμε να χρησιμοποιήσουμε τον παραλληλισμό μοντέλου για να διαιρέσουμε το μοντέλο μεταξύ πολλών GPU σε πολλαπλές παρουσίες. Η αύξηση του αριθμού των εκπαιδεύσιμων παραμέτρων ενός μοντέλου μπορεί να οδηγήσει σε καλύτερη ακρίβεια, αλλά υπάρχει ένα όριο στο μέγιστο μέγεθος μοντέλου που μπορείτε να χωρέσετε σε μία μνήμη GPU. Χρησιμοποιήσαμε τη διανεμημένη παράλληλη βιβλιοθήκη μοντέλων του SageMaker για να εκπαιδεύσουμε τα μεγαλύτερα μοντέλα μας. Τα βήματα είναι τα εξής:

  1. Εισαγάγετε και αρχικοποιήστε τη βιβλιοθήκη με smp.init().
  2. Το μοντέλο Keras πρέπει να κληρονομηθεί από το smp.DistributedModel αντί για την κλάση Keras Model.
  3. σετ drop_remainder=True στο tf.Dataset.batch() μέθοδος για να διασφαλιστεί ότι το μέγεθος της παρτίδας διαιρείται πάντα με τον αριθμό των μικροπαρτίδων.
  4. Όλες οι τυχαίες πράξεις στη γραμμή δεδομένων πρέπει να χρησιμοποιούν τον ίδιο σπόρο: smp.dp_rank(), Για παράδειγμα, shuffle(ds, seed=smp.dp_rank()). Αυτό διασφαλίζει τη συνοχή των δειγμάτων δεδομένων σε συσκευές που διαθέτουν διαφορετικά διαμερίσματα μοντέλων.
  5. Η λογική προς τα εμπρός και προς τα πίσω πρέπει να είναι σε συνάρτηση βήματος με smp.step διακόσμηση.
  6. Εκτελέστε μεταεπεξεργασία στις εξόδους σε μικροπαρτίδες χρησιμοποιώντας μεθόδους StepOutput, όπως π.χ reduce_mean. ο smp.step η συνάρτηση πρέπει να έχει μια επιστρεφόμενη τιμή που εξαρτάται από την έξοδο του smp.DistributedModel.

Το σενάριο της εκπαίδευσης έχει ως εξής:

import smdistributed.modelparallel.tensorflow as smp # SMP: Initialize
smp.init() # SMP: Define smp.DistributedModel the same way as Keras sub-classing API
class MyModel(smp.DistributedModel): def __init__(self, maxlen, vocab_size, embed_dim, num_heads, feed_forward_dim, num_layers, learning_rate): super(MyModel, self).__init__(maxlen, vocab_size, embed_dim, num_heads, feed_forward_dim, num_layers, learning_rate) self.embedding_layer = gpt_model.TokenAndPositionEmbedding(maxlen, vocab_size, embed_dim) self.transformer_blocks = [ gpt_model.TransformerBlock(embed_dim, num_heads, feed_forward_dim) for i in range(num_layers) ] self.dense = tf.keras.layers.Dense(vocab_size) def call(self, inputs, training=None): x_emb = self.embedding_layer(inputs) x = x_emb for transformer_block in self.transformer_blocks: x = transformer_block(x) outputs = self.dense(x) return [outputs, x_emb] # SMP: Define smp.step. Return any tensors needed outside
@smp.step
def get_grads(texts, labels): predictions = model(texts, training=True) loss = loss_fn(labels, predictions[0]) grads = optimizer.get_gradients(loss, model.trainable_variables) return grads, loss, predictions[0] @tf.function
def train_step(texts, labels, first_batch): gradients, loss, predictions = get_grads(texts, labels) # SMP: Accumulate the gradients across microbatches gradients = [g.accumulate() for g in gradients] optimizer.apply_gradients(zip(gradients, model.trainable_variables)) # SMP: Average the loss across microbatches train_loss(loss.reduce_mean()) # SMP: Merge predictions across microbatches train_accuracy(labels, predictions.merge()) return loss.reduce_mean() histories = [] for _ in range(epochs): train_loss.reset_states() train_accuracy.reset_states() for texts, labels in text_ds: for i in range(128): text = tf.expand_dims(texts[0][i], axis=0) label = tf.expand_dims(labels[0][i], axis=0) train_step(text, label) 

Για έναν λεπτομερή οδηγό για την ενεργοποίηση του σεναρίου εκπαίδευσης TensorFlow για την κατανεμημένη παράλληλη βιβλιοθήκη μοντέλων του SageMaker, ανατρέξτε στο Τροποποιήστε ένα σενάριο εκπαίδευσης TensorFlow. Για το PyTorch, ανατρέξτε στο Τροποποιήστε ένα εκπαιδευτικό σενάριο PyTorch.

Εντοπιστής σφαλμάτων SageMaker

Στις προηγούμενες ενότητες, συζητήσαμε πώς να βελτιστοποιήσουμε την εκπαίδευση χρησιμοποιώντας τεχνικές παραλληλοποίησης μοντέλων και δεδομένων. Με Debugger Amazon SageMaker, μπορούμε τώρα να συλλάβουμε πληροφορίες προφίλ απόδοσης από τις προπονητικές μας σειρές για να προσδιορίσουμε πόσο έχει βελτιωθεί η εκπαίδευση. Από προεπιλογή, το Debugger καταγράφει μετρήσεις συστήματος για κάθε εργασία εκπαίδευσης του SageMaker, όπως GPU, χρήση CPU, μνήμη, δίκτυο και I/O σε διάστημα δειγματοληψίας 500 χιλιοστών του δευτερολέπτου. Μπορούμε να έχουμε πρόσβαση στα δεδομένα ως εξής:

from smdebug.profiler.analysis.notebook_utils.training_job import TrainingJob
tj = TrainingJob('SMD-MP-demo-2022-01-21-06-43-23-841', "us-east-1")
tj.wait_for_sys_profiling_data_to_be_available()
system_metrics_reader = tj.get_systems_metrics_reader()

Το πρόγραμμα εντοπισμού σφαλμάτων παρέχει βοηθητικά προγράμματα σε φαντάζομαι τα δεδομένα δημιουργίας προφίλ με διαφορετικούς τρόπους. Στο παρακάτω παράδειγμα, βλέπουμε τη συνολική χρήση GPU και CPU, καθώς και τον χρόνο αναμονής I/O για την εργασία εκπαίδευσης πολλαπλών GPU χρησιμοποιώντας το Horovod. Για να δημιουργήσουμε αυτά τα γραφήματα, εκτελούμε τον ακόλουθο κώδικα:

from smdebug.profiler.analysis.notebook_utils.timeline_charts import TimelineCharts view_timeline_charts = TimelineCharts( system_metrics_reader, framework_metrics_reader, select_dimensions=["CPU", "GPU", "I/O"], select_events=["total"], show_workers=False )

Η χρήση της GPU κυμαίνεται συχνά μεταξύ 0-100%, και οι υψηλοί χρόνοι αναμονής I/O με χαμηλή χρήση GPU αποτελούν ένδειξη συμφόρησης I/O. Επιπλέον, η συνολική χρήση της CPU δεν υπερβαίνει ποτέ το 70%, πράγμα που σημαίνει ότι μπορούμε να βελτιώσουμε την προεπεξεργασία δεδομένων αυξάνοντας τον αριθμό των διαδικασιών εργασίας.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Μπορούμε να βελτιώσουμε την απόδοση μεταβαίνοντας από το Horovod στην παράλληλη βιβλιοθήκη κατανεμημένων δεδομένων SageMaker. Στα παρακάτω γραφήματα, μπορούμε να δούμε ότι οι GPU χρησιμοποιούνται πιο αποτελεσματικά και πέφτουν σε χαμηλή χρήση μόνο για μικρά χρονικά διαστήματα.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Υποδομή εκπαίδευσης

Για την εκπαίδευση των μοντέλων, χρησιμοποιήσαμε 10 ml.p3.16x μεγάλες περιπτώσεις χρησιμοποιώντας μια εργασία εκπαίδευσης SageMaker. Το SageMaker μειώνει τον χρόνο και το κόστος για την εκπαίδευση και τον συντονισμό μοντέλων μηχανικής εκμάθησης (ML) χωρίς την ανάγκη διαχείρισης υποδομής. Με το SageMaker, μπορείτε εύκολα να εκπαιδεύσετε και να συντονίσετε μοντέλα ML χρησιμοποιώντας ενσωματωμένα εργαλεία για τη διαχείριση και παρακολούθηση πειραμάτων εκπαίδευσης, την αυτόματη επιλογή βέλτιστων υπερπαραμέτρων, τον εντοπισμό σφαλμάτων σε εργασίες εκπαίδευσης και την παρακολούθηση της χρήσης των πόρων του συστήματος όπως οι GPU, οι CPU και το εύρος ζώνης δικτύου. Τα δεδομένα φιλοξενήθηκαν στο Amazon EFS, το οποίο μας επέτρεψε να αναπτυσσόμαστε και να συρρικνώνουμε καθώς προσθέτουμε και αφαιρούμε αρχεία χωρίς να χρειάζεται διαχείριση ή παροχή. Οι πρωταρχικοί μας στόχοι ήταν να βελτιώσουμε την ταχύτητα προπόνησης και να μειώσουμε το κόστος.

Επεκτασιμότητα μοντέλου

Αν και αυτή η υποδομή χρησιμοποιείται κυρίως για τη δημιουργία γλωσσών, με την αρχιτεκτονική GPT και το σύνολο δεδομένων Pile, μπορείτε να χρησιμοποιήσετε αυτές τις τεχνικές για να εκπαιδεύσετε μοντέλα μετασχηματιστών μεγάλης κλίμακας, κάτι που είναι χρήσιμο σε πολλούς τομείς πέρα ​​από το NLP. Στην ίδια τη μηχανική μάθηση, πολλές εργασίες όρασης υπολογιστών επιλύονται τώρα με αρχιτεκτονικές μεγάλων παραμέτρων (μετασχηματιστής), όπου έχει αποδειχθεί ότι υπερέχουν από τα παραδοσιακά CNN (Συνελικτικό Νευρωνικό Δίκτυο) σε εργασίες όπως η εκμάθηση αναπαράστασης (βλ. Προώθηση της αιχμής στην όραση υπολογιστή με αυτοεπιβλεπόμενους μετασχηματιστές και 10 φορές πιο αποτελεσματική εκπαίδευση) και αντιστοίχιση μεγάλης κλίμακας εικόνων σε κείμενο (π.χ CLIP). Τα μοντέλα μεγάλων παραμέτρων ανοίγουν επίσης νέους δρόμους στις βιοεπιστήμες σε τομείς όπως ανάλυση δομής πρωτεΐνης και ανάλυση δεδομένων ιατρικής εικόνας.

Οι λύσεις που περιγράφουμε λεπτομερώς σε αυτήν την ανάρτηση για κατανεμημένη εκπαίδευση και διαχείριση μεγάλων μοντέλων θα πρέπει να ισχύουν και για μοντέλα σε οποιονδήποτε από αυτούς τους τομείς.

ανταλλαγές

Υπήρξε μια συνεχής συζήτηση στην ερευνητική κοινότητα σχετικά με τους κινδύνους της εκπαίδευσης γλωσσικών μοντέλων μεγάλης κλίμακας και εάν έχει ληφθεί αρκετή σκέψη για τους πιθανούς κινδύνους που σχετίζονται με την ανάπτυξή τους και τις στρατηγικές για τον μετριασμό αυτών των κινδύνων, μερικοί από τους οποίους περιλαμβάνουν τον οικονομικό και περιβαλλοντικό κόστος. Σύμφωνα με α χαρτί που δημοσιεύτηκε στο ACM, η εκπαίδευση ενός μόνο βασικού μοντέλου BERT (χωρίς συντονισμό υπερπαραμέτρων) σε GPU εκτιμήθηκε ότι απαιτεί τόση ενέργεια όση μια υπεραμερικανική πτήση. Οι περιβαλλοντικές επιπτώσεις κλιμακώνονται ανάλογα με το μέγεθος του μοντέλου και η δυνατότητα αποτελεσματικής προσαρμογής τέτοιων μοντέλων μπορεί ενδεχομένως να περιορίσει σημαντικά τις εκπομπές. Η AWS κυκλοφόρησε πρόσφατα ένα νέο Εργαλείο ανθρακικού αποτυπώματος πελατών, διαθέσιμο σε όλους τους πελάτες του AWS χωρίς κόστος, ως μέρος των προσπαθειών της Amazon να αυξήσει τη βιωσιμότητα και να μειώσει τις εκπομπές άνθρακα. Η εκτέλεση εφαρμογών στο AWS Cloud μπορεί δυνητικά να μειώσει το αποτύπωμα άνθρακα (σε σύγκριση με εταιρικά κέντρα δεδομένων που ερευνήθηκαν στο μια αναφορά 2019).

Συμπέρασμα

Αυτή η ανάρτηση παρουσίασε μια λύση που διευκολύνει τη βελτίωση των μοντέλων γλώσσας με ένα δισεκατομμύριο παραμέτρους στο AWS Cloud χρησιμοποιώντας το SageMaker.

Για περισσότερες πληροφορίες σχετικά με τον παραλληλισμό μοντέλων με το SageMaker, ανατρέξτε στο Εκπαιδεύστε 175+ δισεκατομμύρια μοντέλα NLP παραμέτρων με παράλληλες προσθήκες μοντέλων και Hugging Face στο Amazon SageMaker και Πώς η Latent Space χρησιμοποίησε τη βιβλιοθήκη παραλληλισμού μοντέλου Amazon SageMaker για να ωθήσει τα σύνορα μετασχηματιστών μεγάλης κλίμακας.

Εάν θέλετε βοήθεια για την επιτάχυνση της χρήσης του ML στα προϊόντα και τις διαδικασίες σας, επικοινωνήστε με το Εργαστήριο Amazon ML Solutions.


Σχετικά με τους Συγγραφείς

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Σία Γκολάμη είναι Senior Data Scientist στο Amazon ML Solutions Lab, όπου κατασκευάζει λύσεις AI/ML για πελάτες σε διάφορους κλάδους. Είναι παθιασμένος με την επεξεργασία φυσικής γλώσσας (NLP) και τη βαθιά μάθηση. Εκτός δουλειάς, η Sia απολαμβάνει να περνά χρόνο στη φύση και να παίζει τένις.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Μεχντί Νόριείναι Διευθυντής και Ανώτερος Εφαρμοσμένος Επιστήμονας στο Amazon ML Solutions Lab, όπου συνεργάζεται με πελάτες σε διάφορες βιομηχανίες και τους βοηθά να επιταχύνουν το ταξίδι μετανάστευσης στο cloud και να λύσουν τα προβλήματα ML χρησιμοποιώντας λύσεις τελευταίας τεχνολογίας και τεχνολογίες.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Μουχούν Κιμ είναι επιστήμονας δεδομένων στο Amazon Machine Learning Solutions Lab. Επιλύει τα διάφορα επιχειρηματικά προβλήματα του πελάτη εφαρμόζοντας μηχανική εκμάθηση και βαθιά μάθηση και τους βοηθά επίσης να αποκτήσουν δεξιότητες.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται. Ντάνι Μπερντ είναι Εφαρμοσμένος Επιστήμονας στο Amazon ML Solutions Lab. Στο εργαστήριο βοήθησε πελάτες να αναπτύξουν προηγμένες λύσεις ML, σε ειδικότητες ML από την όραση υπολογιστών έως την ενισχυτική μάθηση. Είναι παθιασμένος με την προώθηση της τεχνολογίας και την απελευθέρωση νέων δυνατοτήτων από τα προϊόντα AWS στην πορεία.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Francisco Calderon Rodriguez είναι Επιστήμονας Δεδομένων στο Amazon ML Solutions Lab. Ως μέλος του ML Solutions Lab, βοηθά στην επίλυση κρίσιμων επιχειρηματικών προβλημάτων για πελάτες AWS χρησιμοποιώντας βαθιά μάθηση. Στον ελεύθερο χρόνο του, ο Francisco του αρέσει να παίζει μουσική και κιθάρα, να παίζει ποδόσφαιρο με τις κόρες του και να απολαμβάνει χρόνο με την οικογένειά του.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται. Γιοχάι Νακαγιάμα είναι αρχιτέκτονας Deep Learning στο Amazon ML Solutions Lab. Συνεργάζεται με πελάτες σε διαφορετικούς κλάδους για να επιταχύνει τη χρήση της τεχνητής νοημοσύνης και των υπηρεσιών AWS Cloud για να λύσουν τις επιχειρηματικές τους προκλήσεις. Ενδιαφέρεται για την εφαρμογή τεχνολογιών ML/AI στη διαστημική βιομηχανία.

Δημιουργήστε, εκπαιδεύστε και αναπτύξτε ένα μοντέλο γλώσσας δισεκατομμυρίων παραμέτρων σε terabyte δεδομένων με το TensorFlow και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται. Νάταλι Ράσοχμαρ είναι Senior Applied Scientist στο AWS, όπου βοηθά τους πελάτες να αναπτύξουν εφαρμογές βαθιάς μάθησης.

Σφραγίδα ώρας:

Περισσότερα από Μηχανική εκμάθηση AWS