在推荐系统中,当模型在线上部署的过程中,模型超时很常见,以下是几种能快速有效的缩短模型耗时的操作。
1、分桶操作不要在模型中处理
在大规模训练模型过程中,我们通常会对部分的连续特征进行特征分桶,加强特征的泛化能力。
在模型中,会使用tf.feature_column.numeric_column对连续特征进行特征分桶,但是这种方式及其耗时,加入该模块后,模型通常会耗时上涨,整条链路超时,导致模型无法上线;另外就是会使得模型的训练耗时上涨。
通常遇到这种情况,我们将这部分的特征直接在特征工程的时候先进行分桶,将桶值直接喂给模型,线上serving的时候,也是将桶值直接传给工程即可;
这个过程通常能将模型的耗时压缩3~5ms
2、模型单元结构优化,对只使用用户特征的模块,只查找一次而不是bath_size次
在推荐系统中,排序阶段,在seving阶段,通常会排几十个~上千个,针对用同一个用户,对于工程而言,通常只会查找一条用户记录,但是在模型的训练阶段,我们通常会对batch_size条数据进行处理,在模型训练过程中,为了使得训练和serving阶段的一致性,通常不会单独对serving阶段进行单独的特殊处理。模型在serving阶段,会取指定的待排商品数,从而取同样数目的用户特征,而针对这些用户特征(假设为500),lookup词典的过程,会对同样的用户特征lookup500次,显然是资源的浪费,于是在模型的predict阶段,我们可以优化用户特征,将查找过程直接降低为1次查找,当用户和商品特征交叉的时候,再将其tile到与商品的第一维度即可。
通常这个过程会将模型的耗时缩短5-10ms左右
文章介绍了两种优化推荐系统模型的方法以解决线上部署时的超时问题。一是将特征分桶操作移出模型,预先处理,可以减少3-5ms的耗时。二是优化模型单元结构,避免在预测阶段对用户特征重复lookup,可缩短5-10ms的执行时间。

被折叠的 条评论
为什么被折叠?



