首次独家呈现 OPPO 四大创新技术实践,尽在 QCon 上海 OPPO 技术专场! 了解详情
写点什么

AWS 神器为数据科学家轻松打造机器学习全流程,EMR Spark + SageMaker 黄金搭档

2019 年 10 月 25 日

AWS 神器为数据科学家轻松打造机器学习全流程,EMR Spark + SageMaker 黄金搭档

工欲善其事,必先利其器。在机器学习的世界里,要想成为一名出色的数据科学家,必须要善于使用机器学习的工具。


数据科学家经常使用 Apache Spark 来做数据的预处理,Apache Spark 提供的 MLlib 库不但包含很多常用的机器学习算法(如 K-Means,分类,回归等)及数据特征抽取,特征转换的预处理方法(如 Word2Vec,Tokenizer,Normalizer,PCA 等),而且还能借助 Spark 集群的多工作节点并行计算的能力,对数据进行快速预处理。数据科学家还喜欢使用 IPython,Jupyter Notebook 等交互式工具来检查,分析机器学习任务的各个阶段。当然还需要使用来搭建模型训练和部署的机器集群。


这些不同的机器学习工具或框架有着各自的安装配置方法,串联整合起来到整个机器学习流程中更是复杂,数据科学家们往往要耗费大量精力用于整个流程的搭建上。那有没有高效的工具来帮助数据科学家事半功倍完成机器学习的任务呢?那是当然的! AWS 的明星服务 EMR 和 SageMaker 就是把广大数据科学家从枯燥重复性劳动中解救出来的神器。利用两个服务组合不但能快速预处理数据,一键训练和部署模型,同时还提供 Jupyter Notebook 给数据科学家交互式环境,以方便检跟踪查机器学习每个阶段。


今天我们就来讲述一下如何利用 AWS 的 EMR Spark + SageMaker 服务快速打造一套识别 MNIST 手写数字图片的机器学习流程。MNIST 是一个手写数字数据库,它有 60000 个训练样本集和 10000 个测试样本集,我们把这个 MNIST 存储到 AWS 的 S3 上,利用 EMR Spark 的 PCA 算法对训练样本(28*28 图片)进行特征抽取,然后再借助 SageMaker 自带的 K-Means 算法进行模型训练并自动部署模型。


Amazon EMR 和 SageMaker 是什么?

Amazon EMR 服务是一个托管的 Hadoop 服务,现支持最新的 Apache Spark 2.3.0,能够几分钟内快速搭建起来一个 Spark 集群,同时 EMR 还能支持 Spot 实例能够大大节约数据预处理的成本。


Amazon SageMaker 是一个托管的模型训练和部署服务,不仅能够快速搭建构建起机器集群进行模型训练,并且能自动部署训练好的模型。SageMaker 不但内置了 10 余种常用的机器学习算法(如 K-Means,分类,回归),还支持 MXNet 和 TensorFlow 深度学习框。


Amazon SageMaker 提供了一个 SageMaker Spark 库(Scala&Python),能把机器学习 pipeline 中的 Spark 数据预处理阶段和 SageMaker 模型训练和部署阶段自动连接起来。


Amazon SageMaker 还提供了预安装 Anaconda 环境的 Jupyter Notebook 实例,能够方便数据科学家进行交互式处理机器学习任务。在今天的例子中,我们将使用 Jupyter Notebook 来对接 EMR Saprk 集群,在 Notebook 中给 EMR Spark 发送指令,交互式地观察对 MNIST 数据集进行机器学习的过程。


前提条件

  • Spark 集群和 SageMaker Jupyter 实例需要在同一个 VPC 内

  • Spark 的 master 节点的安全组需要对 SageMaker Jupyter 实例开放 8998 端口。


具体步骤

首先创建 EMR Spark 集群(请使用高级模式),选择 Hadoop, Livy(Spark 和 Jupyter Notebook 通信组件), Spark 组件。从 EMR 5.11 版本后,Spark 节点上已经预安装好 SageMaker 的 Spark 库。



配置 EMR 节点的类型和数量,可以选择 spot 实例类型帮助节约成本。在这里我配置了一个 master 节点,两个 core 节点,都是 M4.large 机型。




创建好了 Spark 集群后,记下 Spark master 节点的 ip 地址,后面在 Sagemaker notebook instance 中需要配置。



修改 EMR Spark master EC2 节点安全组,添加 Livy 端口,source 选择 Jupyter Notebook 所在的安全组。



因为需要在 EMR 的 master 节点中调用 SageMaker 服务,所以还需要对 EMR 中的 EC2 Role 赋予 SageMakerFullAccess 的权限。



在 SageMaker 中创建 Notebook Instance:



在 notebook 控制台中选择 new -> Terminal:



打开终端后执行以下命令:


cd .sparkmagic wget https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json mv example_config.json config.json



修改 config.json 文件,把之前记下的 spark master 节点 ip 地址填上



退出后新建一个 Sparkmagic (PySpark)并重启 kernel:



输入 %%info 如有下面的输出,表示 Jupyter Notebook 已经 Spark 集群能够通信了。



以上详细步骤可参考 Build Amazon SageMaker notebooks backed by Spark in Amazon EMR


接下来我们要利用 Notebook 来串联 Spark 和 SageMaker 进行 MNITS 识别模型训练。导入必要的 python 库:

  1. Pyspark.ml 中的 PCA 算法,这个算法在 Spark 集群中会对 MNIST 手写图片做降维的预处理。


