TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عی

TensorFlow اور Amazon SageMaker کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔

حالیہ برسوں میں نیچرل لینگویج پروسیسنگ (NLP) میں لینگویج ماڈلز کا بڑھتا ہوا سب سے بڑا رجحان رہا ہے۔ 2018 کے بعد سے، ہم نے زبان کے ہمیشہ سے بڑے ماڈلز کی بے مثال ترقی اور تعیناتی دیکھی ہے، بشمول BERT اور اس کی مختلف قسمیں، GPT-2، T-NLG، اور GPT-3 (175 بلین پیرامیٹرز)۔

ان ماڈلز نے ممکنہ تعمیراتی اختراعات کی حدود کو آگے بڑھا دیا ہے۔ بڑے پیمانے پر ڈیپ لرننگ ماڈلز کی تربیت کرتے وقت ہمیں کئی چیلنجز کا سامنا کرنا پڑتا ہے، خاص طور پر جنریٹو پری ٹرینڈ ٹرانسفارمرز کی نئی لہر۔ ان چیلنجوں میں ہارڈ ویئر کی حدود اور حساب اور کارکردگی کے ساتھ تجارت کا خاتمہ شامل ہے۔ ماڈل اور ڈیٹا کے ہم آہنگی کے ان چیلنجوں پر قابو پانے کے لیے، AWS وسیع پیمانے پر صلاحیتیں پیش کرتا ہے۔

اس پوسٹ میں، ہم دو اہم نقطہ نظر متعارف کراتے ہیں: ڈیٹا کو متوازی اور ماڈل کا استعمال کرتے ہوئے متوازی ایمیزون سیج میکر، اور ان کے فوائد اور نقصانات پر تبادلہ خیال کریں۔

نمونہ

زبان کے ماڈل کے لیے، ہم کاغذ میں متعارف کرائے گئے ٹرانسفارمرز کا استعمال کرتے ہیں۔ توجہ صرف آپ کی ضرورت ہے۔. ٹرانسفارمرز گہرے سیکھنے کے ماڈل ہیں جو ان پٹ اور آؤٹ پٹ کے درمیان عالمی انحصار کو اپنی طرف متوجہ کرنے کے لیے خود توجہ دینے کے طریقہ کار پر انحصار کرتے ہوئے جان بوجھ کر RNNs کے نقصانات سے بچنے کے لیے بنائے گئے ہیں۔ ٹرانسفارمر ماڈل کا فن تعمیر نمایاں طور پر بہتر ہم آہنگی کی اجازت دیتا ہے اور نسبتاً کم تربیتی وقت میں اعلیٰ کارکردگی حاصل کر سکتا ہے۔ ٹرانسفارمرز کی کامیابی پر بنایا گیا، BERT، کاغذ میں متعارف کرایا گیا۔ BERT: زبان کی تفہیم کے لیے گہری دو طرفہ ٹرانسفارمرز کی پری ٹریننگ، زبان کی نمائندگی کے لیے دو طرفہ پری ٹریننگ شامل کی گئی۔ 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

آپ کے ہائپر پیرامیٹر پر منحصر ہے، آپ اس ماڈل کو ہزاروں پیرامیٹرز سے اربوں پیرامیٹرز تک پیمانہ کر سکتے ہیں۔ بلین پیرامیٹر ماڈلز کے ساتھ بنیادی چیلنج یہ ہے کہ آپ ایک مثال میں ماڈل کی میزبانی نہیں کر سکتے اور ٹریننگ اور اندازہ کے لیے ماڈل کو کئی نوڈس پر تقسیم کرنے کی ضرورت ہے۔

ڈیٹاسیٹ

اپنے تجربات میں، ہم نے استعمال کیا۔ ڈیٹاسیٹ کا ڈھیر. The Pile ایک 800 GiB انگریزی ٹیکسٹ ڈیٹاسیٹ ہے جسے بڑے پیمانے پر زبان کے ماڈلز کی تربیت کے لیے ڈیزائن کیا گیا ہے۔ یہ 22 متنوع اور اعلیٰ معیار کے ڈیٹاسیٹس سے بنایا گیا ہے، جس میں NLP ڈیٹاسیٹس اور نئے متعارف کرائے گئے دونوں شامل ہیں۔

