问题标签 [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.

0 投票
0 回答
33 浏览

python - pyotrch 分布式:运行 shell 命令

我正在运行分布式 pytorch 培训。一切都像魅力一样。我正在充分利用所有 GPU,所有进程都同步,一切都很好。
在每个时期结束时,我想在一个过程中运行一些详细的评估(而不是阻止训练):

此时,执行停止,新进程没有启动,一切都停止了。

  1. pytorch 的 DDP 和subprocess模块之间是否存在一些相互依赖关系?
  2. 如何从进程内部启动新的 shell 脚本 ( subprocess.run/ subprocess.call/ subprocess.Popen) DDP

我还在pytorch 的论坛上发布了这个问题,并打开了一个错误报告


更新(2021 年 7 月 29 日)
我将代码更改为:

不好:Popen命令被阻塞,命令的打印poll永远不会执行,更不用说communicate.
当我检查工作时top,我看到:

查看实际运行的过程:我看到了:

似乎有一些底层机制阻止subprocess模块启动新进程。

有什么帮助吗?

0 投票
1 回答
70 浏览

python - 使用 Ray 进行异步训练

我希望能够向一些 ray 工作者抛出大量数据收集任务,其中一个训练者同时和异步地在另一个 cpu 训练上对收集的数据进行训练,这个概念类似于文档中的这个例子:https://docs.ray .io/en/master/auto_examples/plot_parameter_server.html#asynchronous-parameter-server-training

不同之处在于我不想等待下一个样本到达,阻止我分配新任务(使用附加示例中的 ray.wait),而是在池中投入大量样本并调节培训师的训练仅当使用数据收集任务收集了至少 N 个样本时才开始处理。

我怎样才能使用射线做到这一点?

0 投票
1 回答
183 浏览

python - 如何知道 pytorch 中使用了多少 GPU?

我用来启动培训的 bash 文件如下所示:

我发现每个 GPU 中张量的批量大小实际上是batch_size / num_of_gpu= 6/2= 3。

当我初始化我的网络时,我需要知道每个 GPU 的批量大小。(Ps. 在这个阶段,我不能input_tensor.shape用来获取批量维度的大小,因为 jet 中没有数据。)

不知何故,我找不到 pytorch 将参数存储在哪里--nproc_per_node。那么我怎么能知道使用了多少 GPU,而无需手动传递呢--other_args

0 投票
1 回答
40 浏览

deep-learning - 有什么方法可以从 Pytorch 分布式(nccl)组中获得全球排名?

假设我们有一个由 初始化的 Pytorch 分布式组对象,torch.distributed.new_group([a,b,c,d])有没有办法a,b,c,d从这个组中获取全局排名?

0 投票
0 回答
40 浏览

tensorflow - MirroredVariable 在副本上有不同的值(零,除了在一个设备上)

演示问题的最小示例:

4-GPU 服务器上的输出:

问题是,如上所示,副本不包含正确的变量值,除了第一个设备(numpy=0.0部件)之外,所有的值都是零值。2 或 3 个设备也是如此,而不仅仅是所有 4 个。

相同的代码确实会在不同的机器上产生预期的行为。

在不同的 2-GPU 工作站上正确输出:

(注意两个设备上的值 1.0)


有问题的机器是带有 4 个 Nvidia A40 GPU 的 Dell PowerEdge R750xa。

正常工作的机器有 2x Titan RTX。

两者的软件配置:

  • Ubuntu 18.04
  • CUDA 11.4
  • cuDNN 8.2.4
  • TensorFlow 2.6.0

这种行为的原因可能是什么?很高兴提供更多细节。

0 投票
1 回答
64 浏览

pytorch - 具有在 PyTorch 中指定的 gpu 设备 ID 的 DistributedDataParallel

我想在具有 8 个 GPU 的单台机器上通过 DistributedDataParallel 训练我的模型。但我想在设备 ID 为 4、5、6、7 的四个指定 GPU 上训练我的模型。

如何为 DistributedDataParallel 指定 GPU 设备 ID?

我认为这种情况下的世界大小将是 4,但这种情况下的排名应该是多少?

0 投票
0 回答
57 浏览

pytorch - 获取 ProcessExitedException。如何使用torch.multiprocessing在databricks笔记本上生成多个进程?

我正在尝试在 databrick 笔记本(或任何笔记本环境)上使用“DistributedDataParallel”策略在 pytorch 中进行分布式训练。但是我在 databricks 笔记本环境中遇到了多处理问题。

问题:我想使用torch.multiprocessing在 databricks 笔记本上创建多个进程。我已经从主代码中提取了问题,以便于理解问题。

例外:

0 投票
1 回答
54 浏览

amazon-web-services - Sagemaker 分布式数据并行性未按预期工作 (smdistributed.dataparallel.torch.distributed)

全部,

我正在尝试使用 AWS sagemaker 数据并行方法进行分布式训练(使用两个库) from smdistributed.dataparallel.torch.parallel.distributed import DistributedDataParallel as DDP import smdistributed.dataparallel.torch.distributed as dist 尽管数据被划分为所有的 GPU ("ml.p3.16xlarge" , 8 Gpus) 但是单实例或双实例的训练时间仍然没有减少。

早些时候,我们尝试使用 Sagemaker Inbuilt 算法 Resnet101 获得相同的数据,100 个 epoch 的训练时间约为 2080 秒(批量大小 - 64),这是我们希望通过分布式训练改进的基准

现在,当我们尝试使用分布式数据并行方法进行分布式训练时,我们正在训练 20 个 epoch - 时间是 1600 秒(批量大小 - 64),我们正在训练 20 个 epoch - 时间是 1300 秒(批量大小 - 128)我们正在训练 20 个 epoch - 时间是 1063 秒(批量大小 - 258)。

即使使用不同的批量大小,训练时间也没有太大改善。

训练数据 - 6016 张图像。测试数据 - 745 张图像。

0 投票
1 回答
62 浏览

python - GCP 上的 PyTorch Lightning 多节点训练错误

我们目前正在开展一个涉及 Pytorch Lightning 培训的项目。该代码通过 DistributedDataParallel (DDP) 使用 GPU。目前,它在单台 Vertex AI 训练作业和/或笔记本上运行时运行良好。

但是当我们尝试多节点训练(涉及主池和工作池)时,训练不会启动,因为代码只是在主节点上运行,而不使用工作机器。这是训练的代码 -

Q1 - 有没有办法在训练作业中调用工作节点?


我们还偶然发现了一个名为 Ray Lightning 的模块,它可以帮助实现相同的目标。但是相同的实现会导致一些错误......尽管在代码中指定了以下命令,但它没有被初始化 -

Q2 - 当前问题的任何可能的修复?

提前致谢...

0 投票
0 回答
8 浏览

parallel-processing - 如何并行拆分和训练不同的模型部分(pytorch)?

我有这个模型结构: 在此处输入图像描述

我在拆分模型之前将所有层都写到同一个类中,但是我想训练如图所示,我拆分了类但发现反向发送时只更新了最后一个过程中的参数4,结果不好。有什么方法可以实现我的训练模式?我认为它与 torch.multiprocessing 或 DP 或 DDP 不同。