如何使用pytorch Lightning进行多节点训练

问题描述 投票:0回答:1

我正在尝试使用 pytorch lighting 训练神经网络,我想将训练分成两个集群节点,每个节点有 4 个 GPU。我可以在单个节点的 4 个 GPU 上进行训练,但是当我尝试使用第二个节点时,我收到以下错误:

[rank: 3] Global seed set to 0
[rank: 1] Global seed set to 0
[rank: 2] Global seed set to 0
[rank: 0] Global seed set to 0
[rank: 5] Global seed set to 0
[rank: 6] Global seed set to 0
[rank: 7] Global seed set to 0
[rank: 4] Global seed set to 0

[...]

    raise MisconfigurationException(
lightning_fabric.utilities.exceptions.MisconfigurationException: You requested gpu: [0, 1, 2, 3, 4, 5, 6, 7]
 But your machine only has: [0, 1, 2, 3]
srun: error: lrdn0346: tasks 0-3: Exited with exit code 1
srun: error: lrdn0910: tasks 4-7: Exited with exit code 1

这是我对培训师的定义:

trainer = pl.Trainer(accelerator=accelerator, strategy="ddp_find_unused_parameters_true", devices=8, num_nodes=2,  log_every_n_steps=20, max_epochs=conf.training.max_epochs, callbacks=[early_stop_callback, checkpoint_callback], logger=tb_logger, check_val_every_n_epoch=1)

在之前的尝试中,我没有输入 num_nodes 和 devices 的参数,但也失败了。

pytorch pytorch-lightning distributed-training
1个回答
0
投票

我认为我们缺少信息。您应该添加用于调用训练脚本的 Slurm 脚本。它可能就像将 --nodes=2 添加到 srun 或将 #SBATCH --nodes=2 添加到 SBATCH 指令一样简单。仅 Pytorch 传递信息是不够的,Slurm 也需要它。

这里创建 Slurm 脚本的一个很好的来源。

简单的 Slurm 脚本示例 (script.sh):

#!/bin/bash
#SBATCH --job-name=test_job
#SBATCH --output=./logs_%j.out
#SBATCH --error=./logs_%j.err
#SBATCH --nodes=2
#SBATCH --time=00:10:00
#SBATCH --partition=partition-name

srun python train.py

然后通过调用

sbatch script.sh
将其传递到队列。请注意,它很容易出错,并且可见 CPU 或 GPU 的数量低于节点中的数量,我还发现文档有时有点神秘。您应该记录您的训练情况。

© www.soinside.com 2019 - 2024. All rights reserved.