8-बिट Adam के साथ मिश्रित प्रिसिजन प्रशिक्षण

PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

Dennis Lee

Data Engineer, Amazon

प्रशिक्षण दक्षता के लिए ऑप्टिमाइज़र

AdamW, Adafactor, और 8-बिट Adam के लिए पैरामीटर संख्या और प्रिसिजन के बीच ट्रेड-ऑफ का आरेख।

PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

प्रशिक्षण दक्षता के लिए ऑप्टिमाइज़र

AdamW, Adafactor, और 8-बिट Adam के लिए पैरामीटर संख्या और प्रिसिजन के बीच ट्रेड-ऑफ का आरेख।

PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam कैसे काम करता है?

8-बिट Adam के चरणों का आरेख।

  • पैरामीटर FP8 में संग्रहीत; अनुकूलन FP32 में
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam कैसे काम करता है?

8-बिट Adam के चरणों का आरेख।

  • पैरामीटर FP8 में संग्रहीत; अनुकूलन FP32 में
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam कैसे काम करता है?

8-बिट Adam के चरणों का आरेख।

  • पैरामीटर FP8 में संग्रहीत; अनुकूलन FP32 में
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam कैसे काम करता है?

8-बिट Adam के चरणों का आरेख।

  • पैरामीटर FP8 में संग्रहीत; अनुकूलन FP32 में
  • EMA: एक्सपोनेंशियल मूविंग एवरेज
  • ग्रेडिएंट और स्क्वायर्ड ग्रेडिएंट का EMA गणना करें
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam कैसे काम करता है?

8-बिट Adam के चरणों का आरेख।

  • पैरामीटर FP8 में संग्रहीत; अनुकूलन FP32 में
  • EMA: एक्सपोनेंशियल मूविंग एवरेज
  • ग्रेडिएंट और स्क्वायर्ड ग्रेडिएंट का EMA गणना करें
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam मेमोरी कैसे बचाता है?

पैरामीटर ग्रेडिएंट, ग्रेडिएंट का EMA, और स्क्वायर्ड ग्रेडिएंट का EMA दर्शाने वाला आरेख।

PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam मेमोरी कैसे बचाता है?

पैरामीटर ग्रेडिएंट, ग्रेडिएंट का EMA, और स्क्वायर्ड ग्रेडिएंट का EMA दर्शाने वाला आरेख।

PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam मेमोरी कैसे बचाता है?

पैरामीटर ग्रेडिएंट, ग्रेडिएंट का EMA, और स्क्वायर्ड ग्रेडिएंट का EMA दर्शाने वाला आरेख।

  • प्रत्येक वर्ग एक पैरामीटर है; प्रत्येक रंग एक स्टेट
  • प्रति पैरामीटर मेमोरी = 2 बाइट = 1 बाइट प्रति स्टेट × 2 स्टेट
  • कुल मेमोरी = प्रति पैरामीटर मेमोरी (2 बाइट) × पैरामीटरों की संख्या
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam की मेमोरी का अनुमान लगाएँ

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-cased", return_dict=True)
num_parameters = sum(p.numel() for p in model.parameters())
print(f"Number of model parameters: {num_parameters:,}")
Number of model parameters: 65,783,042
estimated_memory = num_parameters * 2 / (1024 ** 2)
print(f"Estimated memory usage of 8-bit Adam: {estimated_memory:.0f} MB")
Estimated memory usage of 8-bit Adam: 125 MB
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam ऑप्टिमाइज़र सेट करें

import bitsandbytes as bnb
from torch import nn
from transformers.trainer_pt_utils import get_parameter_names


args = TrainingArguments(output_dir="./results")
decay_parameters = get_parameter_names(model, [nn.LayerNorm])
decay_parameters = [name for name in decay_parameters if "bias" not in name]
  • वेट डिके ओवरफिटिंग कम करता है
  • decay_parameters: वेट डिके लगाने वाले पैरामीटर निर्दिष्ट करें
  • get_parameter_names: पैरामीटर नाम लौटाएँ; nn.LayerNorm लेयर अनदेखी
  • decay_parameters से bias पैरामीटर हटाएँ
  • नॉर्मलाइज़ेशन लेयर और बायस पर वेट डिके न लगाएँ
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam ऑप्टिमाइज़र सेट करें

optimizer_grouped_parameters = [{"params": [p for n, p in model.named_parameters() 
                                            if n in decay_parameters],
                                 "weight_decay": args.weight_decay},

{"params": [p for n, p in model.named_parameters() if n not in decay_parameters], "weight_decay": 0.0}]
adam_bnb_optim = bnb.optim.Adam8bit(optimizer_grouped_parameters,
betas=(args.adam_beta1, args.adam_beta2),
eps=args.adam_epsilon,
lr=args.learning_rate)
  • optimizer_grouped_parameters: एक समूह पर वेट डिके; दूसरे पर नहीं
  • beta1, beta2: 1st और 2nd मोमेंट के डिके रेट; अधिक = स्थिर, धीला प्रशिक्षण
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

Trainer के साथ 8-बिट Adam लागू करें

trainer = Trainer(model=model,
                  args=training_args,
                  train_dataset=train_dataset,
                  eval_dataset=validation_dataset,
                  optimizers=(adam_bnb_optim, None),
                  compute_metrics=compute_metrics)

trainer.train()
{'epoch': 1.0, 'eval_loss': 0.63, 'eval_accuracy': 0.67, 'eval_f1': 0.62}
{'epoch': 2.0, 'eval_loss': 0.61, 'eval_accuracy': 0.71, 'eval_f1': 0.66}
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

Accelerator के साथ 8-बिट Adam लागू करें

model, adam_bnb_optim, train_dataloader, lr_scheduler = \
    accelerator.prepare(model, adam_bnb_optim, train_dataloader, lr_scheduler)


for batch in train_dataloader: inputs, targets = batch["input_ids"], batch["labels"] outputs = model(inputs, labels=targets) loss = outputs.loss accelerator.backward(loss) adam_bnb_optim.step() lr_scheduler.step() adam_bnb_optim.zero_grad() print(f"Loss = {loss}")
Loss = 0.75
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

8-बिट Adam की मेमोरी गणना करें

total_size_megabytes, total_num_elements = \
    compute_optimizer_size(trainer.optimizer.state.values())
print(f"Number of 8-bit Adam parameters: {total_num_elements:,}")
print(f"8-bit Adam size: {total_size_megabytes:.0f} MB")
Number of 8-bit Adam parameters: 131,566,188
8-bit Adam size: 128 MB
  • AdamW से तुलना: 8-बिट Adam 1/4 मेमोरी उपयोग करता है
Number of AdamW parameters: 131,566,188
AdamW size: 502 MB
PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

Passons à la pratique !

PyTorch के साथ कुशल AI मॉडल प्रशिक्षण

Preparing Video For Download...