Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker

Kích thước ngày càng tăng của các mô hình ngôn ngữ là một trong những xu hướng lớn nhất trong xử lý ngôn ngữ tự nhiên (NLP) trong những năm gần đây. Kể từ năm 2018, chúng tôi đã chứng kiến ​​sự phát triển và triển khai chưa từng có của các mô hình ngôn ngữ lớn hơn bao giờ hết, bao gồm BERT và các biến thể của nó, GPT-2, T-NLG và GPT-3 (175 tỷ tham số).

Những mô hình này đã đẩy ranh giới của những đổi mới kiến ​​trúc có thể có. Chúng tôi phải đối mặt với một số thách thức khi đào tạo các mô hình học sâu quy mô lớn, đặc biệt là làn sóng mới của các máy biến áp được đào tạo trước. Những thách thức này bao gồm các hạn chế về phần cứng và đánh đổi bằng tính toán và hiệu quả. Để vượt qua những thách thức này về tính song song của mô hình và dữ liệu, AWS cung cấp một loạt các khả năng.

Trong bài đăng này, chúng tôi giới thiệu hai cách tiếp cận chính: song song hóa dữ liệu và song song hóa mô hình bằng cách sử dụng Amazon SageMaker, và thảo luận về ưu và nhược điểm của chúng.

Ngươi mâu

Đối với mô hình ngôn ngữ, chúng tôi sử dụng Transformers, được giới thiệu trong bài báo Chú ý là tất cả những gì bạn cần. Máy biến áp là mô hình học sâu được thiết kế để cố tình tránh những cạm bẫy của RNN bằng cách dựa trên cơ chế tự chú ý để thu hút sự phụ thuộc toàn cầu giữa đầu vào và đầu ra. Kiến trúc mô hình Transformer cho phép song song tốt hơn đáng kể và có thể đạt được hiệu suất cao trong thời gian đào tạo tương đối ngắn. Được xây dựng dựa trên thành công của Transformers, BERT, được giới thiệu trên báo BERT: Đào tạo trước về Máy biến áp hai chiều sâu để hiểu ngôn ngữ, đã bổ sung đào tạo trước hai chiều để trình bày ngôn ngữ. Lấy cảm hứng từ nhiệm vụ Cloze, BERT được đào tạo trước với mô hình ngôn ngữ được che giấu (MLM), trong đó mô hình học cách khôi phục các từ gốc cho các mã thông báo được che ngẫu nhiên. Mô hình BERT cũng được đào tạo trước về nhiệm vụ dự đoán câu tiếp theo (NSP) để dự đoán xem hai câu có đúng thứ tự đọc hay không. Kể từ khi ra đời vào năm 2018, BERT và các biến thể của nó đã được sử dụng rộng rãi trong các mô hình ngôn ngữ.

Chúng tôi bắt đầu bằng cách tạo hai lớp nhúng cho mã thông báo và nhúng vị trí. Các lần nhúng đầu vào là tổng số các lần nhúng mã thông báo và các lần nhúng vị trí.

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

Sau đó, chúng tôi xác định khối bộ giải mã biến áp có hai lớp con: lớp tự chú ý nhiều đầu và một mạng chuyển tiếp được kết nối đầy đủ đơn giản, tiếp theo là chuẩn hóa và bỏ lớp:

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)

Cuối cùng, chúng tôi tạo mô hình ngôn ngữ của mình với lớp nhúng trước đó và các khối biến áp:

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

Tùy thuộc vào siêu tham số của bạn, bạn có thể chia tỷ lệ mô hình này từ hàng nghìn tham số đến hàng tỷ tham số. Thách thức chính với mô hình tỷ tham số là bạn không thể lưu trữ mô hình trong một trường hợp và cần phải phân phối mô hình qua một số nút để đào tạo và suy luận.

Bộ dữ liệu

Trong các thử nghiệm của mình, chúng tôi đã sử dụng Tập dữ liệu cọc. Pile là bộ dữ liệu văn bản tiếng Anh 800 GiB được thiết kế để đào tạo các mô hình ngôn ngữ quy mô lớn. Nó được tạo ra từ 22 bộ dữ liệu đa dạng và chất lượng cao, bao gồm cả bộ dữ liệu NLP đã được thiết lập và bộ dữ liệu mới được giới thiệu.

