使用collective模式, sok+hovorod, 不用分ps-worker角色,将group_embedding设成collective就可以了吗?还是要其它特别的设置?
在使用集体通信(collective communication)模式时,你需要为每个进程分配角色,然后将它们组合成分组,以实现分布式训练。一般来说,在分布式训练中会有两种角色:PS(parameter server)和 worker。PS 角色负责组织并维护模型的参数,而 worker 角色则负责执行训练过程。
在使用 sok+hovorod 框架时,你可以使用 horovod.tensorflow.keras.callbacks.BroadcastGlobalVariablesCallback
类将参数从 PS 广播到所有 worker。这个类使用 Tensorflow 的 tf.distribute.Strategy
API 自动检测配置并处理广播操作。你只需要将 group_embedding
参数设置为 collective
,就可以在 sok+hovorod 中使用集体通信了。
需要注意的是,在使用集体通信时,同一组内的所有进程应该运行在同一台机器上,并且必须共享相同的网络。另外,你需要在 tf.distribute.experimental.MultiWorkerMirroredStrategy
中设置 communication
参数为 hierarchical_copy
或 nccl
,以启用 sok+hovorod 的分布式训练功能。
以下是一个示例代码片段,演示如何在 sok+hovorod 中设置集体通信模式:
import horovod.keras as hvd
from tensorflow.keras.callbacks import ModelCheckpoint
from horovod.tensorflow.keras.callbacks import BroadcastGlobalVariablesCallback
# 初始化 sok+hovorod
hvd.init()
# 设置 Tensorflow 分布式策略
strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy(
communication=tf.distribute.experimental.CollectiveCommunication.HIERARCHICAL_COPY)
# 创建模型
with strategy.scope():
model = create_model()
# 编译模型
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 定义 sok+hovorod 回调
callbacks = [
hvd.callbacks.BroadcastGlobalVariablesCallback(0),
ModelCheckpoint(filepath='model.{epoch}.h5'),
]
# 训练模型
model.fit(x_train, y_train,
batch_size=128,
callbacks=callbacks,
epochs=10,
verbose=1)
是的,不需要特别配置,参考用户文档即可,hybridbackend也正在支持类似的使用方式,5月份会推出此回答整理自钉群DeepRec用户群
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。