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多进程库重构批量处理逻辑,避免单线程串行处理图像:
- 将原脚本中单张图像的处理流程(加载→超分→保存)封装为独立函数;
- 使用
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
相关产品推荐
相关产品推荐

