ParallelEnv

class paddle.fluid.dygraph.ParallelEnv[源代码]

注意:

这个类的曾用名为 Env, 这个旧的名字会被废弃,请使用新的类名 ParallelEnv。

这个类用于获取动态图模型并行执行所需的环境变量值。

动态图并行模式现在需要使用 paddle.distributed.launch 模块启动,所需的环境变量默认由 paddle.distributed.launch 模块自动配置。

ParallelEnv通常需要和 fluid.dygraph.DataParallel 一起使用,用于配置动态图并行执行。

代码示例

  1. # 这个示例需要由paddle.distributed.launch启动, 用法为:
  2. # python -m paddle.distributed.launch --selected_gpus=0,1 example.py
  3. # 脚本example.py中的代码是下面这个示例.
  4. import numpy as np
  5. import paddle.fluid as fluid
  6. import paddle.fluid.dygraph as dygraph
  7. from paddle.fluid.optimizer import AdamOptimizer
  8. from paddle.fluid.dygraph.nn import Linear
  9. from paddle.fluid.dygraph.base import to_variable
  10. place = fluid.CUDAPlace(fluid.dygraph.ParallelEnv().dev_id)
  11. with fluid.dygraph.guard(place=place):
  12. # 准备数据并行的环境
  13. strategy=dygraph.prepare_context()
  14. linear = Linear(1, 10, act="softmax")
  15. adam = fluid.optimizer.AdamOptimizer()
  16. # 配置模型为并行模型
  17. linear = dygraph.DataParallel(linear, strategy)
  18. x_data = np.random.random(size=[10, 1]).astype(np.float32)
  19. data = to_variable(x_data)
  20. hidden = linear(data)
  21. avg_loss = fluid.layers.mean(hidden)
  22. # 根据参与训练GPU卡的数量对loss值进行缩放
  23. avg_loss = linear.scale_loss(avg_loss)
  24. avg_loss.backward()
  25. # 收集各个GPU卡上的梯度值
  26. linear.apply_collective_grads()
  27. adam.minimize(avg_loss)
  28. linear.clear_gradients()

属性

nranks

参与训练进程的数量,一般也是训练所使用GPU卡的数量。

此属性的值等于环境变量 PADDLE_TRAINERS_NUM 的值。默认值为1。

代码示例

  1. # 在Linux环境,提前执行此命令: export PADDLE_TRAINERS_NUM=4
  2. import paddle.fluid as fluid
  3. env = fluid.dygraph.ParallelEnv()
  4. print("The nranks is %d" % env.nranks)
  5. # The nranks is 4

local_rank

当前训练进程的编号。

此属性的值等于环境变量 PADDLE_TRAINER_ID 的值。默认值是0。

代码示例

  1. # 在Linux环境,提前执行此命令: export PADDLE_TRAINER_ID=0
  2. import paddle.fluid as fluid
  3. env = fluid.dygraph.ParallelEnv()
  4. print("The local rank is %d" % env.local_rank)
  5. # The local rank is 0

dev_id

当前用于并行训练的GPU的编号。

此属性的值等于环境变量 FLAGS_selected_gpus 的值。默认值是0。

代码示例

  1. # 在Linux环境,提前执行此命令: export FLAGS_selected_gpus=1
  2. import paddle.fluid as fluid
  3. env = fluid.dygraph.ParallelEnv()
  4. print("The device id are %d" % env.dev_id)
  5. # The device id are 1

current_endpoint

当前训练进程的终端节点IP与相应端口,形式为(机器节点IP:端口号)。例如:127.0.0.1:6170。

此属性的值等于环境变量 PADDLE_CURRENT_ENDPOINT 的值。默认值为空字符串””。

代码示例

  1. # 在Linux环境,提前执行此命令: export PADDLE_CURRENT_ENDPOINT=127.0.0.1:6170
  2. import paddle.fluid as fluid
  3. env = fluid.dygraph.ParallelEnv()
  4. print("The current endpoint are %s" % env.current_endpoint)
  5. # The current endpoint are 127.0.0.1:6170

trainer_endpoints

当前任务所有参与训练进程的终端节点IP与相应端口,用于在NCCL2初始化的时候建立通信,广播NCCL ID。

此属性的值等于环境变量 PADDLE_TRAINER_ENDPOINTS 的值。默认值为空字符串””。

代码示例

  1. # 在Linux环境,提前执行此命令: export PADDLE_TRAINER_ENDPOINTS=127.0.0.1:6170,127.0.0.1:6171
  2. import paddle.fluid as fluid
  3. env = fluid.dygraph.ParallelEnv()
  4. print("The trainer endpoints are %s" % env.trainer_endpoints)
  5. # The trainer endpoints are ['127.0.0.1:6170', '127.0.0.1:6171']