Skip to content

Latest commit

 

History

History
179 lines (160 loc) · 7.6 KB

export.md

File metadata and controls

179 lines (160 loc) · 7.6 KB

导出

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