Antrenament cu precizie mixtă folosind PyTorch de bază
Vei folosi tipuri de date în virgulă mobilă de precizie redusă pentru a accelera antrenamentul modelului tău de traducere a limbajului. De exemplu, tipurile de date în virgulă mobilă pe 16 biți (float16) ocupă doar jumătate din spațiul celor pe 32 de biți (float32). Acest lucru accelerează calculele pentru înmulțirile de matrice și convoluții. Reține că acest proces implică scalarea gradienților și conversia operațiilor la virgulă mobilă pe 16 biți.
Unele obiecte au fost preîncărcate: dataset, model, dataloader și optimizer.
Acest exercițiu face parte din cursul
Antrenament eficient al modelelor AI cu PyTorch
Instrucțiuni pentru exercițiu
- Înainte de buclă, definește un scaler pentru gradienți folosind
torch.amp.GradScaler. - În buclă, convertește operațiile la tipul de date în virgulă mobilă pe 16 biți folosind
torch.autocastca manager de context. - În buclă, scalează pierderea și apelează
.backward()pentru a genera gradienți scalați.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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()