pytorch 当我预训练BART时,分布式训练的一个问题是

5ssjco0h  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(173)

我只使用了不到7,000条数据来预训练巴特和使用八个3080显卡,我应该有足够的内存,然而,它报告内存不足。下面是一些代码

GPUS_PER_NODE=8
MASTER_ADDR=localhost
MASTER_PORT=6000
NNODES=1
NODE_RANK=0
WORLD_SIZE=$(($GPUS_PER_NODE*$NNODES))

DISTRIBUTED_ARGS="--nproc_per_node $GPUS_PER_NODE --nnodes $NNODES --node_rank $NODE_RANK --master_addr $MASTER_ADDR --master_port $MASTER_PORT"

python -m torch.distributed.launch $DISTRIBUTED_ARGS \
        pretrain_bart.py \
       --num-layers 12 \
       --hidden-size 1024 \
       --num-attention-heads 16 \
       --micro-batch-size 1 \
       --global-batch-size 8 \

正如你所看到的,我的batchsize已经设置为非常小,接下来是错误报告

RuntimeError: CUDA out of memory. Tried to allocate 42.00 MiB (GPU 2; 9.78 GiB total capacity; 7.63 GiB already allocated; 4.56 MiB free; 7.66 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

这个错误出现了8次,每GPU一次,我总觉得自己还是在用一个GPU训练,而不是8个一起训练,那么我该如何解决这个问题呢

mo49yndu

mo49yndu1#

您提供的信息似乎不足以解决CUDA内存不足的问题。例如,您是否正确设置了CUDA_VISIBLE_DEVICES(尽管它似乎设置正确)?要确认您是否使用了8个GPU进行训练,您可以尝试使用nvidia-sminvidia-htop来查看训练过程中的GPU使用情况是否同时发生。

相关问题