[spirv][vulkan] Run e2 i8 matmul tests in CI (#13312)
Only enable those on machines with Nvidia GPU. This is guarded by a new
`ctest_all.sh` env var setting: `IREE_NVIDIA_GPU_TESTS_DISABLE`, which
defaults to skipping tests that require nvidia gpu.
Fixes: https://github.com/openxla/iree/issues/13123
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index feeb756..51c6ac5 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -286,6 +286,7 @@
./build_tools/github_actions/docker_run.sh \
--env IREE_VULKAN_F16_DISABLE=0 \
--env IREE_CUDA_DISABLE=0 \
+ --env IREE_NVIDIA_GPU_TESTS_DISABLE=0 \
--env CTEST_PARALLEL_LEVEL=2 \
--gpus all \
--env NVIDIA_DRIVER_CAPABILITIES=all \
@@ -439,6 +440,7 @@
run: |
./build_tools/github_actions/docker_run.sh \
--env IREE_LLVM_CPU_DISABLE=1 \
+ --env IREE_NVIDIA_GPU_TESTS_DISABLE=0 \
--gpus all \
--env NVIDIA_DRIVER_CAPABILITIES=all \
gcr.io/iree-oss/frontends-nvidia@sha256:b0df86dff8bfcf5f43eedb70d178703b4538f31a2bf45e3b2eb035724a7f6a42 \
diff --git a/build_tools/bazel/build_core.sh b/build_tools/bazel/build_core.sh
index 85f0e60..08a961a 100755
--- a/build_tools/bazel/build_core.sh
+++ b/build_tools/bazel/build_core.sh
@@ -35,11 +35,15 @@
if ! [[ -v IREE_VULKAN_DISABLE ]]; then
IREE_VULKAN_DISABLE=0
fi
+if ! [[ -v IREE_NVIDIA_GPU_TESTS_DISABLE ]]; then
+ IREE_NVIDIA_GPU_TESTS_DISABLE=1
+fi
declare -a test_env_args=(
--test_env="LD_PRELOAD=libvulkan.so.1"
--test_env="VK_ICD_FILENAMES=${VK_ICD_FILENAMES}"
--test_env=IREE_VULKAN_DISABLE="${IREE_VULKAN_DISABLE}"
+ --test_env=IREE_NVIDIA_GPU_TESTS_DISABLE="${IREE_NVIDIA_GPU_TESTS_DISABLE}"
)
if ! [[ -n IREE_LLVM_SYSTEM_LINKER_PATH ]]; then
@@ -62,6 +66,9 @@
if [[ "${IREE_VULKAN_DISABLE?}" == 1 ]]; then
default_test_tag_filters+=("-driver=vulkan")
fi
+if [[ "${IREE_NVIDIA_GPU_TESTS_DISABLE?}" == 1 ]]; then
+ default_test_tag_filters+=("-requires-gpu-nvidia")
+fi
# Use user-environment variables if set, otherwise use CI-friendly defaults.
if ! [[ -v BUILD_TAG_FILTERS ]]; then
diff --git a/build_tools/cmake/build_and_test_asan.sh b/build_tools/cmake/build_and_test_asan.sh
index edd56d6..aa387ca 100755
--- a/build_tools/cmake/build_and_test_asan.sh
+++ b/build_tools/cmake/build_and_test_asan.sh
@@ -68,6 +68,8 @@
# The VK_KHR_shader_float16_int8 extension is optional prior to Vulkan 1.2.
# We test on SwiftShader as a baseline, which does not support this extension.
export IREE_VULKAN_F16_DISABLE=${IREE_VULKAN_F16_DISABLE:-1}
+# Respect the user setting, but default to skipping tests that require Nvidia GPU.
+export IREE_NVIDIA_GPU_TESTS_DISABLE=${IREE_NVIDIA_GPU_TESTS_DISABLE:-1}
# Tests to exclude by label. In addition to any custom labels (which are carried
# over from Bazel tags), every test should be labeled with its directory.
@@ -95,10 +97,12 @@
if [[ "${IREE_CUDA_DISABLE?}" == 1 ]]; then
label_exclude_args+=("^driver=cuda$")
fi
-
if [[ "${IREE_VULKAN_F16_DISABLE?}" == 1 ]]; then
label_exclude_args+=("^vulkan_uses_vk_khr_shader_float16_int8$")
fi
+if [[ "${IREE_NVIDIA_GPU_TESTS_DISABLE}" == 1 ]]; then
+ label_exclude_args+=("^requires-gpu-nvidia$")
+fi
label_exclude_regex="($(IFS="|" ; echo "${label_exclude_args[*]?}"))"
diff --git a/build_tools/cmake/ctest_all.sh b/build_tools/cmake/ctest_all.sh
index 86d5c3e..be9336e 100755
--- a/build_tools/cmake/ctest_all.sh
+++ b/build_tools/cmake/ctest_all.sh
@@ -33,6 +33,8 @@
# The VK_KHR_shader_float16_int8 extension is optional prior to Vulkan 1.2.
# We test on SwiftShader as a baseline, which does not support this extension.
export IREE_VULKAN_F16_DISABLE=${IREE_VULKAN_F16_DISABLE:-1}
+# Respect the user setting, but default to skipping tests that require Nvidia GPU.
+export IREE_NVIDIA_GPU_TESTS_DISABLE=${IREE_NVIDIA_GPU_TESTS_DISABLE:-1}
# Respect the user setting, default to no --repeat-until-fail.
export IREE_CTEST_REPEAT_UNTIL_FAIL_COUNT=${IREE_CTEST_REPEAT_UNTIL_FAIL_COUNT:-}
# Respect the user setting, default to no --tests-regex.
@@ -69,6 +71,9 @@
if [[ "${IREE_VULKAN_F16_DISABLE}" == 1 ]]; then
label_exclude_args+=("^vulkan_uses_vk_khr_shader_float16_int8$")
fi
+if [[ "${IREE_NVIDIA_GPU_TESTS_DISABLE}" == 1 ]]; then
+ label_exclude_args+=("^requires-gpu-nvidia$")
+fi
IFS=',' read -ra extra_label_exclude_args <<< "${IREE_EXTRA_COMMA_SEPARATED_CTEST_LABELS_TO_EXCLUDE:-}"
label_exclude_args+=(${extra_label_exclude_args[@]})
diff --git a/tests/e2e/matmul/BUILD.bazel b/tests/e2e/matmul/BUILD.bazel
index e3725d3..4916257 100644
--- a/tests/e2e/matmul/BUILD.bazel
+++ b/tests/e2e/matmul/BUILD.bazel
@@ -327,13 +327,16 @@
]]
[iree_generated_trace_runner_test(
- name = "e2e_matmul_direct_f32_gpu_large_%s" % vulkan_target_and_pipeline[0],
+ name = "e2e_matmul_direct_{0}_gpu_large_{1}".format(
+ lhs_rhs_type,
+ vulkan_target_and_pipeline[0],
+ ),
compiler_flags = [
"--iree-vulkan-target-triple=%s" % vulkan_target_and_pipeline[0],
],
generator = ":generate_e2e_matmul_tests",
generator_args = [
- "--lhs_rhs_type=f32",
+ "--lhs_rhs_type=%s" % lhs_rhs_type,
"--shapes=gpu_large",
"--compilation_info=%s" % vulkan_target_and_pipeline[1],
],
@@ -347,6 +350,9 @@
) for vulkan_target_and_pipeline in [
("valhall-unknown-android31", "SPIRVVectorizeMali"),
("ampere-unknown-linux", "SPIRVVectorizeNVIDIA"),
+] for lhs_rhs_type in [
+ "i8",
+ "f32",
]]
# Check tests
diff --git a/tests/e2e/matmul/CMakeLists.txt b/tests/e2e/matmul/CMakeLists.txt
index c17f45f..81af47a 100644
--- a/tests/e2e/matmul/CMakeLists.txt
+++ b/tests/e2e/matmul/CMakeLists.txt
@@ -400,6 +400,27 @@
iree_generated_trace_runner_test(
NAME
+ e2e_matmul_direct_i8_gpu_large_valhall-unknown-android31
+ GENERATOR
+ "generate_e2e_matmul_tests.py"
+ GENERATOR_ARGS
+ "--lhs_rhs_type=i8"
+ "--shapes=gpu_large"
+ "--compilation_info=SPIRVVectorizeMali"
+ TRACE_RUNNER
+ iree-e2e-matmul-test
+ TARGET_BACKENDS
+ "vulkan-spirv"
+ DRIVERS
+ "vulkan"
+ COMPILER_FLAGS
+ "--iree-vulkan-target-triple=valhall-unknown-android31"
+ LABELS
+ "requires-gpu-nvidia"
+)
+
+iree_generated_trace_runner_test(
+ NAME
e2e_matmul_direct_f32_gpu_large_valhall-unknown-android31
GENERATOR
"generate_e2e_matmul_tests.py"
@@ -421,6 +442,27 @@
iree_generated_trace_runner_test(
NAME
+ e2e_matmul_direct_i8_gpu_large_ampere-unknown-linux
+ GENERATOR
+ "generate_e2e_matmul_tests.py"
+ GENERATOR_ARGS
+ "--lhs_rhs_type=i8"
+ "--shapes=gpu_large"
+ "--compilation_info=SPIRVVectorizeNVIDIA"
+ TRACE_RUNNER
+ iree-e2e-matmul-test
+ TARGET_BACKENDS
+ "vulkan-spirv"
+ DRIVERS
+ "vulkan"
+ COMPILER_FLAGS
+ "--iree-vulkan-target-triple=ampere-unknown-linux"
+ LABELS
+ "requires-gpu-nvidia"
+)
+
+iree_generated_trace_runner_test(
+ NAME
e2e_matmul_direct_f32_gpu_large_ampere-unknown-linux
GENERATOR
"generate_e2e_matmul_tests.py"