2021腾讯数字生态大会直播预约通道开启!技术内容大爆发,开发者必看! 了解详情
写点什么

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:00363

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

评论

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

字节面试官狂问我:如何设计一个高并发系统?

Java架构师迁哥

架构作业 - 模块一

Leo Zhao

架构实战营

凡是开始第一次,第二次就会变得容易

法医

9月日更

谈 C++17 里的 Builder 模式

hedzr

c++ 设计模式

架构实战营-模块二作业

南山先生

架构训练营

微信朋友圈高性能复杂度分析

一叶知秋

架构实战营

10个步骤成为K8S云原生工程师

云原生

Kubernetes 云原生 云原生工程师 K8S工程师 云原生学院

架构训练营模块二作业

guangbao

【Flutter 专题】56 图解自定义 BubbleWidget 气泡插件

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

阿里技术专家,紧跟潮流,解读spring微服务架构技术的演进

Java~~~

Java 架构 面试 微服务 Spring Cloud

极客时间【架构实战营】第二期 模块二作业

Geek_91606e

架构实战营

【架构实战营作业】模块二——朋友圈高性能架构

聆息

算法2021版第0期毕业总结

bin

架构实战营-模块二作业

^_^

架构实战营

激动!阿里技术官纯手打,1263页并发编程全系笔记,限时开源

Java~~~

Java 架构 面试 多线程 并发

【LeetCode】二叉树的深度Java题解

HQ数字卡

算法 LeetCode 9月日更

模块7作业

gevin

架构实战营

🌏【架构师指南】带你彻底认识Paxos算法、Zab协议和Raft协议的原理和本质

浩宇天尚

ZAB raft协议 paxos协议 9月日更

Fil价格强势上涨!fil的行情走势如何?Fil未来五年多少钱一枚?

区块链 分布式存储 fil币未来价格预估消息 fil大涨 fil价格行情

如何判断一个项目是否值得投资?

石云升

9月日更

LeetCode刷题977-简单-有序数组的平方

ベ布小禅

9月日更

模块二作业

TIEDPAG

【VueRouter 源码学习】第三篇 - 路由插件 install 的实现

Brave

源码 vue-router 9月日更

香!阿里技术官甩我一份283页Java核心笔记,竟含9大核心

Java~~~

Java 架构 面试 JVM 多线程

Prometheus relabel 透析与实战

卓丁

Prometheus relabel_config

图解 | Linux内存回收之LRU算法

程序员 架构 面试

从基础到实战!阿里P9用28天,总结出这份亿级活动高并发系统设计手册

Java 架构 面试 后端 高并发

0基础架构入门 - 2(架构设计复杂度模型和应对之道)

felix

架构实战营 0基础架构入门

阿里进阶专用:Mycat权威指南,不怕从零开始,只怕从未启程

Java~~~

Java MySQL 数据库 架构 面试

背完这套Java面试八股文,自动解锁面试牛逼症被动技能

北游学Java

Java 数据库 面试 算法 开发框架

Vue进阶(九十二):应用 postMessage 实现窗口通信

No Silver Bullet

Vue 9月日更

英特尔On技术创新峰会

英特尔On技术创新峰会

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