文档
注册

功能特性介绍

mxRec为用户提供了动态扩容、动态Shape、自动改图、特征准入与淘汰、Hot_Embedding和定制Warm Start等功能特性,用户可以在适配模型中加入想要使用的功能特性。

动态扩容

TensorFlow对Embedding的支持是通过变量实现的,用户需要预估每个表的大小,再通过接口创建变量。Embedding表的大小在一开始就确认,后期无法扩大或者减小,这可能会导致显存的浪费或者空间不足。在推荐场景下,多个稀疏表的大小无法预估,为更好的适配用户场景及需求,增加稀疏表动态扩容功能。HBM支持动态扩容和非动态扩容方案,HBM动态扩容即显存随着模型训练而增长;DDR/SSD仅支持动态扩容,即内存/磁盘随着模型训练增长,显存保持不变。

流程介绍请参见HBM显存侧动态扩容模式

可以从链接获取稀疏表的算子样例和Readme。

动态Shape

mxRec训练框架支持动态Shape。动态Shape指的是TensorFlow的Shape依赖于具体的运算,算子输入是动态Shape、算子输出也是动态Shape。

流程介绍请参见动态Shape

自动改图

mxRec支持创建特征类FeatureSpec模式和自动修改TensorFlow计算图两种特征训练方式。

推荐场景下客户希望零代码改动迁移至昇腾并应用mxRec框架,自动改图通过修改TensorFlow计算图的方式,使得客户训练脚本无需创建特征类(FeatureSpec),无需调用嵌入read emb key算子的函数即可开始模型训练。

流程介绍请参见自动改图

自动改图目前只支持运行在tensorflow的默认图中,暂不支持用户模型新建tf.Graph来定义计算图。

特征准入与淘汰

当某些特征的频率过低时,对模型的训练效果不会有帮助,还会造成内存浪费以及过拟合的问题。因此需要特征准入功能来过滤掉频率过低的特征。特征准入与淘汰的使用分为在创建FeatureSpec模式和自动改图模式下两种情况。

对于一些对训练没有帮助的特征,我们需要将其淘汰以免影响训练效果,同时也能节约内存。在mxRec中我们支持特征淘汰功能,并提供了两种特征淘汰的触发方式,一是根据global step间隔触发淘汰,二是根据时间间隔触发淘汰。

流程介绍请参见特征准入与淘汰

Hot_Embedding

推荐场景下,Key的重复率较高,Hot_Embeding将重复度较高的Key放入缓存中来加速查表的速度。该功能自动开启,无需配置;为了确保使能成功,需要开启GatherV2算子的高性能模式,开启方法如下:
  1. 将op_impl_mode.ini配置项传入到Session。代码如下:
    import tensorflow as tf
    session_config = tf.compat.v1.ConfigProto(allow_soft_placement=False, log_device_placement=False)
    session_config.gpu_options.allow_growth = True
    custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add()
    # 1. 将算子配置文件路径传入配置项
    custom_op.parameter_map["op_precision_mode"].s = tf.compat.as_bytes("op_impl_mode.ini")
    # 2. 建图
    # 3. 将config配置传入sess初始化中
    with tf.compat.v1.Session(config=sess_config) as sess:
    # 4. 训练
  2. 在模型的路径下创建op_impl_mode.ini文件,内容如下:
    GatherV2=high_performance

定制Warm Start

在Tensorflow Estimator模式下,原生的Warm Start选项支持在训练新模型时,从单个模型路径中完成部分或者全部模型参数的加载。该功能提供了更灵活的方式实现模型参数的恢复。Warm Start常用于迁移学习,即在一个任务上训练的模型被用于另一个任务,通过复用模型的某些层或参数来加速新任务的学习过程。

定制WarmStart功能描述如下:

  • 兼容原生tf的Warm Start功能,支持指定稀疏表的Warm Start。
  • 支持多路径的Warm Start。提供支持从多个模型路径中完成部分或者全部模型参数的加载,可支撑多模型迁移学习任务的训练。

定制warm start的使用示例如下:

示例1:模型从warm_start路径中加载稀疏表user_table。

import tensorflow as tf
from tf_adapter import NPUEstimator
 
warm_settings=tf.estimator.WarmStartSettings(ckpt_to_initialize_from="./warm_start",vars_to_warm_start ="user_table", var_name_to_prev_var_name=None)
est = NPUEstimator(
        model_fn=get_model_fn(create_fs_params, cfg, access_and_evict),
        params=params,
        model_dir=params.model_dir,
        config=run_config,
        warm_start_from=warm_settings 
)
表1 tf.estimator.WarmStartSettings参数说明

参数

参数类型

说明

ckpt_to_initialize_from

str(path)

指定从哪个检查点开始初始化。

vars_to_warm_start

str/正则表达式/list[str]/list[variables]

指定从哪些变量开始初始化。

dense层变量的指定方式保持与tf原生一致;embedding参数支持:正则表达式、str(表名)和list(表名list)。

var_name_to_vacab_info

dict

指定词汇表信息,用于恢复嵌入矩阵。

var_name_to_prev_var_name

dict

用于存储变量名到warm start路径中变量名的映射关系。

说明:

embedding表名目前不支持名称映射。

示例2:模型从warm_start_1路径中加载所有参数,然后模型从warm_star_2t路径中加载embedding表user_table、item_table,替代已经加载了的warm_start1路径中的稀疏表结果。模型从warm_start_3路径中加载mlp_layer_w参数,替代warm_start_1的加载结果。

import tensorflow as tf
from tf_adapter import NPUEstimator
 
ckpt_to_initialize_from_list = ["./warm_start_1", "./warm_start_2", "./warm_start_3"]
vars_to_warm_start_list=[".*",  ["user_table", "item_table"], "mlp_layer_w" ]
var_name_to_prev_var_name_list = [{}, {}, {}]
warm_settings=tf.estimator.WarmStartSettings(
        ckpt_to_initialize_from=ckpt_to_initialize_from_list,
        vars_to_warm_start = vars_to_warm_start_list,
        var_name_to_prev_var_name=var_name_to_prev_var_name_list )
 
 est = NPUEstimator(
        model_fn=get_model_fn(create_fs_params, config, access_and_evict),
        params=params,
        model_dir=params.model_dir,
        config=run_config
        warm_start_from=warm_settings
    )
表2 支持多路径warm start功能中tf.estimator.WarmStartSettings参数说明

参数

参数类型

说明

ckpt_to_initialize_from

List(str(path))

指定从哪个检查点开始初始化

vars_to_warm_start

List(str/正则表达/list[str]/list[variables])

指定从哪些变量开始初始化。

dense层变量的指定方式保持与tf原生一致;embedding参数支持:正则表达式、str(表名)和list(表名list)。

var_name_to_vacab_info

List(dict)

指定词汇表信息,用于恢复嵌入矩阵。

var_name_to_prev_var_name

List(dict)

用于存储变量名到warm start路径中变量名的映射关系。

特别说明:embedding表名目前不支持名称映射。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词