EasyRec Processor

EasyRec Processor, 是EasyRec对应的高性能在线打分引擎, 包含特征处理和模型推理功能. EasyRecProcessor运行在PAI-EAS之上, 可以充分利用PAI-EAS多种优化特性.

架构设计

EasyRec Processor包含三个部分: Item特征缓存, 特征处理(Feature Generator), TFModel(tensorflow model). image.png

性能优化

基础实现

将FeatureGenerator和TFModel分开, 先做特征生成,然后再Run TFModel.

优化实现

FeatureGenerator作为算子嵌入, 和TFModel联合优化,主要的优化点包括:

  • Feature算子化

    • Feature算子直接输出SparseTensor, 减少String Concat, Copy, Split, ToSparseTensor开销

    • Feature算子和其他算子之间可以Overlap执行, 显著降低单个请求的时间

  • Feature Tile后置

    • 在线推理User Feature的BatchSize = 1, 因此只需要计算一次, Tile可以放到UserFeature EmbeddingLookUp的后面,和EmbeddingLookUp融合起来

  • EmbeddingLookup OpFusion

    • embedding lookup涉及到GatherV2 / SparseSegmentMean等多个小op, 使用OpFusion可以减少kernel launch以及Tensor内存分配和拷贝的开销

    • embedding lookup的过程需要用到比较多的SparseSegment Mean/Sum操作, 使用avx指令优化向量运算

  • MatchFeature / LookupFeature优化

    • 使用string_view代替std::string,减少string拷贝的开销

  • Sequence特征优化

    • sequence特征建模通常需要带上side info才能取得比较好的效果, 将side info放在请求中传递过来会带来通信的开销, EasyRec Processor在客户侧缓存了item特征, 因此在请求中只传递item_id sequence, side info sequence通过item_id查找客户侧缓存构建.

  • BFloat16支持

    • 推荐模型Embedding占了主要的部分, 使用BF16可以在不损失精度的情况下,减少一半的内存

    • 原生的BFloat到Float的转换效率很低,使用avx加速后,性能(tp99)提升1倍

性能对比

  • 模型1:

    • 特征:

    id_featureraw_featurelookup_featuresequence_feature
    67 170 756 main seq num: 4 | sideinfo seq num: 32 | max seq len: 50
    • 请求信息:

      • batch_size: 100

      • bytes: 平均50k

    • 硬件:

    • 测试结果:

    CPU利用率QPSAVG RTTP99
    优化前96 20 247ms 333ms
    优化后91 55 86ms 113ms
    提升 175% 65% 66%
  • 模型2:

    • 特征数:

    id_feature raw_feature lookup_feature match_feature
    306 77 60 1000
    • 请求信息:

      • batch_size: 150

      • bytes: 平均500k

    • 硬件:

    • 测试结果:

    CPU利用率 QPS AVG RT TP99
    优化前 89 33 288 362
    优化后 93 226 34 57
    提升 580% 88% 84%
  • 总结: 可以看出来, 优化实现比基础实现性能高出很多.

参考

火焰图

  • 优化前

image.png 可以看到特征生成之后还有较多的string处理,包括拷贝、拆分等, 占据了比较多的CPU时间

  • 优化后

image.png

Release

版本说明
easyrecAVX Kernel优化; 支持向量召回引擎(Faiss向量引擎); 支持GPU推理
easyrec-1.2优化weighted category embedding
easyrec-1.3支持PAI-FeatureStore; 支持从max compute加载数据
easyrec-1.4优化keras model性能; input自动扩展; placement优化
easyrec-1.5graph pattern match bugfix

部署

参考文档