CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
111 lines
4.0 KiB
C++
111 lines
4.0 KiB
C++
// Copyright © Advanced Micro Devices, Inc., or its affiliates.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
#include "RMSNormShapeCatalog.hpp"
|
|
#include <gtest/gtest.h>
|
|
#include <hipdnn-gpu-ref/GpuFpReferenceRMSNorm.hpp>
|
|
#include <hipdnn_data_sdk/types.hpp>
|
|
#include <hipdnn_test_sdk/utilities/CpuFpReferenceRMSNorm.hpp>
|
|
#include <hipdnn_test_sdk/utilities/CpuFpReferenceValidation.hpp>
|
|
#include <hipdnn_test_sdk/utilities/Seeds.hpp>
|
|
#include <hipdnn_test_sdk/utilities/TestTolerances.hpp>
|
|
#include <hipdnn_test_sdk/utilities/TestUtilities.hpp>
|
|
|
|
namespace gpu_rmsnorm_fwd_ref_test
|
|
{
|
|
|
|
using namespace hipdnn_data_sdk::utilities;
|
|
using namespace hipdnn_test_sdk::utilities;
|
|
using namespace hipdnn_test_sdk::utilities::rmsnorm;
|
|
using namespace hipdnn_gpu_ref;
|
|
using namespace gpu_rmsnorm_ref_test;
|
|
|
|
template <typename InputDataType,
|
|
typename OutputDataType = InputDataType,
|
|
typename ScaleDataType = InputDataType,
|
|
typename ComputeDataType = double>
|
|
void runGpuVsCpuRMSNormFwd(const std::vector<int64_t>& ioDims,
|
|
const std::vector<int64_t>& scaleDims,
|
|
const TensorLayout& layout,
|
|
double epsilon,
|
|
float fillRange = 1.0f,
|
|
bool includeInvRms = false,
|
|
bool includeBias = false)
|
|
{
|
|
const unsigned int seed = getGlobalTestSeed();
|
|
|
|
auto inputTensor = Tensor<InputDataType>(ioDims, layout);
|
|
auto scaleTensor = Tensor<ScaleDataType>(scaleDims, layout);
|
|
auto outputCpu = Tensor<OutputDataType>(ioDims, layout);
|
|
auto outputGpu = Tensor<OutputDataType>(ioDims, layout);
|
|
|
|
inputTensor.fillWithRandomValues(
|
|
static_cast<InputDataType>(-fillRange), static_cast<InputDataType>(fillRange), seed);
|
|
scaleTensor.fillWithRandomValues(
|
|
static_cast<ScaleDataType>(-fillRange), static_cast<ScaleDataType>(fillRange), seed + 1);
|
|
|
|
std::vector<int64_t> invRmsDims = ioDims;
|
|
for(size_t i = 0; i < invRmsDims.size(); ++i)
|
|
{
|
|
if(scaleDims[i] != 1)
|
|
{
|
|
invRmsDims[i] = 1;
|
|
}
|
|
}
|
|
auto invRmsTensorCpu
|
|
= includeInvRms ? Tensor<ComputeDataType>(invRmsDims, layout) : Tensor<ComputeDataType>({});
|
|
auto invRmsTensorGpu
|
|
= includeInvRms ? Tensor<ComputeDataType>(invRmsDims, layout) : Tensor<ComputeDataType>({});
|
|
|
|
auto biasTensor
|
|
= includeBias ? Tensor<ScaleDataType>(scaleDims, layout) : Tensor<ScaleDataType>({});
|
|
if(includeBias)
|
|
{
|
|
biasTensor.fillWithRandomValues(static_cast<ScaleDataType>(-fillRange),
|
|
static_cast<ScaleDataType>(fillRange),
|
|
seed + 2);
|
|
}
|
|
|
|
CpuFpReferenceRMSNorm::forward<InputDataType, ScaleDataType, OutputDataType, ComputeDataType>(
|
|
inputTensor,
|
|
scaleTensor,
|
|
outputCpu,
|
|
epsilon,
|
|
includeInvRms ? &invRmsTensorCpu : nullptr,
|
|
includeBias ? &biasTensor : nullptr);
|
|
|
|
GpuFpReferenceRMSNorm::fprop<InputDataType, ScaleDataType, OutputDataType, ComputeDataType>(
|
|
inputTensor,
|
|
scaleTensor,
|
|
outputGpu,
|
|
epsilon,
|
|
includeInvRms ? &invRmsTensorGpu : nullptr,
|
|
includeBias ? &biasTensor : nullptr);
|
|
|
|
assertAllClose(outputCpu, outputGpu, getTolerance<OutputDataType>());
|
|
if(includeInvRms)
|
|
{
|
|
assertAllClose(invRmsTensorCpu, invRmsTensorGpu, getTolerance<ComputeDataType>());
|
|
}
|
|
}
|
|
|
|
// ============================================================================
|
|
// RMSNormFwdTestSuite — parameterized fixture for shape-based CPU-vs-GPU tests
|
|
// ============================================================================
|
|
|
|
template <typename DataType>
|
|
class RMSNormFwdTestSuite : public ::testing::TestWithParam<RMSNormTestCase>
|
|
{
|
|
protected:
|
|
void runRMSNormFwdTest()
|
|
{
|
|
SKIP_IF_NO_DEVICES();
|
|
const auto& tc = GetParam();
|
|
runGpuVsCpuRMSNormFwd<DataType>(tc.ioDims, tc.scaleDims, tc.layout, 1e-5, 1.0f, true, true);
|
|
}
|
|
};
|
|
|
|
} // namespace gpu_rmsnorm_fwd_ref_test
|