gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:38:38 25 4
gpt4 key购买 nike

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

我卡在创建 tf.train.ClusterSpec 部分的部分,以便在我的 keras 模型上运行分布式 tensorflow 。似乎只要我创建一个 clusterspec,然后使用 tf.train.Server 和 tf.Session 创建一个服务器和一个 session ,我就可以使用 K.set_session(session created) 为我的 keras 模型设置 session 。我只是想确定这是否正确?什么是工作节点和 ps 节点,我如何将它引用到我在 GCP Dataproc 中创建的集群中的主节点和工作节点。当我也在创建 session 时,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 代码中的 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 中,我们有 2 个概念:

  • 硕士
  • worker

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

enter image description here

这显示了集群中的所有虚拟机:

enter image description here

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

  • MirroredStrategy:多个 GPU,单个节点
  • CollectiveAllReduceStrategy:多 GPU,多节点 All-Reduce
  • ParameterServerStrategy:多GPU、多节点、Parameter+Worker节点

在您的情况下,当您启动 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 worker 中分配容器(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

关于tensorflow - 在 GCP Dataproc 上的 Keras 模型上使用分布式 Tensorflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54811207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com