Sagemaker_spark 的 KMeansSageMakerEstimator 将会让 Spark 节点调用 SageMaker 服务并使用自带的 KMeans 算法进行模型训练和部署


Pyspark.ml 的 Pipeline 用于将 PCA 和 K-Means 两个阶段串联起来



  1. 把预先存储在 S3 上的 MNIST 数据集导入到 Spark 中,Spark 将会自动把 S3 上的数据集转换成之后用于训练的 DataFrame 格式的数据。通过 .show() 方法我们可以查看导入的训练数据集,每个数据项拥有一个标签,和 784 个特征向量。



  1. 分别定义两个阶段的算法 PCA 和 K-Means


设定 cluster = 10,代表 10 个数字。


我们用 PCA 把原来的 28*28 像素 784 个特征降维到 50 个特征;


定义 K-Means 算法时我们配置在 SageMaker 中用于训练和模型的机器类型和数量,这里我们使用 1 台 m4.xlarge 机器用于 K-Means 算法训练,1 台 m4.xlarge 机器用于模型的部署。



  1. 构造 ML pipeline 并对 60000 个训练数据进行模型训练。



  1. 使用 K-Means 算法训练将由 Spark master 节点调用 SageMaker 服务实现,所以我们能在 SageMaker 控制台看到一个训练任务。



  1. 训练完成后能够在 SageMaker 控制台查看训练好的模型和部署好的终端节点




  1. 接下来可以在 Jypyter Notebook 中用测试集来测试模型



  1. 同时我们也可以查看 EMR 的控制台,观察在 Jupyter Notebook 中提交到 Spark 上执行的各种任务



  1. 最后结束机器学习任务后,我们运行以下脚本,删除模型预测的 endpoint 节点。



以上就是利用 EMR Spark 和 SageMaker 快速搭建机器学习流程的步骤,我们后续可以扩展做更多的实验,例如在 SageMaker 中使用自己的算法,对接本地的 Spark 集群等等。


作者介绍:


李南山


AWS 中国任合作伙伴团队解决方案架构师,拥有 AWS 专业级架构师/DevOps 认证,软件设计师认证,美国项目管理协会 (PMI) 会员。10 年以上 IT 行业的从业经验,在云计算,物联网,移动通信等多个技术领域有着丰富的经验,工作生涯涵盖了从软件开发,产品管理,到售前咨询等多个阶段。加入 AWS 以前在微软中国 IoT 设备与体验部门担任技术售前经理。
复制代码


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/emr-spark-sagemaker-for-machine-learning/


2019 年 10 月 25 日 08:00361

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

很不幸,自动化测试永远只能是必要非充分条件

刘华Kenneth

DevOps 敏捷 自动化 测试 金字塔

小论互联网项目管理

南方

项目管理 互联网 个人成长 碧海潮生曲

「超级右键」

非著名程序员

macos 程序员 效率工具 软件 Mac

如何阅读源码?

武培轩

Java 源码 面试 进阶 后端

程序员5分钟:你了解32位带符号的整型吗?

顾仲贤

程序员

克制文章长度

changyou

随手记备忘录的好习惯

changyou

敏捷开发 | 张三与需求管理

Worktile

敏捷开发 需求管理

漫谈哲学与编程

keelii

编程 哲学

知乎开发了一个搜索引擎

红泥小壶

搜索引擎 百度 知乎

我为什么选择infoq写作平台

三爻

决定我们认知深度的究竟是什么?

石君

深度思考 方法论 连接

加班能解决交付的期望么?

拖地先生

项目管理 领导力 管理 时间管理

回"疫"录(3):让人怀念的普通一天

小天同学

疫情 回忆录 现实纪录 纪实

从【炉石传说】到矩阵运算

IT蜗壳-Tango

Python 学习 矩阵 数学

爱他,就让他走?

Selina

团队管理 领导力 团队协作

基于Kubernetes的多云和混合云

倪朋飞

云计算 架构 Kubernetes 微服务 Service Mesh

除了负载均衡的算法,你还应该知道这些

松花皮蛋me

Java 负载均衡 分布式

聊聊苹果公司技术部门的宫斗和冷战

赵钰莹

程序员 外包 apple

世界知识产权日碎碎念

尹晓铁

成长 随笔 知识产权

程序员5分钟:你的程序占用了多少内存?

顾仲贤

程序员

Java并发编程系列插曲——对象的内存结构

孙苏勇

Java 内存模型 面向对象 ClassLayout

程序员陪娃漫画系列——看医生

孙苏勇

程序员 生活 陪伴 漫画

别总说CMS、G1,该聊聊ZGC了

猿人谷

CMS G1 ZGC JVM

敏捷(组织)转型的6个准备条件

Bob Jiang

团队管理 敏捷 组织转型

程序员陪娃漫画系列——修龙头

孙苏勇

程序员 生活 陪伴 漫画

程序员都应该了解的运维知识经验

松花皮蛋me

DevOps 分布式 运维

在谈判中,你有哪些属于自己的独特的方法和技巧?

Yolanda

微信朋友圈为什么没有阅读数?

彭宏豪95

微信 产品 产品设计

最近的一些人生感悟

小智

人生 哲学

Java并发编程系列——线程

孙苏勇

Java 并发编程 线程

AWS 神器为数据科学家轻松打造机器学习全流程,EMR Spark + SageMaker 黄金搭档-InfoQ