MCPcopy Index your code
hub / github.com/OpenGVLab/InternVL / build_optimizer

Function build_optimizer

classification/optimizer.py:11–87  ·  view source on GitHub ↗

Build optimizer, set weight decay of normalization to 0 by default.

(config, model)

Source from the content-addressed store, hash-verified

9
10
11def build_optimizer(config, model):
12 """
13 Build optimizer, set weight decay of normalization to 0 by default.
14 """
15 skip = {}
16 skip_keywords = {}
17 if hasattr(model, 'no_weight_decay'):
18 skip = model.no_weight_decay()
19 if hasattr(model, 'no_weight_decay_keywords'):
20 skip_keywords = model.no_weight_decay_keywords()
21
22 parameters = set_weight_decay_and_lr(
23 model,
24 config.TRAIN.WEIGHT_DECAY,
25 config.TRAIN.BASE_LR,
26 skip,
27 skip_keywords,
28 lr_layer_decay=config.TRAIN.LR_LAYER_DECAY,
29 lr_layer_decay_ratio=config.TRAIN.LR_LAYER_DECAY_RATIO,
30 freeze_backbone=config.TRAIN.OPTIMIZER.FREEZE_BACKBONE,
31 dcn_lr_mul=config.TRAIN.OPTIMIZER.DCN_LR_MUL,
32 )
33
34 opt_lower = config.TRAIN.OPTIMIZER.NAME.lower()
35 optimizer = None
36 use_zero = config.TRAIN.OPTIMIZER.USE_ZERO
37 if use_zero:
38 print(f'\nUse Zero!')
39 if opt_lower == 'sgd':
40 # an ugly implementation
41 # this problem is fixed after torch 1.12
42 # https://github.com/pytorch/pytorch/issues/71347
43
44 # before 1.12, we could only pass list to zero optimizer, so we first pass parameters[0] with its lr and weight decay,
45 # then we add other parameter via parameter group.
46
47 optimizer = ZeroRedundancyOptimizer(
48 parameters[0]['params'],
49 optimizer_class=optim.SGD,
50 momentum=config.TRAIN.OPTIMIZER.MOMENTUM, nesterov=True,
51 lr=parameters[0]['lr'], weight_decay=parameters[0]['weight_decay']
52 )
53 if len(parameters) > 1:
54 for param_group in parameters[1:]:
55 optimizer.add_param_group(param_group)
56 elif opt_lower == 'adamw':
57 optimizer = ZeroRedundancyOptimizer(
58 parameters[0]['params'],
59 optimizer_class=optim.AdamW,
60 eps=config.TRAIN.OPTIMIZER.EPS, betas=config.TRAIN.OPTIMIZER.BETAS,
61 lr=parameters[0]['lr'], weight_decay=parameters[0]['weight_decay']
62 )
63 if len(parameters) > 1:
64 for param_group in parameters[1:]:
65 optimizer.add_param_group(param_group)
66 else:
67 if opt_lower == 'sgd':
68 optimizer = optim.SGD(parameters,

Callers 2

mainFunction · 0.90
trainFunction · 0.90

Calls 1

set_weight_decay_and_lrFunction · 0.85

Tested by

no test coverage detected