Навчання зі змішаною точністю в базовому PyTorch
Ви використаєте типи даних з нижчою точністю з плаваючою комою, щоб пришвидшити навчання вашої моделі перекладу. Наприклад, 16-бітні типи з плаваючою комою (float16) займають лише половину пам’яті порівняно з 32-бітними (float32). Це прискорює обчислення множень матриць і згорток. Пригадайте, що для цього потрібно масштабувати градієнти та приводити операції до 16-бітного типу з плаваючою комою.
Деякі об’єкти вже завантажено: dataset, model, dataloader і optimizer.
Ця вправа є частиною курсу
Ефективне тренування моделей ШІ з PyTorch
Інструкції до вправи
- Перед циклом визначте скейлер для градієнтів за допомогою
torch.amp.GradScaler. - У циклі приведіть операції до 16-бітного типу з плаваючою комою, використовуючи
torch.autocastяк менеджер контексту. - У циклі масштабуйте втрати та викличте
.backward(), щоб створити масштабовані градієнти.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# Define a scaler for the gradients
scaler = torch.amp.____()
for batch in train_dataloader:
inputs, targets = batch["input_ids"], batch["labels"]
# Casts operations to mixed precision
with torch.____(device_type="cpu", dtype=torch.____):
outputs = model(inputs, labels=targets)
loss = outputs.loss
# Compute scaled gradients
scaler.____(loss).backward()
scaler.step(optimizer)
scaler.update()
optimizer.zero_grad()