ڈیٹاسیٹ مختلف ڈیٹا کے ذرائع سے بنایا گیا ہے، بشمول کتابیں؛ GitHub ذخیرے؛ ویب صفحات؛ چیٹ لاگز؛ اور میڈیکل، فزکس، ریاضی، کمپیوٹر سائنس، اور فلسفے کے پیپرز۔ خاص طور پر، یہ درج ذیل ذرائع استعمال کرتا ہے: Pile-CC, PubMed Central, ArXiv, GitHub, FreeLaw Project, Stack Exchange, the 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 EFS ایک استعمال میں آسان خدمت ہے جو ہمیں ایک مشترکہ فائل سسٹم بنانے کے قابل بناتی ہے جو فائلوں کے شامل اور حذف ہونے کے ساتھ ہی خود بخود اسکیل ہوجاتا ہے۔ مزید برآں، Amazon EFS ضرورت پڑنے پر اعلیٰ تھرو پٹ لیول تک پہنچنے کی صلاحیت رکھتا ہے، جو کہ ہمارے ڈیٹا اور ماڈل ٹریننگ پائپ لائن میں اہم ہے۔

اگلا، ہم ان چیلنجوں سے نمٹنے کے لیے تقسیم شدہ تربیتی حکمت عملیوں پر غور کرتے ہیں۔

تربیت تقسیم کی

اس پروجیکٹ میں، ہمیں دو چیلنجوں کا سامنا کرنا پڑا: ماڈل سائز اور ڈیٹا والیوم کو پیمائی کرنا۔ ماڈل کے سائز اور تربیت کے قابل پیرامیٹرز کی تعداد میں اضافہ کا نتیجہ بہتر درستگی کا باعث بن سکتا ہے، لیکن اس ماڈل کی ایک حد ہے جسے آپ ایک ہی GPU میموری یا ایک ہی مثال میں متعدد GPUs میں فٹ کر سکتے ہیں۔ اس کے علاوہ، بڑے ماڈل کے سائز کو تربیت دینے میں زیادہ وقت لگتا ہے۔

آپ ان چیلنجوں سے دو مختلف طریقوں سے نمٹ سکتے ہیں: ڈیٹا کی ہم آہنگی اور ماڈل متوازی۔ ڈیٹا کی ہم آہنگی کے ساتھ، ہم ٹریننگ کو تیز کرنے کے لیے مختلف آلات پر منی بیچ کے ریکارڈ تقسیم کر کے Stochastic Gradient Descent (SGD) انجام دیتے ہیں۔ تاہم، متوازی ڈیٹا ٹریننگ کمپیوٹنگ منی بیچ گریڈیئنٹ ایوریج کی اضافی پیچیدگی کے ساتھ آتی ہے جس میں تمام آلات سے گریڈیئنٹس ہوتے ہیں، جسے ایک قدم کہا جاتا ہے۔ AllReduceجو کہ ٹریننگ کلسٹر کے بڑھنے کے ساتھ مشکل تر ہوتا جاتا ہے۔ ڈیٹا متوازی استعمال کرتے ہوئے، ہمیں ایک ڈیوائس (سی پی یو یا جی پی یو) میں ماڈل اور ایک ڈیٹا پوائنٹ کو فٹ کرنے کے قابل ہونا چاہیے، جو ہمارے تجربات میں ایک محدود عنصر ہے کیونکہ اتنے بڑے ماڈل کا سائز سنگل جی پی یو کی میموری سے بہت بڑا ہے۔ سائز

