ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何配置环境并运行 PyG 的 CPU 训练基准测试 training_benchmark.py?

如何配置环境并运行 PyG 的 CPU 训练基准测试 training_benchmark.py? 如何配置环境并运行 PyG 的 CPU 训练基准测试 training_benchmark.py【免费下载链接】pytorch_geometricGraph Neural Network Library for PyTorch项目地址: https://gitcode.com/GitHub_Trending/py/pytorch_geometric这篇文章对应一个明确的性能测量任务在 CPU 环境下用 PyTorch GeometricPyG自带的训练基准脚本 training_benchmark.py 对指定 GNN 模型GCN、GraphSAGE、GAT 等在指定数据集上跑固定步数的训练得到吞吐samples/s和单样本延迟ms用于对比不同参数配置如普通图存储与--use-sparse-tensor稀疏张量存储下的训练性能。官方说明见 benchmark/training/README.md。适用前提已装好 PyG 的 Linux CPU 环境numactl绑核步骤需要系统装有numactl命令。环境准备按 benchmark/training/README.md 的 Environment setup 一节依次完成以下安装。${workspace}在原文档中是占位符替换为你自己选定的、有写权限的工作目录例如你的仓库克隆目录或任意性能测试目录。确认 PyG 已正确安装。安装 OGB 数据集包ogbn-products数据集依赖它加载pip install ogb安装基准测试套件。进入benchmark/目录后执行 benchmark/README.md 给出的安装命令它会把torch_geometric_benchmark包含脚本依赖的benchmark/utils工具模块如数据集加载与模型构造见 benchmark/utils/utils.py以可编辑模式写入当前 Python 环境cd benchmark pip install -e .构建jemalloc内存分配器这是官方标注的 performance benchmark 依赖。副作用说明下面命令会把 jemalloc 源码克隆到${workspace}/jemalloc并在${workspace}/jemalloc-bin下生成安装产物不修改系统目录./autogen.sh需要系统已安装autoconfbenchmark/inference/README.md 中明确列为 jemalloc setup 的前置依赖。cd ${workspace} git clone https://github.com/jemalloc/jemalloc.git cd jemalloc git checkout 5.2.1 ./autogen.sh ./configure --prefix${workspace}/jemalloc-bin make make install设置环境变量README 要求在运行基准前先设置一组环境变量。其中env_name是占位符替换为你自己的 conda 环境名或等价的激活命令${workspace}替换为你上一步构建 jemalloc 的目录。LD_PRELOAD指向的就是刚才构建出的libjemalloc.sosource activate env_name export DNNL_PRIMITIVE_CACHE_CAPACITY1024 export KMP_BLOCKTIME1 export KMP_AFFINITYgranularityfine,compact,1,0 jemalloc_lib${workspace}/jemalloc-bin/lib/libjemalloc.so export LD_PRELOAD$jemalloc_lib export MALLOC_CONFoversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000可选的绑核步骤README 给出用numactl把进程绑定到单 socket 前若干核的模板${CORES}与${LAST_CORE}按你的机器核心数替换0-${LAST_CORE}为核编号范围-m 0指定内存节点。docs/source/advanced/cpu_affinity.rst 中给出的建议是OMP_NUM_THREADS的起点取N - num_workersN 为核心数OMP_NUM_THREADS${CORES} numactl -C 0-${LAST_CORE} -m 0 CMD......其中CMD......即下一条要执行的training_benchmark.py命令。运行基准training_benchmark.py的--device参数默认就是cpu所以下面的命令直接跑 CPU 路径。以下是 README 原样给出的两条示例命令第一条测 GCN Reddit第二条加--use-sparse-tensor便于对比稀疏张量存储的性能python training_benchmark.py --modelsgcn --datasetsReddit --num-workers0 --batch-sizes512 --num-layers2 --num-hidden-channels64 --num-steps50 python training_benchmark.py --modelsgcn --datasetsReddit --num-workers0 --batch-sizes512 --num-layers2 --num-hidden-channels64 --num-steps50 --use-sparse-tensorREADME 还给了--modelssage --datasetsogbn-products的对应示例参数完全相同。对影响执行的几个参数做说明均取自脚本的参数定义--num-steps训练步数-1默认表示遍历全部训练数据示例用50配合--batch-sizes固定采样总量使不同配置可对比。--num-workers0示例中关闭多进程 DataLoader文档建议若需要并行加载可设num_workers 0一个较好的估计范围是[2, 4]复杂数据集可尝试更大值见 docs/source/advanced/cpu_affinity.rst。--root数据集查找的相对路径默认../../data该相对基准在benchmark/utils/utils.py内解析即数据集会放在仓库根目录下的data/数据集名/数据在首次运行时下载。数据集与模型的合法组合由脚本内supported_sets限定数据集支持的模型Redditedge_cnn、gat、gcn、pna、sageogbn-productsedge_cnn、gat、gcn、pna、sageogbn-magrgat、rgcn传入组合外的模型时脚本打印Configuration of dataset model not supported. Skipping.并跳过而不是报错。其他常用参数默认值--batch-sizes [512, 1024, 2048, 4096, 8192]、--num-layers [2, 3]、--num-hidden-channels [64, 128, 256]、--num-neighbors [10]、--num-epochs 1、--warmup 1、--num-heads 2仅对gat、rgat生效。核对运行结果每个配置下脚本按以下顺序打印信息可据此判断运行是否进入正轨启动行BENCHMARK STARTS随后是Running on CPU--device为默认值时的输出。数据集行Dataset: Reddit加载阶段会下载/读取数据ogbn-mag会先打印Calculated degree for ...仅当模型为pna时。每个模型Training bench for gcn:之后打印当前配置回显行例如Batch size512, Layers amount2, Num_neighbors[10], Hidden features size64, Sparse tensorFalse。训练结束后输出两个指标脚本按总样本数/总时间与总时间/总样本数*1000计算具体数值取决于硬件与参数配置文档未给出固定预期值Throughput: xxx.xxx samples/s Latency: xxx.xxx ms这两行就是本次基准的结果对比两条示例命令加与不加--use-sparse-tensor的Throughput即可看到存储格式差异带来的差别。可选的结果落盘--write-csv bench把各配置的TIME (s)、MODEL、DATASET、CONFIG、SPARSE追加写入benchmark/results/TOTAL_training_benchmark.csv脚本自动创建该目录见 benchmark/utils/utils.py 的write_to_csv。写 CSV 依赖pandas仓库根pyproject.toml的benchmark可选依赖组中包含它。--write-csv prof写 PyTorch profiler 数据到TOTAL_prof_training_benchmark.csv必须同时加--profile否则脚本只打印警告 Cannot write profile data to CSV because profiling is disabled。另外注意若加上--evaluate每个 epoch 会打印Val Accuracy: x.xxxx训练结束打印Test Accuracy: x.xxxx但脚本注释明确说明评估模式下 throughput 与 latency 不准确纯测性能时不要加--evaluate。性能调优的可选分支README 的示例已经把最常用的一组开关放进命令里docs/source/advanced/cpu_affinity.rst 则以training_benchmark.py为例给出了完整的 CPU 亲和性调优指南测试 DataLoader 是否有益、绑物理核、用numactl分隔主进程与 worker 核、OMP_NUM_THREADS起点取N - num_workers、用jemalloc替换默认分配器等其中给出的完整命令形态为LD_PRELOAD(path)/libjemalloc.so (path)/libiomp5.so MALLOC_CONFoversize_threshold:1,background_thread:true,metadata_thp:auto OMP_NUM_THREADS(N-num_workers) KMP_AFFINITYgranularityfine,compact,1,0 KMP_BLOCKTIME0 numactl -C num_workers-(N-1) --localalloc python training_benchmark.py --cpu-affinity --num-workers ...文档示例中的(path)/...与N、num_workers为示意值需按实际路径与核心数替换。对应到脚本参数--cpu-affinity开启 DataLoader worker 核亲和--loader-cores指定 DataLoader worker 使用的核编号列表双 socket 机器还可参考文档中的 socket 分离写法numactl -C ... -m 1。脚本提供的其余与训练性能相关的开关--use-sparse-tensor改用torch_sparse.SparseTensor作为图存储格式、--bf16CPU 上启用 bfloat16 autocast、--compile用torch_geometric.compile编译模型、--trim启用trim_to_layer优化异构图暂不支持会打印警告、--measure-load-time单独计时数据集加载。限制与边界设备参数支持cpu/cuda/mps/xpu本文只覆盖cpu默认值CPU 路径下bf16通过torch.cpu.amp.autocast生效。ogbn-mag是异构数据集仅支持rgat/rgcn且对它的 trim 优化尚未实现脚本会警告。默认参数下--num-steps -1、多个 batch size × 层数 × 隐藏通道数的组合扫描空间很大、耗时明显增加做单点对比时像 README 示例一样把--batch-sizes、--num-layers、--num-hidden-channels、--num-steps固定为单值是更稳妥的做法。文档未给出固定的 Throughput/Latency 预期值任何一次运行的具体数字都应与同机器、同参数的另一次运行对比而不是跨硬件对比。【免费下载链接】pytorch_geometricGraph Neural Network Library for PyTorch项目地址: https://gitcode.com/GitHub_Trending/py/pytorch_geometric创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表