未验证 提交 e1f93161 编写于 作者: Z Zhen Wang 提交者: GitHub

Fix save/load error in imperative qat UT. (#31937)

上级 e50bc2c2
...@@ -17,6 +17,8 @@ from __future__ import print_function ...@@ -17,6 +17,8 @@ from __future__ import print_function
import os import os
import numpy as np import numpy as np
import random import random
import shutil
import time
import unittest import unittest
import logging import logging
import paddle import paddle
...@@ -157,6 +159,20 @@ class TestImperativeQat(unittest.TestCase): ...@@ -157,6 +159,20 @@ class TestImperativeQat(unittest.TestCase):
QAT = quantization-aware training QAT = quantization-aware training
""" """
@classmethod
def setUpClass(cls):
timestamp = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())
cls.root_path = os.path.join(os.getcwd(), "imperative_qat_" + timestamp)
cls.save_path = os.path.join(cls.root_path, "lenet")
cls.dynamic_root_path = os.path.join(os.getcwd(),
"dynamic_mnist_" + timestamp)
cls.dynamic_save_path = os.path.join(cls.dynamic_root_path, "model")
@classmethod
def tearDownClass(cls):
shutil.rmtree(cls.root_path)
shutil.rmtree(cls.dynamic_root_path)
def test_qat_save(self): def test_qat_save(self):
imperative_qat = ImperativeQuantAware( imperative_qat = ImperativeQuantAware(
weight_quantize_type='abs_max', weight_quantize_type='abs_max',
...@@ -206,6 +222,8 @@ class TestImperativeQat(unittest.TestCase): ...@@ -206,6 +222,8 @@ class TestImperativeQat(unittest.TestCase):
"Train | At epoch {} step {}: loss = {:}, acc= {:}". "Train | At epoch {} step {}: loss = {:}, acc= {:}".
format(epoch, batch_id, format(epoch, batch_id,
avg_loss.numpy(), acc.numpy())) avg_loss.numpy(), acc.numpy()))
if batch_id == 500: # For shortening CI time
break
lenet.eval() lenet.eval()
for batch_id, data in enumerate(test_reader()): for batch_id, data in enumerate(test_reader()):
...@@ -242,11 +260,9 @@ class TestImperativeQat(unittest.TestCase): ...@@ -242,11 +260,9 @@ class TestImperativeQat(unittest.TestCase):
before_save = lenet(test_img) before_save = lenet(test_img)
# save inference quantized model # save inference quantized model
path = "./qat_infer_model/lenet"
save_dir = "./qat_infer_model"
paddle.jit.save( paddle.jit.save(
layer=lenet, layer=lenet,
path=path, path=TestImperativeQat.save_path,
input_spec=[ input_spec=[
paddle.static.InputSpec( paddle.static.InputSpec(
shape=[None, 1, 28, 28], dtype='float32') shape=[None, 1, 28, 28], dtype='float32')
...@@ -259,7 +275,7 @@ class TestImperativeQat(unittest.TestCase): ...@@ -259,7 +275,7 @@ class TestImperativeQat(unittest.TestCase):
exe = fluid.Executor(place) exe = fluid.Executor(place)
[inference_program, feed_target_names, [inference_program, feed_target_names,
fetch_targets] = fluid.io.load_inference_model( fetch_targets] = fluid.io.load_inference_model(
dirname=save_dir, dirname=TestImperativeQat.root_path,
executor=exe, executor=exe,
model_filename="lenet" + INFER_MODEL_SUFFIX, model_filename="lenet" + INFER_MODEL_SUFFIX,
params_filename="lenet" + INFER_PARAMS_SUFFIX) params_filename="lenet" + INFER_PARAMS_SUFFIX)
...@@ -351,7 +367,7 @@ class TestImperativeQat(unittest.TestCase): ...@@ -351,7 +367,7 @@ class TestImperativeQat(unittest.TestCase):
paddle.jit.save( paddle.jit.save(
layer=lenet, layer=lenet,
path="./dynamic_mnist/model", path=TestImperativeQat.dynamic_save_path,
input_spec=[ input_spec=[
paddle.static.InputSpec( paddle.static.InputSpec(
shape=[None, 1, 28, 28], dtype='float32') shape=[None, 1, 28, 28], dtype='float32')
......
...@@ -17,6 +17,8 @@ from __future__ import print_function ...@@ -17,6 +17,8 @@ from __future__ import print_function
import os import os
import numpy as np import numpy as np
import random import random
import shutil
import time
import unittest import unittest
import logging import logging
import paddle import paddle
...@@ -185,6 +187,21 @@ class ImperativeLenet(fluid.dygraph.Layer): ...@@ -185,6 +187,21 @@ class ImperativeLenet(fluid.dygraph.Layer):
class TestImperativeAddQuantDequant(unittest.TestCase): class TestImperativeAddQuantDequant(unittest.TestCase):
@classmethod
def setUpClass(cls):
timestamp = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())
cls.root_path = os.path.join(os.getcwd(),
"imperative_qat_aqd_" + timestamp)
cls.save_path = os.path.join(cls.root_path, "lenet")
cls.dynamic_root_path = os.path.join(os.getcwd(),
"dynamic_mnist_aqd_" + timestamp)
cls.dynamic_save_path = os.path.join(cls.dynamic_root_path, "model")
@classmethod
def tearDownClass(cls):
shutil.rmtree(cls.root_path)
shutil.rmtree(cls.dynamic_root_path)
def test_qat_save(self): def test_qat_save(self):
imperative_qat = ImperativeQuantAware( imperative_qat = ImperativeQuantAware(
...@@ -228,6 +245,8 @@ class TestImperativeAddQuantDequant(unittest.TestCase): ...@@ -228,6 +245,8 @@ class TestImperativeAddQuantDequant(unittest.TestCase):
"Train | At epoch {} step {}: loss = {:}, acc= {:}". "Train | At epoch {} step {}: loss = {:}, acc= {:}".
format(epoch, batch_id, format(epoch, batch_id,
avg_loss.numpy(), acc.numpy())) avg_loss.numpy(), acc.numpy()))
if batch_id == 500: # For shortening CI time
break
lenet.eval() lenet.eval()
for batch_id, data in enumerate(test_reader()): for batch_id, data in enumerate(test_reader()):
...@@ -264,11 +283,9 @@ class TestImperativeAddQuantDequant(unittest.TestCase): ...@@ -264,11 +283,9 @@ class TestImperativeAddQuantDequant(unittest.TestCase):
before_save = lenet(test_img) before_save = lenet(test_img)
# save inference quantized model # save inference quantized model
path = "./qat_infer_model/lenet"
save_dir = "./qat_infer_model"
paddle.jit.save( paddle.jit.save(
layer=lenet, layer=lenet,
path=path, path=TestImperativeAddQuantDequant.save_path,
input_spec=[ input_spec=[
paddle.static.InputSpec( paddle.static.InputSpec(
shape=[None, 1, 28, 28], dtype='float32') shape=[None, 1, 28, 28], dtype='float32')
...@@ -280,7 +297,7 @@ class TestImperativeAddQuantDequant(unittest.TestCase): ...@@ -280,7 +297,7 @@ class TestImperativeAddQuantDequant(unittest.TestCase):
exe = fluid.Executor(place) exe = fluid.Executor(place)
[inference_program, feed_target_names, [inference_program, feed_target_names,
fetch_targets] = fluid.io.load_inference_model( fetch_targets] = fluid.io.load_inference_model(
dirname=save_dir, dirname=TestImperativeAddQuantDequant.root_path,
executor=exe, executor=exe,
model_filename="lenet" + INFER_MODEL_SUFFIX, model_filename="lenet" + INFER_MODEL_SUFFIX,
params_filename="lenet" + INFER_PARAMS_SUFFIX) params_filename="lenet" + INFER_PARAMS_SUFFIX)
...@@ -378,7 +395,7 @@ class TestImperativeAddQuantDequant(unittest.TestCase): ...@@ -378,7 +395,7 @@ class TestImperativeAddQuantDequant(unittest.TestCase):
lenet.eval() lenet.eval()
paddle.jit.save( paddle.jit.save(
layer=lenet, layer=lenet,
path="./dynamic_mnist/model", path=TestImperativeAddQuantDequant.dynamic_save_path,
input_spec=[ input_spec=[
paddle.static.InputSpec( paddle.static.InputSpec(
shape=[None, 1, 28, 28], dtype='float32') shape=[None, 1, 28, 28], dtype='float32')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册