数据集

概述

许多测试依赖于特定数据集的存在,以便正确验证代码的正确性。一些数据集足够小,可以随源代码一起包含,但另一些则相对较大,实际上无法与源代码共存。在这两种情况下,测试作者都不应编写假定数据集位于特定位置的测试(无论是使用相对路径,因为可执行文件可能会被移动;还是使用绝对路径,因为不同的机器很可能会使用不同的绝对路径),而应允许由用户提供数据集的位置。

目标受众

开发者

项目负责人

运维

运行使用数据集的测试

使用 RAPIDS 数据集定位实用程序(见下文)的测试允许用户使用以下机制之一指定数据集的位置

cmakeRAPIDS_DATASET_ROOT_DIR 选项

负责构建测试可执行文件的 cmake 命令支持 RAPIDS_DATASET_ROOT_DIR 选项,可以按如下方式使用

cmake -DRAPIDS_DATASET_ROOT_DIR=/location/to/datasets

这种机制允许从源代码构建测试的用户创建能在指定目录中找到其数据集的测试可执行文件。

RAPIDS_DATASET_ROOT_DIR 环境变量

如果用户需要覆盖 RAPIDS_DATASET_ROOT_DIR 构建选项,或未使用该构建选项,可以将 RAPIDS_DATASET_ROOT_DIR 环境变量设置为数据集所在的位置。

这个环境变量优先于构建选项,这意味着两个选项都可以使用。这对于无需重新构建即可在不同数据集上进行实验非常有用,或者在已将数据集安装到其他位置的不同系统上运行测试二进制文件。在运行测试之前,可以按如下所示设置环境变量(以 bash shell 为例):

export RAPIDS_DATASET_ROOT_DIR=/location/to/datasets

内置 /datasets 默认值

最后,如果既没有设置构建选项,也没有设置环境变量,使用 RAPIDS 数据集定位实用程序的测试将默认使用 /datasets 作为访问数据集的位置。

编写使用数据集的测试

测试开发者可以通过调用以下函数来使用 RAPIDS 数据集定位实用程序

const std::string& get_rapids_dataset_root_dir()

get_rapids_dataset_root_dir() 将返回一个 std::string 引用,指向包含数据集的根目录,该根目录由上述用户可访问的选项确定,如果用户未使用这些选项,则默认为 /datasets

API 用法示例

const std::string& rapidsDatasetRootDir = get_rapids_dataset_root_dir();
readDataset(rapidsDatasetRootDir + "/golden_data/web-BerkStan.pagerank_val_0.85.bin");

最佳实践

  • 测试作者应在 README 或类似文档中记录测试所需的数据集根目录下的相对路径。
  • 如何获取数据集的说明(如果它们未随源代码一起包含)也应包含在 README 或类似文档中。(可选)如果有用,还应包含每个数据集的描述。
  • 测试作者应考虑使用带有 Setup() 方法的测试夹具,该方法确保在访问数据集之前数据集已存在。Setup() 方法应抛出包含测试所用数据集路径的异常,以便用户知道在必要时设置或检查其中一个数据集位置覆盖机制。

注意:目前,只有 cugraph 库采用了 get_rapids_dataset_root_dir() 功能。

用于基准测试的数据集

开发者和终端用户可能都需要运行基准测试来评估 RAPIDS 库的性能。当前的基准测试在 RAPIDS 仓库之间如何编写、如何运行以及是否及如何使用数据集方面各不相同。目前,只有 cugraph 库标准化了基准测试数据集的约定,如下文所述:

  • 用于测试和基准测试的数据集都位于 <repo root>/datasets 中。这允许基准测试开发者使用与运行测试时相同的上述设置以及相同的数据集定位 API(例如 get_rapids_dataset_root_dir())。
  • 一些数据集足够小,可以与源代码一起包含在仓库中。这对于接受非常小的数据集的某些情况很方便,但由于源代码仓库的限制,较大的数据集不得提交。相反,较大的数据集(约 2MB 或更大)应单独托管,并可通过下文所述的脚本进行下载和安装。
  • 提供了一个脚本,用于下载和安装适用于不同用例的不同数据集。脚本的 -h 选项将描述可用选项。对于 cugraph 基准测试,请在 datasets 目录中运行带有 --benchmark 选项的脚本
    cd <repo root>/datasets
    ./get_test_data.sh --benchmark