add training args support and image classification fintune example
design doc: https://yuque.antfin.com/pai/rwqgvl/khy4uw5dgi39s6ke
usage:
```python
from modelscope.trainers.training_args import (ArgAttr, MSArgumentParser,
training_args)
training_args.topk = ArgAttr(cfg_node_name=['train.evaluation.metric_options.topk',
'evaluation.metric_options.topk'],
default=(1,), help='evaluation using topk, tuple format, eg (1,), (1,5)')
training_args.train_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='train dataset')
training_args.validation_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='validation dataset')
training_args.model_id = ArgAttr(type=str, default='damo/cv_vit-base_image-classification_ImageNet-labels', help='model name')
parser = MSArgumentParser(training_args)
cfg_dict = parser.get_cfg_dict()
args = parser.args
train_dataset = create_dataset(args.train_data, split='train')
val_dataset = create_dataset(args.validation_data, split='validation')
def cfg_modify_fn(cfg):
cfg.merge_from_dict(cfg_dict)
return cfg
kwargs = dict(
model=args.model_id, # model id
train_dataset=train_dataset, # training dataset
eval_dataset=val_dataset, # validation dataset
cfg_modify_fn=cfg_modify_fn # callback to modify configuration
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# start to train
trainer.train()
```
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11225071
2022-12-30 07:35:15 +08:00
|
|
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
|
|
|
|
import unittest
|
|
|
|
|
|
2023-05-22 10:53:18 +08:00
|
|
|
from modelscope import TrainingArgs
|
|
|
|
|
from modelscope.trainers.cli_argument_parser import CliArgumentParser
|
add training args support and image classification fintune example
design doc: https://yuque.antfin.com/pai/rwqgvl/khy4uw5dgi39s6ke
usage:
```python
from modelscope.trainers.training_args import (ArgAttr, MSArgumentParser,
training_args)
training_args.topk = ArgAttr(cfg_node_name=['train.evaluation.metric_options.topk',
'evaluation.metric_options.topk'],
default=(1,), help='evaluation using topk, tuple format, eg (1,), (1,5)')
training_args.train_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='train dataset')
training_args.validation_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='validation dataset')
training_args.model_id = ArgAttr(type=str, default='damo/cv_vit-base_image-classification_ImageNet-labels', help='model name')
parser = MSArgumentParser(training_args)
cfg_dict = parser.get_cfg_dict()
args = parser.args
train_dataset = create_dataset(args.train_data, split='train')
val_dataset = create_dataset(args.validation_data, split='validation')
def cfg_modify_fn(cfg):
cfg.merge_from_dict(cfg_dict)
return cfg
kwargs = dict(
model=args.model_id, # model id
train_dataset=train_dataset, # training dataset
eval_dataset=val_dataset, # validation dataset
cfg_modify_fn=cfg_modify_fn # callback to modify configuration
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# start to train
trainer.train()
```
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11225071
2022-12-30 07:35:15 +08:00
|
|
|
from modelscope.utils.test_utils import test_level
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TrainingArgsTest(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
|
print(('Testing %s.%s' % (type(self).__name__, self._testMethodName)))
|
|
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
|
super().tearDown()
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
|
|
|
|
def test_define_args(self):
|
2023-02-10 05:32:21 +00:00
|
|
|
myparser = CliArgumentParser(TrainingArgs())
|
add training args support and image classification fintune example
design doc: https://yuque.antfin.com/pai/rwqgvl/khy4uw5dgi39s6ke
usage:
```python
from modelscope.trainers.training_args import (ArgAttr, MSArgumentParser,
training_args)
training_args.topk = ArgAttr(cfg_node_name=['train.evaluation.metric_options.topk',
'evaluation.metric_options.topk'],
default=(1,), help='evaluation using topk, tuple format, eg (1,), (1,5)')
training_args.train_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='train dataset')
training_args.validation_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='validation dataset')
training_args.model_id = ArgAttr(type=str, default='damo/cv_vit-base_image-classification_ImageNet-labels', help='model name')
parser = MSArgumentParser(training_args)
cfg_dict = parser.get_cfg_dict()
args = parser.args
train_dataset = create_dataset(args.train_data, split='train')
val_dataset = create_dataset(args.validation_data, split='validation')
def cfg_modify_fn(cfg):
cfg.merge_from_dict(cfg_dict)
return cfg
kwargs = dict(
model=args.model_id, # model id
train_dataset=train_dataset, # training dataset
eval_dataset=val_dataset, # validation dataset
cfg_modify_fn=cfg_modify_fn # callback to modify configuration
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# start to train
trainer.train()
```
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11225071
2022-12-30 07:35:15 +08:00
|
|
|
input_args = [
|
2023-02-10 05:32:21 +00:00
|
|
|
'--max_epochs', '100', '--work_dir', 'ddddd',
|
|
|
|
|
'--per_device_train_batch_size', '8', '--unkown', 'unkown'
|
add training args support and image classification fintune example
design doc: https://yuque.antfin.com/pai/rwqgvl/khy4uw5dgi39s6ke
usage:
```python
from modelscope.trainers.training_args import (ArgAttr, MSArgumentParser,
training_args)
training_args.topk = ArgAttr(cfg_node_name=['train.evaluation.metric_options.topk',
'evaluation.metric_options.topk'],
default=(1,), help='evaluation using topk, tuple format, eg (1,), (1,5)')
training_args.train_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='train dataset')
training_args.validation_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='validation dataset')
training_args.model_id = ArgAttr(type=str, default='damo/cv_vit-base_image-classification_ImageNet-labels', help='model name')
parser = MSArgumentParser(training_args)
cfg_dict = parser.get_cfg_dict()
args = parser.args
train_dataset = create_dataset(args.train_data, split='train')
val_dataset = create_dataset(args.validation_data, split='validation')
def cfg_modify_fn(cfg):
cfg.merge_from_dict(cfg_dict)
return cfg
kwargs = dict(
model=args.model_id, # model id
train_dataset=train_dataset, # training dataset
eval_dataset=val_dataset, # validation dataset
cfg_modify_fn=cfg_modify_fn # callback to modify configuration
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# start to train
trainer.train()
```
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11225071
2022-12-30 07:35:15 +08:00
|
|
|
]
|
|
|
|
|
args, remainning = myparser.parse_known_args(input_args)
|
|
|
|
|
myparser.print_help()
|
|
|
|
|
self.assertTrue(args.max_epochs == 100)
|
|
|
|
|
self.assertTrue(args.work_dir == 'ddddd')
|
2023-02-10 05:32:21 +00:00
|
|
|
self.assertTrue(args.per_device_train_batch_size == 8)
|
add training args support and image classification fintune example
design doc: https://yuque.antfin.com/pai/rwqgvl/khy4uw5dgi39s6ke
usage:
```python
from modelscope.trainers.training_args import (ArgAttr, MSArgumentParser,
training_args)
training_args.topk = ArgAttr(cfg_node_name=['train.evaluation.metric_options.topk',
'evaluation.metric_options.topk'],
default=(1,), help='evaluation using topk, tuple format, eg (1,), (1,5)')
training_args.train_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='train dataset')
training_args.validation_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='validation dataset')
training_args.model_id = ArgAttr(type=str, default='damo/cv_vit-base_image-classification_ImageNet-labels', help='model name')
parser = MSArgumentParser(training_args)
cfg_dict = parser.get_cfg_dict()
args = parser.args
train_dataset = create_dataset(args.train_data, split='train')
val_dataset = create_dataset(args.validation_data, split='validation')
def cfg_modify_fn(cfg):
cfg.merge_from_dict(cfg_dict)
return cfg
kwargs = dict(
model=args.model_id, # model id
train_dataset=train_dataset, # training dataset
eval_dataset=val_dataset, # validation dataset
cfg_modify_fn=cfg_modify_fn # callback to modify configuration
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# start to train
trainer.train()
```
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11225071
2022-12-30 07:35:15 +08:00
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2023-02-10 05:32:21 +00:00
|
|
|
def test_flatten_args(self):
|
2023-05-22 10:53:18 +08:00
|
|
|
training_args = TrainingArgs()
|
add training args support and image classification fintune example
design doc: https://yuque.antfin.com/pai/rwqgvl/khy4uw5dgi39s6ke
usage:
```python
from modelscope.trainers.training_args import (ArgAttr, MSArgumentParser,
training_args)
training_args.topk = ArgAttr(cfg_node_name=['train.evaluation.metric_options.topk',
'evaluation.metric_options.topk'],
default=(1,), help='evaluation using topk, tuple format, eg (1,), (1,5)')
training_args.train_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='train dataset')
training_args.validation_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='validation dataset')
training_args.model_id = ArgAttr(type=str, default='damo/cv_vit-base_image-classification_ImageNet-labels', help='model name')
parser = MSArgumentParser(training_args)
cfg_dict = parser.get_cfg_dict()
args = parser.args
train_dataset = create_dataset(args.train_data, split='train')
val_dataset = create_dataset(args.validation_data, split='validation')
def cfg_modify_fn(cfg):
cfg.merge_from_dict(cfg_dict)
return cfg
kwargs = dict(
model=args.model_id, # model id
train_dataset=train_dataset, # training dataset
eval_dataset=val_dataset, # validation dataset
cfg_modify_fn=cfg_modify_fn # callback to modify configuration
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# start to train
trainer.train()
```
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11225071
2022-12-30 07:35:15 +08:00
|
|
|
input_args = [
|
2023-02-10 05:32:21 +00:00
|
|
|
'--optimizer_params',
|
|
|
|
|
'weight_decay=0.8,eps=1e-6,correct_bias=False',
|
|
|
|
|
'--lr_scheduler_params', 'initial_lr=3e-5,niter_decay=1'
|
add training args support and image classification fintune example
design doc: https://yuque.antfin.com/pai/rwqgvl/khy4uw5dgi39s6ke
usage:
```python
from modelscope.trainers.training_args import (ArgAttr, MSArgumentParser,
training_args)
training_args.topk = ArgAttr(cfg_node_name=['train.evaluation.metric_options.topk',
'evaluation.metric_options.topk'],
default=(1,), help='evaluation using topk, tuple format, eg (1,), (1,5)')
training_args.train_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='train dataset')
training_args.validation_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='validation dataset')
training_args.model_id = ArgAttr(type=str, default='damo/cv_vit-base_image-classification_ImageNet-labels', help='model name')
parser = MSArgumentParser(training_args)
cfg_dict = parser.get_cfg_dict()
args = parser.args
train_dataset = create_dataset(args.train_data, split='train')
val_dataset = create_dataset(args.validation_data, split='validation')
def cfg_modify_fn(cfg):
cfg.merge_from_dict(cfg_dict)
return cfg
kwargs = dict(
model=args.model_id, # model id
train_dataset=train_dataset, # training dataset
eval_dataset=val_dataset, # validation dataset
cfg_modify_fn=cfg_modify_fn # callback to modify configuration
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# start to train
trainer.train()
```
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11225071
2022-12-30 07:35:15 +08:00
|
|
|
]
|
2023-05-22 10:53:18 +08:00
|
|
|
training_args = training_args.parse_cli(input_args)
|
|
|
|
|
cfg, _ = training_args.to_config()
|
2023-02-10 05:32:21 +00:00
|
|
|
self.assertAlmostEqual(cfg.train.optimizer.weight_decay, 0.8)
|
|
|
|
|
self.assertAlmostEqual(cfg.train.optimizer.eps, 1e-6)
|
|
|
|
|
self.assertFalse(cfg.train.optimizer.correct_bias)
|
|
|
|
|
self.assertAlmostEqual(cfg.train.lr_scheduler.initial_lr, 3e-5)
|
|
|
|
|
self.assertEqual(cfg.train.lr_scheduler.niter_decay, 1)
|
add training args support and image classification fintune example
design doc: https://yuque.antfin.com/pai/rwqgvl/khy4uw5dgi39s6ke
usage:
```python
from modelscope.trainers.training_args import (ArgAttr, MSArgumentParser,
training_args)
training_args.topk = ArgAttr(cfg_node_name=['train.evaluation.metric_options.topk',
'evaluation.metric_options.topk'],
default=(1,), help='evaluation using topk, tuple format, eg (1,), (1,5)')
training_args.train_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='train dataset')
training_args.validation_data = ArgAttr(type=str, default='tany0699/cats_and_dogs', help='validation dataset')
training_args.model_id = ArgAttr(type=str, default='damo/cv_vit-base_image-classification_ImageNet-labels', help='model name')
parser = MSArgumentParser(training_args)
cfg_dict = parser.get_cfg_dict()
args = parser.args
train_dataset = create_dataset(args.train_data, split='train')
val_dataset = create_dataset(args.validation_data, split='validation')
def cfg_modify_fn(cfg):
cfg.merge_from_dict(cfg_dict)
return cfg
kwargs = dict(
model=args.model_id, # model id
train_dataset=train_dataset, # training dataset
eval_dataset=val_dataset, # validation dataset
cfg_modify_fn=cfg_modify_fn # callback to modify configuration
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# start to train
trainer.train()
```
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/11225071
2022-12-30 07:35:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
unittest.main()
|