Tập dữ liệu được tạo từ nhiều nguồn dữ liệu khác nhau, bao gồm cả sách; Kho lưu trữ GitHub; trang web; nhật ký trò chuyện; và các bài báo về y tế, vật lý, toán học, khoa học máy tính và triết học. Cụ thể, nó sử dụng các nguồn sau: Pile-CC, PubMed Central, ArXiv, GitHub, FreeLaw Project, Stack Exchange, US Patent and Trademark Office, PubMed, Ubuntu, IRC, HackerNews, YouTube, PhilPapers, Books3, Project Gutenberg ( PG-19), OpenSubtitles, Wikipedia tiếng Anh, DM Mathematics, EuroParl, kho tài liệu Enron Emails và NIH ExPorter. Nó cũng bao gồm OpenWebText2 và BookCorpus2, là những phần mở rộng của tập dữ liệu OpenWebText và BookCorpus ban đầu, tương ứng. Sự đa dạng trong các nguồn dữ liệu có thể cải thiện kiến ​​thức chung giữa các miền và do đó cải thiện khả năng tổng quát hóa hạ nguồn.

Thách thức chính với tập dữ liệu này là kích thước tuyệt đối; tập dữ liệu có 825 GiB văn bản, được chuyển thành 4.2 TiB của các điểm dữ liệu được xử lý trước và nén. Tương tự như những thách thức mà chúng tôi phải đối mặt với việc đào tạo và lưu trữ các mô hình, việc đào tạo một mô hình với tập dữ liệu này trên một phiên bản duy nhất sẽ mất rất nhiều thời gian và không thực tế.

Giải pháp của chúng tôi là chia nhỏ tập dữ liệu thành các phần dữ liệu khoảng 1 GiB, tải và xử lý trước các tính năng trong Tập dữ liệu TensorFlow các đối tượng và lưu trữ chúng trong Dịch vụ tệp đàn hồi của Amazon (Amazon EFS). Bộ dữ liệu TensorFlow cung cấp một đường dẫn dữ liệu dễ sử dụng và hiệu suất cao, tích hợp tốt với các mô hình của chúng tôi. Amazon EFS là một dịch vụ dễ sử dụng cho phép chúng tôi xây dựng một hệ thống tệp chia sẻ tự động thay đổi tỷ lệ khi tệp được thêm và xóa. Ngoài ra, Amazon EFS có khả năng bùng nổ lên mức thông lượng cao hơn khi cần, điều này rất quan trọng trong quy trình đào tạo mô hình và dữ liệu của chúng tôi.

Tiếp theo, chúng tôi xem xét các chiến lược đào tạo phân tán để giải quyết những thách thức này.

Đào tạo phân tán

Trong dự án này, chúng tôi phải đối mặt với hai thách thức: mở rộng kích thước mô hình và khối lượng dữ liệu. Việc tăng kích thước mô hình và số lượng thông số có thể huấn luyện có thể dẫn đến độ chính xác tốt hơn, nhưng có một giới hạn đối với mô hình mà bạn có thể phù hợp với một bộ nhớ GPU duy nhất hoặc thậm chí nhiều GPU trong một phiên bản. Ngoài ra, kích thước mô hình lớn hơn cần nhiều thời gian hơn để đào tạo.

Bạn có thể giải quyết những thách thức này theo hai cách khác nhau: song song dữ liệu và song song mô hình. Với tính năng song song dữ liệu, chúng tôi thực hiện Stochastic Gradient Descent (SGD) bằng cách phân phối các bản ghi của một loạt nhỏ trên các thiết bị khác nhau để tăng tốc quá trình đào tạo. Tuy nhiên, đào tạo dữ liệu song song đi kèm với sự phức tạp hơn của việc tính toán trung bình gradient theo lô nhỏ với gradient từ tất cả các thiết bị, một bước được gọi là AllReduce, điều này trở nên khó hơn khi cụm đào tạo được phát triển. Trong khi sử dụng song song dữ liệu, chúng tôi phải có khả năng phù hợp với mô hình và một điểm dữ liệu duy nhất trong một thiết bị (CPU hoặc GPU), đây là một yếu tố hạn chế trong các thử nghiệm của chúng tôi vì kích thước của một mô hình lớn như vậy lớn hơn nhiều so với bộ nhớ của một GPU. kích thước.

