You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何并行执行多Python脚本并避免双GPU的CUDA内存不足问题

解决GPU内存不足的并行任务调度问题

方法1:直接限制GNU Parallel的并行数

根据你2块GPU的显存容量,先估算单条Python任务占用的显存(比如单任务占4G,16G显存的GPU可跑3-4个任务),然后用-j参数限制总并行数:

cat generateData.sh | parallel -j 6

如果不确定合适的并行数,可以从2开始逐步上调,观察GPU内存占用情况,找到不触发显存溢出的最大值。

方法2:让任务自动等待GPU空闲内存

写一个包装脚本run_with_gpu_check.sh,先检查GPU是否有足够空闲显存再执行任务:

#!/bin/bash
# 单任务所需最小空闲显存(单位:MiB),根据你的任务实际占用调整
REQUIRED_MEM=4096

while true; do
    # 获取所有GPU中最大的空闲显存值
    FREE_MEM=$(nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits | sort -nr | head -n1)
    if [ "$FREE_MEM" -ge "$REQUIRED_MEM" ]; then
        # 找到空闲显存最多的GPU编号
        GPU_ID=$(nvidia-smi --query-gpu=index,memory.free --format=csv,noheader,nounits | sort -k2nr | head -n1 | cut -d, -f1)
        # 指定GPU执行任务
        CUDA_VISIBLE_DEVICES=$GPU_ID "$@"
        break
    fi
    # 无足够显存时等待5秒再重试
    sleep 5
done

修改generateData.sh中的每条命令,改为:

./run_with_gpu_check.sh python create_video.py input output --param1 --param2 --param3

之后再用原命令并行执行:

cat generateData.sh | parallel

这样每个任务会自动等待有空闲显存的GPU,避免同时启动过多任务导致显存溢出。

方法3:绑定任务到特定GPU,分队列调度

如果需要固定任务到某块GPU,可将任务分成两个队列,分别绑定到GPU0和GPU1,并限制每块GPU的并行数:

# 将奇数行命令分配给GPU0,最多并行3个任务
awk 'NR%2==1' generateData.sh | parallel -j 3 "CUDA_VISIBLE_DEVICES=0 {}" &
# 将偶数行命令分配给GPU1,最多并行3个任务
awk 'NR%2==0' generateData.sh | parallel -j 3 "CUDA_VISIBLE_DEVICES=1 {}" &
# 等待所有任务完成
wait

内容的提问来源于stack exchange,提问作者Florian Delcour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:55:20