Files
TheRock/rocm-libraries/projects/miopen/test/gtest/tuna_net.cpp
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

196 lines
6.4 KiB
C++

// Copyright © Advanced Micro Devices, Inc., or its affiliates.
// SPDX-License-Identifier: MIT
#include <gtest/ai_heuristics.hpp>
#include <miopen/conv/heuristics/ai_heuristics.hpp>
#include "../tensor_holder.hpp"
#include "get_handle.hpp"
struct TunaNetTestCase : AIModelTestCase
{
std::size_t expected_solver;
std::string device_architecture;
};
std::vector<TunaNetTestCase> GetGfx908FloatTestCases()
{
return {{{{1, 5, 256, 64, {267, 300}, {1, 1}, {0, 0}, {1, 1}, {1, 1}},
miopen::conv::Direction::Forward,
miopenFloat,
miopenTensorNCHW},
4,
"gfx908"}};
}
std::vector<TunaNetTestCase> GetGfx908HalfTestCases()
{
return {{{{1, 16, 256, 512, {20, 84}, {5, 5}, {1, 1}, {1, 1}, {1, 1}},
miopen::conv::Direction::Forward,
miopenHalf,
miopenTensorNCHW},
3,
"gfx908"}};
}
std::vector<TunaNetTestCase> GetGfx908BF16TestCases()
{
return {{{{1, 32, 1024, 512, {15, 15}, {1, 1}, {0, 0}, {1, 1}, {1, 1}},
miopen::conv::Direction::Forward,
miopenBFloat16,
miopenTensorNCHW},
4,
"gfx908"}};
}
std::vector<TunaNetTestCase> GetGfx90aFloatTestCases()
{
return {{{{1, 5, 3, 64, {1301, 1333}, {7, 7}, {3, 3}, {2, 2}, {1, 1}},
miopen::conv::Direction::Forward,
miopenFloat,
miopenTensorNCHW},
6,
"gfx90a"}};
}
std::vector<TunaNetTestCase> GetGfx90aHalfTestCases()
{
return {{{{1, 24, 1024, 2048, {14, 14}, {1, 1}, {0, 0}, {2, 2}, {1, 1}},
miopen::conv::Direction::Forward,
miopenHalf,
miopenTensorNCHW},
4,
"gfx90a"}};
}
std::vector<TunaNetTestCase> GetGfx90aBF16TestCases()
{
return {{{{1, 2, 480, 192, {28, 28}, {1, 1}, {0, 0}, {1, 1}, {1, 1}},
miopen::conv::Direction::Forward,
miopenBFloat16,
miopenTensorNCHW},
6,
"gfx90a"}};
}
template <typename G>
struct TunaNetTest : public ::testing::TestWithParam<TunaNetTestCase>
{
protected:
void SetUp() override
{
#if MIOPEN_ENABLE_AI_IMMED_MODE_FALLBACK
auto test_case = GetParam();
tensor<G> input_tensor = tensor<G>(test_case.layout, test_case.conv.GetInput());
tensor<G> weights_tensor = tensor<G>(test_case.layout, test_case.conv.GetWeights());
auto conv_desc = test_case.conv.GetConv();
miopen::TensorDescriptor output_desc = conv_desc.GetForwardOutputTensor(
input_tensor.desc, weights_tensor.desc, test_case.data_type);
problem = (test_case.direction == miopen::conv::Direction::Forward)
? miopen::conv::ProblemDescription(input_tensor.desc,
weights_tensor.desc,
output_desc,
conv_desc,
test_case.direction)
: miopen::conv::ProblemDescription(output_desc,
weights_tensor.desc,
input_tensor.desc,
conv_desc,
test_case.direction);
expected_solver = test_case.expected_solver;
device_architecture = test_case.device_architecture;
#else
GTEST_SKIP();
#endif
}
miopen::conv::ProblemDescription problem;
std::size_t expected_solver;
std::string device_architecture;
};
struct GPU_TunaNetTest_FP32 : TunaNetTest<float>
{
};
struct GPU_TunaNetTest_FP16 : TunaNetTest<half_float::half>
{
};
struct GPU_TunaNetTest_BFP16 : TunaNetTest<bfloat16>
{
};
void TestSolverPredictionModel(miopen::conv::ProblemDescription& problem,
std::size_t expected_solver,
std::string device_architecture)
{
#if MIOPEN_ENABLE_AI_IMMED_MODE_FALLBACK
auto&& handle = get_handle();
std::string device = handle.GetDeviceName();
if(device != device_architecture)
GTEST_SKIP();
miopen::ExecutionContext ctx;
ctx.SetStream(&handle);
std::vector<std::size_t> solvers;
try
{
solvers = miopen::ai::immed_mode::PredictSolver(problem, ctx, device);
}
catch(const miopen::Exception& ex)
{
MIOPEN_LOG_I2("[Warning] Caught exception: (" << ex.what()
<< "), passing empty solver vector");
}
std::size_t solver =
std::distance(solvers.begin(), std::max_element(solvers.begin(), solvers.end()));
ASSERT_EQ(solver, expected_solver)
<< "TunaNet predicted solver: " << solver
<< " when it should've predicted solver: " << expected_solver << std::endl;
#else
std::ignore = problem;
std::ignore = expected_solver;
std::ignore = device_architecture;
GTEST_SKIP();
#endif
}
TEST_P(GPU_TunaNetTest_FP32, TestSolverPredictionModelFloat)
{
TestSolverPredictionModel(problem, expected_solver, device_architecture);
}
TEST_P(GPU_TunaNetTest_FP16, TestSolverPredictionModelHalf)
{
TestSolverPredictionModel(problem, expected_solver, device_architecture);
}
TEST_P(GPU_TunaNetTest_BFP16, TestSolverPredictionModelBF16)
{
TestSolverPredictionModel(problem, expected_solver, device_architecture);
}
INSTANTIATE_TEST_SUITE_P(SmokeGfx908,
GPU_TunaNetTest_FP32,
testing::ValuesIn(GetGfx908FloatTestCases()));
INSTANTIATE_TEST_SUITE_P(SmokeGfx908,
GPU_TunaNetTest_FP16,
testing::ValuesIn(GetGfx908HalfTestCases()));
INSTANTIATE_TEST_SUITE_P(SmokeGfx908,
GPU_TunaNetTest_BFP16,
testing::ValuesIn(GetGfx908BF16TestCases()));
INSTANTIATE_TEST_SUITE_P(SmokeGfx90a,
GPU_TunaNetTest_FP32,
testing::ValuesIn(GetGfx90aFloatTestCases()));
INSTANTIATE_TEST_SUITE_P(SmokeGfx90a,
GPU_TunaNetTest_FP16,
testing::ValuesIn(GetGfx90aHalfTestCases()));
INSTANTIATE_TEST_SUITE_P(SmokeGfx90a,
GPU_TunaNetTest_BFP16,
testing::ValuesIn(GetGfx90aBF16TestCases()));