mim/tests/test_gridsearch.py
yancong d84cf6e79c
Support mim train / test / gridsearch in OpenMMLab-2.0 (#160)
* Suport openmmlab-2.0 with the following features:

- import Config from mmengine
- remove extra options for train / test / gridsearch
- create destination directory if dose not exists in `mim donwload`
- add mmengine in `mim list`

* fix ci with the following 2 problems:
- mmcv2.x have not pre-built package for torch1.5.
- patch xxx not found after install (cause by importlib.reload).

* Update mim/commands/download.py

Co-authored-by: Zaida Zhou <58739961+zhouzaida@users.noreply.github.com>

* dev(download): remove echo line

* support openmmlab 1.0 and 2.0

* use tests/data/lenet5_mnist_2.0.py in test case

* use tests/data/lenet5_mnist_2.0.py in test case

Co-authored-by: Zaida Zhou <58739961+zhouzaida@users.noreply.github.com>
2022-09-23 19:16:40 +08:00

83 lines
2.6 KiB
Python

# Copyright (c) OpenMMLab. All rights reserved.
import pytest
import torch
from click.testing import CliRunner
from mim.commands.gridsearch import cli as gridsearch
from mim.commands.install import cli as install
from mim.commands.uninstall import cli as uninstall
def setup_module():
runner = CliRunner()
result = runner.invoke(uninstall, ['mmcv-full', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcv', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmengine', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcls', '--yes'])
assert result.exit_code == 0
@pytest.mark.parametrize('gpus', [
0,
pytest.param(
1,
marks=pytest.mark.skipif(
not torch.cuda.is_available(), reason='requires CUDA support')),
])
def test_gridsearch(gpus, tmp_path):
runner = CliRunner()
result = runner.invoke(install, ['mmcls>=1.0.0rc0', '--yes'])
assert result.exit_code == 0
result = runner.invoke(install, ['mmengine', '--yes'])
assert result.exit_code == 0
result = runner.invoke(install, ['mmcv>=2.0.0rc0', '--yes'])
assert result.exit_code == 0
args1 = [
'mmcls', 'tests/data/lenet5_mnist_2.0.py', f'--gpus={gpus}',
f'--work-dir={tmp_path}', '--search-args',
'--optim_wrapper.optimizer.lr 1e-3 1e-4'
]
args2 = [
'mmcls', 'tests/data/lenet5_mnist_2.0.py', f'--gpus={gpus}',
f'--work-dir={tmp_path}', '--search-args',
'--optim_wrapper.optimizer.weight_decay 1e-3 1e-4'
]
args3 = [
'mmcls', 'tests/data/xxx.py', f'--gpus={gpus}',
f'--work-dir={tmp_path}', '--search-args',
'--optim_wrapper.optimizer.lr 1e-3 1e-4'
]
args4 = [
'mmcls', 'tests/data/lenet5_mnist_2.0.py', f'--gpus={gpus}',
f'--work-dir={tmp_path}', '--search-args'
]
result = runner.invoke(gridsearch, args1)
assert result.exit_code == 0
result = runner.invoke(gridsearch, args2)
assert result.exit_code == 0
result = runner.invoke(gridsearch, args3)
assert result.exit_code != 0
result = runner.invoke(gridsearch, args4)
assert result.exit_code != 0
def teardown_module():
runner = CliRunner()
result = runner.invoke(uninstall, ['mmcv-full', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcv-full', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmengine', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcls', '--yes'])
assert result.exit_code == 0