def main(config="../../config.yaml", namespace=""):
    # obtain config
    if isinstance(config, str):
        config = load_job_config(config)

    lr_param = {
        "name": "hetero_lr_0",
        "penalty": "L2",
        "optimizer": "rmsprop",
        "tol": 0.0001,
        "alpha": 0.01,
        "max_iter": 30,
        "early_stop": "diff",
        "batch_size": 320,
        "learning_rate": 0.15,
        "init_param": {
            "init_method": "zeros"
        },
        "sqn_param": {
            "update_interval_L": 3,
            "memory_M": 5,
            "sample_size": 5000,
            "random_seed": None
        },
        "cv_param": {
            "n_splits": 5,
            "shuffle": False,
            "random_seed": 103,
            "need_cv": False
        },
        "callback_param": {
            "callbacks": ["ModelCheckpoint"],
            "save_freq": "epoch"
        }
    }

    pipeline = common_tools.make_normal_dsl(config, namespace, lr_param)
    # dsl_json = predict_pipeline.get_predict_dsl()
    # conf_json = predict_pipeline.get_predict_conf()
    # import json
    # json.dump(dsl_json, open('./hetero-lr-normal-predict-dsl.json', 'w'), indent=4)
    # json.dump(conf_json, open('./hetero-lr-normal-predict-conf.json', 'w'), indent=4)


    # fit model
    pipeline.fit()
    # query component summary
    common_tools.prettify(pipeline.get_component("hetero_lr_0").get_summary())
    common_tools.prettify(pipeline.get_component("evaluation_0").get_summary())