在本地复现 CI
概述
本页概述了关于在本地复现 CI 构建和测试的一些有用信息。
目前,这些信息仅适用于与 conda
相关的构建和测试。
目标受众
运维人员
开发者
目录
复现 CI 作业
为 RAPIDS CI 提供支持的 GitHub Actions 作业只是一组在我们的 CI 容器内运行的 shell 脚本。
这使得在本地机器上轻松复现 CI 中的构建和测试问题成为可能。
首先,你应该确定特定 GitHub Actions 作业中使用的镜像。
这可以通过检查初始化容器(Initialize Containers)步骤来完成,如下面的截图所示。
确定容器镜像后,可以使用下面的命令将本地仓库挂载到容器中
docker run \
--rm \
-it \
--gpus all \
--pull=always \
--network=host \
--volume $PWD:/repo \
--workdir /repo \
rapidsai/ci-conda:cuda11.8.0-ubuntu22.04-py3.10
容器启动后,可以在其中运行任何 CI 脚本
# to build cpp...
./ci/build_cpp.sh
# to test cpp...
./ci/test_cpp.sh
# to build python...
./ci/build_python.sh
# to test python...
./ci/test_python.sh
# to test notebooks...
./ci/test_notebooks.sh
# to build docs...
./ci/build_docs.sh
上述 docker
命令基于以下假设
- 当前目录是你希望排查故障的仓库
- 当前目录已检出(checkout)与你正在调试其作业的拉取请求(pull-request)相同的提交(commit)
关于 docker
命令参数的一些说明
- 大多数 RAPIDS conda 构建在不含 GPU 的机器上进行。只有测试需要 GPU。因此,在本地运行 conda 构建时,可以省略
--gpus
参数 --network
参数确保容器可以访问宿主机上的 VPN 连接。测试作业需要 VPN 连接,因为它们需要访问 downloads.rapids.ai 以下载特定拉取请求的构建产物。构建作业可以省略此参数
其他注意事项
在本地运行 CI 作业还有一些额外的注意事项。
GPU 驱动程序版本
RAPIDS CI 测试作业可能在多种 GPU 驱动程序版本之一上运行。在本地复现 CI 测试失败时,重要的是要注意 CI 中使用的驱动程序版本以及本地机器上的驱动程序版本。
这些版本的不一致可能导致测试结果不一致。
通常可以在 CI 机器的作业输出中找到驱动程序版本。
下载用于测试的构建产物
在 RAPIDS CI 工作流程中,构建和测试在不同的机器上进行。
不含 GPU 的机器用于构建,而测试在含 GPU 的机器上进行。
由于这个过程,构建作业的产物必须从 downloads.rapids.ai 下载,测试作业才能运行。
在 CI 中,这个过程是透明发生的。
本地构建缺乏 CI 环境提供的上下文,因此需要用户输入以确保下载正确的产物。
在本地测试运行时,每当遇到 rapids-download-conda-from-s3
命令(例如此处),用户将被提示输入任何缺失的必要环境变量。
下面的截图显示了一个示例。
你可以提前输入这些值以抑制提示。例如
export RAPIDS_BUILD_TYPE=pull-request # or "branch" or "nightly"
export RAPIDS_REPOSITORY=rapidsai/cugraph
export RAPIDS_REF_NAME=pull-request/3258 # use this type of value for "pull-request" builds
export RAPIDS_REF_NAME=branch-25.06 # use this type of value for "branch"/"nightly" builds
export RAPIDS_NIGHTLY_DATE=2023-06-20 # this variable is only necessary for "nightly" builds
./ci/test_python.sh
局限性
在本地运行 CI 脚本时,需要记住一些局限性。
本地产物无法上传
本地作业的构建产物无法上传到 downloads.rapids.ai。
如果构建在 CI 中失败,开发者应该在本地修复问题,然后将更改推送到拉取请求。
然后 CI 作业可以运行,修复后的构建产物将可供测试作业下载和使用。
要在本地尝试完整的构建和测试工作流程,你可以手动更新任何使用 rapids-download-conda-from-s3
的 CPP_CHANNEL
和 PYTHON_CHANNEL
实例(例如1,2),将其替换为 在我们的 CI 镜像中设置的 RAPIDS_CONDA_BLD_OUTPUT_DIR
环境变量的值。
此值用于设置我们的 CI 镜像中使用的 .condarc
文件的 output_folder
(参阅文档)。因此,任何本地构建的包(packages)都将位于此目录中。
例如
# Replace all local uses of `rapids-download-conda-from-s3`
sed -ri '/rapids-download-conda-from-s3/ s/_CHANNEL=.*/_CHANNEL=${RAPIDS_CONDA_BLD_OUTPUT_DIR}/' ci/*.sh
# Run the sequence of build/test scripts
./ci/build_cpp.sh
./ci/build_python.sh
./ci/test_cpp.sh
./ci/test_python.sh
./ci/test_notebooks.sh
./ci/build_docs.sh
VPN 访问
目前,downloads.rapids.ai 仅可通过 NVIDIA VPN 访问。
如果你想在本地运行任何测试作业,需要连接到 VPN 以下载 CI 构建产物。
某些构建依赖于 Git 标签中的版本信息
一些 RAPIDS 项目依赖于存储在 git
标签中的版本信息。
例如,有些项目使用依赖于 conda-build
文档中“Git 环境变量”所述机制的 conda
recipe。
当这些标签不可用时,构建可能会因类似以下错误而失败
Error: Failed to render jinja template in /repo/conda/recipes/libcudf/meta.yaml: ‘GIT_DESCRIBE_NUMBER’ is undefined conda returned exit code: 1
要解决此问题,请从上游仓库拉取最新的标签集。
例如,对于 cudf
git fetch \
git@github.com:rapidsai/cudf.git \
--tags