Một giải pháp khác là sử dụng song song mô hình, phân chia mô hình trên nhiều thiết bị. Song song mô hình là quá trình chia nhỏ mô hình giữa nhiều thiết bị hoặc nút (chẳng hạn như các phiên bản được trang bị GPU) và tạo một đường dẫn hiệu quả để đào tạo mô hình trên các thiết bị này nhằm tối đa hóa việc sử dụng GPU.

Song song hóa dữ liệu

Song song dữ liệu là cách tiếp cận phổ biến nhất đối với nhiều GPU hoặc đào tạo phân tán. Bạn có thể gửi hàng loạt dữ liệu của mình, gửi đến nhiều thiết bị (mỗi thiết bị lưu trữ một mô hình sao chép), sau đó tổng hợp kết quả. Chúng tôi đã thử nghiệm với hai gói để song song hóa dữ liệu: Horovod và Thư viện dữ liệu song song phân tán SageMaker.

Horovod là một khung đào tạo học sâu phân tán cho TensorFlow, Keras, PyTorch và Apache MXNet. Để sử dụng Horovod, chúng tôi đã thực hiện quy trình sau:

  1. Khởi tạo bằng cách chạy hvd.init().
  2. Liên kết mỗi thiết bị với một quy trình duy nhất. Quy trình hoặc công nhân đầu tiên được liên kết với thiết bị đầu tiên, quy trình thứ hai được liên kết với thiết bị thứ hai, v.v.
  3. Điều chỉnh tốc độ học tập dựa trên số lượng thiết bị.
  4. Bao bọc trình tối ưu hóa trong hvd.DistributedOptimizer.
  5. Phát các trạng thái biến ban đầu từ công nhân đầu tiên có cấp bậc 0 đến tất cả các quy trình khác. Điều này là cần thiết để đảm bảo sự khởi tạo nhất quán của tất cả công nhân khi bắt đầu đào tạo với các trọng lượng ngẫu nhiên hoặc được khôi phục từ một điểm kiểm tra.
  6. Đảm bảo rằng chỉ thiết bị 0 mới có thể lưu các điểm kiểm tra để ngăn những công nhân khác làm hỏng chúng.

Sau đây là kịch bản đào tạo:

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)

Thư viện song song dữ liệu SageMaker cho phép chúng tôi mở rộng quy mô đào tạo của mình với hiệu quả gần tuyến tính, tăng tốc đào tạo của chúng tôi với những thay đổi mã tối thiểu. Thư viện thực hiện một tùy chỉnh AllReduce vận hành và tối ưu hóa giao tiếp giữa thiết bị với thiết bị bằng cách sử dụng đầy đủ cơ sở hạ tầng mạng của AWS và Đám mây điện toán đàn hồi Amazon (Amazon EC2) cấu trúc liên kết ví dụ. Để sử dụng thư viện song song dữ liệu SageMaker, chúng tôi đã thực hiện quy trình sau:

  1. Nhập và khởi tạo sdp.init().
  2. Liên kết từng thiết bị với một thiết bị duy nhất smdistributed.dataparallel xử lý với local_rank. sdp.tensorflow.local_rank() cung cấp cho chúng tôi thứ hạng địa phương của thiết bị. Người đứng đầu là hạng 0, và công nhân là hạng 1, 2, 3, v.v.
  3. Điều chỉnh tốc độ học tập dựa trên số lượng thiết bị.
  4. Quấn tf.GradientTape với DistributedGradientTape để thực hiện AllReduce.
  5. Phát các biến mô hình ban đầu từ nút lãnh đạo đến tất cả các nút công nhân.
  6. Đảm bảo rằng chỉ thiết bị 0 có thể lưu các điểm kiểm tra.

