导出

export_config

export_config {
}
  • batch_size: 导出模型的batch_size,默认是-1,即可以接收任意batch_size

  • exporter_type: 导出类型, best | final | latest | none,默认final

    • best 导出最好的模型

    • final 训练结束后导出

    • latest 导出最新的模型

    • none 不导出

  • best_exporter_metric: 当exporter_type为best的时候,确定最优导出模型的metric,注意该metric要在eval_config的metrics_set设置了才行

  • metric_bigger: 确定最优导出模型的metric是越大越好,还是越小越好,默认是越大越好

  • exports_to_keep: 当exporter_type为best或lastest时,保留n个最好或最新的模型,默认为1

    export_config {
      exporter_type: "best"
      best_exporter_metric: "auc"
      exports_to_keep: 1
    }
    
  • multi_placeholder: 使用一个placeholder还是多个placeholder。默认为true,即对每个特征使用单个placeholder

  • multi_value_fields: 针对tagFeature,指定一个字段集合,使得导出的placeholder可以接收二维数组,而不是训练时用的字符串类型,这样可以节省字符串拆分和类型转换的时间。

    export_config {
      multi_value_fields {
         input_name: ["field1", "field2", "field3"]
      }
    }
    
  • placeholder_named_by_input: true时利用data_config.input_fields.input_name来命令每个placeholder,false时每个placeholder名字为”input_X”,”X”为data_config.input_fields的编号(0-input_num)。默认为False

  • asset_files: 需要导出的asset文件, 可设置多个

  • enable_early_stop: 根据early_stop_func的返回值判断是否要提前结束训练

    • 示例:

      • samples/model_config/custom_early_stop_on_taobao.config

      • samples/model_config/multi_tower_early_stop_on_taobao.config

    • 应用场景:

      • 数据量比较小时,需要训练多个epoch时, 打开early_stop可以防止过拟合;

      • 使用超参搜索时, 打开可以提前终止收敛比较差的参数, 显著提升搜索效率

  • early_stop_func: 判断是否要提前结束训练的函数

    • 返回值:

      • True, 结束训练

      • False, 继续训练

    • 默认值:

      • metric_bigger为true时, easy_rec.python.compat.early_stopping.stop_if_no_increase_hook

      • metric_bigger为false时, easy_rec.python.compat.early_stopping.stop_if_no_decrease_hook

    • 自定义early_stop_func:

      • 示例: easy_rec.python.test.custom_early_stop_func.custom_early_stop_func

      • 参数: 框架传入两个参数

        • eval_results: 模型评估结果

        • func_param: 自定义参数(即export_config.early_stop_params)

  • max_check_steps: 训练max_check_steps之后评估指标没有改善,即停止训练; 仅适用于内置early_stop_func, 不适用于自定义early_stop_func

    • stop_if_no_increase_hook: 对应max_steps_without_increase, 当间隔max_check_steps训练步数评估指标没有提升,即停止训练

    • stop_if_no_decrease_hook: 对应max_steps_without_decrease, 当间隔max_check_steps训练步数评估指标没有下降, 即停止训练

  • early_stop_params: 传递给early_stop_func的自定义参数

导出命令

Local

python -m easy_rec.python.export --pipeline_config_path dwd_avazu_ctr_deepmodel.config --export_dir ./export --export_done_file EXPORT_DONE
  • –pipeline_config_path: config文件路径

  • –model_dir: 如果指定了model_dir将会覆盖config里面的model_dir,一般在周期性调度的时候使用

  • –export_dir: 导出的目录

  • –export_done_file: 导出完成标志文件名, 导出完成后,在导出目录下创建一个文件表示导出完成了

  • –clear_export: 删除旧的导出文件目录

PAI