ایک اور حل یہ ہے کہ ماڈل متوازی کا استعمال کیا جائے، جو ماڈل کو متعدد آلات پر تقسیم کرتا ہے۔ ماڈل متوازی ایک ماڈل کو متعدد آلات یا نوڈس (جیسے GPU سے لیس مثالوں) کے درمیان تقسیم کرنے اور GPU کے استعمال کو زیادہ سے زیادہ کرنے کے لیے ان آلات میں ماڈل کو تربیت دینے کے لیے ایک موثر پائپ لائن بنانے کا عمل ہے۔

ڈیٹا متوازی

متعدد GPUs یا تقسیم شدہ تربیت کے لیے ڈیٹا کو متوازی بنانا سب سے عام طریقہ ہے۔ آپ اپنے ڈیٹا کو بیچ سکتے ہیں، اسے متعدد آلات پر بھیج سکتے ہیں (ہر ایک نقل شدہ ماڈل کی میزبانی کرتا ہے)، پھر نتائج کو جمع کر سکتے ہیں۔ ہم نے ڈیٹا کو متوازی کرنے کے لیے دو پیکجوں کے ساتھ تجربہ کیا: Horovod اور the سیج میکر نے ڈیٹا متوازی لائبریری تقسیم کی۔.

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 کے نیٹ ورک انفراسٹرکچر کو مکمل طور پر استعمال کرکے ڈیوائس ٹو ڈیوائس کمیونیکیشن کو آپریٹ اور بہتر بناتا ہے اور ایمیزون لچکدار کمپیوٹ کلاؤڈ (ایمیزون ای سی 2) مثال ٹوپولوجی۔ 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 کا استعمال کرتے ہوئے ماڈل کو اتنا چھوٹا رکھنے کے لیے ہائپر پیرامیٹر کو ایڈجسٹ کر سکتے ہیں، یا ہم ماڈل کو متعدد مثالوں میں متعدد GPUs کے درمیان تقسیم کرنے کے لیے ماڈل کی ہم آہنگی کا استعمال کر سکتے ہیں۔ ماڈل کے قابل تربیت پیرامیٹرز کی تعداد میں اضافہ بہتر درستگی کا نتیجہ ہو سکتا ہے، لیکن زیادہ سے زیادہ ماڈل سائز کی ایک حد ہے جسے آپ ایک GPU میموری میں فٹ کر سکتے ہیں۔ ہم نے اپنے بڑے ماڈلز کو تربیت دینے کے لیے SageMaker کی تقسیم شدہ ماڈل متوازی لائبریری کا استعمال کیا۔ اقدامات درج ذیل ہیں:

  1. اس کے ساتھ لائبریری کو درآمد اور شروع کریں۔ smp.init().
  2. Keras ماڈل کو Keras ماڈل کلاس کے بجائے smp.DistributedModel سے وراثت میں لینے کی ضرورت ہے۔
  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) 

SageMaker تقسیم شدہ ماڈل متوازی لائبریری کے لیے TensorFlow ٹریننگ اسکرپٹ کو فعال کرنے کے لیے تفصیلی گائیڈ کے لیے، ملاحظہ کریں TensorFlow ٹریننگ اسکرپٹ میں ترمیم کریں۔. PyTorch کے لیے، رجوع کریں۔ PyTorch ٹریننگ اسکرپٹ میں ترمیم کریں۔.

سیج میکر ڈیبگر

پچھلے حصوں میں، ہم نے ماڈل اور ڈیٹا کو متوازی کرنے کی تکنیک کا استعمال کرتے ہوئے تربیت کو بہتر بنانے کے طریقہ پر تبادلہ خیال کیا۔ کے ساتھ ایمیزون سیج میکر ڈیبگر، اب ہم اپنی ٹریننگ رنز سے کارکردگی کی پروفائلنگ کی معلومات حاصل کر سکتے ہیں تاکہ یہ تعین کیا جا سکے کہ تربیت میں کتنی بہتری آئی ہے۔ پہلے سے طے شدہ طور پر، ڈیبگر ہر سیج میکر ٹریننگ جاب جیسے 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()