Song song hóa mô hình

Chúng tôi có thể điều chỉnh các siêu tham số để giữ cho mô hình đủ nhỏ để đào tạo bằng một GPU duy nhất hoặc chúng tôi có thể sử dụng song song mô hình để chia mô hình giữa nhiều GPU trên nhiều phiên bản. Việc tăng số lượng thông số có thể huấn luyện của một mô hình có thể mang lại độ chính xác tốt hơn, nhưng có giới hạn về kích thước mô hình tối đa mà bạn có thể chứa trong một bộ nhớ GPU duy nhất. Chúng tôi đã sử dụng thư viện song song mô hình phân tán SageMaker để đào tạo các mô hình lớn hơn của chúng tôi. Các bước thực hiện như sau:

  1. Nhập và khởi tạo thư viện với smp.init().
  2. Mô hình Keras cần kế thừa từ smp.DistributedModel thay vì lớp Keras Model.
  3. Thiết lập drop_remainder=True trong tf.Dataset.batch() phương pháp để đảm bảo rằng kích thước lô luôn chia hết cho số lô nhỏ.
  4. Tất cả các hoạt động ngẫu nhiên trong đường ống dữ liệu đều cần sử dụng cùng một hạt giống: smp.dp_rank(), Ví dụ, shuffle(ds, seed=smp.dp_rank()). Điều này đảm bảo tính nhất quán của các mẫu dữ liệu trên các thiết bị chứa các phân vùng mô hình khác nhau.
  5. Logic chuyển tiếp và lùi cần phải ở trong một hàm bước với smp.step trang trí.
  6. Thực hiện xử lý hậu kỳ trên các kết quả đầu ra trên các microbatch bằng cách sử dụng các phương pháp StepOutput chẳng hạn như reduce_mean. Các smp.step hàm phải có giá trị trả về phụ thuộc vào đầu ra của smp.DistributedModel.

Kịch bản đào tạo như sau:

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) 

Để có hướng dẫn chi tiết về cách bật tập lệnh đào tạo TensorFlow cho thư viện song song mô hình phân tán SageMaker, hãy tham khảo Sửa đổi tập lệnh đào tạo TensorFlow. Đối với PyTorch, hãy tham khảo Sửa đổi tập lệnh đào tạo PyTorch.

Trình gỡ lỗi SageMaker

Trong các phần trước, chúng ta đã thảo luận về cách tối ưu hóa việc đào tạo bằng cách sử dụng các kỹ thuật song song hóa mô hình và dữ liệu. Với Trình gỡ lỗi Amazon SageMaker, giờ đây chúng tôi có thể nắm bắt thông tin hồ sơ hiệu suất từ ​​các đợt đào tạo của mình để xác định mức độ cải thiện của khóa đào tạo. Theo mặc định, Trình gỡ lỗi nắm bắt các chỉ số hệ thống cho từng công việc đào tạo của SageMaker như GPU, mức sử dụng CPU, bộ nhớ, mạng và I / O ở khoảng thời gian lấy mẫu là 500 mili giây. Chúng tôi có thể truy cập dữ liệu như sau:

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()

Trình gỡ lỗi cung cấp các tiện ích để hình dung dữ liệu hồ sơ theo những cách khác nhau. Trong ví dụ sau, chúng ta thấy tổng mức sử dụng GPU và CPU cũng như thời gian chờ I / O cho công việc đào tạo đa GPU bằng cách sử dụng Horovod. Để tạo các biểu đồ này, chúng tôi chạy đoạn mã sau:

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 )

Hiệu suất sử dụng GPU thường xuyên dao động trong khoảng 0–100% và thời gian chờ I / O cao với mức sử dụng GPU thấp là một dấu hiệu cho thấy nút thắt cổ chai I / O. Hơn nữa, tổng mức sử dụng CPU không bao giờ vượt quá 70%, có nghĩa là chúng tôi có thể cải thiện việc xử lý trước dữ liệu bằng cách tăng số lượng quy trình của nhân viên.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó.

