Обучение со смешанной точностью с использованием базового 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()