CS329S: 机器学习系统设计——了解机器学习生产

官网笔记和Slide(地址可能有变,无效请参考官方):

机器学习中的研究 VS 生产

 ResearchProduction
ObjectivesModel performanceDifferent stakeholders have different objectives
Computational priorityFast training, high throughputFast inference, low latency
DataStaticConstantly shifting
FairnessGood to have (sadly)Important
Interpretability*Good to haveImportant
  • 目标:
    • 研究者主要就是模型的性能,是否达到了SOTA
    • 生产的话,不同的职位的人他的目标是不一样的
  • 计算优先度:
    • 研究者主要是快速的训练,高吞吐量,主要是节约训练时间
    • 生产者主要是快速推断能力,低延迟,提高QPS,高性能服务应用
  • 数据:
    • 研究主要是固定的数据集,干净静态的,也是历史数据
    • 生产是变化的数据,脏乱的数据,历史和实时数据流,也有一些隐私数据
  • 公平性:
    • 研究 基本没多少研究 最好是有
    • 生产的公平性是非常重要
  • 可解释性:
    • 最好是有 ,但是可以没有
    • 生产的可解释性也非常重要,对用户企业都很重要,对于开发人员也非常重要

我认为在生产中,最重要的还是前期业务调研和训练数据,还有一点也比较重要,就是模型的安全性,这个在模型研究中基本没有涉及,在生产中非常重要。

机器学习系统 VS 传统的软件开发

机器学习系统的新挑战

  • 数据测试
  • 数据和模型版本
  • 监控
  • 数据标签
  • CI/CD测试
  • 部署
  • 模型压缩
  • 推理优化
  • 边缘设备
  • 隐私
  • 数据操作
  • 数据格式

机器学习部署神话

  • 部署是困难的
    • 可靠部署非常困难,包括低延迟和高可用
  • 你只能一次部署一到两个模型
    • 我们需要部署上百上千个模型
  • 如果我们不做任何事情,模型的性能问题依然存在
    • 模型的性能一开始就是有很多问题,都是需要做优化的
  • 你不需要更新你的模型
    • 其实模型的更新需求是非常频繁,如果使用k8s来部署,基本的容器生命周期都是十几分钟,几十分钟
  • 大多数的机器学习工程师不需要担心规模
    • 开始并没有担心规模,后续针对业务来做大规模部署
  • 机器学习可以神奇的转换一个业务
    • 机器学习的收益很难说这个和业务相关

CS329S: 机器学习系统设计笔记目录

  1. CS329S: 机器学习系统设计——了解机器学习生产
  2. CS329S: 机器学习系统设计——机器学习系统设计简介
  3. CS329S: 机器学习系统设计——数据管理
  4. CS329S: 机器学习系统设计——模型开发
  5. CS329S: 机器学习系统设计——PyTorch和分布式培训
  6. CS329S: 机器学习系统设计——模型评估
  7. CS329S: 机器学习系统设计——实验跟踪和版本控制
  8. CS329S: 机器学习系统设计——TinyML
  9. CS329S: 机器学习系统设计——在生产中扩展ML模型:Uber和Ludwig的案例研究
  10. CS329S: 机器学习系统设计——公平,准确和透明
  11. CS329S: 机器学习系统设计——监控与维护
  12. CS329S: 机器学习系统设计——基础设施
  13. CS329S: 机器学习系统设计——将ML集成到业务中
  14. CS329S: 机器学习系统设计——最终项目讨论
  15. CS329S: 机器学习系统设计——ML系统的未来
  16. CS329S: 机器学习系统设计——最终项目演示

官网: https://stanford-cs329s.github.io/index.html

《CS329S:机器学习系统设计》 是斯坦福大学今年才开的课程,也是第一次开这门课。主要的目标是构建一个可部署可靠可扩展的机器学习系统,具体介绍可以参考官网。

现在课程只有PPT和笔记,视频后续有可能会公布。目前文章的内容只是根据PPT和笔记以及其他相关内容整理而成,如果后面放出视频,文章会根据视频更新。

Github:https://github.com/xxg1413/CS329S

课程时间:

DateDescriptionMaterialsEvents
Mon Jan 11Understanding machine learning productionNote
Slides
Lecture
Wed Jan 13Intro to machine learning systems designNote
Slides
Lecture
Mon Jan 18No classMartin Luther King, Jr. Day
Wed Jan 20Data managementSlidesLecture
Mon Jan 25Model developmentSlidesLecture
Wed Jan 27PyTorch & distributed training
Tutorial by Shreya Shankar and Karan Goel
Tutorial
Mon Feb 1Model evaluationLecture + Tutorial
Wed Feb 3Experiment tracking and versioning
Weights & Biases tutorial by Lavanya Shukla
DVC tutorial by DVC team
Lecture + Tutorial
Mon Feb 8DeploymentLecture
Wed Feb 10Deployment tutorials
Guest lecture by Daniel Bourke
Tutorial
Mon Feb 15No classPresidents’ Day
Wed Feb 17TinyML
Guest lecture by Pete Warden
Lecture
Mon Feb 22Scaling ML models in production: case studies with Uber and LudwigGuest lecture by Piero MolinoLecture
Wed Feb 24Fairness, accuracy, and transparency
Guest lecture by Sara Hooker
Lecture
Mon Mar 1Monitoring and maintenanceLecture + Tutorial
Wed Mar 3InfrastructureLecture
Mon Mar 8Integrating ML into business
Guest lecture by Saam Motamedi
Lecture
Wed Mar 10Final project discussionWorkshop
Mon Mar 15Future of ML systems
Panel:Christopher RéNeil LawrenceHan XiaoTBD
Panel
Wed Mar 17Final project demo dayDemo day

