在TensorFlow引擎上支持大规模稀疏特征,业界有多种实现方式,其中最常见的方式是借鉴了ParameterServer的架构实现,在TensorFlow之外独立实现了一套ParameterServer和相关的优化器,同时在TensorFlow内部通过bridge的方式桥接了两个模块。这个做法有一定的好处,比如PS的实现会比较灵活,但也存在一些局限性。
DeepRec采取了另一种架构设计方式,遵循“视整个训练引擎为一个系统整体”的架构设计原则。TensorFlow是一个基于Graph的静态图训练引擎,在其架构上有相应的分层,比如最上层的API层、中间的图优化层和最下层的算子层。TensorFlow通过这三层的设计去支撑上层不同Workload的业务需求和性能优化需求。
DeepRec也坚持了这一设计原则,基于存储/计算解耦的设计原则在Graph层面引入EmbeddingVariable功能;基于Graph的特点实现了通信的算子融合。通过这样的设计原则,DeepRec可以支持用户在单机、分布式场景下使用同一个优化器的实现和同一套EmbeddingVariable的实现;同时在Graph层面引入多种优化能力,从而做到独立模块设计所做不到的联合优化设计。