我只使用了不到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个一起训练,那么我该如何解决这个问题呢
1条答案
按热度按时间mo49yndu1#
您提供的信息似乎不足以解决CUDA内存不足的问题。例如,您是否正确设置了CUDA_VISIBLE_DEVICES(尽管它似乎设置正确)?要确认您是否使用了8个GPU进行训练,您可以尝试使用
nvidia-smi
或nvidia-htop
来查看训练过程中的GPU使用情况是否同时发生。