基准测试#
准确性#
RFdiffusion 的准确性基准测试涉及生成长序列。然而,给定固定的支架输入,在相同长度下仍然存在数百种可能的配置。因此,我们目前仅测试在 NIM 容器中固定随机数条件下生成的序列是否与 GitHub 上的公共版本 生成的序列相匹配。
GitHub 版本生成的序列事先经过了人工验证。此测试评估 NIM 忠实再现这些序列的能力。重要的是要注意,准确性可能因 GPU 微架构而异。在同一架构上执行时,输出完全匹配。在不同 GPU 架构之间评估时,我们观察到参考数据集和生成的数据集之间原子数的均方根误差 (RMSE) 小于 0.64 埃。
性能#
RFdiffusion 的运行时间取决于几个因素,包括输入中原子的数量、链的数量和长度,以及需要生成的链的数量。
为了有效地表示整体性能,我们将 RFdiffusion 的主要性能特征衡量为每秒生成的平均氨基酸数量。我们通过将性能结果(以毫秒为单位)除以生成的序列长度(氨基酸数量)和扩散步骤数来计算得出此值。这提供了一个直观的性能指标。例如,当考虑使用一定数量的扩散步骤生成特定长度的蛋白质结合物时,可以通过将性能指标乘以蛋白质长度,然后再乘以步骤数来估算时间。此计算可以估算生成一个蛋白质结构所需的时间。
从 RFdiffusion NIM 的 2.0 版本开始,该模型使用 NVIDIA Warp 和 NVIDIA TensorRT 框架进行了优化。
通过优化,RFdiffusion NIM 的运行速度比非优化版本快两倍。我们目前的测量结果显示,不同 GPU 架构之间的性能有所不同。使用 A100 GPU(Ampere 架构),我们观察到每秒每步最多生成 507 个氨基酸。L40 GPU(Ada Lovelace 架构)的性能表现为每秒每步最多 419 个氨基酸。H100 GPU(Hopper 架构)表现出最高的性能,每秒每步最多可达 826 个氨基酸。
示例基准测试脚本#
此 NIM 附带一个简单的基准测试脚本,可以测量准确性和性能。它有助于确保神经网络在某些已知蛋白质上提供相同的结果。
该脚本已打包在 NIM 的 docker 镜像中。您可以使用以下命令查看和研究基准测试
docker run --entrypoint cat nvcr.io/nim/ipd/rfdiffusion:2 /opt/nim/benchmarking.py
要执行基准测试,请按照以下步骤操作
确保 NIM 正在运行,如快速入门指南中所述。
基准测试脚本会自动下载测试数据集。为了节省时间和带宽,建议提供本地缓存目录。这样,脚本将能够重用已下载的数据。执行以下命令设置缓存目录。
export LOCAL_NIM_CACHE=~/.cache/nim
执行基准测试。
docker run -it --net host -v "$LOCAL_NIM_CACHE":/opt/nim/.cache --entrypoint "" \
nvcr.io/nim/ipd/rfdiffusion:2 \
/opt/nim/benchmarking.py --benchmark-type both