Skip to content

Commit ecffb70

Browse files
wanghan-iapcmHan Wang
andauthored
Implement step configuration (#38)
Co-authored-by: Han Wang <wang_han@iapcm.ac.cn>
1 parent cc10d41 commit ecffb70

14 files changed

Lines changed: 391 additions & 130 deletions

dpgen2/entrypoint/submit.py

Lines changed: 68 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -69,28 +69,36 @@
6969
dump_object_to_file,
7070
load_object_from_file,
7171
)
72+
from dpgen2.utils.step_config import normalize as normalize_step_dict
73+
default_config = normalize_step_dict(
74+
{
75+
"template_config" : {
76+
"image" : default_image,
77+
}
78+
}
79+
)
7280

7381
def make_concurrent_learning_op (
7482
train_style : str = 'dp',
7583
explore_style : str = 'lmp',
7684
fp_style : str = 'vasp',
77-
prep_train_image : str = default_image,
78-
run_train_image : str = default_image,
79-
prep_explore_image : str = default_image,
80-
run_explore_image : str = default_image,
81-
prep_fp_image : str = default_image,
82-
run_fp_image : str = default_image,
83-
select_confs_image : str = default_image,
84-
collect_data_image : str = default_image,
85+
prep_train_config : str = default_config,
86+
run_train_config : str = default_config,
87+
prep_explore_config : str = default_config,
88+
run_explore_config : str = default_config,
89+
prep_fp_config : str = default_config,
90+
run_fp_config : str = default_config,
91+
select_confs_config : str = default_config,
92+
collect_data_config : str = default_config,
8593
upload_python_package : bool = None,
8694
):
8795
if train_style == 'dp':
8896
prep_run_train_op = PrepRunDPTrain(
8997
"prep-run-dp-train",
9098
PrepDPTrain,
9199
RunDPTrain,
92-
prep_image = prep_train_image,
93-
run_image = run_train_image,
100+
prep_config = prep_train_config,
101+
run_config = run_train_config,
94102
upload_python_package = upload_python_package,
95103
)
96104
else:
@@ -100,8 +108,8 @@ def make_concurrent_learning_op (
100108
"prep-run-lmp",
101109
PrepLmp,
102110
RunLmp,
103-
prep_image = prep_explore_image,
104-
run_image = run_explore_image,
111+
prep_config = prep_explore_config,
112+
run_config = run_explore_config,
105113
upload_python_package = upload_python_package,
106114
)
107115
else:
@@ -111,8 +119,8 @@ def make_concurrent_learning_op (
111119
"prep-run-vasp",
112120
PrepVasp,
113121
RunVasp,
114-
prep_image = prep_fp_image,
115-
run_image = run_fp_image,
122+
prep_config = prep_fp_config,
123+
run_config = run_fp_config,
116124
upload_python_package = upload_python_package,
117125
)
118126
else:
@@ -126,16 +134,16 @@ def make_concurrent_learning_op (
126134
SelectConfs,
127135
prep_run_fp_op,
128136
CollectData,
129-
select_confs_image = select_confs_image,
130-
collect_data_image = collect_data_image,
137+
select_confs_config = select_confs_config,
138+
collect_data_config = collect_data_config,
131139
upload_python_package = upload_python_package,
132140
)
133141
# dpgen
134142
dpgen_op = ConcurrentLearning(
135143
"concurrent-learning",
136144
block_cl_op,
137145
upload_python_package = upload_python_package,
138-
image = default_image,
146+
step_config = default_config,
139147
)
140148

