diff --git a/.github/workflows/build-self-hosted.yml b/.github/workflows/build-self-hosted.yml index 441a897e502b..0ef202193c78 100644 --- a/.github/workflows/build-self-hosted.yml +++ b/.github/workflows/build-self-hosted.yml @@ -71,6 +71,26 @@ jobs: nvidia-smi GG_BUILD_CUDA=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp + gpu-rocm: + runs-on: [self-hosted, Linux, AMD] + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v6 + + - name: Test + id: ggml-ci + # HIP_LAUNCH_BLOCKING=1: workaround for an async-execution correctness + # issue on integrated RDNA3.5 (gfx1151) where batched inference returns + # incorrect output (perplexity ~88 vs ~9.4). Serializing kernel launches + # restores correctness. Remove once the underlying ROCm/HIP issue is fixed. + env: + HIP_LAUNCH_BLOCKING: "1" + run: | + rocminfo + GG_BUILD_ROCM=1 GG_BUILD_AMDGPU_TARGETS=gfx1151 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp + gpu-vulkan-nvidia-cm: runs-on: [self-hosted, Linux, NVIDIA] diff --git a/ci/run.sh b/ci/run.sh index e4a34ff0acd8..68a95ec32333 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -10,6 +10,9 @@ # # with CUDA support # GG_BUILD_CUDA=1 bash ./ci/run.sh ./tmp/results ./tmp/mnt # +# # with ROCm support +# GG_BUILD_ROCM=1 GG_BUILD_AMDGPU_TARGETS=gfx1151 bash ./ci/run.sh ./tmp/results ./tmp/mnt +# # # with SYCL support # GG_BUILD_SYCL=1 bash ./ci/run.sh ./tmp/results ./tmp/mnt # @@ -89,7 +92,7 @@ if [ ! -z ${GG_BUILD_CUDA} ]; then fi if [ ! -z ${GG_BUILD_ROCM} ]; then - CMAKE_EXTRA="${CMAKE_EXTRA} -DGGML_HIP=ON" + CMAKE_EXTRA="${CMAKE_EXTRA} -DCMAKE_HIP_COMPILER=$(hipconfig -l)/clang -DGGML_HIP=ON -DGGML_HIP_ROCWMMA_FATTN=ON" if [ -z ${GG_BUILD_AMDGPU_TARGETS} ]; then echo "Missing GG_BUILD_AMDGPU_TARGETS, please set it to your GPU architecture (e.g. gfx90a, gfx1100, etc.)" exit 1 diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 561ab7ac599f..f4b271146cbf 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -4033,7 +4033,11 @@ static void ggml_cuda_graph_evaluate_and_capture(ggml_backend_cuda_context * cud continue; } #ifndef NDEBUG - assert(node->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device)); + // On integrated GPUs (APUs, e.g. RDNA3.5) the scheduler may place a + // node's output on the host-visible buffer, which the compute path + // handles. Allow that here, mirroring the src-tensor check below. + assert(node->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) || + (integrated && ggml_backend_buft_is_cuda_host(node->buffer->buft))); for (int j = 0; j < GGML_MAX_SRC; j++) { if (node->src[j] != nullptr) { assert(node->src[j]->buffer); diff --git a/tests/test-backend-sampler.cpp b/tests/test-backend-sampler.cpp index 1165f46f0c92..e5ae634cd6a4 100644 --- a/tests/test-backend-sampler.cpp +++ b/tests/test-backend-sampler.cpp @@ -1668,9 +1668,18 @@ static std::vector collect_tests_to_run(const std::st } } else { for (const auto & test : BACKEND_TESTS) { - if (test.enabled_by_default) { - selected.push_back(&test); + if (!test.enabled_by_default) { + continue; + } +#ifdef GGML_USE_HIP + // TODO: remove this when https://github.com/ggml-org/llama.cpp/pull/26592 is merged + if (test.name == "penalties" || test.name == "set_sampler" || + test.name == "mixed" || test.name == "top_p") { + fprintf(stderr, "Skipping test '%s' on HIP backend (no backend TOP_K support)\n", test.name.c_str()); + continue; } +#endif // GGML_USE_HIP + selected.push_back(&test); } } diff --git a/tests/test-llama-archs.cpp b/tests/test-llama-archs.cpp index 1654f122a731..c14e41e26b0e 100644 --- a/tests/test-llama-archs.cpp +++ b/tests/test-llama-archs.cpp @@ -437,6 +437,14 @@ static bool arch_supported(const llm_arch arch) { } #endif // GGML_USE_WEBGPU + // FIXME: jamba produces incorrect output (~0.55 NMSE vs CPU) on the HIP + // backend on RDNA3.5 (gfx1151); the SSM kernels need investigation. +#ifdef GGML_USE_HIP + if (arch == LLM_ARCH_JAMBA) { + return false; + } +#endif // GGML_USE_HIP + return true; }