Python多进程处理代码示例

模型推理时经常会用多张卡加快推理速度,通过多进程,每个进程根据gpu_index加载到不同卡上进行推理,如下为主要代码:

from multiprocessing import Process
import time
from tqdm import tqdm


def run(gpu_index, image_list):
    print(f"gpu{gpu_index}开始处理!")
    for img in tqdm(image_list, desc=f"GPU{gpu_index}", unit="张"):
        print(f"当前gpu索引{gpu_index}, 正在处理 {img}\n")
        time.sleep(1)

def get_images_list(image_path):
    from pathlib import Path
    image_files = []
    input_path = Path(image_path)
    for ext in ['.jpg', '.jpeg', '.png', '.bmp', '.tiff'] :
        image_files.extend(input_path.glob(f"*{ext}"))
        image_files.extend(input_path.glob(f"*{ext.upper()}"))
    image_files = sorted(set(image_files))

    if not image_files:
        print(f"\n在目录 {image_path} 中未找到图片文件")
    print(f"\n找到 {len(image_files)} 张图片")

    return image_files
    
def split_images_for_gpus(image_files, num_gpus):
    gpu_images = [[] for _ in range(num_gpus)]
    for i, img_file in enumerate(image_files):
        gpu_idx = i % num_gpus
        gpu_images[gpu_idx].append(img_file)
    
    return gpu_images

def main():
    
    image_path = r"图片路径"
    image_files = get_images_list(image_path)

    gpu_nums = [0, 1, 2, 5]

    gpu_images = split_images_for_gpus(image_files, len(gpu_nums))

    processes = []
    for i in range(len(gpu_nums)):
        p = Process(target=run,
                    args=(gpu_nums[i], gpu_images[i],))
        p.start()
        processes.append(p)

    for p in processes:
        p.join()
    print("所有进程处理完毕!")

if __name__ == "__main__":
    #multiprocessing.freeze_support()
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHT0506

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值