SLURM节点上的Tensorflow MultiWorkerMirroredStrategy

时间:2019-11-16 16:23:54

标签: python tensorflow distributed-computing tensorflow2.0 slurm

我正在尝试使用多个节点在SLURM上使用Tensorflow 2.0,Python 3.7的MultiWorkerMirroredStrategy。

对于此示例,假设我有2个节点,每个节点具有2个GPU,尽管这可以扩展到任意数量的N个节点,但是为了使提供的示例更清楚。

我的2个节点分别是Node1和Node2,我的MPI端口位于15000。Node1是运行代码的“主”节点,Node2将仅用作工作线程。

适用于python代码的MWE:

import tensorflow as tf

# Optimizer settings
learning_rate = 0.001
adam_beta_1 = 0.9
adam_beta_2 = 0.999
learning_rate_decay = 0.0
adam_use_amsgrad = False

# Model settings
model_loss = 'categorical_crossentropy'

strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy(
tf.distribute.experimental.CollectiveCommunication.NCCL)

with strategy.scope():
    model = tf.keras.Sequential([
        tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(28, 28, 1)),
        tf.keras.layers.MaxPooling2D(),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(64, activation='relu'),
        tf.keras.layers.Dense(10, activation='softmax')
    ])

    # Define optimizer
    optimizer = tf.keras.optimizers.Adam(lr=learning_rate,
                                         beta_1=adam_beta_1,
                                         beta_2=adam_beta_2,
                                         decay=learning_rate_decay,
                                         amsgrad=adam_use_amsgrad)

    # Get the model

    model.compile(loss=model_loss,
                  optimizer=optimizer)

model.fit(train_data_generator,
          epochs=5,
          steps=2,
          shuffle=False,
          verbose=1)

train_data_generator是火车数据的生成器。

我为TF_CONFIG尝试了以下设置:

export TF_CONFIG='{"cluster": {"worker": ["Node1:15000", "Node2:15000"]}, "task": {"type": "worker", "index": 0}}'
export TF_CONFIG='{"cluster": {"worker": ["Node1:15000", "Node2:15000"]}, "task": {"type": "worker", "index": 1}}'

export TF_CONFIG='{"cluster": {"chief": ["Node1:15000"], "worker": ["Node2:15000"]}, "task": {"type": "chief", "index": 0}}'
export TF_CONFIG='{"cluster": {"chief": ["Node1:15000"], "worker": ["Node2:15000"]}, "task": {"type": "worker", "index": 1}}'

第一行设置为Node1,第二行设置为Node2。

但是,当开始训练网络时...什么都没有发生。 输出显示以下内容:

tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:258] Initialize GrpcChannelCache for job worker -> {0 -> localhost:15000, 1 -> Node2:15000}
tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:365] Started server with target: grpc://localhost:15000

但是,没有进行实际的培训。 我试图深入研究TF_CONFIG资源,但是文档非常有限。

我想念什么?我是否需要改编TF_CONFIG?我需要调整张量流中的某些设置吗?

0 个答案:

没有答案