2023-03-10 05:21:05 +00:00
|
|
|
import pytest
|
|
|
|
import torch
|
|
|
|
import torchvision.models as tm
|
2023-03-22 05:38:11 +00:00
|
|
|
from packaging import version
|
|
|
|
|
2023-04-06 06:51:35 +00:00
|
|
|
from colossalai.testing.utils import clear_cache_before_run, parameterize
|
2023-03-22 05:38:11 +00:00
|
|
|
from tests.test_analyzer.test_fx.zoo import tm_models, tmm_models
|
2023-03-10 05:21:05 +00:00
|
|
|
|
|
|
|
try:
|
|
|
|
from colossalai._analyzer._subclasses import MetaTensorMode
|
|
|
|
from colossalai._analyzer.fx import symbolic_profile, symbolic_trace
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def _check_gm_validity(gm: torch.fx.GraphModule):
|
|
|
|
for node in gm.graph.nodes:
|
|
|
|
assert len(node.meta['info'].global_ctx), f'In {gm.__class__.__name__}, {node} has empty global context.'
|
|
|
|
|
|
|
|
|
2023-03-22 05:38:11 +00:00
|
|
|
@pytest.mark.skipif(version.parse(torch.__version__) < version.parse('1.12.0'), reason='torch version < 12')
|
2023-04-06 06:51:35 +00:00
|
|
|
@clear_cache_before_run()
|
2023-03-22 05:38:11 +00:00
|
|
|
@parameterize('m', tm_models)
|
2023-03-10 05:21:05 +00:00
|
|
|
def test_torchvision_profile(m, verbose=False, bias_addition_split=False):
|
|
|
|
with MetaTensorMode():
|
|
|
|
model = m()
|
|
|
|
data = torch.rand(8, 3, 224, 224)
|
|
|
|
meta_args = {
|
|
|
|
"x": data,
|
|
|
|
}
|
|
|
|
gm = symbolic_trace(model, meta_args=meta_args, bias_addition_split=bias_addition_split)
|
|
|
|
symbolic_profile(gm, data, verbose=verbose)
|
|
|
|
_check_gm_validity(gm)
|
|
|
|
|
|
|
|
|
2023-03-22 05:38:11 +00:00
|
|
|
@pytest.mark.skipif(version.parse(torch.__version__) < version.parse('1.12.0'), reason='torch version < 12')
|
2023-04-06 06:51:35 +00:00
|
|
|
@clear_cache_before_run()
|
2023-03-22 05:38:11 +00:00
|
|
|
@parameterize('m', tmm_models)
|
2023-03-10 05:21:05 +00:00
|
|
|
def test_timm_profile(m, verbose=False, bias_addition_split=False):
|
|
|
|
with MetaTensorMode():
|
|
|
|
model = m()
|
|
|
|
data = torch.rand(8, 3, 224, 224)
|
|
|
|
meta_args = {
|
|
|
|
"x": data,
|
|
|
|
}
|
|
|
|
gm = symbolic_trace(model, meta_args=meta_args, bias_addition_split=bias_addition_split)
|
|
|
|
symbolic_profile(gm, data, verbose=verbose)
|
|
|
|
_check_gm_validity(gm)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2023-03-22 05:38:11 +00:00
|
|
|
test_torchvision_profile()
|
|
|
|
test_timm_profile()
|