ڈیبگر کو افادیت فراہم کرتا ہے۔ تصور کرنا مختلف طریقوں سے پروفائلنگ ڈیٹا۔ مندرجہ ذیل مثال میں، ہم Horovod کا استعمال کرتے ہوئے کثیر GPU ٹریننگ جاب کے لیے کل GPU اور CPU استعمال کے ساتھ ساتھ I/O انتظار کا وقت دیکھتے ہیں۔ یہ گراف بنانے کے لیے، ہم درج ذیل کوڈ کو چلاتے ہیں:

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% کے درمیان اتار چڑھاؤ آتا ہے، اور GPU کے کم استعمال کے ساتھ زیادہ I/O انتظار کا وقت I/O کی رکاوٹ کا اشارہ ہے۔ مزید برآں، CPU کا کل استعمال کبھی بھی 70% سے زیادہ نہیں ہوتا، جس کا مطلب ہے کہ ہم ورکرز کے عمل کی تعداد میں اضافہ کرکے ڈیٹا پری پروسیسنگ کو بہتر بنا سکتے ہیں۔

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عی

ہم Horovod سے SageMaker تقسیم شدہ ڈیٹا متوازی لائبریری میں تبدیل ہو کر کارکردگی کو بہتر بنا سکتے ہیں۔ مندرجہ ذیل گرافس میں، ہم دیکھ سکتے ہیں کہ GPUs کو زیادہ موثر طریقے سے استعمال کیا گیا ہے اور صرف مختصر مدت کے لیے کم استعمال میں گر رہے ہیں۔

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عی

تربیت کا بنیادی ڈھانچہ

ماڈلز کی تربیت کے لیے، ہم نے SageMaker ٹریننگ جاب کا استعمال کرتے ہوئے 10 ml.p3.16x بڑی مثالیں استعمال کیں۔ SageMaker بنیادی ڈھانچے کو منظم کرنے کی ضرورت کے بغیر مشین لرننگ (ML) ماڈلز کو تربیت دینے اور ٹیون کرنے کے لیے وقت اور لاگت کو کم کرتا ہے۔ SageMaker کے ساتھ، آپ آسانی سے ML ماڈلز کو بلٹ ان ٹولز کا استعمال کرتے ہوئے ٹریننگ کے تجربات کو منظم اور ٹریک کر سکتے ہیں، خودکار طور پر بہترین ہائپر پیرامیٹر کا انتخاب کر سکتے ہیں، ٹریننگ جابز کو ڈیبگ کر سکتے ہیں، اور سسٹم کے وسائل جیسے GPUs، CPUs، اور نیٹ ورک بینڈوتھ کے استعمال کی نگرانی کر سکتے ہیں۔ ڈیٹا Amazon EFS میں ہوسٹ کیا گیا تھا، جس نے ہمیں بڑھنے اور سکڑنے کے قابل بنایا کیونکہ ہم فائلوں کو شامل کرتے اور ہٹاتے ہیں جس کے انتظام یا فراہمی کی ضرورت نہیں ہے۔ ہمارا بنیادی مقصد تربیت کی رفتار کو بہتر بنانا اور اخراجات کو کم کرنا تھا۔

ماڈل اسکیل ایبلٹی

اگرچہ یہ بنیادی ڈھانچہ بنیادی طور پر زبان کی تخلیق کے لیے استعمال کیا جاتا ہے، GPT فن تعمیر اور پائل ڈیٹاسیٹ کے ساتھ، آپ ان تکنیکوں کو بڑے پیمانے پر ٹرانسفارمر ماڈلز کو تربیت دینے کے لیے استعمال کر سکتے ہیں، جو NLP سے آگے بہت سے ڈومینز میں مفید ہے۔ مشین لرننگ میں ہی، کمپیوٹر ویژن کے بہت سے کام اب بڑے پیرامیٹر (ٹرانسفارمر) فن تعمیر کے ساتھ حل کیے جاتے ہیں جہاں انہیں نمائندگی سیکھنے جیسے کاموں پر روایتی CNNs (Convolutional Neural Network) کو پیچھے چھوڑتے ہوئے دکھایا گیا ہے (دیکھیں خود زیر نگرانی ٹرانسفارمرز اور 10 گنا زیادہ موثر تربیت کے ساتھ کمپیوٹر وژن میں جدید ترین ترقی) اور متن میں تصاویر کی بڑے پیمانے پر میپنگ (جیسے کلپ)۔ بڑے پیرامیٹر ماڈل جیسے شعبوں میں لائف سائنسز میں نئی ​​بنیادیں توڑ رہے ہیں۔ پروٹین کی ساخت کا تجزیہ اور طبی امیج ڈیٹا کا تجزیہ.

