我正在尝试使用多个节点在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?我需要调整张量流中的某些设置吗?