From 750e2310400f0988d101feaaf19099575891ba87 Mon Sep 17 00:00:00 2001 From: lixy9474 Date: Wed, 6 Jul 2022 07:22:53 +0800 Subject: [PATCH] [Embedding] Print warning log when the size of bloom filter is more than 10GB. (#296) --- docs/Feature-Filter.md | 4 +++- tensorflow/core/framework/embedding/embedding_config.h | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/Feature-Filter.md b/docs/Feature-Filter.md index 9d85b88f246..2c5a9758e3e 100644 --- a/docs/Feature-Filter.md +++ b/docs/Feature-Filter.md @@ -55,8 +55,10 @@ BloomFilter的准入参数设置可以参考下面的表,其中m是`bloom filt ![img_1.png](Embedding-Variable/img_1.png) -**功能的开关**:如果构造`EmbeddingVariableOption`对象的时候,如果不传入`CounterFilterStrategy`或`BloomFIlterStrategy`或`filter_freq`设置为0则功能关闭。 +**功能的开关**:如果构造`EmbeddingVariableOption`对象的时候,如果不传入`CounterFilterStrategy`或`BloomFilterStrategy`或`filter_freq`设置为0则功能关闭。 **ckpt相关**:对于checkpoint功能,当使用`tf.train.saver`时,无论特征是否准入,都会将其id与频次信息记录在ckpt中,未准入特征的embedding值则不会被保存到ckpt中。在load checkpoint的时候,对于ckpt中未准入的特征,通过比较其频次与filter阈值大小来确定在新一轮训练中是否准入;对于ckpt中已经准入的特征,无论ckpt中的特征频次是否超过了filter阈值,都认为其在新一轮训练中是已经准入的特征。同时ckpt支持向前兼容,即可以读取没有conuter记录的ckpt。目前不支持incremental ckpt。 **关于filter_freq的设置**:目前还需要用户自己根据数据配置。 + +**特征准入与Embedding多级存储**:由于基于BloomFilter的特征准入功能与Embedding多级存储功能基于不同的计数组件统计特征的频次,同时打开两个功能将导致计数功能出现错误,因此目前无法同时使用基于BloomFilter的特征准入与Embedding多级存储功能。 diff --git a/tensorflow/core/framework/embedding/embedding_config.h b/tensorflow/core/framework/embedding/embedding_config.h index 677dda21acf..9792228a2bb 100644 --- a/tensorflow/core/framework/embedding/embedding_config.h +++ b/tensorflow/core/framework/embedding/embedding_config.h @@ -61,7 +61,10 @@ struct EmbeddingConfig { int64 calc_num_counter(int64 max_element_size, float false_positive_probability) { float loghpp = fabs(log(false_positive_probability)); float factor = log(2) * log(2); - return ceil(loghpp / factor * max_element_size); + int64 num_bucket = ceil(loghpp / factor * max_element_size); + if (num_bucket * sizeof(counter_type) > 10 * (1L << 30)) + LOG(WARNING)<<"The Size of BloomFilter is more than 10GB!"; + return num_bucket; } bool is_counter_filter(){