تقسیم شدہ تربیت اور بڑے ماڈلز کے نظم و نسق کے لیے جو حل ہم اس پوسٹ میں بتاتے ہیں ان میں سے کسی بھی ڈومینز کے ماڈلز پر بھی لاگو ہونا چاہیے۔

تجارت آف

تحقیقی برادری میں بڑے پیمانے پر لینگویج ماڈلز کی تربیت کے خطرات کے بارے میں بحث جاری ہے، اور کیا ان کی نشوونما سے وابستہ ممکنہ خطرات اور ان خطرات کو کم کرنے کی حکمت عملیوں کے بارے میں کافی سوچ بچار کی گئی ہے، جن میں سے کچھ مالیاتی اور ماحولیاتی اخراجات ایک کے مطابق کاغذ ACM میں شائع ہوا، GPUs پر سنگل BERT بیس ماڈل (بغیر ہائپر پیرامیٹر ٹیوننگ) کی تربیت کے لیے ایک ٹرانس امریکن فلائٹ جتنی توانائی درکار ہوتی ہے۔ ماحولیاتی اثرات ماڈل کے سائز کے ساتھ پیمانے پر ہوتے ہیں، اور ایسے ماڈلز کو مؤثر طریقے سے ٹھیک کرنے کے قابل ہونا ممکنہ طور پر اخراج کو نمایاں طور پر کم کر سکتا ہے۔ AWS نے حال ہی میں ایک نیا لانچ کیا۔ کسٹمر کاربن فوٹ پرنٹ ٹولپائیداری بڑھانے اور کاربن کے اخراج کو کم کرنے کے لیے ایمیزون کی کوششوں کے حصے کے طور پر، تمام AWS صارفین کے لیے بغیر کسی قیمت کے دستیاب ہے۔ AWS کلاؤڈ پر ایپلیکیشنز چلانے سے کاربن فوٹ پرنٹ کو ممکنہ طور پر کم کیا جا سکتا ہے (جب انٹرپرائز ڈیٹا سینٹرز کے مقابلے میں جن کا سروے کیا گیا تھا ایک 2019 رپورٹ).

نتیجہ

اس پوسٹ نے ایک ایسے حل کا مظاہرہ کیا جو SageMaker کا استعمال کرتے ہوئے AWS کلاؤڈ پر ایک ارب پیرامیٹرز کے ساتھ زبان کے ماڈلز کو ٹھیک کرنے میں سہولت فراہم کرتا ہے۔

SageMaker کے ساتھ ماڈل کی ہم آہنگی کے بارے میں مزید معلومات کے لیے، رجوع کریں۔ Amazon SageMaker پر ماڈل کے متوازی اضافے اور Hugging Face کے ساتھ 175+ بلین پیرامیٹر NLP ماڈلز کو ٹرین کریں اور کس طرح لیٹنٹ اسپیس نے بڑے پیمانے پر ٹرانسفارمرز کی سرحدوں کو آگے بڑھانے کے لیے ایمیزون سیج میکر ماڈل متوازی لائبریری کا استعمال کیا۔.

اگر آپ اپنی مصنوعات اور عمل میں ایم ایل کے استعمال کو تیز کرنے میں مدد چاہتے ہیں، تو براہ کرم رابطہ کریں۔ ایمیزون ایم ایل حل لیب.


