create_table
功能描述
创建稀疏表。
函数原型
def create_table(key_dtype, dim, name, emb_initializer, device_vocabulary_size=1, host_vocabulary_size=0, ssd_vocabulary_size=0, ssd_data_path=[], optimizer_list=None, value_dtype=tf.float32, shard_num=1, fusion_optimizer_var=True, hashtable_threshold=0, is_save=True, init_param=1., all2all_gradients_op="sum_gradients")
参数说明
| 参数名 | 类型 | 可选/必选 | 说明 | 
|---|---|---|---|
| key_dtype | TensorFlow的dtype类型 | 必选 | 稀疏特征键(key)数据类型。可选类型仅限于“tf.int64”和“tf.int32”。 | 
| dim | 
 | 必选 | 嵌入层(embedding)维度。取值范围:[1, 8192]。如果dim需要设置为大于“512”的值,请保证内存和磁盘空间足够或者使用DDR模式,或者减小稀疏表的vocabulary size。 请根据服务器的实际配置进行设置。 | 
| name | str | 必选 | 稀疏表表名,只能包含数字、字母和下划线。表名长度范围:[1, 255] | 
| emb_initializer | TensorFlow的初始化器类型 | 必选 | 嵌入层初始值生成器。 | 
| device_vocabulary_size | int | 可选 | Device侧嵌入层数量,默认值为“1”。取值范围:1~10亿。当设置超过25600000时,请保证内存和磁盘空间足够,或者开启动态扩容功能,或者减小稀疏表dim的大小。 请根据服务器的实际配置进行设置。 | 
| host_vocabulary_size | int | 可选 | Host侧DDR存储的嵌入层数量,默认值为“0”。取值范围为:0~100亿。取值为“0”时表示不开启Host侧DDR功能;不为“0”时表示开启,此时需要关闭动态扩容。“host_vocabulary_size”和“device_vocabulary_size”加起来不超过100亿。如果host_vocabulary_size设置为大于1亿的值,请保证内存和磁盘空间足够,或者减小稀疏表dim的大小。如果不确定需要设置的值,建议开启动态扩容功能。 超过单机内存时会出现OM。 请根据服务器的实际配置进行设置。 | 
| ssd_vocabulary_size | int | 可选 | 开启SSD存储embedding数据功能。默认值为“0”表示不开启。当值大于“0”时,要求host_vocabulary_size也大于“0”才能开启该功能。如果ssd_vocabulary_size设置为大于10亿的值,请保证内存和磁盘空间足够,或者减小稀疏表dim的大小。取值范围:0~100亿。 请根据服务器的实际配置进行设置。 | 
| ssd_data_path | List[str] | 可选 | 默认为空列表。当参数为空列表时,默认SSD存储路径为当前运行脚本所在路径。当列表非空且路径有效时,将按顺序存储到相应路径中。当路径对应磁盘空间不足时,会尝试下一个路径,直到所有磁盘空间不足时抛出异常。 | 
| optimizer_list | list | 可选 | 优化器列表,默认值为“None”。 | 
| value_dtype | TensorFlow的dtype类型 | 可选 | 稀疏特征值(value)数据类型,默认值为“tf.float32”,仅支持“tf.float32”。 | 
| shard_num | int | 可选 | 嵌入层分区数,默认值为“1”。取值范围:[1, 8192]。 | 
| fusion_optimizer_var | bool | 可选 | 是否使用融合优化参数,默认值为“True”。 取值范围: 
 | 
| hashtable_threshold | int | 可选 | 哈希表阈值,高于阈值时使用哈希表,低于阈值时使用线性表,默认值为“0”。取值范围:[0, 2147483647]。 | 
| is_save | bool | 可选 | 是否保存embedding数据,默认值为“True”。 取值范围: 
 | 
| init_param | float | 可选 | Embedding初始化参数系数,默认值为“1.0”。取值范围:[-10, 10]。 当init_param参数设置超过“1.0”或者小于“-1.0”时,建议减小batch_size,避免显存占用过大导致程序异常。 | 
| all2all_gradients_op | string | 可选 | 分布式梯度回传后梯度聚合的方式,默认值为“sum_gradients”。 
 | 
 
 - 当“host_vocabulary_size”不为0时,“optimizer_list”为必选。
- 当“host_vocabulary_size”为“0”时,不开启Host侧DDR功能,不为“0”时开启。所有embedding表必须保持同时使用Host侧DDR功能或同时不使用Host侧DDR功能,即所有表“host_vocabulary_size”参数同时为“0”或同时不为“0”,否则进行参数校验时会报错,报错信息参考如下。
ValueError: The host-side DDR function of all tables must be used or not used at the same time. However, host voc size of each table is [].
返回值说明
- 成功:返回稀疏表实例。
- 失败:抛出异常。
使用示例
import tensorflow as tf
from mx_rec.core.embedding import create_table
sparse_hashtable = create_table(key_dtype=tf.int32,
                                dim=tf.TensorShape([128]),
                                name="sparse_embeddings_table",
                                emb_initializer=tf.truncated_normal_initializer(),
                                device_vocabulary_size=24_000_000 * 8,
                                host_vocabulary_size=0)
table_size = sparse_hashtable.size()      # 获取返回稀疏表的使用大小
table_capacity = sparse_hashtable.capacity()   # 获取返回稀疏表的容量大小
参考资源
接口调用流程及示例,参见模型训练。