NUMA架构下的预估系统性能优化
作者:瑜锋
1. 背景
在推荐业务中,经典的分层逻辑为三层:召回、精排、重排,其中精排层无疑又是最复杂、最具挑战性的一个环节,预估系统主要是为精排业务提供在线推理的服务。
当前云音乐在线预估系统经过三年多时间的不断迭代,已经接入包括音乐、搜索、直播、创新业务等多个场景模型。
预估系统主要的逻辑包含三个部分:
-
特征查询:根据业务从分布式存储中查询用户、场景、item等特征,解析之后准备下一阶段的特征抽取;
-
特征抽取:根据模型定义的输入特征,对上一阶段查询回来的特征逐个计算,转换成模型需要的数据格式,例如embedding、hash等;
-
前向推理:将特征抽取后的数据输入机器学习库,经过一系列的矩阵运算等操作,最后输出一个用户对一个item的得分;
三个阶段中,特征查询属于IO密集型,其他两个阶段属于CPU密集型,尤其是前向推理阶段,需要完成大量的矩阵相乘等操作,并且期间有大量的内存申请和读写逻辑。
当前云音乐在线预估系统部署数十线网集群,上线数百物理机。系统上线初期主要使用至强E5 56核机器,去年开始采购的都是至强Gold 96核机器,两种机型具体配置如下:
对比两种机型配置,高配机器的计算能力至少是低配机器的两倍。但是在上线运行时的性能表现以及日常压测数据显示,高配机器在实际业务处理能力上并没有成线性增加,存在较大的性能损失。
下表中对比了两个场景模型在两种机型上的业务处理能力:
2. NUMA架构
当单核处理器计算能力无法满足日益增长的算力需求,处理器制造厂商开始朝着多核的方向发展。
单机服务器架构经历了从 一致性访存(UMA) 到 非一致性访存(NUMA) 架构的演变。
在UMA架构中,多路CPU无主次关系,共享内存、总线、操作系统等资源,此时每个CPU访问内存任何地址所耗费的时间是相等的。由于所有CPU共享内存,导致了单机的扩展能力有限,随着CPU数量增加,内存访问冲突也会大大增加。
为了进一步提高单机CPU数量,同时还能保证计算资源利用率,于是NUMA架构出现,通过牺牲内存的访问延时来提高机器的扩展性。
在NUMA架构中,每个CPU都有本地内存,同时可以通过高速交换矩阵实现其他CPU本地内存的访问。这种架构的特点就是CPU访问自己的本地内存速度非常高,但是访问远端的CPU本地内存因为需要经过的总线更长,延时也会有相应的增加。
通过lscpu命令查看,当前线上的服务器都是配置的2个CPU节点的NUMA架构,接下来将会测试是否是NUMA架构的访存特性,导致在高配机器上单机处理能力无法达到预期的提升一倍的问题。
3. 亲核性测试
为验证在NUMA架构下的亲核性对预估系统性能的影响,决定对单机三种部署方式进行测试:单节点、双节点不绑核、双节点绑核。绑核通过使用Linux操作系统上的numactl命令来实现。
测试的模型选择了一个复杂场景(模型A)和简单场景(模型B),测试这两个模型在三种不同的部署方式下,CPU利用率达到60%时,单机的请求处理能力。
3.1 低配机器测试结果
模型 A:
模型 B:
双节点绑核相对于单节点部署方式有10%~20%左右的单机请求量提升,但是模型A在双节点绑核部署方式上平均耗时也增加约10%;同时在模型B上,双节点不绑核相对于单节点部署方式,反而单机请求量降低了10%。
总体上看,在低配机器上,NUMA架构的亲核性对系统的性能影响不明显,主要原因是因为计算资源还比较少,预估系统产生的访存竞争不大。
3.2 高配机器测试结果
模型 A:
模型 B:
无论在模型A还是模型B,双节点绑核相较于单节点部署,单机请求处理能力有比较明显提升,分别带来了75%和49%的提升;同时双节点不绑核性能表现最差,主要是因为双节点的线程数相较于单节点有较大增加,导致了访存的竞争、线程切换开销更为明显。
4. 测试结论
相较于低配机器上的单节点部署方式,高配机器通过采用双节点绑核的部署方式,在模型A和模型B上,分别带来了169%和112%的性能提升,符合计算资源增加一倍情况下请求处理能力相应提升的预期。
高配机器上性能提升相较于低配机器更为明显,三种部署方式性能排序: 双节点绑核 > 单节点 > 双节点不绑核 。
本文发布自网易云音乐技术团队,文章未经授权禁止任何形式的转载。我们常年招收各类技术岗位,如果你准备换工作,又恰好喜欢云音乐,那就加入我们 [email protected] 。
- NUMA架构下的预估系统性能优化
- NUMA架构下的预估系统性能优化
- React 组件库 CSS 样式方案分析
- React 组件库 CSS 样式方案分析
- Disruptor在云音乐特征服务中的应用
- Disruptor在云音乐特征服务中的应用
- Chrome插件:云音乐听歌识曲
- App 出海 —— Google 结算系统面面观
- CIKM 2021 | 云音乐提出与模型无关的冷启动推荐框架: MAIL
- Chrome DevTools Inspector 扩展实践
- 从跨模态和上升通道谈富媒体内容的冷启动
- 从跨模态和上升通道谈富媒体内容的冷启动
- 冷启动算法系列-云音乐歌曲冷启动初探
- 冷启动算法系列-云音乐歌曲冷启动初探
- 打造轻量级 WebIDE,看这一篇文章就够啦
- 打造轻量级 WebIDE,看这一篇文章就够啦
- Wakeup in XNU
- 数据分析在生活中的应用- 女人的衣柜里为什么总是少一件衣服
- 云音乐隐性关系链的探索与实践
- 手把手带你走进Babel的编译世界