TensorFlowOnSpark 为 Apache Hadoop 和 Apache Spark 集群提供了可扩展的深度学习,TensorFlowOnSpark 支持所有类型的 TensorFlow 程序,可以实现异步/同步的训练和推理,同时也支持模型并行性和数据的并行处理。详情可查阅 TensorFlowOnSpark 官网。
TensorFlowOnSpark 架构图
TensorFlowOnSpark 支持 TensorFlow 进程(计算节点和参数服务节点)之间的直接张量通信。过程到过程的直接通信机制使 TensorFlowOnSpark 程序能够在增加的机器上很轻松的进行扩展。TensorFlowOnSpark 不涉及张量通信中的 Spark 驱动程序,因此实现了与独立 TensorFlow 集群类似的可扩展性。安装 TensorFlowOnSpark
1. 进入 EMR 购买页,选择产品 EMR-2.x.x 版本。
2. 在可选组件列表中,勾选 tensorflowonspark 组件。
3. tensorflowonspark 默认安装在
/usr/local/service/tensorflowonspark
目录下。注意
tensorflowonspark 依赖的组件包含 hive 和 spark,在 tensorflowonspark 的同时也需要安装 hive 和 spark 组件。
使用示例
在安装好的 tensorflowonspark 组件目录下,已经有完整的 example 代码,本文以 tensorflowonspark 1.4.4,可以按如下操作步骤:
下载测试数据
使用 hadoop 用户,在 /usr/local/service/tensorflow-on-spark 目录下,执行命令:
sh mnist_download.shcat mnist_download.sh
上传原始数据和依赖包
hdfs dfs -mkdir -p /mnist/tools/hdfs dfs -put ~/mnist/mnist.zip /mnist/toolshdfs dfs -mkdir /tensorflowhdfs dfs -put TensorFlowOnSpark/tensorflow-hadoop-1.10.0.jar /tensorflow
特征数据准备
sh prepare_mnist.sh
可以看到特征数据已准备就绪:
hdfs dfs -ls /user/hadoop/mnistFound 2 itemsdrwxr-xr-x - hadoop supergroup 0 2020-05-21 11:40 /user/hadoop/mnist/csvdrwxr-xr-x - hadoop supergroup 0 2020-05-21 11:41 /user/hadoop/mnist/tfr
基于 InputMode.SPARK 模型训练
sh mnist_train_with_spark_cpu.sh
查看模型训练好的模型:
[hadoop@10 tensorflow-on-spark]$ hdfs dfs -ls /user/hadoop/mnist_modelFound 10 items-rw-r--r-- 1 hadoop supergroup 128 2020-05-21 11:46 /user/hadoop/mnist_model/checkpoint-rw-r--r-- 1 hadoop supergroup 243332 2020-05-21 11:46 /user/hadoop/mnist_model/events.out.tfevents.1590032704.10.0.0.114-rw-r--r-- 1 hadoop supergroup 164619 2020-05-21 11:45 /user/hadoop/mnist_model/graph.pbtxt-rw-r--r-- 1 hadoop supergroup 814168 2020-05-21 11:45 /user/hadoop/mnist_model/model.ckpt-0.data-00000-of-00001-rw-r--r-- 1 hadoop supergroup 375 2020-05-21 11:45 /user/hadoop/mnist_model/model.ckpt-0.index-rw-r--r-- 1 hadoop supergroup 64658 2020-05-21 11:45 /user/hadoop/mnist_model/model.ckpt-0.meta-rw-r--r-- 1 hadoop supergroup 814168 2020-05-21 11:46 /user/hadoop/mnist_model/model.ckpt-595.data-00000-of-00001-rw-r--r-- 1 hadoop supergroup 375 2020-05-21 11:46 /user/hadoop/mnist_model/model.ckpt-595.index-rw-r--r-- 1 hadoop supergroup 64658 2020-05-21 11:46 /user/hadoop/mnist_model/model.ckpt-595.metadrwxr-xr-x - hadoop supergroup 0 2020-05-21 11:46 /user/hadoop/mnist_model/train
基于 InputMode.SPARK 模型预测
sh mnist_inference_with_spark_cpu.sh
查看预测结果:
hdfs dfs -cat /user/hadoop/predictions/part-00000 |more2020-05-21T11:49:56.561506 Label: 7, Prediction: 72020-05-21T11:49:56.561535 Label: 2, Prediction: 22020-05-21T11:49:56.561541 Label: 1, Prediction: 12020-05-21T11:49:56.561545 Label: 0, Prediction: 02020-05-21T11:49:56.561550 Label: 4, Prediction: 42020-05-21T11:49:56.561555 Label: 1, Prediction: 12020-05-21T11:49:56.561559 Label: 4, Prediction: 42020-05-21T11:49:56.561564 Label: 9, Prediction: 92020-05-21T11:49:56.561568 Label: 5, Prediction: 62020-05-21T11:49:56.561573 Label: 9, Prediction: 92020-05-21T11:49:56.561578 Label: 0, Prediction: 02020-05-21T11:49:56.561582 Label: 6, Prediction: 62020-05-21T11:49:56.561587 Label: 9, Prediction: 92020-05-21T11:49:56.561603 Label: 0, Prediction: 02020-05-21T11:49:56.561608 Label: 1, Prediction: 12020-05-21T11:49:56.561612 Label: 5, Prediction: 5
基于 InputMode.TENSORFLOW 训练模型
sh mnist_train_with_tf_cpu.sh
查看模型:
hdfs dfs -ls mnist_modelFound 25 items-rw-r--r-- 1 hadoop supergroup 265 2020-05-21 14:58 mnist_model/checkpoint-rw-r--r-- 1 hadoop supergroup 40 2020-05-21 14:53 mnist_model/events.out.tfevents.1590044017.10.0.0.144-rw-r--r-- 1 hadoop supergroup 40 2020-05-21 14:57 mnist_model/events.out.tfevents.1590044221.10.0.0.144-rw-r--r-- 1 hadoop supergroup 40 2020-05-21 14:57 mnist_model/events.out.tfevents.1590044227.10.0.0.144-rw-r--r-- 1 hadoop supergroup 40 2020-05-21 14:57 mnist_model/events.out.tfevents.1590044232.10.0.0.144-rw-r--r-- 1 hadoop supergroup 40 2020-05-21 14:57 mnist_model/events.out.tfevents.1590044238.10.0.0.144-rw-r--r-- 1 hadoop supergroup 40 2020-05-21 14:58 mnist_model/events.out.tfevents.1590044303.10.0.0.114-rw-r--r-- 1 hadoop supergroup 198078 2020-05-21 14:58 mnist_model/graph.pbtxtdrwxr-xr-x - hadoop supergroup 0 2020-05-21 14:58 mnist_model/inference-rw-r--r-- 1 hadoop supergroup 814168 2020-05-21 14:57 mnist_model/model.ckpt-238.data-00000-of-00001-rw-r--r-- 1 hadoop supergroup 375 2020-05-21 14:57 mnist_model/model.ckpt-238.index-rw-r--r-- 1 hadoop supergroup 76255 2020-05-21 14:57 mnist_model/model.ckpt-238.meta-rw-r--r-- 1 hadoop supergroup 814168 2020-05-21 14:57 mnist_model/model.ckpt-277.data-00000-of-00001-rw-r--r-- 1 hadoop supergroup 375 2020-05-21 14:57 mnist_model/model.ckpt-277.index-rw-r--r-- 1 hadoop supergroup 76255 2020-05-21 14:57 mnist_model/model.ckpt-277.meta-rw-r--r-- 1 hadoop supergroup 814168 2020-05-21 14:57 mnist_model/model.ckpt-315.data-00000-of-00001-rw-r--r-- 1 hadoop supergroup 375 2020-05-21 14:57 mnist_model/model.ckpt-315.index-rw-r--r-- 1 hadoop supergroup 76255 2020-05-21 14:57 mnist_model/model.ckpt-315.meta-rw-r--r-- 1 hadoop supergroup 814168 2020-05-21 14:57 mnist_model/model.ckpt-354.data-00000-of-00001-rw-r--r-- 1 hadoop supergroup 375 2020-05-21 14:57 mnist_model/model.ckpt-354.index-rw-r--r-- 1 hadoop supergroup 76255 2020-05-21 14:57 mnist_model/model.ckpt-354.meta-rw-r--r-- 1 hadoop supergroup 814168 2020-05-21 14:58 mnist_model/model.ckpt-393.data-00000-of-00001-rw-r--r-- 1 hadoop supergroup 375 2020-05-21 14:58 mnist_model/model.ckpt-393.index-rw-r--r-- 1 hadoop supergroup 76255 2020-05-21 14:58 mnist_model/model.ckpt-393.metadrwxr-xr-x - hadoop supergroup 0 2020-05-21 14:53 mnist_model/train
基于 InputMode.TENSORFLOW 模型预测
sh mnist_train_with_tf_cpu.sh
查看预测结果:
hdfs dfs -cat predictions/part-00000 |more9 49 94 41 14 48 89 92 23 56 69 92 26 60 07 75 53 3