Fix two citation errors (#71)

* Fix citation error

* Fix citation error

* Fix a citation error

* Fix a citation error

* Fix a content mistake
This commit is contained in:
Yao Fu
2022-03-11 19:14:21 +00:00
committed by GitHub
parent 5ab397a5a6
commit c382ab45d2
2 changed files with 9 additions and 5 deletions

View File

@@ -12,7 +12,9 @@
:width:`800px`
:label:`ch10-recommendation-models`
推荐模型以用户和内容的交互历史、用户属性、内容属性等特征作为输入对输入特征进行充分相互作用再将交互结果交由稠密深度神经网络来预测用户点击候选内容的可能性。【以xxx网络为例】。由于推荐模型的输入中包含大量无法直接进行矩阵运算的类别数据例如用户和商品标识符所以必须使用嵌入表将类别数据转换为数字向量形式。由于每种类别数据包含的每种情况都需要一个单独的嵌入项来表示而稠密深度神经网络的参数可以共享在大规模推荐模型中嵌入表占据了绝大部分内存 :cite:`MLSYS2021_979d472a, MLSYS2020_f7e6c855`。举例说明假设一个推荐模型需要处理1亿条短视频内容而每条短视频对应的嵌入项为一个64维的32位浮点数向量那么仅该内容嵌入表就需要就需要占据大约24GB内存。如果考虑到用户标识符等其他嵌入表那么单个模型可以轻易占据近100GB内存。而在工业界生产环境中TB级的推荐模型 :cite:`MLSYS2020_f7e6c855`也是非常常见的。
推荐模型以用户和内容的交互历史、用户属性、内容属性等特征作为输入,对输入特征进行充分相互作用,再将交互结果交由稠密深度神经网络来预测用户点击候选内容的可能性。由于推荐模型的输入中包含大量无法直接进行矩阵运算的类别数据,例如用户和商品标识符,所以必须使用嵌入表将类别数据转换为数字向量形式。由于每种类别数据包含的每种情况都需要一个单独的嵌入项来表示,而稠密深度神经网络的参数可以共享,在大规模推荐模型中,嵌入表占据了绝大部分内存 :cite:`MLSYS2021_979d472a,MLSYS2020_f7e6c855`。举例说明假设一个推荐模型需要处理1亿条短视频内容而每条短视频对应的嵌入项为一个64维的32位浮点数向量那么仅该内容嵌入表就需要就需要占据大约24GB内存。如果考虑到用户标识符等其他嵌入表那么单个模型可以轻易占据近100GB内存。而在工业界生产环境中TB级的推荐模型 :cite:`MLSYS2020_f7e6c855`也是非常常见的。
在实际的生产环境中,除了推荐模型本身,推荐系统通常包括:数据收集、数据处理、数据存储、模型训练、模型存储、模型评估、推理服务等多个子系统。如图 :numref:`ch10-abstract-recommendation-systems`所示,这些子系统之间分工协作、紧密配合,构成一个从用户反馈、到模型更新、再到新推荐结果生成的闭环。下一小节中将重点介绍模型训练、推理子系统的结构。
@@ -29,8 +31,8 @@
正如上文提到的,嵌入表占据了推荐模型绝大部分存储而其更新具有显著的稀疏性,因此推荐系统通常采用上一章介绍的参数服务器架构来存储模型。具体来讲,所有参数被分布存储在一组参数服务器上,而训练服务器一方面从数据存储模块拉取训练数据,另一方面根据训练数据从参数服务器上拉取对应的嵌入项和所有稠密神经网络参数。训练服务器本地更新之后将本地梯度或新的参数发送回参数服务器以更新全局参数。全局参数更新可以选择全同步,半同步,或异步更新。类似的,推理服务器在接到一批用户的推荐请求后,从参数服务器拉去相应的嵌入项和稠密神经网络参数来响应用户的请求。为了提升训练(推理)的吞吐,可以在训练(推理)服务器上缓存一部分参数。
为了避免训练服务器和参数服务器之间的通信限制训练吞吐率一些公司也在探索单机多GPU训练超大规模推荐系统。然而正如前文提到的即使是单个推荐模型的参数量1̃00GB也超出了目前最新的GPU显存。有鉴于此脸书公司的定制训练平台
-- ZionEX :cite:`mudigere2021software`
利用计算设备之间的高速链接将多台设备的存储共享起来可以单机训练TB级推荐模型。然而对于更大规模的模型或中小型企业、实验室参数服务器架构依然是性价比最高的解决方案。
-- ZionEX :cite:`zionex`利用计算设备之间的高速链接将多台设备的存储共享起来可以单机训练TB级推荐模型。然而对于更大规模的模型或中小型企业、实验室参数服务器架构依然是性价比最高的解决方案。
为了提升在发生故障的情况下的可用性,在线服务中的深度学习推荐模型通常都采用多副本分布式部署。同一个模型的多个副本通常会被部署在至少两个不同的地理区域内的多个数据中心中,如图 :numref:`ch10-recommendation-systems`,以应对大面积停电或者网络中断而导致整个地区的所有副本都不可用。除了容错方面的考虑,部署多个副本还有其他几点优势。首先,将模型部署在靠近用户的云服务器上可以提升响应速度。其次,部署多份副本也可以拓展模型推理服务的吞吐率。
@@ -57,7 +59,9 @@
- 异构硬件多级存储。前文提到GPU显存无法装下完整的模型参数一些现有的系统 :cite:`MLSYS2020_f7e6c855`为了充分利用GPU的计算优势采用多级缓存的思想将部分参数分级存储于显存、主存和固态硬盘上。在他们提出的这个分级系统中主要解决了缓存策略和异构硬件的适配问题。然而在设计类似的存储系统时还应该考虑到机器学习模型内在的一些访存特征以进一步优化。Kraken :cite:`9355295`这篇工作讨论了利用机器学习模型的特征对嵌入项的哈希表的存储进行优化的方法。此外,新型硬件的发展为解决大规模推荐模型的高效存储提供了新的可能。比如非易失存储可以作为主存的扩展,进一步提升系统可以支持的模型尺寸。然而目前还没有见到专门为在线机器学习优化的非易失存储系统。另外也有工作 :cite:`MLSYS2021_ec895663`讨论了利用FPGA加速嵌入表的访存并且相比于CPU服务器取得了非常显著的效果。
- 内存高效的嵌入项存储与计算。除了系统上的设计,研究人员也在探索其他算法优化手段来压缩嵌入表的内存需求。直接使用低精度浮点数可以有效降低内存开销,但是还是会对模型的精度产生一定的影响。因此在在线推荐服务这种精度敏感的场景中并不适用。除此之外,:cite:`MLSYS2021_979d472a`利用低秩分解可以将一个大矩阵分解为两个小矩阵(向量)。这种方法可以在保留原矩阵大量信息的前提下显著减小内存开销。除了低秩分解外,还有其他 :cite:`10.1145/3394486.3403059`分解嵌入表的手段。还有研究 :cite:`ginart2021mixed`表明,没有必要为所有的项目都使用一样长的嵌入项,可以根据嵌入项的重要性动态决定其长度以节省内存开销。作为系统设计者,如何将层出不穷的算法优化手段高效地实现是需要考虑的问题。
- 内存高效的嵌入项存储与计算。除了系统上的设计,研究人员也在探索其他算法优化手段来压缩嵌入表的内存需求。直接使用低精度浮点数可以有效降低内存开销,但是还是会对模型的精度产生一定的影响。因此在在线推荐服务这种精度敏感的场景中并不适用。除此之外, :cite:`MLSYS2021_979d472a`利用低秩分解可以将一个大矩阵分解为两个小矩阵(向量)。这种方法可以在保留原矩阵大量信息的前提下显著减小内存开销。除了低秩分解外,还有其他 :cite:`10.1145/3394486.3403059`分解嵌入表的手段。还有研究 :cite:`ginart2021mixed`表明,没有必要为所有的项目都使用一样长的嵌入项,可以根据嵌入项的重要性动态决定其长度以节省内存开销。作为系统设计者,如何将层出不穷的算法优化手段高效地实现是需要考虑的问题。
## 小结

View File

@@ -302,7 +302,7 @@
year = {2020}
}
@article{mudigere2021software,
@article{zionex,
title={Software-Hardware Co-design for Fast and Scalable Training of Deep Learning Recommendation Models},
author={Mudigere, Dheevatsa and Hao, Yuchen and Huang, Jianyu and Jia, Zhihao and Tulloch, Andrew and Sridharan, Srinivas and Liu, Xing and Ozdal, Mustafa and Nie, Jade and Park, Jongsoo and others},
journal={arXiv preprint arXiv:2104.05158},