202105 - 机器学习系统和解决方案
# 知识点
- OS
- 进程/线程/协程
- 互斥锁/自旋锁/读写锁
- Cache/体系结构
- Network
- IO多路复用
- TCP/IP/HTTP/WebSocket
- Algo
- 数组/动态数组/线性表/链表/映射Map/队列/集合/栈/堆/图
- 树/二叉树/完全二叉树/B树/B+树/B*树/红黑树/前中后层
- 分治/回溯/贪心/动规
- 排序/TopK/布隆过滤器/DFS/BFS/最短路径
- Golang
- Goroutine/GPM/Channel/锁
- GC/三色标记
- 坑/变量捕获/内存对齐/拷贝/锁重入
- C++
- 结构/类/对象/继承/组合/封装/多态/虚函数
- 指针/智能指针
- STL
- 机器学习系统
- LR/DT/RF/GBDT
- TF/PT
- 图/编译/厂商库/压缩
- IO/资源隔离/高并发/大batch/缓存/稳定性/排错/监控
- 推荐系统
- GBDT+LR/CB/CF/Embedding
- 向量检索
- k8s数据架构
- 中间件
- SQL/分库分表/分布式ID/慢SQL/事务/一致性/索引/锁
- Cache/数据结构/雪崩/多级缓存
- MQ
- 高可用
- 限流/熔断/降级/超时/隔离/集群
- 系统设计
# 个人简介
# 主要方向
- 机器学习产品主要是什么?
模型优化,推理服务,实验和训练相关的产品体验改进。
- 推理性能优化的工作?
主要是模型的编译优化,定制子图融合,推理服务优化。
- 推荐系统解决方案?
面向有一定埋点数据基础或已有清理后数据,希望机器学习算法提高转换率,点击率,用户召回率的的企业。
包含了平台提供的算法库,包括Studio,EasyRec,GraphLearn等,和后端服务以及简易AB测试模块。
# 语言
- Python熟悉程度?常见问题?
模型构建,模型优化SDK,脚本处理。
- Go熟悉程度?常见问题?
云服务后端,推荐后端,机器学习产品(Notebook/EAS)后端。
- C++熟悉程度?常见问题?
深度学习加速系统后端,Runtime,编译器,Tensorflow接入,自定义算子,TVM等。
- 业余Dart做什么?
主要是Flutter,业余做跨端应用,移动/桌面/Web。
- Rust有了解吗?主要创新是什么?
Rust主要是为了取代C/C++,更干净标准的类型系统,加入了静态指针生命周期(所有权模型)检查,确保内存安全和多线程安全。
- 技术驱动,主要关注什么技术?
一个趋势是企业的数字化、自动化和智能化。前提就是有数据,数据的收集、处理、分析相关的技术,基于k8s的云原生技术,平台的搭建,机器学习技术,对数据的特征提取,优化业务目标。
- 对云原生的理解?
k8s的大规模使用带来的更精细粒度的云资源的调度,尤其是Serverless的形式,使得服务不需要过多关注底层资源管理调度。
采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。
- 关注产品,关注什么?
数据产品,利用数据更好地提升用户体验,用户安全,提升业务目标。
# 教育经历
# 系统架构
- 高性能计算系统的架构是什么?
异构计算,基于FPGA的计算加速系统,报文解析,协议卸载,密集计算,键值存储,主存做base,FPGA做卸载。
# 项目经历
# 解决方案
- 推荐系统主要的工作是什么?
外部客户推荐场景需求定制,数据清洗,特征工程,平台算法库构建模型,复用的模块化的推荐后端。
- 主要有什么场景?用了什么模型?
跨境电商广告落地页商品推荐,相似商品推荐,短视频视频CTR精排,游戏分发推荐。
召回:i2i,向量。排序:GBDT+LR,WDN,DeepFM。
- 数据处理用什么?
Dataworks,把自研的ODPS数仓和机器学习等功能整合到了一起。数据处理主要在ODPS里,和Hive类似,清洗,特征工程。
- 数据处理有哪些要注意的点?
清洗,不同来源,不同日期的数据整合。缺失值填充,拼写错误纠正。
- 特征工程要注意什么?一般用哪些特征?怎么构造特征?
特征工程一般分User特征,Item特征,Context特征。
User特征一般包括人口统计学特征,比如年龄,性别,职业,Session行为次数统计等。
Item特征就包括属性,品类,描述,创建时间,交互次数等。
Context特征比如IP,国家,地区,时间等,
Numerical一般做归一化,统一尺度,加速收敛。如果是不涉及距离计算的模型就不需要归一化,比如树模型。
Categorical用OneHot,Hash(压缩向量维度,函数固定,一致性强),Ordinal(大小关系),Binary(二进制编码,本质上是一种哈希)
- 一般怎么利用特征?
协同过滤
Embedding
Numerical一般不处理。
Categorical一般就是OneHot Embedding,MatMul操作。MultiHot每列相加。
长文本类型,一般用word2vec/doc2vec。
行为序列,Graph Embedding,比如GraphSAGE。
融合多向量,DSSM双塔模型。
召回用向量召回。
排序接排序模型
- Embedding训练的时候需要注意什么?
Embedding收敛太慢,FM预训练。
- 对向量召回的原理知道吗?
局部敏感哈希。
利用的特性是,高维空间中相近的向量v,在一维空间的投影也是相近的,远离的点有一定概率变成相近的。v通过随机k维映射向量。
多哈希函数分桶需要平衡哈希函数数量、与(在两个哈希函数的同一个桶)或操作和计算开销。
- 特征数量过多怎么办?
外部客户一般是数据太少,特征不够。内部是尽量能多用特征,大规模分布式计算由平台支持。
如果是成本限制,是寻找最优子集的过程。一般数据不够,特征太多,容易出现过拟合。
一般思路是特征空间搜索,尝试不同的特征子集。暴力搜索的空间太大,主要有Filter(相关系数最高的),Wrapper(增量搜索),Embedded(L1正则)
- 讲讲Word2Vec。
Word2Vec是经典Google出品的经典Embedding模型。把高维词向量压缩到低维空间。常用的方法是CBOW(Continuous Bag-of-Words)和Skip-Gram,CBOW是用一个固定窗口的词预测中间的词,Skip-Gram是使用窗口中间的词预测其他词。
- 说说Word2Vec负采样什么原理?
由于原始词向量太大,误差的计算量太大通常用负采样方法。随机选择一小部分的negative words(比如选5个negative words)来更新对应的权重。
一方面是将多分类问题转换成K+1个二分类问题,从而减少计算量,加快训练速度。
另一方面是保证模型训练效果,因为目标词只跟相近的词有关,没有必要使用全部的单词作为负例来更新它们的权重。
https://blog.csdn.net/hfutzhouyonghang/article/details/97496048
- CBOW和Skip-Gram优缺点分别是什么?
Skip-Gram 在数据较少的情况下效果也不错,对出现频率不高的词效果更好,但训练时间长。
CBOW 训练时间短,对高频词效果更好。
- 讲讲Graph Embedding,训练会遇到什么问题。
GraphSAGE
- 讲讲你知道的排序模型。
LR
MLR
FM
WDN,经典
DeepFM,FM和Deep结合
DCN
DIN
DIEN
语义
- 讲讲Bert模型
Bert文本模型,Transfomer基本单元,Encoder,Decoder。
- 说说你们推荐系统后端的模块和主要功能
召回,支持各类数据源的查表u2i/i2i,向量召回(Hologres数据库的向量引擎)。
排序 EAS服务模型调用,TF、PyTorch、FM、PMML模型。
AB 实验室,层,实验
- 后端的QPS和RT有多少?怎么解决高并发的RT问题的
场景不同,有业务波峰波谷,一般在几百QPS左右。
RT根据业务控制到50ms以内,有些大batch的业务控制在150ms以内。
优化方法:
后端内多线程优化
水平自动扩容
网络数据序列化
- 你写了SQL,了解MySQL吗?使用MySQL有哪些注意事项。
不用外键。
- Redis使用有哪些注意事项。
读雪崩。不统一设置过期时间。
保护API,VPC内加白名单。后端限流。
- HBase的理解,有什么要注意的?
HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。基于Google的BigTable设计。
- 用户增长方案指什么?
用户的推广触达和召回。选出Top K触达概率更高的人群。
# 推荐系统-工程
- 网络、磁盘、CPU等IO资源隔离
- 超大规模Embedding架构
- 分布式训练优化
- 模型优化
- 服务稳定性
- 一般RT是多少
- 大batch query的性能优化
- recall有什么方案?有什么优化方法?具体业务效果
- rank有什么方案?有什么优化方法?具体业务效果
- rank主要耗时是多少?
- 超大规模feature表查询优化?
- 特征工程主要做了什么?
- 实时推荐系统怎么优化?
- spark用过吗?
- flink用过吗?
# 机器学习产品
- 说说你的主要工作。
一个是Kubernetes化,服务迁移重构,围绕k8s和阿里云的基础设施的改造,资源、网络打通工作。
一个是产品间打通,梳理产品关系,平台现有工具,通过统一镜像打通,提供自定义镜像的拓展能力。
一个是推理优化服务的产品化,整合到各个产品中去。
- 说说Kubernetes的基本理解。
k8s统一了分布式资源调度模型,更精细的分配资源,扩展性强。
- 私有化部署方案具体是什么?
在私有云部署。
- k8s用过吗?
- k8s的基本概念熟悉吗?
- k8s弹性扩容具体指什么工作?
- 开发过operator吗?
- 开发过CSI吗?
- 开发过存储、网络插件吗?
# 模型推理优化
- 主要优化了什么业务模型?有具体的业务效果吗?
ResNet
LSTM
GRU
Bert
CTR
- TensorRT用的怎么样?怎么用于优化的?
- 写kernel吗?
- 写汇编吗?
- MKL-DNN的了解吗?
- TVM上做了什么工作?
- XLA上你的主要工作是什么?
- 主要用了什么优化方法?
- 系统级部署用了什么优化方法?有什么具体案例吗?
- 延迟是怎么优化的?
- 延迟和吞吐的关系?
并发度 = 吞吐量 * 延迟 * batch
https://www.infoq.cn/article/qeoaxd99ylmv7d0m179e
- 怎么优化资源利用率?
- 分布式系统有经验吗?
- 服务的网络IO如何优化?rank取feature和embedding的怎么优化?
- 服务的线上抖动如何优化?
- 服务的可用性和稳定性如何保障?
- GPU模型优化过吗?
- ARM上的模型优化过吗?
- 模型压缩有经验吗?有什么具体业务模型吗?
- 端上推理的发热和性能如何平衡?
- 典型的优化流程是怎样的?需要考虑什么?有哪些具体措施?足够通用吗?
http://blog.itpub.net/69942496/viewspace-2665766/
https://segmentfault.com/a/1190000022483639
# 加速系统
-
主要做了什么工作?
-
硬件?
FPGA原型,通用CNN硬件,推理加速引擎。
- 具体加速了哪些模型?有具体业务数据吗?
ResNet baseline
UNet
RCNN
CTR WDN
# 得物
# JD
机器学习平台
大小周,double加班费
职责:
- 负责大规模机器学习平台的搭建,开发和维护模型训练、模型服务、计算调度等机器学习平台开发
- 负责大数据与机器学习融合的自主化机器学习平台的建设
- 负责在线实时系统的开发与建设
要求:
- C/Java/Python
- TensorFlow, PyTorch
- Spark/Flink
- 分布式系统部署
# Intro
我叫xx,xx年,现在硕士毕业工作差不多三年了,本硕都是在复旦读的微电子专业,专业课程除了半导体工艺、数字和模拟芯片设计外,还要上大部分计算机专业的课程。本科和研究生期间在实验室的工作主要是基于FPGA的计算加速系统的架构,EDA软件和硬件IP设计开发。
毕业之后在阿里云的计算平台机器学习组继续做了一段时间的硬件后端,其中最主要的工作是通用CNN的硬件IP和软件栈。硬件部分,我主要负责CNN计算核的功能拓展还有长尾算子pipeline的实现,软件部分涵盖了编译器,runtime和驱动,通过自定义算子的形式接到TF,对外提供定制板卡,SDK和镜像。CTR和TTS的IP主要是组内其他同学开发,我负责软件的通用化支持。
与此同时,因为通用化的工作逐步完善了,我们希望从点对点的支持变成基于平台的对更广泛的业务模型支持,工作重点就放到了系统和框架上。因为TF的生态比较丰富,而且有XLA这套编译优化框架在前,我们就主要是基于TF做后端接入和推理优化。优化通过自研的推理平台的提供服务。在系统服务这一层主要针对端到端延时、吞吐和资源利用率等各种指标做了相应的优化。之后参与了推理优化服务的标准化以及产品整合的工作,把优化能力和平台内其他产品整合起来。
在此期间,也就顺其自然地接一些了产品开发的工作,主要可以分成两类工作,一类是产品的功能需求,主要是基于k8s的operator开发,和公有云其他产品的打通,另一类产品体验优化,因为平台内几个产品的定位比较清晰,有各自的开发标准,跨产品使用可能会有些障碍,因此主要工作是推动统一镜像,在实验、训练和推理产品上的环境保持一致,支持用户自定义镜像。除了公有云的开发,另一边还调研了私有化部署方案,现阶段的私有化输出需要带全套阿里云的底座,整个技术大背景是k8s化,希望可以基于k8s设计一套开源、轻量、按需的部署方案。
自从部门目标转向营收,会开始接各种中小企业的定制需求,因此工作也就转到了解决方案上。重度参与了两个场景,一个是推荐系统,主要工作包括了数据处理、特征工程、利用现有平台算法库构建模型,golang的后端,把常用的模块抽象出来,支持各种召回策略,排序模型,以及各种数据源,能够做到灵活配置,尽量复用。另一个是用户增长,主要是通过机器学习筛选目标人群,节约成本,还配套地做了短信的模板签名审核、定时发送的功能。这两个场景也在各种不同类型的外部客户上落地了。
作为第三方解决方案提供商,因为数据权限和沟通之类的问题,对业务场景的理解和参与比较有限,希望能更全面地看一些面对实际业务时候的具体场景和解决思路。
以上基本就是我的大致情况,谢谢。
# 有什么想问的吗?
- 业务场景
- 基础架构情况
- 工作内容
- 加班情况
- 建议
# 面筋
算法
- golang多线程打印ABC,java
- 数字转中文,一亿零一
工程
- 推理优化主要做了什么
图优化,编译优化,厂商库
- rank的多框架模型部署
- feature的带宽受限
- 超大规模embedding
- 网络IO瓶颈怎么办,一个是压缩IO,用pb,另一个是二级缓存
- 怎么保证服务(feature)热更新的幂等性
https://blog.csdn.net/glamour2015/article/details/104910728
- 模型训练的超大Embedding怎么导出
- 线上服务出错怎么办,应该怎么排查
- 超大条目数据如何优化存取
- failover机制
https://database.51cto.com/art/201902/592522.htm
核心诉求
- 系统适应业务发展,商品数量、Embedding规模等。
- 系统稳定性,可扩展性,IO优化,一致性,延迟,利用率,隔离,成本
- 自定义需求较高,觉得第三方产品灵活度不够
- 需要JAVA开发经验
- 部门人员增长,自己造轮子,突出技术部的重要性
- 系统设计
# Bilibili
# JD
职责:
- 负责AI云平台的建设和运营工作
- 负责打通从特征工程、训练、评估、模型发布、预测等机器学习全流程,提升业务迭代效率
- 负责探索业界前沿技术落地
要求:
- 熟悉数据结构和算法,精通C++/Python/Golang中的一种
- 熟悉常用机器学习,深度学习模型与算法,基本原理和适用范围
- 熟悉TF、MxNet、Caffe等开源框架
# 面筋
业务
- 自我介绍
- 我对推理优化比较感兴趣,你们对延迟和吞吐的优化手段是什么?
- 序列化
- 多级缓存
- 资源隔离,绑核
- 有没有具体的业务加速效果?
- 记不太清
- 延迟和吞吐的相关公式是什么?
算法
- 多线程,统计排序数组频次到map
- 二叉树前序遍历非递归
# 有什么想问的
- 主要场景
主站、直播视频推荐
- 推荐系统
C++,训练+推理优化,JAVA后端,推荐工程,模型MXNet
# 美团
# JD
推理平台工程师
- 深度优化超大规模样本和参数的模型训练性能
# Intro
# 腾讯
# JD
# 字节
# JD
端云语音引擎
深度定制优化
算法落地评估