Skip to content

Commit 74ad438

Browse files
ver217FrankLeeeee
authored andcommitted
fix FP16 optimizer and adapted torch amp with tensor parallel (#18)
1 parent 5ac4a94 commit 74ad438

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

colossalai/engine/schedule/_no_pipeline.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,21 @@
1616
import torch.nn as nn
1717
from torch.optim import Optimizer
1818

19+
<<<<<<< HEAD
1920
from colossalai.nn import (ZeroRedundancyOptimizer_Level_2,
2021
ZeroRedundancyOptimizer_Level_3)
2122
from colossalai.nn.optimizer._utils import clip_grad_norm_fp32
2223
from ._base_schedule import BaseSchedule
2324
from ._utils import convert_to_fp16, convert_to_fp32
25+
=======
26+
from colossalai.context import ParallelMode
27+
from colossalai.core import global_context as gpc
28+
from colossalai.nn import (ZeroRedundancyOptimizer_Level_2,
29+
ZeroRedundancyOptimizer_Level_3)
30+
from colossalai.nn.optimizer._utils import clip_grad_norm_fp32
31+
from ._utils import convert_to_fp16
32+
from ._base_schedule import BaseSchedule
33+
>>>>>>> c8cb9f9... fix FP16 optimizer and adapted torch amp with tensor parallel (#18)
2434
from ..amp import AMP_TYPE, GradScaler
2535

2636

@@ -191,10 +201,14 @@ def forward_backward_step(self,
191201
def optimizer_step(self, model: nn.Module, optimizer: Optimizer, grad_clipping: float = 0.0):
192202
# step optimizer
193203
if self.fp16 and self.amp_type == AMP_TYPE.TORCH:
194-
if grad_clipping > 0.0:
195-
self._torch_amp_scaler.unscale_(optimizer)
196-
clip_grad_norm_fp32(model.parameters(), grad_clipping)
197-
self._torch_amp_scaler.step(optimizer)
204+
if getattr(gpc.config, 'clip_grad', 0.0) > 0.0:
205+
self._torch_amp_scaler.unscale_(self.optimizer)
206+
clip_grad_norm_fp32(self.model.parameters(),
207+
gpc.config.clip_grad)
208+
self._torch_amp_scaler.step(self.optimizer)
198209
self._torch_amp_scaler.update()
199210
else:
211+
if not self.fp16 and not self.use_zero_level_2_3 and getattr(gpc.config, 'clip_grad', 0.0) > 0.0:
212+
clip_grad_norm_fp32(self.model.parameters(),
213+
gpc.config.clip_grad)
200214
self.optimizer.step()

colossalai/engine/schedule/_pipeline.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,7 @@ def forward_step(self, model, criterion, input_tensor, return_tensors,
163163
if gpc.is_last_rank(ParallelMode.PIPELINE):
164164
if return_loss:
165165
input_tensor, label = self.load_micro_batch()
166-
loss_reduced = self.criterion(output_tensor, *
167-
label) / (self.num_microbatches * self.grad_accum)
166+
loss_reduced = self.criterion(output_tensor, *label) / (self.num_microbatches * self.grad_accum)
168167
return_tensors.append(
169168
tuple((output_tensor, label[0], loss_reduced)))
170169
return loss_reduced

0 commit comments

Comments
 (0)