141149
return dpgen_op
@@ -242,25 +250,25 @@ def workflow_concurrent_learning(
242250
train_style = config['train_style']
243251
explore_style = config['explore_style']
244252
fp_style = config['fp_style']
245-
prep_train_image = config['prep_train_image']
246-
run_train_image = config['run_train_image']
247-
prep_explore_image = config['prep_explore_image']
248-
run_explore_image = config['run_explore_image']
249-
prep_fp_image = config['prep_fp_image']
250-
run_fp_image = config['run_fp_image']
253+
prep_train_config = normalize_step_dict(config.get('prep_train_config', {}))
254+
run_train_config = normalize_step_dict(config.get('run_train_config', {}))
255+
prep_explore_config = normalize_step_dict(config.get('prep_explore_config', {}))
256+
run_explore_config = normalize_step_dict(config.get('run_explore_config', {}))
257+
prep_fp_config = normalize_step_dict(config.get('prep_fp_config', {}))
258+
run_fp_config = normalize_step_dict(config.get('run_fp_config', {}))
251259
upload_python_package = config.get('upload_python_package', None)
252260
init_models_paths = config.get('training_iter0_model_path')
253261

254262
concurrent_learning_op = make_concurrent_learning_op(
255263
train_style,
256264
explore_style,
257265
fp_style,
258-
prep_train_image = prep_train_image,
259-
run_train_image = run_train_image,
260-
prep_explore_image = prep_explore_image,
261-
run_explore_image = run_explore_image,
262-
prep_fp_image = prep_fp_image,
263-
run_fp_image = run_fp_image,
266+
prep_train_config = prep_train_config,
267+
run_train_config = run_train_config,
268+
prep_explore_config = prep_explore_config,
269+
run_explore_config = run_explore_config,
270+
prep_fp_config = prep_fp_config,
271+
run_fp_config = run_fp_config,
264272
upload_python_package = upload_python_package,
265273
)
266274
scheduler = make_naive_exploration_scheduler(config)
@@ -315,15 +323,39 @@ def workflow_concurrent_learning(
315323
"iter_data" : iter_data,
316324
},
317325
)
318-
319-
wf = Workflow(name="dpgen", host=default_host)
320-
wf.add(dpgen_step)
321-
322-
return wf
326+
return dpgen_step
323327

324328
def submit_concurrent_learning(
325-
config,
329+
wf_config,
326330
):
327-
wf = workflow_concurrent_learning(config)
331+
# set global config
332+
from dflow import config, s3_config
333+
dflow_config = wf_config.get('dflow_config', None)
334+
if dflow_config :
335+
config["host"] = dflow_config.get('host', None)
336+
s3_config["endpoint"] = dflow_config.get('s3_endpoint', None)
337+
config["k8s_api_server"] = dflow_config.get('k8s_api_server', None)
338+
config["token"] = dflow_config.get('token', None)
339+
340+
# lebesque context
341+
from dflow.plugins.lebesgue import LebesgueContext
342+
lb_context_config = wf_config.get("lebesque_context_config", None)
343+
if lb_context_config:
344+
lebesgue_context = LebesgueContext(
345+
**lb_context_config,
346+
)
347+
else :
348+
lebesgue_context = None
349+
350+
# print('config:', config)
351+
# print('s3_config:',s3_config)
352+
# print('lebsque context:', lb_context_config)
353+
354+
dpgen_step = workflow_concurrent_learning(wf_config)
355+
356+
wf = Workflow(name="dpgen", context=lebesgue_context)
357+
wf.add(dpgen_step)
358+
328359
wf.submit()
360+
329361
return wf

dpgen2/flow/dpgen_loop.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737
load_object_from_file,
3838
dump_object_to_file,
3939
)
40+
from dpgen2.utils.step_config import normalize as normalize_step_dict
41+
from copy import deepcopy
42+
4043

4144
class SchedulerWrapper(OP):
4245