Chúng tôi có thể cải thiện hiệu suất bằng cách chuyển từ Horovod sang thư viện song song dữ liệu phân tán SageMaker. Trong biểu đồ sau, chúng ta có thể thấy rằng GPU được sử dụng hiệu quả hơn và chỉ giảm xuống mức sử dụng thấp trong một khoảng thời gian ngắn.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó.

Cơ sở hạ tầng đào tạo

Để đào tạo các mô hình, chúng tôi đã sử dụng các phiên bản phóng to 10 ml.p3.16 bằng cách sử dụng công việc đào tạo SageMaker. SageMaker giảm thời gian và chi phí để đào tạo và điều chỉnh các mô hình học máy (ML) mà không cần quản lý cơ sở hạ tầng. Với SageMaker, bạn có thể dễ dàng đào tạo và điều chỉnh các mô hình ML bằng cách sử dụng các công cụ tích hợp để quản lý và theo dõi các thử nghiệm đào tạo, tự động chọn siêu tham số tối ưu, gỡ lỗi các công việc đào tạo và giám sát việc sử dụng tài nguyên hệ thống như GPU, CPU và băng thông mạng. Dữ liệu được lưu trữ trong Amazon EFS, cho phép chúng tôi phát triển và thu nhỏ khi chúng tôi thêm và xóa tệp mà không cần quản lý hoặc cấp phép. Mục tiêu chính của chúng tôi là cải thiện tốc độ đào tạo và giảm chi phí.

Khả năng mở rộng mô hình

Mặc dù cơ sở hạ tầng này chủ yếu được sử dụng để tạo ngôn ngữ, với kiến ​​trúc GPT và tập dữ liệu Pile, bạn có thể sử dụng các kỹ thuật này để đào tạo các mô hình máy biến áp quy mô lớn, hữu ích trong nhiều lĩnh vực ngoài NLP. Trong bản thân học máy, nhiều tác vụ thị giác máy tính hiện được giải quyết bằng các kiến ​​trúc thông số lớn (máy biến áp), nơi chúng được chứng minh là hoạt động tốt hơn các CNN truyền thống (Mạng nơ ron truyền thống) về các tác vụ như học biểu diễn (xem Nâng cao trình độ hiện đại trong thị giác máy tính với Máy biến áp tự giám sát và đào tạo hiệu quả hơn 10 lần) và ánh xạ quy mô lớn từ hình ảnh sang văn bản (chẳng hạn như CLIP). Các mô hình thông số lớn cũng đang tạo ra bước đột phá mới trong khoa học đời sống trong các lĩnh vực như phân tích cấu trúc proteinphân tích dữ liệu hình ảnh y tế.

Các giải pháp mà chúng tôi trình bày chi tiết trong bài đăng này để đào tạo phân tán và quản lý các mô hình lớn cũng nên áp dụng cho các mô hình trong bất kỳ lĩnh vực nào trong số này.

Đánh đổi

Đã có một cuộc thảo luận đang diễn ra trong cộng đồng nghiên cứu về rủi ro của việc đào tạo các mô hình ngôn ngữ quy mô lớn, và liệu đã có đủ suy nghĩ về những rủi ro tiềm ẩn liên quan đến việc phát triển chúng và các chiến lược để giảm thiểu những rủi ro này, một số trong số đó bao gồm tài chính và chi phí môi trường. Theo một giấy được xuất bản trên ACM, đào tạo một mô hình cơ sở BERT duy nhất (không có điều chỉnh siêu thông số) trên GPU được ước tính sẽ yêu cầu nhiều năng lượng như một chuyến bay xuyên Mỹ. Quy mô tác động môi trường với kích thước mô hình, và khả năng tinh chỉnh các mô hình như vậy một cách hiệu quả có thể có khả năng hạn chế đáng kể lượng khí thải. AWS gần đây đã ra mắt một Công cụ Dấu chân Carbon của Khách hàng, được cung cấp miễn phí cho tất cả khách hàng AWS, như một phần trong nỗ lực của Amazon nhằm tăng tính bền vững và giảm lượng khí thải carbon. Việc chạy các ứng dụng trên Đám mây AWS có thể làm giảm lượng khí thải carbon (khi so sánh với các trung tâm dữ liệu doanh nghiệp đã được khảo sát trong báo cáo 2019).

