diff --git a/python/paddle/fluid/tests/unittests/ir/test_convert_to_mixed_precision.py b/python/paddle/fluid/tests/unittests/ir/test_convert_to_mixed_precision.py index 912055e8072a4e3d162c6875af97f7fb067edb1e..49b20a8b4ffb0633e5be739f39fe920f24068b71 100644 --- a/python/paddle/fluid/tests/unittests/ir/test_convert_to_mixed_precision.py +++ b/python/paddle/fluid/tests/unittests/ir/test_convert_to_mixed_precision.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os +import tempfile import unittest import paddle @@ -30,70 +32,57 @@ from paddle.vision.models import resnet50 'should compile with cuda.', ) class TestConvertToMixedPrecision(unittest.TestCase): - def test_convert_to_fp16(self): + def setUp(self): + self.temp_dir = tempfile.TemporaryDirectory() model = resnet50(True) net = to_static( model, input_spec=[InputSpec(shape=[None, 3, 224, 224], name='x')] ) - paddle.jit.save(net, 'resnet50/inference') - convert_to_mixed_precision( - 'resnet50/inference.pdmodel', - 'resnet50/inference.pdiparams', - 'mixed/inference.pdmodel', - 'mixed/inference.pdiparams', - PrecisionType.Half, - PlaceType.GPU, - True, + paddle.jit.save( + net, os.path.join(self.temp_dir.name, 'resnet50/inference') ) - def test_convert_to_fp16_with_fp16_input(self): - model = resnet50(True) - net = to_static( - model, input_spec=[InputSpec(shape=[None, 3, 224, 224], name='x')] - ) - paddle.jit.save(net, 'resnet50/inference') - convert_to_mixed_precision( - 'resnet50/inference.pdmodel', - 'resnet50/inference.pdiparams', - 'mixed1/inference.pdmodel', - 'mixed1/inference.pdiparams', - PrecisionType.Half, - PlaceType.GPU, - False, - ) + def tearDown(self): + self.temp_dir.cleanup() - def test_convert_to_fp16_with_blacklist(self): - model = resnet50(True) - net = to_static( - model, input_spec=[InputSpec(shape=[None, 3, 224, 224], name='x')] - ) - paddle.jit.save(net, 'resnet50/inference') - convert_to_mixed_precision( - 'resnet50/inference.pdmodel', - 'resnet50/inference.pdiparams', - 'mixed2/inference.pdmodel', - 'mixed2/inference.pdiparams', + def test_convert_to_mixed_precision(self): + mixed_precision_options = [ + PrecisionType.Half, + PrecisionType.Half, PrecisionType.Half, - PlaceType.GPU, - False, - set('conv2d'), - ) - - def test_convert_to_bf16(self): - model = resnet50(True) - net = to_static( - model, input_spec=[InputSpec(shape=[None, 3, 224, 224], name='x')] - ) - paddle.jit.save(net, 'resnet50/inference') - convert_to_mixed_precision( - 'resnet50/inference.pdmodel', - 'resnet50/inference.pdiparams', - 'mixed3/inference.pdmodel', - 'mixed3/inference.pdiparams', PrecisionType.Bfloat16, - PlaceType.GPU, - True, + ] + keep_io_types_options = [True, False, False, True] + black_list_options = [set(), set(), set(['conv2d']), set()] + + test_configs = zip( + mixed_precision_options, keep_io_types_options, black_list_options ) + for mixed_precision, keep_io_types, black_list in test_configs: + config = f'mixed_precision={mixed_precision}-keep_io_types={keep_io_types}-black_list={black_list}' + with self.subTest( + mixed_precision=mixed_precision, + keep_io_types=keep_io_types, + black_list=black_list, + ): + convert_to_mixed_precision( + os.path.join( + self.temp_dir.name, 'resnet50/inference.pdmodel' + ), + os.path.join( + self.temp_dir.name, 'resnet50/inference.pdiparams' + ), + os.path.join( + self.temp_dir.name, f'{config}/inference.pdmodel' + ), + os.path.join( + self.temp_dir.name, f'{config}/inference.pdiparams' + ), + backend=PlaceType.GPU, + mixed_precision=mixed_precision, + keep_io_types=keep_io_types, + black_list=black_list, + ) if __name__ == '__main__':