Trenowanie z mieszaną precyzją przy użyciu podstawowego PyTorch
Użyjesz niskopresyjnych typów zmiennoprzecinkowych, aby przyspieszyć trenowanie modelu do tłumaczenia języków. Na przykład 16-bitowe typy zmiennoprzecinkowe (float16) zajmują tylko połowę miejsca w porównaniu z ich 32-bitowymi odpowiednikami (float32). Przekłada się to na szybsze obliczenia mnożenia macierzy i operacji splotowych. Pamiętaj, że wymaga to skalowania gradientów i rzutowania operacji na 16-bitowy format zmiennoprzecinkowy.
Niektóre obiekty zostały wstępnie wczytane: dataset, model, dataloader oraz optimizer.
To ćwiczenie jest częścią kursu
Efektywne trenowanie modeli AI z PyTorch
Instrukcje do ćwiczenia
- Przed pętlą zdefiniuj skaler gradientów, korzystając z
torch.amp.GradScaler. - W pętli rzutuj operacje na 16-bitowy typ zmiennoprzecinkowy, używając
torch.autocastjako menedżera kontekstu. - W pętli przeskaluj stratę i wywołaj
.backward(), aby obliczyć przeskalowane gradienty.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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()