@@ -117,7 +120,7 @@ def __init__(
117120
self,
118121
name : str,
119122
block_op : Steps,
120-
image : str = "dflow:v1.0",
123+
step_config : dict = normalize_step_dict({}),
121124
upload_python_package : str = None,
122125
):
123126
self._input_parameters={
@@ -174,7 +177,7 @@ def __init__(
174177
self.step_keys,
175178
name,
176179
block_op,
177-
image = image,
180+
step_config = step_config,
178181
upload_python_package = upload_python_package,
179182
)
180183

@@ -204,13 +207,13 @@ def __init__(
204207
self,
205208
name : str,
206209
block_op : Steps,
207-
image : str = "dflow:v1.0",
210+
step_config : dict = normalize_step_dict({}),
208211
upload_python_package : str = None,
209212
):
210213
self.loop = ConcurrentLearningLoop(
211214
name+'-loop',
212215
block_op,
213-
image = image,
216+
step_config = step_config,
214217
upload_python_package = upload_python_package,
215218
)
216219

@@ -261,7 +264,7 @@ def __init__(
261264
name,
262265
self.loop,
263266
self.loop_key,
264-
image = image,
267+
step_config = step_config,
265268
upload_python_package = upload_python_package,
266269
)
267270

@@ -295,9 +298,12 @@ def _loop (
295298
step_keys,
296299
name : str,
297300
block_op : OP,
298-
image : str = "dflow:v1.0",
301+
step_config : dict = normalize_step_dict({}),
299302
upload_python_package : str = None,
300303
):
304+
step_config = deepcopy(step_config)
305+
step_template_config = step_config.pop('template_config')
306+
301307
block_step = Step(
302308
name = name + '-block',
303309
template = block_op,
@@ -326,8 +332,8 @@ def _loop (
326332
name = name + '-scheduler',
327333
template=PythonOPTemplate(
328334
SchedulerWrapper,
329-
image=image,
330335
python_packages = upload_python_package,
336+
**step_template_config,
331337
),
332338
parameters={
333339
"exploration_report": block_step.outputs.parameters['exploration_report'],
@@ -337,22 +343,24 @@ def _loop (
337343
"trajs" : block_step.outputs.artifacts['trajs'],
338344
},
339345
key = step_keys['scheduler'],
346+
**step_config,
340347
)
341348
steps.add(scheduler_step)
342349

343350
id_step = Step(
344351
name = name + '-make-block-id',
345352
template=PythonOPTemplate(
346353
MakeBlockId,
347-
image=image,
348354
python_packages = upload_python_package,
355+
**step_template_config,
349356
),
350357
parameters={
351358
},
352359
artifacts={
353360
"exploration_scheduler": scheduler_step.outputs.artifacts['exploration_scheduler'],
354361
},
355362
key = step_keys['id'],
363+
**step_config,
356364
)
357365
steps.add(id_step)
358366

@@ -409,15 +417,18 @@ def _dpgen(
409417
name,
410418
loop_op,
411419
loop_key,
412-
image = "dflow:v1.0",
420+
step_config : dict = normalize_step_dict({}),
413421
upload_python_package : str = None
414422
):
423+
step_config = deepcopy(step_config)
424+
step_template_config = step_config.pop('template_config')
425+
415426
scheduler_step = Step(
416427
name = name + '-scheduler',
417428
template=PythonOPTemplate(
418429
SchedulerWrapper,
419-
image=image,
420430
python_packages = upload_python_package,
431+
**step_template_config,
421432
),
422433
parameters={
423434
"exploration_report": None,
@@ -427,22 +438,24 @@ def _dpgen(
427438
"trajs" : None,
428439
},
429440
key = step_keys['scheduler'],
441+
**step_config,
430442
)
431443
steps.add(scheduler_step)
432444

433445
id_step = Step(
434446
name = name + '-make-block-id',
435447
template=PythonOPTemplate(
436448
MakeBlockId,
437-
image=image,
438449
python_packages = upload_python_package,
450+
**step_template_config,
439451
),
440452
parameters={
441453
},
442454
artifacts={
443455
"exploration_scheduler": scheduler_step.outputs.artifacts['exploration_scheduler'],
444456
},
445457
key = step_keys['id'],
458+
**step_config,
446459
)
447460
steps.add(id_step)
448461

dpgen2/op/select_confs.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
OP,
33
OPIO,
44
OPIOSign,
5-
Artifact
5+
Artifact,
6+
BigParameter,
67
)
78
import os, json
89
from typing import Tuple, List, Set

0 commit comments

Comments
 (0)