pai -name easy_rec_ext -project algo_public
-Dconfig=oss://easyrec/easy_rec_test/dwd_avazu_ctr_deepmodel_ext.config
-Dcmd=export
-Dexport_dir=oss://easyrec/easy_rec_test/export
-Dcluster='{"worker" : {"count":1, "cpu":1000, "memory":40000}}'
-Darn=acs:ram::xxx:role/ev-ext-test-oss
-Dbuckets=oss://easyrec/
-DossHost=oss-cn-beijing-internal.aliyuncs.com
  • -Dconfig: 同训练

  • -Dcmd: export 模型导出

  • -Dexport_dir: 导出的目录

  • -Dcheckpoint_path: 使用指定的checkpoint_path

  • -Darn: rolearn  注意这个的arn要替换成客户自己的。可以从dataworks的设置中查看arn。

  • -DossHost: ossHost地址

  • -Dbuckets: config所在的bucket和保存模型的bucket; 如果有多个bucket,逗号分割

  • 如果是pai内部版,则不需要指定arn和ossHost, arn和ossHost放在-Dbuckets里面

    • -Dbuckets=oss://easyrec/?role_arn=acs:ram::xxx:role/ev-ext-test-oss&host=oss-cn-beijing-internal.aliyuncs.com

  • -Dextra_params: 其它参数, 没有在pai -name easy_rec_ext中定义的参数, 可以通过extra_params传入, 如:

    • –export_done_file: 导出完成标志文件名, 导出完成后,在导出目录下创建一个文件表示导出完成了

    • –clear_export: 删除旧的导出文件目录

    • –place_embedding_on_cpu: 将embedding相关的操作放在cpu上,有助于提升模型在gpu环境下的推理速度

  • 模型导出之后可以使用(EasyRecProcessor)[./predict/在线预测.md]部署到PAI-EAS平台

双塔召回模型

如果是双塔召回模型(如dssm, mind等), 模型导出之后, 一般还需要进行模型切分和索引构建, 才能使用(EasyRecProcessor)[./predict/在线预测.md]部署到PAI-EAS上.

模型切分

pai -name easy_rec_ext
-Dcmd='custom'
-DentryFile='easy_rec/python/tools/split_model_pai.py'
-Dversion='{easyrec_version}'
-Dbuckets='oss://{oss_bucket}/'
-Darn='{oss_arn}'
-DossHost='oss-{region}-internal.aliyuncs.com'
-Dcluster='{{
    \\"worker\\": {{
        \\"count\\": 1,
        \\"cpu\\": 100
    }}
}}'
-Dextra_params='--model_dir=oss://{oss_bucket}/dssm/export/final --user_model_dir=oss://{oss_bucket}/dssm/export/user --item_model_dir=oss://{oss_bucket}/dssm/export/item --user_fg_json_path=oss://{oss_bucket}/dssm/user_fg.json --item_fg_json_path=oss://{oss_bucket}/dssm/item_fg.json';
  • -Dextra_params:

    • –model_dir: 待切分的saved_model目录

    • –user_model_dir: 切分好的用户塔模型目录

    • –item_model_dir: 切分好的物品塔模型目录

    • –user_fg_json_path: 用户塔的fg json

    • –item_fg_json_path: 物品塔的fg json

物品Embedding预测和索引构建

pai -name easy_rec_ext
-Dcmd='predict'
-Dsaved_model_dir='oss://{oss_bucket}/dssm/export/item/'
-Dinput_table='odps://{project}/tables/item_feature_t'
-Doutput_table='odps://{project}/tables/dssm_item_embedding'
-Dreserved_cols='item_id'
-Doutput_cols='item_emb string'
-Dmodel_outputs='item_emb'
-Dbuckets='oss://{oss_bucket}/'
-Darn='{oss_arn}'
-DossHost='oss-{region}-internal.aliyuncs.com'
-Dcluster='{{
    \\"worker\\": {{
        \\"count\\": 16,
        \\"cpu\\": 600,
        \\"memory\\": 10000
    }}
}}';
pai -name easy_rec_py3_ext
-Dcmd='custom'
-DentryFile='easy_rec/python/tools/faiss_index_pai.py'
-Dtables='odps://{project}/tables/dssm_item_embedding'
-Dbuckets='oss://{oss_bucket}/'
-Darn='{oss_arn}'
-DossHost='oss-{region}-internal.aliyuncs.com'
-Dcluster='{{
    \\"worker\\": {{
        \\"count\\": 1,
        \\"cpu\\": 100
    }}
}}'
-Dextra_params='--index_output_dir=oss://{oss_bucket}/dssm/export/user';
  • -Dtables: 物品向量表

  • -Dextra_params:

    • –index_output_dir: 索引输出目录, 一般设置为已切分好的用户塔模型目录,便于用EasyRec Processor部署

    • –index_type: 索引类型,可选 IVFFlat | HNSWFlat,默认为 IVFFlat

    • –ivf_nlist: 索引类型为IVFFlat是,聚簇的数目

    • –hnsw_M: 索引类型为HNSWFlat的索引参数M

    • –hnsw_efConstruction: 索引类型为HNSWFlat的索引参数efConstruction