مصنفین کے بارے میں

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عیسیا غلامی۔ ایمیزون ایم ایل سلوشنز لیب میں ایک سینئر ڈیٹا سائنٹسٹ ہے، جہاں وہ مختلف صنعتوں کے صارفین کے لیے AI/ML سلوشنز تیار کرتا ہے۔ وہ قدرتی زبان کی پروسیسنگ (NLP) اور گہری تعلیم کے بارے میں پرجوش ہے۔ کام سے باہر، سیا فطرت میں وقت گزارنے اور ٹینس کھیلنا پسند کرتی ہے۔

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عیمہدی نوری۔ایمیزون ایم ایل سلوشنز لیب میں ایک مینیجر اور ایک سینئر اپلائیڈ سائنٹسٹ ہے، جہاں وہ مختلف صنعتوں کے صارفین کے ساتھ کام کرتا ہے، اور ان کی کلاؤڈ مائیگریشن کے سفر کو تیز کرنے میں مدد کرتا ہے، اور جدید ترین حلوں کا استعمال کرتے ہوئے اپنے ایم ایل کے مسائل کو حل کرتا ہے۔ ٹیکنالوجیز

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عیموہیون کم ایمیزون مشین لرننگ سلوشنز لیب میں ڈیٹا سائنٹسٹ ہے۔ وہ مشین لرننگ اور ڈیپ لرننگ کا استعمال کرکے صارفین کے مختلف کاروباری مسائل کو حل کرتا ہے، اور انہیں ہنر مند بننے میں بھی مدد کرتا ہے۔

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عی ڈینی برڈ ایمیزون ایم ایل سلوشنز لیب میں ایک اپلائیڈ سائنٹسٹ ہے۔ لیب میں اس نے صارفین کو کمپیوٹر وژن سے کمک سیکھنے تک ML خصوصیات میں جدید ترین ML حل تیار کرنے میں مدد کی ہے۔ وہ ٹیکنالوجی کو آگے بڑھانے اور راستے میں AWS مصنوعات سے نئی صلاحیتوں کو کھولنے کے بارے میں پرجوش ہے۔

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عیفرانسسکو کالڈرون روڈریگ ایمیزون ایم ایل سلوشنز لیب میں ڈیٹا سائنٹسٹ ہے۔ ایم ایل سلوشنز لیب کے ایک رکن کے طور پر، وہ گہری تعلیم کا استعمال کرتے ہوئے AWS صارفین کے لیے اہم کاروباری مسائل حل کرنے میں مدد کرتا ہے۔ اپنے فارغ وقت میں، فرانسسکو موسیقی اور گٹار بجانا، اپنی بیٹیوں کے ساتھ فٹ بال کھیلنا، اور اپنے خاندان کے ساتھ وقت گزارنا پسند کرتا ہے۔

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عی Yohei Nakayama ایمیزون ایم ایل سلوشنز لیب میں ڈیپ لرننگ آرکیٹیکٹ ہے۔ وہ اپنے کاروباری چیلنجوں کو حل کرنے کے لیے مصنوعی ذہانت اور AWS کلاؤڈ سروسز کے استعمال کو تیز کرنے کے لیے مختلف عمودی حصوں میں صارفین کے ساتھ کام کرتا ہے۔ وہ خلائی صنعت میں ML/AI ٹیکنالوجیز کو لاگو کرنے میں دلچسپی رکھتا ہے۔

TensorFlow اور Amazon SageMaker PlatoBlockchain Data Intelligence کے ساتھ ٹیرا بائٹس ڈیٹا پر ایک بلین پیرامیٹر لینگویج ماڈل بنائیں، تربیت دیں اور تعینات کریں۔ عمودی تلاش۔ عی نتھالی راؤشمیر AWS میں ایک سینئر اپلائیڈ سائنٹسٹ ہے، جہاں وہ صارفین کو گہری سیکھنے کی ایپلی کیشنز تیار کرنے میں مدد کرتی ہے۔

ٹائم اسٹیمپ:

سے زیادہ AWS مشین لرننگ