Abstract
阐述工作内容
写了一个基于pytorch的模型部署文件框架,该框架可以调和算法工程师快速实验和大规模服务模型部署之间的矛盾
创新点
1.为模型组件提供简单可扩展的接口 2.利用pytorch导出模型以便送入caff2模型进行推断 3.同时构建多个单任务模型,通过上述的模块,确定共享的模型参数,进行共同的研究,可以对于多个任务使用一个或者多个输入表示联合训练模型
Introduction
工作背景
(1) 在搭建机器学习模型框架时,特别是深度学习模型框架中,实验和部署之间存在很大的矛盾 (2) 实验过程中,通常使用pytorch和tensorflow,优点是快速建模,建立动态图模型,缺点是推断过程延时,部署具有挑战(其实我不太了解什么是推断,什么是部署) 模型部署时,使用声明式框架,采用caffe2和tensorflow框架,建立静态图模型,优点是高度优化生产场景,但难以使用且实验生命周期更长。 (3) 当前矛盾是因为大多数NLP模型是动态模型,不容易在静态图中表示,增加了在工业规模基础上开启各项服务的挑战性。
创新点
1.快速建模 2.在新数据上使用模型变得容易,减少额外工作量 3.在同一生产线上的研究人员和工作师,以最小的代价实现创建、评估、交付模型到部署的全过程。 4.确保模型部署时的高性能(低延迟和高吞吐量)
Related work
相关研究算法介绍,分析存在的优缺点。 不同模型框架 优点 缺点 CoreNLP 支持研究和生产 不支持深度学习神经网络 FLAIR 支持研究和深度学习模型 不支持生产 AllenNLP 支持研究和深度学习模型 不支持生产 Spacy 2.0 支持深度学习模型和生产 不支持建模
Discussion
论文介绍
PyText是一套帮助研究人员或者工程师快速部署机器学习系统的框架,具有自定义处理原始数据模型、报告指标、训练方法、输出训练模型方法等功能。 此时可以研究各类模型的构建模块,进行深入化研究。
源码结构
所有组件都是需要在全局注册表里面维护的,由配置它所需要的参数进行定义 组件结构=训练(Data Handler/Model/Optimizer/Metric Reporter/Trainer)+预测(Predictor)+导出(Exporter),所有的模型导出为ONXX格式
模型结构
单任务训练模型 Token Embedding+Representation+Decoder+Output Layer 多任务训练模型 同时构建多个单任务模型,通过上述的模块,确定共享的模型参数,进行共同的研究,可以对于多个任务使用一个或者多个输入表示联合训练模型
多任务训练模型的相关前提条件
- 设置不同的数据源,不同数据源对应不同的任务
- 必须实现单个的任务场景,确保在多任务设置中重用它。
多任务训练模型的实例 可以通过共享词表示变量,实现(1)文本分类和词标记模型,(2)两个文本分类+文本匹配模型
该模型可以支持的任务
- 文本分类
- 词标记
- 语义解析
- 语言模型
- 联合模型
Experiments
实验步骤
PyText的部署任务
- 实现模型
- 绑定到pytorch的推理服务,对实时流量样本进行实时小规模评估
- 导出成caffe2模型,但不一定支持过于复杂的版本
- 如果3步骤不行,则使用pytorch的C++ API,重写模型并且封装成Caffe2格式
- 发布到Caffe2的预测服务中,进行训练操作
实验条件 实验是在一台只有cpu的机器上进行的,机器上有48个2.5GHz的Intel Xeon E5-2680处理器,251 GB RAM和CentOS 7.5。c++代码使用gcc -O3编译
模型部署情况 该模型研究了pytext在导出为C++和caffe2中,导出为意图识别任务中的延迟情况
结果分析
模型部署的挑战 文本预处理:
- 文本标记化
- 字符转ID
- 字符串对齐
词汇表管理的方法
- 维护远程服务中的词汇表
- 导出为Caffe2后,将词汇表添加至网络中
选择第二种是可以同步/控制不同版本的用例和语言模型
未来研究方向
1.添加任务
(1)添加多语言任务建模研究 (2)添加问答系统、总结系统、阅读理解任务的研究
2.性能基准以及相应改进
为了提高高吞吐量,降低延迟时间 (1) 训练:增加分布式训练 (2) 预测:对训练进行基准测试,根据预测的负载模式调优模型部署。
3. 模型可解释性
监控指标,调试模型内部,添加更多工具支持 (1) tensorboard+visdom (2) 探索不同的模型解释方法
4.模型稳健性
为了抵抗扰动的对抗性输入、噪声、语法差异性对模型准确性的影响,添加对抗训练和数据增强技术。
5.移动模型部署
训练轻量化的模型,在移动设备上部署模型
|