用户需要适配所使用的模型,可以在适配模型过程中加入Rec SDK提供的功能特性。本章节旨在介绍模型适配过程中的一些关键步骤,以及怎样在适配模型过程中加入想要使用的功能特性。
关键步骤操作参考如下。
调用init接口初始化Rec SDK模型训练框架。
如果想要加入功能特性,可在本步骤选择所需功能特性并进行以下相应的修改。
特性名称 |
操作步骤 |
---|---|
动态扩容 |
设置参数use_dynamic_expansion = True表示启用片上内存显存侧动态扩容功能,该参数默认为“False”。DDR和SSD模式仅支持内存/磁盘侧的动态扩容。 |
动态Shape |
配置init接口的“use_dynamic”参数为“True”。 启用动态Shape功能前,需要安装Kernels算子包,具体操作请参见《CANN 软件安装指南》的“安装CANN(物理机场景)”章节的“安装Kernels”部分。 |
自动改图 |
- |
特征准入与淘汰 |
- |
使用FeatureSpec定义特征列表并配置相应的模型。
特性名称 |
操作步骤 |
---|---|
动态扩容 |
- |
动态Shape |
- |
特征准入与淘汰 |
|
在NPUEstimator模式下,需要在NPUEstimator的多个模式(train、predict、train_and_evaluate)中添加自动改图的GraphModifierHook,如当前为训练(train),则在训练的钩子(Hook)中添加GraphModifierHook,即可完成自动改图模式的训练。
如果想要加入功能特性,可选择所需功能特性并进行以下相应的修改。
特性名称 |
操作步骤 |
---|---|
动态扩容 |
- |
动态Shape |
- |
特征准入与淘汰 |
在使用sparse_lookup接口时,设置“access_and_evict_config”参数,参数类型dict,该dict由两个key-value对组成,key分别为“access_threshold”和“eviction_threshold”,value为对应的阈值。 |
使用FeatureSpec定义特征列表时,根据特征列表创建数据集并对数据集进行预处理,调用get_asc_insert_func接口得到Rec SDK的数据预处理接口并在数据集上应用该接口。
选择mx_rec.optimizers下的优化器并通过调用优化器对应的接口得到稀疏网络层的优化器对象,当前可选优化器请参见优化器。密集网络层的优化接口可使用TensorFlow内置的优化器。
如果想要加入功能特性,可在本步骤选择所需功能特性并进行以下相应的修改。
特性名称 |
操作步骤 |
---|---|
动态扩容 |
片上内存显存侧动态扩容调用mx_rec.optimizers包中对应优化器的create_hash_optimizer_by_address接口来创建稀疏表sparse_optimizer。具体可用优化器参考如下。 |
动态Shape |
- |
自动改图 |
- |
特征准入与淘汰 |
- |
通过调用create_table接口创建稀疏网络层,每个稀疏特征都可以创建一个稀疏网络层。
在Estimator模式下,create_table接口必须在传入Estimator的model_fn里面调用,Estimator源码会在调用model_fn时创建新的图实例,这个和入口函数main所在的默认图不是同一张图。
传入稀疏网络层和特征列表创建模型计算图,在计算图中使用sparse_lookup进行特征查询和误差计算。
特性名称 |
操作步骤 |
---|---|
动态扩容 |
- |
动态shape |
- |
自动改图 |
查询稀疏特征表。调用sparse_lookup接口,设置参数modify_graph = True表示在查表时采用自动改图模式,该参数默认为“False”。 |
特征准入与淘汰 |
- |
调用get_dense_and_sparse_variable得到密集网络层和稀疏网络层的参数,通过优化器计算梯度并执行优化。
如果想要加入功能特性,可在本步骤选择所需功能特性并进行以下相应的修改。
使用FeatureSpec定义特征列表时,调用start_asc_pipeline启动数据流水线。