在GCP Dataproc上的Keras模型上使用分布式Tensorflow

问题描述 投票:2回答:1

我对GCP Dataproc上的云计算完全陌生。我在创建群集时安装了TonY(Tensorflow on Yarn),以便能够在其上运行tensorflow。

我被困在我创建tf.train.ClusterSpec部分的部分,以便在我的keras模型上运行分布式张量流。只要我创建一个clusterspec然后使用tf.train.Server和tf.Session创建服务器和会话,我就可以使用K.set_session(会话创建)为我的keras模型设置会话。我只是想确定这是否正确?什么是worker和ps节点,以及如何将其引用到我在GCP Dataproc中创建的集群中的主节点和工作节点。当我创建会话时,tf.train.Server中的参数只是server.target?

# Keras Core
from keras.layers.convolutional import MaxPooling2D, Convolution2D, 
AveragePooling2D
from keras.layers import Input, Dropout, Dense, Flatten, Activation
from keras.layers.normalization import BatchNormalization
from keras.layers.merge import concatenate
from keras import regularizers
from keras import initializers
from keras.models import Model
# Backend
from keras import backend as K
# Utils
from keras.utils.layer_utils import convert_all_kernels_in_model
from keras.utils.data_utils import get_file
from keras.preprocessing.image import ImageDataGenerator
from keras import optimizers
from keras.preprocessing.image import img_to_array, load_img

from keras import backend as K
import numpy as np
import os
import inspect
from tqdm import tqdm
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from keras.callbacks import ModelCheckpoint
import tensorflow as tf
from PIL import Image

#Is worker going to reference to my worker nodes in my cluster and ps 
references to my master node in my cluster?
#Do I put the external addresses of the nodes into their respective lists?
cluster = tf.train.ClusterSpec({"worker": ["35.236.62.93:2222",
                                       "35.236.30.154:2222",
                                       "35.235.127.146:2222"],
                            "ps": ["5.235.95.74:2222"]})
#Is my job name correct as well?
server = tf.train.Server(cluster, job_name="ps")

#Does tf.Session take in server.target as its parameter?
sess = tf.Session(server.target)
K.set_session(sess)
tensorflow keras google-cloud-platform google-cloud-dataproc tony
1个回答
2
投票

要访问群集配置,请使用TensorFlow代码中的CLUSTER_SPEC。你可以关注this工作示例:

    cluster_spec_str = os.environ["CLUSTER_SPEC"]
    cluster_spec = json.loads(cluster_spec_str)
    ps_hosts = cluster_spec['ps']
    worker_hosts = cluster_spec['worker']

通过使用Cloud Dataproc启动TonY作业,TonY在您的YARN容器中设置CLUSTER_SPEC环境变量,您可以直接访问该容器,如上所示。

您还可以使用JOB_NAME环境变量访问作业名称:

  job_name = os.environ["JOB_NAME"]

您应该能够使用Tony MNIST示例作为reference。如果这对你有用,请告诉我们。

在Cloud Dataproc中,我们有两个概念:

  • 工作人员

在Hadoop世界中,它们分别指资源管理器(主)和节点管理器(工作者)。在此示例中,我们有一个包含1个master和4个worker的Cloud Dataproc集群:

enter image description here

这显示了集群中的所有VM:

enter image description here

从TensorFlow的角度来看,您可以使用3种主要策略进行分布式机器学习:

  • MirroredStrategy:多个GPU,单节点
  • CollectiveAllReduceStrategy:多个GPU,多个节点全部减少
  • ParameterServerStrategy:多个GPU,多个节点,参数+工作节点

在您的情况下,当您启动TonY作业时,您似乎会参考后者,因此您将在这种情况下定义.xml文件tony.xml,您可以在其中定义参数服务器和工作器的数量。

<configuration>
 <property>
  <name>tony.application.security.enabled</name>
  <value>false</value>
 </property>
 <property>
  <name>tony.worker.instances</name>
  <value>${worker_instances}</value>
 </property>
 <property>
  <name>tony.worker.memory</name>
  <value>${worker_memory}</value>
 </property>
 <property>
  <name>tony.ps.instances</name>
  <value>${ps_instances}</value>
 </property>
 <property>
  <name>tony.ps.memory</name>
  <value>${ps_memory}</value>
 </property>
</configuration>

当TonY客户端将此请求发送到Cloud Dataproc时,Dataproc默认会在任何Dataproc工作器中分配容器(Dataproc master不用于处理)。例:

<configuration>
 <property>
  <name>tony.application.security.enabled</name>
  <value>false</value>
 </property>
 <property>
  <name>tony.worker.instances</name>
  <value>2</value>
 </property>
 <property>
  <name>tony.worker.memory</name>
  <value>4g</value>
 </property>
 <property>
  <name>tony.ps.instances</name>
  <value>1</value>
 </property>
 <property>
  <name>tony.ps.memory</name>
  <value>2g</value>
 </property> 
</configuration>

这将要求4个容器:

  • 1申请大师
  • 1参数服务器
  • 2个工作服务器

分配取决于资源管理器调度程序。默认情况下,Dataproc使用DefaultResourceCalculator并尝试在任何Dataproc群集活动工作程序中查找资源。

请查看MNIST和Cloud DataProc的当前示例:

https://github.com/linkedin/TonY/tree/master/tony-examples/tony-in-gcp

© www.soinside.com 2019 - 2024. All rights reserved.