LizierFacebook网志,作者:Maxim Naumov等,电脑之心校对,参与:路、一鸣。
近日,Facebook 开放源码了广度自学所推荐数学模型 DLRM。DLRM 透过紧密结合协作过滤器演算法和预估数学方法,提供更多了所推荐控制系统现阶段最优化效果。随着广度自学的发展,如前所述数学模型的个人化和所推荐数学模型成为在制造环境中构筑所推荐控制系统的重要工具。但是,这些数学模型与其它广度自学数学模型有明显区别,它们必须能处置类型统计数据(categorical data),该统计正则表达式用于叙述高级特性。对于数学模型而言,高效率处置这种浓密统计数据很有技术难度,缺乏公开需用的指标性数学模型和统计数据集也减慢了街道社区在这点的毒理。
为了促进该子领域的进步,Facebook 开放源码了现阶段最优化的广度自学所推荐数学模型 DLRM,该数学模型采用 PyTorch 和 Caffe2 平台同时实现。DLRM 透过紧密结合协作过滤器演算法和预估数学方法,相比其它数学模型获得更进一步的提升,进而能高效率处置制造等级统计数据,并提供更多现阶段最优化结果。
Facebook 在非官方网志中表示:开放源码 DLRM 数学模型和公布有关学术论文,意在帮助街道社区寻找捷伊方式,解决这类数学模型面临的独特挑战。Facebook 希望鼓励更进一步的演算法实验、可视化、控制系统协作结构设计和计算方法测试。这将有利于新数学模型和更高效率控制系统的问世,进而为人们采用大批数字服务提供更多极具有关性的内容。
DLRM 开放源码门牌号:https://github.com/facebookresearch/dlrmDLRM 学术论文:https://arxiv.org/abs/1906.00091了解 DLRM 数学模型
DLRM 数学模型采用内嵌处置类型特点,采用上方的第二层超弦(MLP)处置已连续特点。然后隐式地计算相同特点的四阶交互作用(second-order interaction)。最后,采用顶端的第二层超弦处置结果,并输出 sigmoid 表达式中,得出结论点选的概率。
计算方法和控制系统协作结构设计
DLRM 的开放源码同时实现需用于计算方法,去来衡量:
数学模型(及其有关微分)的执行速度;相同值技术对数学模型准确度的影响。这可以在相同的硬体平台上进行,比如 BigBasin AI 平台。
DLRM 计算方法提供更多两个版本的代码,分别采用 PyTorch 和 Caffe2。此外,DLRM 还有一个采用 Glow C++微分同时实现的变体。为了适应相同框架,各个版本的代码略有相同,但整体结构类似。
这些数学模型同时实现允许我们对比 Caffe2 框架和 PyTorch 框架,和 Glow。或许最重要的一点是,未来我们可以从每个框架中选出最好的特点,然后组合成一个框架。
Big Basin 具备模块化、可扩展的架构。DLRM 计算方法支持随机输出和合成输出的生成。计算方法数学模型同时也支持数学模型自定义生成类型特点对应的索引。这是因为多种原因:例如,如果某个应用采用了一个特定统计数据集,出于隐私原因我们无法共享统计数据,那么我们或许可以透过分布表示类型特点。此外,如果我们想要采用控制系统模块,如自学记忆行为,我们可能需要捕捉合成轨迹(synthetic trace)内原始轨迹的基本位置。
此外,Facebook 根据采用场景的相同,采用多种个人化所推荐数学模型。例如,为了达到高性能,很多服务在单个电脑上对输出执行批处置并分配多个数学模型,进而在相同平台上同时实现并行化推断。此外,Facebook 统计数据中心的大批服务器具备架构异构性,从相同的 SIMD 频宽到相同 cache hierarchy 的同时实现。架构异构性为软硬体协作结构设计和优化提供更多了机会。(对 Facebook 神经所推荐控制系统架构的深入分析参见学术论文《The Architectural Implications of Facebooks DNN-based Personalized Recommendation》。)
并行计算
正如第一幅图所示,DLRM 计算方法数学模型由主要执行计算的第二层超弦和受限于二级缓存的内嵌构成。因此,它自然需要依赖统计数据并行计算提升第二层超弦的表现,利用数学模型并行化解决内嵌对二级缓存的需求。
DLRM 计算方法数学模型提供更多了并行化的解决方案。它透过一种名为 butterfly shuffle 的机制,将每个设备上 minibatch 的内嵌矩阵分割成多个部分,并分配到所有设备上。如下图所示,每种颜色代表 minibatch 中的一个元素,每个数字代表一个设备及其分配到的内嵌矩阵。Facebook 研究团队计划优化这一控制系统,并在以后的网志中公开详细的性能细节。
butterfly shuffle 图示。可视化和演算法实验
DLRM 计算方法数学模型采用 Python 语言编写,支持灵活部署。数学模型的架构、统计数据集和其它参数都采用命令行定义。DLRM 需用于训练和推断。训练过程中,DLRM 增加了反向传播功能,使参数得到更新。
代码是完整的,且可以采用公开统计数据集,包括 Kaggle 展示广告挑战赛统计数据集(Kaggle Display Advertising Challenge Dataset)。该统计数据集包含 13 种已连续特点和 26 种类型特点,定义了 MLP 输出层的大小,和内嵌的数量,其它参数则可以采用命令行定义。例如,根据如下命令行运行 DLRM 数学模型,可以产生训练结果。结果如下图所示:
左图展示了数学模型在训练和测试集上的二值交叉熵损失。右图则显示了数学模型在训练集和测试集上的准确度。
DLRM 数学模型可在真实统计数据集上运行,这可以帮助衡量数学模型的准确度,特别是采用相同的值技术和数学模型进行对比实验时。Facebook 团队计划对量化和演算法实验对 DLRM 数学模型的影响进行深入分析。
DLRM 数学模型开放源码代码
使用者怎样采用数学模型呢?Facebook 非官方在 GitHub 上开放源码了有关代码。目前,DLRM 数学模型主要有两个版本的同时实现:
DLRM PyTorchDLRM Caffe2透过采用 DLRM Data 有关的模块,我们可以快速生成或加载统计数据,也能采用对应的脚本进行测试。此外,如果希望试试计算方法数学模型,还能查看./bench 目录下的 DLRM 计算方法同时实现。
训练和测试
下图展示了如何训练一个较小数学模型:
使用者还可以采用 Debug 模式训练:
为了测试运行正常,可以采用如下的代码:
数学模型的保存和加载
训练时,数学模型可以采用 --save-model=保存。如果在测试时准确度提升,则数学模型会被保存。查看测试精确率的命令是: --test-freq intervals。
可以采用 --load-model=加载之前保存的数学模型。加载的数学模型可以继续用于训练,透过 checkpoint 文件保存。如果只要求用数学模型进行测试,则需要特别命令—inference-only。
原网志门牌号:https://ai.facebook.com/blog/dlrm-an-advanced-open-source-deep-learning-recommendation-model/