Kết luận

Bài đăng này đã trình bày một giải pháp tạo điều kiện thuận lợi cho việc tinh chỉnh các mô hình ngôn ngữ với hàng tỷ tham số trên Đám mây AWS bằng cách sử dụng SageMaker.

Để biết thêm thông tin về mô hình song song với SageMaker, hãy tham khảo Đào tạo hơn 175 tỷ mô hình NLP tham số với các bổ sung song song mô hình và Ôm mặt trên Amazon SageMakerCách Latent Space đã sử dụng thư viện song song mô hình Amazon SageMaker để thúc đẩy giới hạn của các máy biến áp quy mô lớn.

Nếu bạn muốn được trợ giúp đẩy nhanh việc sử dụng ML trong các sản phẩm và quy trình của mình, vui lòng liên hệ với Phòng thí nghiệm giải pháp Amazon ML.


Về các tác giả

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó.Sia Gholami là Nhà khoa học dữ liệu cấp cao tại Phòng thí nghiệm giải pháp ML của Amazon, nơi ông xây dựng các giải pháp AI / ML cho khách hàng trong nhiều ngành khác nhau. Anh ấy đam mê xử lý ngôn ngữ tự nhiên (NLP) và học sâu. Ngoài công việc, Sia thích dành thời gian hòa mình vào thiên nhiên và chơi tennis.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó.Mehdi Noorilà Nhà quản lý và Nhà khoa học ứng dụng cấp cao tại Phòng thí nghiệm Giải pháp ML của Amazon, nơi ông làm việc với khách hàng trong nhiều ngành khác nhau và giúp họ đẩy nhanh hành trình di chuyển qua đám mây cũng như giải quyết các vấn đề ML của họ bằng cách sử dụng các giải pháp hiện đại và các công nghệ.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó.Muhyun kim là một nhà khoa học dữ liệu tại Phòng thí nghiệm Giải pháp Máy học của Amazon. Anh ấy giải quyết các vấn đề kinh doanh khác nhau của khách hàng bằng cách áp dụng học máy và học sâu, đồng thời giúp họ có kỹ năng.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó. Danny Byrd là một nhà khoa học ứng dụng tại Amazon ML Solutions Lab. Tại phòng thí nghiệm, anh ấy đã giúp khách hàng phát triển các giải pháp ML nâng cao, trong các chuyên ngành ML từ thị giác máy tính đến học tập củng cố. Anh ấy đam mê thúc đẩy công nghệ phát triển và mở ra tiềm năng mới từ các sản phẩm AWS trong suốt chặng đường.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó.Francisco Calderon Rodríguez là Nhà khoa học dữ liệu trong Phòng thí nghiệm Giải pháp ML của Amazon. Là thành viên của Phòng thí nghiệm giải pháp ML, anh ấy giúp giải quyết các vấn đề kinh doanh quan trọng cho khách hàng AWS bằng cách sử dụng học sâu. Khi rảnh rỗi, Francisco thích chơi nhạc và ghita, đá bóng với các con gái và tận hưởng thời gian bên gia đình.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó. Yohei Nakayama là một Kiến trúc sư Học tập sâu tại Phòng thí nghiệm Giải pháp ML của Amazon. Anh ấy làm việc với khách hàng trên các ngành dọc khác nhau để tăng tốc việc sử dụng trí tuệ nhân tạo và dịch vụ Đám mây AWS của họ để giải quyết các thách thức kinh doanh của họ. Ông quan tâm đến việc áp dụng các công nghệ ML / AI vào ngành công nghiệp vũ trụ.

Tạo, đào tạo và triển khai mô hình ngôn ngữ tỷ tham số trên terabyte dữ liệu với TensorFlow và Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm theo chiều dọc. Ai đó. Nathalie Rauschmayr là Nhà khoa học ứng dụng cao cấp tại AWS, nơi cô ấy giúp khách hàng phát triển các ứng dụng học sâu.

Dấu thời gian:

Thêm từ Học máy AWS