PaddleGAN 训练性能复现实战:benchmark 基准测试脚本、配置与 IPS 吞吐量解析
发布时间:2026/9/27 3:58:48来源:尧图网络
人工智能深度学习计算机视觉媒体生成视频处理图像处理【免费下载链接】PaddleGANPaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.项目地址https://gitcode.com/gh_mirrors/pa/PaddleGAN点击查看免费下载本指南以 PaddleGAN 仓库 benchmark/README.md 为主线系统讲解如何在一台 V100 8 卡物理机上用 Docker 镜像一键复现 StyleGANv2、FOMM、ESRGAN、EDVR、BasicVSR 等生成对抗模型的训练吞吐IPSimages/s。读完本文你将掌握 benchmark 目录各脚本的职责分工、benchmark.yaml模型参数的配置方式、单卡/多卡训练命令的构造原理以及性能日志的解析与产出文件格式可直接照搬复现整套 GAN 训练性能基线。一、benchmark 目录结构与脚本职责PaddleGAN 在仓库根目录下提供了一套独立的性能复现子模块benchmark/用于批量测试并记录各生成对抗模型的训练吞吐量。目录结构如下├── README.md # 说明文档本文主体 ├── benchmark.yaml # 配置文件设置测试模型及模型参数 ├── run_all.sh # 执行入口测试并获取所有生成对抗模型的训练性能 ├── run_benchmark.sh # 执行实体测试单个分割模型的训练性能 ├── prepare.sh # 初始化 python 运行环境并安装 PaddleGAN └── analysis_log.py # 从训练日志中解析 IPS 并输出 JSON 性能结果四个脚本在调用链上呈“入口 → 实体 → 解析”的层次关系run_all.sh读取benchmark.yaml逐个模型循环调用run_benchmark.sh执行真实训练run_benchmark.sh内部再拼装python tools/main.py训练命令analysis_log.py则负责把训练日志中的ips: x.xxxxx images/s提取出来汇总成标准化性能结果文件。二、测试环境与镜像2.1 物理机环境性能基线的参考环境为单机单卡与单机 8 卡系统CentOS release 7.5 (Final)GPUTesla V100-SXM2-32GB × 8CPUIntel(R) Xeon(R) Gold 6271C CPU 2.60GHz × 80CUDA / cuDNNcuda10.2-cudnn72.2 Docker 镜像为了统一环境仓库直接使用 Paddle 官方 GPU 镜像镜像版本registry.baidubce.com/paddlepaddle/paddle:2.1.2-gpu-cuda10.2-cudnn7paddle 版本2.1.2CUDA 版本10.2cuDNN 版本7注意事项来自原文档备注BasicVSR 模型因竞品 torch 模型只能测 4 卡因此该模型在本套基准中也按 4 卡口径处理当前run_all.sh中对 basicvsr 的多卡环节以注释占位并输出-----skip 4cards跳过其余模型跑满 8 卡。REDS 数据集较大为避免每次启动都重新下载建议在 Docker 建立好后将 REDS 数据集预先放到容器内/workspace/data/目录下即与benchmark.yaml中edvr、basicvsr两项的dataset: data/REDS配置对应。三、一键启动在 PaddleGAN 目录下运行测试脚本3.1 标准启动流程在宿主机 PaddleGAN 仓库根目录下执行ImageNameregistry.baidubce.com/paddlepaddle/paddle:2.1.2-gpu-cuda10.2-cudnn7 docker pull ${ImageName} run_cmdset -xe; cd /workspace ; bash -x benchmark/run_all.sh nvidia-docker run --name test_paddlegan -i \ --nethost \ --shm-size128g \ -v $PWD:/workspace \ ${ImageName} /bin/bash -c ${run_cmd}命令要点-v $PWD:/workspace把宿主机上的 PaddleGAN 仓库目录挂载为容器内的/workspace测试产出的性能文件会直接写回宿主机仓库根目录--shm-size128g放大共享内存避免多卡数据加载时共享内存不足--nethost使用宿主机网络便于数据下载与分布式通信容器内首先cd /workspace随后bash -x benchmark/run_all.sh即以调试模式打印每一步执行过程便于排查。3.2 开启 Profiler 的启动方式如果需要额外打开 profiler性能剖析选项只需在run_cmd中给run_all.sh追加一个参数onrun_cmdset -xe; cd /workspace ; bash -x benchmark/run_all.sh on该参数最终会透传到run_benchmark.sh的第 9 个位置参数need_profile。当need_profileon时训练命令会追加--profiler_optionsbatch_range[10,20];profile_path${log_profile}详见下文 5.2 节对第 1020 个 batch 区间做性能剖析产出.profile文件。四、benchmark.yaml测试模型与超参配置benchmark/benchmark.yaml是整套性能测试的“总控台”以 YAML 顶层键模型名为单元声明了每个被测模型的配置与训练参数。完整内容如下StyleGANv2: dataset_web: https://paddlegan.bj.bcebos.com/datasets/ffhq_256.tar config: configs/stylegan_v2_256_ffhq.yaml fp_item: fp32 bs_item: 8 total_iters: 100 log_interval: 5 FOMM: dataset_web: https://paddlegan.bj.bcebos.com/datasets/fom_test_data.tar config: configs/firstorder_vox_256.yaml fp_item: fp32 bs_item: 16 epochs: 1 log_interval: 1 esrgan: dataset_web: https://paddlegan.bj.bcebos.com/datasets/DIV2KandSet14paddle.tar config: configs/esrgan_psnr_x4_div2k.yaml fp_item: fp32 bs_item: 32 total_iters: 300 log_interval: 10 edvr: dataset: data/REDS config: configs/edvr_m_wo_tsa.yaml fp_item: fp32 bs_item: 4 total_iters: 300 log_interval: 10 basicvsr: dataset: data/REDS config: configs/basicvsr_reds.yaml fp_item: fp32 bs_item: 2 4 total_iters: 300 log_interval: 10字段语义如下字段含义说明dataset_web数据集下载地址存在该字段时run_all.sh会先wget下载 tar 包并解压到data/下不存在的模型如 edvr、basicvsr使用本地dataset字段指定的数据目录dataset本地数据集路径指向data/REDS等仓库内数据目录config训练配置文件对应仓库 configs 下的 YAML如 configs/stylegan_v2_256_ffhq.yamlfp_item精度当前统一为fp32脚本亦支持 fp16 占位bs_itembatch size 列表支持空格分隔多个值如 basicvsr 的2 4表示分别以 bs2 和 bs4 各跑一轮total_iters总迭代数按迭代次数终止训练优先于 epochsepochs总轮数未配置total_iters时使用如 FOMM 仅跑 1 个 epochlog_interval日志打印间隔控制训练日志中损失与ips的输出频率需要说明的是total_iters与epochs二选一run_all.sh中会先判断是否存在total_iters存在则以modetotal_iters传递否则以modeepochs传递。以 configs/stylegan_v2_256_ffhq.yaml 为例该配置声明了完整的 StyleGAN2 训练结构StyleGAN2Model模型、StyleGANv2Generator256 分辨率、512 风格维度、8 层 MLP与StyleGANv2Discriminator以及 logistic 型 GAN 损失、r1 正则r1_reg_weight: 10.、路径长度正则path_reg_weight: 2.、Adam 优化器beta2: 0.792/0.9317647058823529等。基准测试会通过命令行-o参数覆盖其中的dataset.train.batch_size与log_config.interval其余训练结构保持配置原样。五、run_benchmark.sh单卡/多卡训练执行实体benchmark/run_benchmark.sh是整个流程的“执行实体”接收 9 个位置参数构造并运行真实训练命令。其开头注释给出了调用示例# 运行示例CUDA_VISIBLE_DEVICES0 bash run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 500 ${model_mode}5.1 位置参数说明位置变量默认值含义$1run_modesp运行模式sp单卡/mp多卡$2batch_size64训练的 batch size$3fp_itemfp32精度fp32/fp16$4modeepochs终止方式epochs或total_iters$5max_iter500最大迭代/轮数用于提前中断训练$6model_itemmodel_item模型名如 esrgan、edvr用于日志命名$7configconfig训练配置 YAML 路径$8log_interval1日志打印间隔$9need_profileoff是否开启 profiler脚本内部还会根据CUDA_VISIBLE_DEVICES环境变量统计 GPU 数量device${CUDA_VISIBLE_DEVICES//,/ } arr(${device}) num_gpu_devices${#arr[*]}并据此命名输出文件${model_item}_${run_mode}_bs${batch_size}_${fp_item}_${num_gpu_devices}训练日志、..._speed解析结果以及${model_name}_model.profileprofiler 输出。日志根目录由TRAIN_LOG_DIR环境变量控制未设置时默认为当前目录$(pwd)。5.2 训练命令的构造与执行核心的训练命令由以下片段拼装_train()函数profiler_cmd profiler_optionsbatch_range[10,20];profile_path${log_profile} if [ $need_profile on ]; then profiler_cmd--profiler_options${profiler_options} fi train_cmd${profiler_cmd} --config-file${config} -o dataset.train.batch_size${batch_size} log_config.interval${log_interval} ${mode}${max_iter} case ${run_mode} in sp) train_cmdpython -u tools/main.py ${train_cmd} ;; mp) rm -rf ./mylog train_cmdpython -m paddle.distributed.launch --log_dir./mylog --gpus$CUDA_VISIBLE_DEVICES tools/main.py ${train_cmd} log_parse_filemylog/workerlog.0 ;; *) echo choose run_mode(sp or mp); exit 1; esac timeout 15m ${train_cmd} ${log_file} 21拆解其原理入口程序单卡直接执行python -u tools/main.py多卡则通过python -m paddle.distributed.launch --log_dir./mylog --gpus...启动分布式训练并把mylog/workerlog.0作为后续日志解析来源。--config-file与-o覆盖机制tools/main.py中通过parse_args()接收参数并调用get_config(args.config_file, args.opt)见 ppgan/utils/config.py加载配置-o后的每项keyvalue会被override_config按点号路径递归写入配置对象。因此dataset.train.batch_size32、log_config.interval10、total_iters300等价于“临时改写 YAML 中的对应字段”无需改动任何配置文件。超时保护timeout 15m将每个训练任务限制在 15 分钟内配合max_iter如 100/300 次迭代确保整套基准在可接受的时间内跑完。profiler开启时传入--profiler_optionsbatch_range[10,20];profile_path...对应 ppgan/utils/options.py 中-p/--profiler_options参数的key1value1;key2value2格式约定。结果标记命令退出码非 0 时输出FAIL并置job_fail_flag1否则输出SUCCESS多卡模式下会把mylog/workerlog.0覆盖为正式日志文件。脚本尾部source ${BENCHMARK_ROOT}/scripts/run_model.sh来自外部 benchmark 联动脚本负责按规范对日志做性能解析若只想本地产出训练日志而不参与外部联调可注释掉该行_set_params $与_run仍需保留。六、run_all.sh入口脚本与数据集准备benchmark/run_all.sh作为总入口做了三件事解析 YAML用内置parse_yaml函数sed awk 实现读取benchmark/benchmark.yaml把顶层模型名收集到model_mode_list数组并把每个字段展开成${模型名}_字段名形式的 shell 变量准备数据集对声明了dataset_web的模型执行wget ${dataset_web} -O data/${model_mode}.tar tar -vxf ... -C data/自动下载并解压双层循环跑批外层遍历模型内层遍历fp_item_list与bs_list先以CUDA_VISIBLE_DEVICES0跑单卡run_modesp再以CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7跑 8 卡run_modempBasicVSR 的多卡环节按前述备注跳过。每次任务之间sleep 60等待避免前后任务资源竞争。日志输出路径由LOG_PATH_INDEX_DIR控制默认$(pwd)单卡日志命名形如gan_dygraph_${model}_sp_bs${bs}_fp32_speed_1gpus多卡形如gan_dygraph_${model}_mp_bs${bs}_fp32_speed_8gpus8p。配套的 benchmark/prepare.sh 用于环境预置它把BENCHMARK_ROOT指向/workspace建立run_env目录并把 python3.7 / pip3.7 软链为python/pip加入PATH随后在仓库根目录执行pip install -v -e .以可编辑模式安装 PaddleGAN并将TRAIN_LOG_DIR指向带时间戳的日志目录logs/paddle2.1.3_${log_date}_10.2/train_log。七、性能数据解析与产出文件训练过程中PaddleGAN 的 Trainer.print_log 会周期性输出一行日志其中包含吞吐量字段Iter: 50/300 lr: 1.000e-03 ... ips: 123.45678 images/s batch_cost: 0.64730 sec reader_cost: 0.00020 sec eta: 0:05:23ipsimages/s每秒处理图像数正是 benchmark 关心的核心指标它与batch_cost、reader_cost等一起由 Trainer 在 ppgan/engine/trainer.py 中实时计算打印。7.1 analysis_log.pyIPS 提取与 JSON 汇总benchmark/analysis_log.py 使用正则rips: (.*) images/s从日志中抓取全部 IPS 读数然后判断是否提取成功失败则JOB_FAIL_FLAG1不产出有效结果从日志文件名末段识别 GPU 数量log_file.split(_)[-1]据此判定run_mode1 卡为sp否则为mp跳过前 4 个读数skip_num 4用于剔除预热阶段与脚本中的skip_steps5口径一致对剩余读数求平均得到最终FINAL_RESULT将结果写成 JSON 文件结构如下{ log_file: ..., model_name: esrgan, mission_name: 图像生成, direction_id: 0, run_mode: mp, index: 1, gpu_num: 8, FINAL_RESULT: 321.45, JOB_FAIL_FLAG: 0, UNIT: images/s }mission_name图像生成与direction_id0是 Paddle 全框架 benchmark 规范的统一字段便于跨框架、跨模型汇总对比。7.2 输出产物执行完成后在 PaddleGAN 仓库根目录即$LOG_PATH_INDEX_DIR/$TRAIN_LOG_DIR指向的目录会产出每个模型的性能数据文件例如esrgan_mp_bs32_fp32_8原始训练日志文件名含义模型名esrgan、多卡mp、batch size 32、fp32、8 卡以及配套的_speed解析结果文件JSON 格式与可选的_model.profile剖析文件。这些文件即构成了可归档、可对比的 GAN 训练性能基线数据。八、实操要点小结复现环境务必使用文档指定的paddle:2.1.2-gpu-cuda10.2-cudnn7镜像物理机为 V100 8 卡、CUDA 10.2改参数不改代码所有被测模型、batch size、迭代数、日志间隔都在 benchmark/benchmark.yaml 中声明-o机制保证训练时以命令行覆盖为准关注预热剔除analysis_log.py默认跳过前 4 个 IPS 读数计算均值若日志过短如log_interval较大且total_iters很小需留意均值样本数日志命名即元信息输出文件名的sp/mp、bs、fp32、末尾 GPU 数编码了全部测试口径解析脚本正是依赖这些命名约定完成自动判读大规模数据预置REDS 这类大数据集建议提前放置到/workspace/data/避免每次测试重复下载。至此从环境搭建、一键启动、配置解读、脚本原理到日志解析的完整链路均已打通读者可据此在自有 V100 集群上复现 PaddleGAN 各生成模型的训练吞吐基线并在此基础上扩展新的模型与超参组合。赞分享人工智能深度学习计算机视觉媒体生成视频处理图像处理【免费下载链接】PaddleGANPaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.项目地址https://gitcode.com/gh_mirrors/pa/PaddleGAN点击查看免费下载相关推荐nnU-Net 性能基准测试指南使用内置 Benchmark Trainer 测量训练吞吐量与定位瓶颈nnU Net 性能基准测试指南使用内置 Benchmark Trainer 测量训练吞吐量与定位瓶颈 本文基于 nnU Net 官方文档 documenta人工智能深度学习计算机视觉医疗健康Hyperledger Fabric 账本Ledger基准测试实战指南使用 kvledger/benchmark 测量账本吞吐能力Hyperledger Fabric 账本Ledger基准测试实战指南使用 kvledger/benchmark 测量账本吞吐能力 本指南基于 Hyper区块链密码学BiliBiliToolPro 批量取关数量与白名单一次配好之后每月自动执行BiliBiliToolPro 批量取关数量与白名单一次配好之后每月自动执行 BiliBiliToolPro 是 B 站自动化任务工具其中批量取关任务会按后端任务调度工作流自动化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网