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

Google Compute Engine上RealESRGAN单CPU满载,求4核利用优化方案

Real-ESRGAN CPU多线程优化方案

一、OpenCV多线程强制启用

  • 在inference_realesrgan.py脚本开头添加以下代码,强制OpenCV使用全部4核CPU:
    import cv2
    cv2.setNumThreads(4)
    cv2.ocl.setUseOpenCL(True)
    
  • 原理:默认OpenCV可能未充分激活多线程,手动设置线程数可让图像读写、格式转换等CPU密集环节并行执行。

二、批量图像并行处理改造

  • 基于Python多进程库重构批量处理逻辑,避免单线程串行处理图像:
    1. 将原脚本中单张图像的处理流程(加载→超分→保存)封装为独立函数;
    2. 使用ProcessPoolExecutor创建4个进程(匹配CPU核心数),并行分发任务;
      核心改造代码示例:
    from concurrent.futures import ProcessPoolExecutor
    import os
    import argparse
    
    def process_img(img_path, output_dir, model_args):
        # 复制原脚本中单个图像的处理逻辑(含模型加载、超分、保存)
        # 注意:每个进程需独立加载模型,或通过共享内存优化重复加载
        pass
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser()
        # 保留原脚本的参数定义
        args = parser.parse_args()
        
        # 获取所有输入图像路径
        img_list = [os.path.join(args.i, f) for f in os.listdir(args.i) 
                    if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))]
        
        # 启动多进程处理
        with ProcessPoolExecutor(max_workers=4) as executor:
            for img_path in img_list:
                executor.submit(process_img, img_path, args.o, args)
    
  • 注意:若模型加载内存占用高,可考虑使用multiprocessing.Manager共享模型权重,或在进程初始化时加载一次模型。

三、依赖与参数调优

  • 更新OpenCV至支持多线程的最新版本:
    conda activate base && conda install -c conda-forge opencv>=4.8.0
    
  • 检查原脚本是否存在限制线程的代码,如cv2.setNumThreads(1),若有则删除或修改为4。

四、系统级CPU优化

  • 切换CPU至性能模式,避免动态降频影响性能:
    sudo cpupower frequency-set -g performance
    
  • 关闭后台闲置进程,释放CPU资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:42:39