Zacznij terazZacznij za darmo

Trenowanie z mieszaną precyzją przy użyciu podstawowego PyTorch

Użyjesz niskopresy­jnych 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

Zobacz kurs

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.autocast jako 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()
Edytuj i uruchom kod