问题标签 [distributed-training]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Tensorflow(2.0) 分布式数据集如何管理数据
我是 Tensorflow 的新手。我一直在学习如何使用 TensorFlow 以分布式方式训练模型,并且我可以访问多个服务器,每个服务器都有多个 CPU。
文档和教程中清楚地概述了培训机制,但是在培训多个工人时,数据管理存在一些歧义。在我的理解中,数据应该共享和存储在一台机器上,并tf.distribute.DistributedDataset
在工作人员之间分发数据。
我对共享数据存储在一台机器上的理解是否正确?
想一想我们的网络中有多个工作人员的情况,我们想在一个大型数据集上训练一个模型 10 个 epoch。tf.distribute.DistributedDataset
向工人发送数据 10 次是真的吗?有没有什么机制可以防止同一批数据发送给同一个worker十次?
例如,这篇文章指出:
Spark 和 HDFS 旨在很好地协同工作。当 Spark 需要来自 HDFS 的一些数据时,它会抓取最近的副本,从而最大限度地减少数据在网络上传输的时间。
我正在为 Tensorflow 的分布式训练寻找类似的东西。
tensorflow - 谷歌人工智能平台多工分布式训练中的`steps_per_epoch`
我正在 gcloud ai 平台上分布式训练 tensorflow==2.7.0 模型。
我正在使用ParameterServerStrategy
策略,有多个工人。
我感到困惑且找不到答案的一件事是如何正确设置每个工人在一个时期内运行的步数。
考虑代码片段:
是steps_per_epoch
:
- 每个工人运行的步数
或者
- 主人为工人分派执行步骤的次数?
假设数据集大小为1,000,000
, 和batch_size=100
, 并且有10
工人。在一个时代,我想处理数据集中的每个实例一次,然后
我应该设置steps_per_epoch=1,000,000 / 100 = 10,000
还是应该设置它steps_per_epoch=1,000,000 / 100 / 10 = 1,000
?
tensorflow-estimator - 将 TF ElasticAverageOptimizer 与 tf.estimators API 一起使用
我想使用参数服务器方法将 Tensorflow 的ElasticAverageOptimizer添加到我的模型训练中。该模型目前使用AdagradOptimizer
.
我正在使用 Tensorflow v1.15 api tf.estimator 来训练和评估模型,构建一个像这样的自定义估计器:
训练使用具有 10 个 PS 节点和约 100 个工作节点的参数服务器方案运行。我想修改我的代码以在我当前generate_model_fn
的优化器周围添加ElasticAverageOptimizer
包装器AdagradOptimizer
。以下是来自的当前相关代码generate_model_fn
:
我不确定如何设置ElasticAverageCustomGetter
以ElasticAverageOptimizer
使用我的 cluster_spec。文档中的示例提供了一种为单个工作人员和参数服务器设置自定义 getter 的方法,但我不知道如何将其转换为我的情况。我试过将一个工人传递给自定义吸气剂,但这似乎不起作用。这是代码:
这导致ValueError: Unknown attribute: 'ixqzvi-worker-0.test.svc' in 'ixqzvi-worker-0.test.svc:2222'
我也尝试将整个传递cluster_spec['worker']
给ElasticAverageCustomGetter
,但这会导致TypeError
for 列表类型。
有什么建议么?谢谢。