Huấn Luyện Độ Chính Xác Hỗn Hợp (Mixed Precision) – Dynamic Loss Scaling
FP16 có range nhỏ hơn FP32, dễ bị underflow gradient. Loss scaling nhân loss với factor lớn S trước khi backward, sau đó chia gradient cho S.
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: gradient-descent-optimizer.
Nội dung đề bài
Mục tiêu kiến thức
FP16 có range nhỏ hơn FP32, dễ bị underflow gradient. Loss scaling nhân loss với factor lớn S trước khi backward, sau đó chia gradient cho S.
Dynamic Loss Scaling:
- Nếu không có overflow (inf/nan trong gradients): tăng scale sau
backoff_windowbước: S ← S × 2 - Nếu có overflow: giảm scale ngay: S ← S / 2 và skip update
Yêu cầu
class DynamicLossScaler:
def __init__(self, init_scale=2**16, growth_factor=2.0, backoff_factor=0.5, growth_interval=2000):
pass
def scale(self, loss: torch.Tensor) -> torch.Tensor:
# Multiply loss by current scale
pass
def unscale_and_check(self, optimizer) -> bool:
# Divide gradients by scale. Returns True if no inf/nan.
pass
def update(self, found_inf: bool):
# Update scale based on whether overflow was found
passInput
- Lớp
DynamicLossScaler(init_scale,growth_factor,backoff_factor,growth_interval): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.
Output
- Các phương thức của
DynamicLossScaler: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.
Ràng buộc
- Thời gian chạy tối đa: 5000ms.
- Giới hạn bộ nhớ: 512MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
scaler = DynamicLossScaler(init_scale=8.0)
loss = torch.tensor(1.0, requires_grad=True)
scaled = scaler.scale(loss)Output
8.Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
scaler = DynamicLossScaler(init_scale=4.0)
model = torch.nn.Linear(2, 1, bias=False)
optim = torch.optim.SGD(model.parameters(), lr=0.01)
model.weight.grad = torch.tensor([[8.0, 4.0]])
ok = scaler.unscale_and_check(optim)Output
TrueGiải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