HPC基础

《高性能计算-现代系统与应用实战》第1-4章笔记

绪论

1.HPC的定义: 试图在任何时间点和技术上对于一个领域上的相关技术,方法和应用的所有方面实现最大计算能力

2.HPC的性能和指标: 基本指标:时间和操作次数 最广泛指标: 每秒浮点运算次数(flops)

3.HPC基准测试程序: Linkpack 以稠密矩阵的形式求解一组线性方程 链接:http://www.netlib.org/benchmark/hpl/

4.HPC和传统计算机的区别: 组件资源的组织,互连和规模,以及支持软件在规模上管理系统运行的能力。

5.HPC的性能评价标准: 峰值性能和持续性能

6.HPC的性能退化: SLOW——饥饿,延迟,开销,等待争用

7.HPC的趋势: 使用独立进程和相互关联的多线程的中等粒度共享内存技术来合成粗粒度分布式内存技术。

【FAI】00.FAI是什么

00.FAI是什么

FAI是意大利语中是“做”的意思,寓意“Just do it”。

FAI是一个开源的机器学习框架,可以供Rustacean构建深度或者混合的机器学习应用程序。

它的灵感来自于Tensorflow,Pytorch,Rust和许多优秀论文背后的人,在此感谢。

FAI 设计的主要目的是试图将技术负担降到最低,所以它拥有最简单的API,也是依赖最少的框架。

FAI是非常简洁的,在CPU,GPU和FPGA,拥有操作系统或者没有操作系统的机器上都可以运行它。

FAI是非常高效的,它的框架设计非常的注重高效并选择使用Rust来实现,它可能是目前已经开始开发的最快的深度学习框架之一。

FAI的设计使其能够发布独立的模块,使开发者可以轻松的进行机器学习实验,可视化和监控,网络分发,自动化预处理和可扩展的生产部署。

提示:FAI目前处于开发的早期阶段。后续会开源。

开源机器学习工具SQLFlow试用

SQLFlow介绍

SQLFlow是昨天蚂蚁金服开源的一个机器学习工具,主要是为了连接SQL引擎和AI引擎。

具体介绍请参考: 重磅!蚂蚁金服开源机器学习工具SQLFlow,技术架构独家解读

官网: sqlflow

安装

安装文档: installation

步骤:

1.把repo clone到本地

git clone https://github.com/sql-machine-learning/sqlflow

2.使用docker启动mysql并导入数据
文档: Running a MySQL Server Container with Test Data

cd example/datasets
docker build -t sqlflow:data .

build mysql镜像并启动

docker run –rm -d –name sqlflowdata \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_ROOT_HOST=% \
sqlflow:data

进去镜像内并按照文档说明导入数据

这样,SQLFlow依赖的mysql环境和数据已经准备完成。

3.启动主程序

docker pull sqlflow/sqlflow:latest

拉取镜像并启动

docker run –rm -it -p 8888:8888 sqlflow/sqlflow:latest \
bash -c “sqlflowserver –datasource=’mysql://root:root@tcp(host.docker.internal:3306)/?maxAllowedPacket=0′ &
SQLFLOW_SERVER=localhost:50051 jupyter notebook –ip=0.0.0.0 –port=8888 –allow-root”

从docker run的命令可以看到sqlflow中启动了一个jupyter
使用浏览器打开URL就得到一个jupyter,然后新建一个Python3 Notebook。
这样,我们的试用环境就算搭建完成了。

使用

在Jupyter中,代码中指定%%sqlflow+sql 才能使用sqlflow。

查询iris数据集

从iris训练集中查询数据训练一个分类器并保存为my_dnn_model
从SQL语句中可以都看到,可以使用SQL指定分类器的参数,还有训练数据的特征等。


训练完成,开始预测。

从上面的语句可以看到SQL引擎增加了适应AI的一些关键字来和AI引擎交互。


最后查询预测结果。

使用场景

目前SQL+AI的工具已有几个,包括Google的BigQueryML,SQLServer的AI扩展,还有国内个人开发者开发的MLSQL等等,处于最接近用户的层。

此类工具的主要应用场景大数据分析领域。加速数据导入导出,数据清洗,模型部署等这些工作,适合长期稳定的数据流服务。对一些熟悉SQL的分析师来说,降低了应用AI模型的难度。期待此类工具后面更好的发展。