torchrun --nproc_per_node 2 finetune_dureader.py
都已经指定了2块卡进行训练,但是也只占用了一张卡的显存,都溢出了,另外一张卡也没有占用到
在使用多卡进行训练时,确保您按照正确的方式配置和运行代码。以下是可能导致只有一张显卡被使用的几个常见原因:
分布式训练配置:在使用多卡进行训练之前,需要确保已正确设置分布式训练的相关参数。这包括指定 --local_rank
参数以及其他必要的分布式训练参数。
环境变量设置:在使用多卡进行训练时,需要将环境变量 CUDA_VISIBLE_DEVICES
设置为适当的值,以指定要使用的 GPU 设备。例如,如果要使用两张 GPU,可以将 CUDA_VISIBLE_DEVICES
设置为 "0,1"
。
代码修改:某些代码库或框架可能需要手动修改代码以支持多卡训练。请检查您的脚本或代码中是否有特定于单卡的限制,并相应地进行修改。
资源限制:确保您的硬件系统和驱动程序支持多卡训练,并且具有足够的内存和计算资源来支持所需数量的 GPU。
模型并行性:如果您的模型不支持多卡并行训练,那么即使使用多张卡,也可能无法充分利用所有的 GPU。在这种情况下,您可能需要修改模型的架构或使用其他技术(如数据并行)来实现多卡训练。
在使用torchrun命令进行多卡训练时,如果指定了多张卡但只有一张卡被占用,可能是由于以下原因导致的:
确认您的机器上是否安装了支持多卡训练的GPU驱动程序和CUDA工具包。如果您的机器上没有安装这些组件,可能会影响多卡训练的正常运行。
检查您的代码是否正确实现了多卡训练。在使用多卡训练时,您需要手动将模型和数据分配到不同的卡上,并使用torch.nn.DataParallel或torch.nn.parallel.DistributedDataParallel等模块实现多卡训练。
确认您的模型和数据是否足够大,以充分利用多张卡的计算能力。如果您的模型和数据较小,可能不足以占满多张卡的计算能力。
检查您的显存分配是否正确。在使用多卡训练时,需要手动将显存分配到不同的卡上。您可以使用torch.cuda.set_device函数将当前进程分配到指定的卡上,并使用torch.cuda.empty_cache函数释放不需要的显存。