项目
项目忠告
数据标注
- 前期一定要制定充分的标注规则
- 数据的采集一定要具有代表性
- 非常不建议采用自动标注的方式
- 先训练一个初步模型,然后只让相关人员进行校对,可以保证标注效率并减少标注成本。
算法开发
- 千万不要采用规则的方式进行开发
- 初期就要引导客户使用和购买能够支持深度学习框架的硬件
- 算法开发过程中,一定要有量化的指标并记录下来
- 开发的过程中,多分解问题
- 前端对接的时候一定要引导何为”智能”
效果优化
- 初期要充分考虑效果优化所需要的时间和成本
- 客户并不知道通过一个什么标准来评估一个系统
- 一定要从数据的角度出发进行优化
- 学会止损
- 除了准确性的优化,还有注重代码运算效率带优化
- 算法开发和效果优化常常是需要反复进行的工作
算法部署
- 如果客户的系统算比较奇怪,或者难以满足一些要求,要提前让客户知晓一些风险
- 即使再小的项目,强烈建议采用微服务架构进行部署
- 不要把算法部署在本地,尽量采用云端部署
硬件问题
CPU
注意CacheMiss!!
GPU
注意:1. GPU与CPU的数据交互 2. GPU 显存污染(例如模型加载完毕,计算出错,有些时候模型精度整个降低可能就发生了显存污染,显存污染难以监控)
GPU训练注意事项
- GPU训练效率可以被DeepSpeed显著提升
- 很少出现GPU多进程训练(多个用户共用一块GPU易造成显存污染)
- GPU训练有时可能会被一些其他因素影响,如CPU,GPU之间的沟通速度(多GPU或者多节点)
- 传统来说,NLP的训练一般不会耗尽NLP的资源,但是容易出现算力不足或者显存资源不足的情况
- GPU可处理动态网络
GPU部署的注意事项
- GPU部署的最大问题:显存污染(尽量在一块GPU上对应一个server节点)
- GPU部署经常被内存与显存之间的带宽影响
- 部署时需要对参数做详细调整,最重要发的参数是 Batch Size
AI项目部署基本原则
-
采用微服务架构(方便、稳定)
-
采用合适硬件,注意CPU选型和GPU选型
-
以Profiler为导向进行优化
-
推断服务应该用同一个框架和一个线程
-
部署应该是在项目初期就考虑的,要制定完善的项目计划,并注意和客户的沟通
深度学习推断框架任务
- 读取模型,提供REST接口
- 调用不同的硬件资源
- 对推断过程做一定处理,其中最重要的是批处理
微服务
Docker Kubernetes Istio
优点:
- 入侵性小
- 稳定性高
- 功能强大
微服务部署AI的一些基本原则
-
对于推断,一个节点只部署一个Docker!!
-
如果缺少时间,至少部署Kubernetes 和 Docker, 因为Docker容易崩
-
其他考虑:
- 错误恢复 当服务崩溃后能否恢复到原状态
- 灰度上线
- Kafka
- Actor
- 其他功能
Docker, 因为Docker容易崩
- 其他考虑:
- 错误恢复 当服务崩溃后能否恢复到原状态
- 灰度上线
- Kafka
- Actor
- 其他功能