|
|
|
@@ -164,6 +164,31 @@ def test_loss_scale_fp16_lr_overflow(): |
|
|
|
assert output_1[0].asnumpy() == output_2[0].asnumpy() |
|
|
|
assert output_1[1].asnumpy() == output_2[1].asnumpy() == True |
|
|
|
|
|
|
|
@pytest.mark.level0 |
|
|
|
@pytest.mark.platform_arm_ascend_training |
|
|
|
@pytest.mark.platform_x86_ascend_training |
|
|
|
@pytest.mark.env_onecard |
|
|
|
def test_loss_scale_fp16_lr_overflow_set_sense_scale(): |
|
|
|
inputs = Tensor(np.ones([16, 16]).astype(np.float32)) |
|
|
|
label = Tensor(np.zeros([16, 16]).astype(np.float32)) |
|
|
|
lr = Tensor(np.ones([1], np.float32) * 0.1) |
|
|
|
net = NetFP16(16, 16) |
|
|
|
net.set_train() |
|
|
|
|
|
|
|
loss = MSELoss() |
|
|
|
optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=0.9) |
|
|
|
|
|
|
|
net_with_loss = WithLossCell(net, loss) |
|
|
|
train_network = TrainOneStepWithLossScaleCell(net_with_loss, optimizer, |
|
|
|
scale_sense=Tensor(np.full((1), np.finfo(np.float32).max), |
|
|
|
dtype=mstype.float32)) |
|
|
|
output_1 = train_network(inputs, label) |
|
|
|
|
|
|
|
train_network.set_sense_scale(Tensor(np.full((1), np.finfo(np.float32).max), dtype=mstype.float32)) |
|
|
|
output_2 = train_network(inputs, label) |
|
|
|
assert output_1[0].asnumpy() == output_2[0].asnumpy() |
|
|
|
assert output_1[1].asnumpy() == output_2[1].asnumpy() == True |
|
|
|
|
|
|
|
@pytest.mark.level0 |
|
|
|
@pytest.mark.platform_arm_ascend_training |
|
|
|
@pytest.mark.platform_x86_ascend_training |
|
|
|
|