【作者主页】Francek Chen
【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML)和数据挖掘等多种方法,旨在通过自动化的方式分析复杂数据集,发现潜在的价值和关联性,实现数据的自动化处理和分析,从而支持决策和优化业务流程。与传统的人工分析相比,智能大数据分析具有自动化、深度挖掘、实时性和可视化等特点。智能大数据分析广泛应用于各个领域,包括金融服务、医疗健康、零售、市场营销等,帮助企业做出更为精准的决策,提升竞争力。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/Intelligent_bigdata_analysis。
文章目录
- 前言
- 一、Submarine(Hadoop生态系统)
- (一)Submarine 介绍
- (二)中文演讲介绍
- (三)Submarine 属于 Hadoop 生态系统
- (四)Submarine 官网版本演进
- 二、TonY(LinkedIn)
- (一)官网介绍
- (二)新闻报道介绍
- 三、DL4J(deeplearning4j,java 深度学习框架)
- (一)DL4J 概述
- (二)官网介绍
- (三)书籍介绍
前言
大数据和深度学习结合之路——在Hadoop上实现分布式深度学习(本质理解:搭好环境后可运行深度学习程序)
一、Submarine(Hadoop生态系统)
(一)Submarine 介绍
Submarine:在 Apache Hadoop 中运行深度学习框架
参考链接:https://hortonworks.com/blog/submarine-running-deep-learning-workloads-apache-hadoop/
Hadoop 是用于大型企业数据集的分布式处理的最流行的开源框架,它在本地和云端环境中都有很多重要用途。
深度学习对于语音识别,图像分类,AI 聊天机器人,机器翻译等领域的企业任务非常有用,仅举几例。为了训练深度学习/机器学习模型,可以利用 TensorFlow / MXNet / Pytorch / Caffe / XGBoost 等框架。有时需要将这些框架进行组合使用以用于解决不同的问题。
为了使分布式深度学习/机器学习应用程序易于启动,管理和监控,Hadoop 社区启动了 Submarine 项目以及其他改进,例如一流的 GPU 支持,Docker 容器支持,容器 DNS 支持,调度改进等。
这些改进使得在 Apache Hadoop YARN 上运行的分布式深度学习/机器学习应用程序就像在本地运行一样简单,这可以让机器学习工程师专注于算法,而不是担心底层基础架构。通过升级到最新的 Hadoop,用户现在可以在同一群集上运行其他 ETL / streaming 作业来运行深度学习工作负载。这样可以轻松访问同一群集上的数据,从而实现更好的资源利用率。
典型的深度学习工作流程:数据从各个终端(或其他来源)汇聚到数据湖中。数据科学家可以使用笔记本进行数据探索,创建 pipelines 来进行特征提取/分割训练/测试数据集。并开展深度学习和训练工作。这些过程可以重复进行。因此,在同一个集群上运行深度学习作业可以显著提高数据 / 计算资源共享的效率。
让我们仔细看看 Submarine 项目(它是 Apache Hadoop 项目的一部分),请看下如何在 Hadoop 上运行这些深度学习工作。
为什么叫 Submarine 这个名字? 因为潜艇是唯一可以将人类带到更深处的装置设备。
Submarine 项目包括两个部分:Submarine 计算引擎和一套 Submarine 生态系统集成插件/工具。
Submarine 计算引擎通过命令行向 YARN 提交定制的深度学习应用程序(如Tensorflow, Pytorch等)。这些应用程序与 YARN 上的其他应用程序并排运行,例如 Apache Spark,Hadoop Map/Reduce 等。
最重要的是,有一套海底生态系统集成,目前包括:
- Submarine-Zeppelin integration:允许数据科学家在 Zeppelin notebook 上编码,并直接从 notebook 上提交/管理培训工作。
- Submarine-Azkaban integration:允许数据科学家从 notebooks 直接向 Azkaban 提交一组具有依赖关系的任务。
- Submarine-installer:在您的环境中安装 Submarine 和 YARN,以便更容易地尝试强大的工具集。
Submarine 示意图,底部显示 Submarine 计算引擎,它只是另一个 YARN 应用程序。在计算引擎之上,它集成了其他生态系统,如 notebook (Zeppelin/Jupyter) 和 Azkaban。
(二)中文演讲介绍
参考链接:https://www.apachecon.com/acasia2022/zh/sessions/ai-1026.html
APACHE SUBMARINE 云原生机器学习平台
刘勋 KEVIN SU
中文演讲 2022-07-29 14:00 GMT+8 #AI
Apache Submarine 是一个可以进行机器学习全流程处理的一站式工作平台,它以云原生的方式运行在 Kubernetes 和 Cloud 之上。Submarine 提供了完善的平台部署和 Tensorflow、Pytorch 等机器学习框架的 YAML 文件和 Docker 镜像,这让整个系统的部署和使用都变的非常简单,您只需运行一条 Heml 命令就可以将 Submarine 机器学习平台运行在 Kubernetes 或 Cloud 之上,Submarine 提供支持多用户操作的 Workbench,数据科学家和算法工程师通过浏览器就可以完成数据加工、算法开发、作业调度、模型训练以及模型 Serving 的所有工作。Submarine 提供了标准的 Tensorflow、Pytorch、Python 和 XGBoost 等机器学习框架 Docker 镜像,您还可以自己进行定制和扩展,通过 Docker 为机器学习作业提供了完全隔离的运行环境,借助 Kubernetes 和 Cloud 的资源管控能力,Submarine 支持大量机器学习作业的调度运行。
Speakers:
刘勋:滴滴,高级技术专家,Apache Member、Apache 孵化器导师、Apache Submarine PMC Chair、Apache Hadoop & Zeppelin Committer
kevin Su:Union.ai 软件研发工程师,Apache Submarine Committer & PMC,LFAI 开源项目 Flyte Maintainer & Committer
(三)Submarine 属于 Hadoop 生态系统
Apache Hadoop 官网地址:https://hadoop.apache.org/
Submarine: A unified AI platform which allows engineers and data scientists to run Machine Learning and Deep Learning workload in distributed cluster.
Submarine:一个统一的人工智能平台,允许工程师和数据科学家在分布式集群中运行机器学习和深度学习工作负载。
(四)Submarine 官网版本演进
Submarine 官网地址:https://submarine.apache.org/versions/
1. 最新版 0.8.0
This document gives you a quick view on the basic usage of Submarine platform. You can finish each step of ML model lifecycle on the platform without messing up with the troublesome environment problems.
本文档让您快速了解 Submarine 平台的基本用法。您可以在平台上完成 ML 模型生命周期的每一步,而不会遇到麻烦的环境问题。
2. 版本 0.6.0
https://submarine.apache.org/docs/0.6.0/userDocs/yarn/YARNRuntimeGuide/
SUBMARINE_VERSION=<REPLACE_VERSION>
SUBMARINE_HADOOP_VERSION=3.1
CLASSPATH=$(hadoop classpath --glob):path-to/submarine-all-${SUBMARINE_VERSION}-hadoop-${SUBMARINE_HADOOP_VERSION}.jar \
java org.apache.submarine.client.cli.Cli job run --name tf-job-001 \--framework tensorflow \--docker_image hadoopsubmarine/tf-1.8.0-cpu:0.0.1 \--input_path hdfs://pi-aw:9000/dataset/cifar-10-data \--worker_resources memory=3G,vcores=2 \--worker_launch_cmd "export CLASSPATH=\$(/hadoop-3.1.0/bin/hadoop classpath --glob) && cd /test/models/tutorials/image/cifar10_estimator && python cifar10_main.py --data-dir=%input_path% --job-dir=%checkpoint_path% --train-steps=10000 --eval-batch-size=16 --train-batch-size=16 --variable-strategy=CPU --num-gpus=0 --sync" \--env JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 \--env DOCKER_HADOOP_HDFS_HOME=/hadoop-3.1.0 \--env DOCKER_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 \--env HADOOP_HOME=/hadoop-3.1.0 \--env HADOOP_YARN_HOME=/hadoop-3.1.0 \--env HADOOP_COMMON_HOME=/hadoop-3.1.0 \--env HADOOP_HDFS_HOME=/hadoop-3.1.0 \--env HADOOP_CONF_DIR=/hadoop-3.1.0/etc/hadoop \--conf tony.containers.resources=path-to/submarine-all-${SUBMARINE_VERSION}-hadoop-${SUBMARINE_HADOOP_VERSION}.jar
不论是通过 Sumarine 还是通过单独的 Tony 本身,本质上都是支持两种模式来支持在 Yarn 上实现分布式深度学习:
(1)无需 Docker 容器,需要带 TensorFlow 的 Python 虚拟环境等支持;
(2)通过配置 Docker 容器(Docker 镜像)支持的 Hadoop 集群。
对其中的第(2)种方法,要通过安装 Docker 并配置镜像文件等一系列动作来实现。关于 Docker 的相关知识,网上有很多:
-
Docker 能从入门到精通的学习指南:https://zhuanlan.zhihu.com/p/460658036
-
如何创建 Docker 镜像?(上):https://zhuanlan.zhihu.com/p/585264583?utm_id=0
-
Docker6 种网络配置详解,网络模式应该这么选:http://www.ppmy.cn/news/32706.html
-
Docker 镜像配置深度学习环境(Ubuntu 18.04):https://zhuanlan.zhihu.com/p/562707628
这个写的特别好,是一个简单快速的实现路径!
https://submarine.apache.org/docs/0.6.0/userDocs/yarn/WriteDockerfileTF/
对于所需的基础镜像 Ubuntu 18.04, 可以直接从 Docker Hub 下载:https://hub.docker.com/_/ubuntu/tags
二、TonY(LinkedIn)
(一)官网介绍
官网地址:https://github.com/tony-framework/TonY
TonY is a framework to natively run deep learning jobs on Apache Hadoop. It currently supports TensorFlow, PyTorch, MXNet and Horovod. TonY enables running either single node or distributed training as a Hadoop application. This native connector, together with other TonY features, aims to run machine learning jobs reliably and flexibly. For a quick overview of TonY and comparisons to other frameworks, please see this presentation.
TonY 是一个在 Apache Hadoop 上原生运行深度学习作业的框架。目前支持 TensorFlow、PyTorch、MXNet 和 Horovod。TonY 支持将单个节点或分布式训练作为 Hadoop 应用程序运行。此原生连接器与其他 TonY 功能一起,旨在可靠、灵活地运行机器学习作业。有关 TonY 的快速概述以及与其他框架的比较,请参阅本演示。
(二)新闻报道介绍
翻译自:https://www.infoworld.com/article/3305590/linkedin-open-sources-a-tool-to-run-tensorflow-on-hadoop.html
LinkedIn 已使用 Hadoop 中的 YARN(Yet Another Resource Negotiator)作业调度系统开源了一个用于扩展和管理 TensorFlow 中的深度学习作业的项目。Tony 项目是在 LinkedIn 尝试使用两个现有的开源解决方案在 Hadoop 上运行计划的 TensorFlow 作业并发现他们都想要的之后才出现的。已经有一些在 Hadoop 上运行 TensorFlow 的项目,但是 LinkedIn 对它们不满意。其中之一,TensorFlow on Spark 通过 Apache Spark 的作业引擎运行 TensorFlow,但它与 Spark 的联系太紧密了。另一个 TensorFlow on YARN 提供与 Tony 相同的基本功能,但未维护且不提供容错功能。
[TensorFlow 机器学习入门。• TensorFlow 评论:最好的深度学习库变得更好 。•查看最新版本的 TensorFlow 中的新增功能 。| 通过 InfoWorld 的 App Dev Report 新闻通讯了解编程方面的热门话题。]
TensorFlow 中的深度学习模型需要某种形式的作业管理。训练模型可能需要数小时或数天,并且训练过程需要一定的保证才能正确完成。
根据 LinkedIn 的新闻记录,Tony 使用 YARN 的资源和任务调度系统在整个 Hadoop 集群上设置 TensorFlow 作业。Tony 还可以通过 Hadoop 调度基于 GPU 的 TensorFlow 作业,请求不同类型的资源(GPU 与 CPU)或为 TensorFlow 节点分配不同的内存,并确保作业输出定期保存到 HDFS 并从它们停止的地方恢复崩溃或被打断。
Tony 将其工作分为三个内部组件:一个客户端,一个应用程序主机和一个任务执行器。客户端接受传入的 TensorFlow 作业;应用程序主机与YARN 的资源管理器协商以在 YARN 上配置作业;任务执行器实际上是在 YARN 集群上启动的,用于运行 TensorFlow 作业。
LinkedIn 声称使用 Tony 时 TensorFlow 作业没有明显的开销,因为 Tony “位于编排分布式 TensorFlow 的层中,并且不会干扰 TensorFlow作业的实际执行。”
Tony 还可以使用 TensorBoard 应用程序来可视化,优化和调试 TensorFlow 应用程序。
注意:There are two ways to launch your deep learning jobs with TonY:
三、DL4J(deeplearning4j,java 深度学习框架)
(一)DL4J 概述
深度学习 DL4J 进行图像识别:https://zhuanlan.zhihu.com/p/545442663
DL4J (Deeplearning4j) 是 Skymind 开源并维护的一个基于 JVM 的深度学习框架。也是在 Spark 平台上可以原生支持分布式模型训练的为数不多的框架之一。DL4J 还支持多 GPU 集群,可以与高性能异构计算框架无缝衔接,进一步提升运算性能。
DL4J 是用 Java 和 Scala 编写,通过与 Hadoop 和 Spark 集成来处理大规模数据。其内部采用 Java N 维数组实现的库即 ND4J (N-Dimensional Arrays For Java),处理多样的 n 维数组对象。ND4J 支持 GPU 计算,有助于加快深度学习迭代训练速度。ND4J 实际就是一个科学计算库,属于低阶 API,而 DL4J 属于高阶 API,类似 Keras。
DL4J 中除了 ND4J 外,还有 DataVec (用于数据集的加载和转换),SameDiff (基于图的自动微分、深度学习框架),Arbiter (超参数搜索),LibND4J (底层 C++库,调用 cuDNN、OpenBLAS 等库支持 CPU/GPU 计算)。ND4J 通过这些库共同支撑基于 JVM 的深度学习应用程序的所有需求。
DL4J 将数据集处理与算法模型训练分开处理,使用 DataVec 库加载和转换数据集,使用张量和 ND4J 库训练模型。通过 DataVec 库的 RecordReaderDataSetIterator 获取数据,ND4J 库的 DataSet (存储数据特征和标签的容器) 对训练数据进行封装,可以封装单条训练数据,也可以封装一个 Mini-batch,每一次迭代用一个 DataSet 更新神经网络中参数。在 DL4J 中构建训练数据集,最终就是生成一个 DataSet 迭代器或 DataSet 序列。
(二)官网介绍
https://github.com/deeplearning4j
(三)书籍介绍
《Hadoop 深度学习》是一本关于 Hadoop 在深度学习领域的应用的图书,由机械工业出版社于 2016 年出版。本书的作者是德国的尼尔斯·贝克和美国的约瑟夫·斯蒂芬·卡恩,两位作者都是数据科学和计算机科学领域的知名专家。
本书的主要内容是介绍如何使用 Hadoop 进行深度学习计算,以及介绍 Hadoop 在深度学习领域的一些应用案例。书中详细讲解了如何使用 Hadoop 旗下的分布式计算平台 Apache Hadoop 和分布式深度学习框架 Apache Spark 进行深度学习,并且介绍了如何使用这些工具进行图像识别、语音识别、自然语言处理等任务。
在结构上,本书共分为 11 章。第一章至第四章介绍了 Hadoop 和深度学习的基本概念和原理,以及使用 Hadoop 进行深度学习计算的方法。第五章至第八章介绍了使用 Apache Hadoop 进行深度学习计算的具体方法和案例,第九章至第十一章介绍了使用 Apache Spark 进行深度学习计算的具体方法和案例。
本书的特点是理论与实践相结合,书中介绍了很多具体的案例和实践经验,让读者可以更好地掌握 Hadoop 在深度学习领域的应用。同时,书中还注重了对于原理和技术的讲解,让读者可以更好地理解深度学习和 Hadoop 的原理和实现方法。
总的来说,本书是一本非常值得阅读的图书,它不仅介绍了深度学习和 Hadoop 的基本概念和原理,还介绍了如何使用 Hadoop 进行深度学习计算的具体方法和案例。它适合所有对深度学习和 Hadoop 感兴趣的读者阅读,能够帮助他们更好地了解和掌握这些技术的实现方法和原理。
当然,本书也存在一些不足之处。首先,书中的内容可能会让一些初学者感到有些难以理解,需要具备一定的编程和数据处理基础。其次,书中介绍的一些案例可能已经过时或者不够全面,需要读者自行根据实际情况进行调整和补充。