Files
TheRock/external-builds/pytorch/smoke-tests/pytorch_smoke_test.py
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

161 lines
6.5 KiB
Python
Executable File

# Copyright Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
import logging
import torch
import pytest
import re
class TestROCmAvailability:
def test_rocm_available(self):
logging.basicConfig(level=logging.INFO)
if torch.cuda.is_available():
cnt_gpu = torch.cuda.device_count()
logging.info("GPU count visible for pytorch: " + str(cnt_gpu))
for ii in range(cnt_gpu):
gpu_name = torch.cuda.get_device_name(ii)
logging.info("GPU[" + str(ii) + "]: " + gpu_name)
assert (
torch.cuda.is_available()
), "ROCm is not available or not detected by PyTorch"
class TestMatrixOperations:
def test_matrix_multiplication(self):
matrix1 = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], device="cuda")
matrix2 = torch.tensor(
[[7.0, 8.0, 9.0, 10.0], [11.0, 12.0, 13.0, 14.0], [15.0, 16.0, 17.0, 18.0]],
device="cuda",
)
expected = torch.tensor(
[[74.0, 80.0, 86.0, 92.0], [173.0, 188.0, 203.0, 218.0]], device="cuda"
)
result = torch.mm(matrix1, matrix2)
assert torch.allclose(result, expected)
assert result.device.type == "cuda"
def test_batch_matrix_multiplication(self):
batch_matrix1 = torch.ones(10, 2, 3, device="cuda")
batch_matrix2 = torch.ones(10, 3, 4, device="cuda")
expected = torch.full((10, 2, 4), 3.0, device="cuda")
result = torch.bmm(batch_matrix1, batch_matrix2)
assert torch.allclose(result, expected)
assert result.device.type == "cuda"
def test_matrix_multiplication_at_operator(self):
matrix1 = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], device="cuda")
matrix2 = torch.tensor(
[[7.0, 8.0, 9.0, 10.0], [11.0, 12.0, 13.0, 14.0], [15.0, 16.0, 17.0, 18.0]],
device="cuda",
)
expected = torch.tensor(
[[74.0, 80.0, 86.0, 92.0], [173.0, 188.0, 203.0, 218.0]], device="cuda"
)
result = matrix1 @ matrix2
assert torch.allclose(result, expected)
assert result.device.type == "cuda"
def test_elementwise_multiplication(self):
matrix1 = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], device="cuda")
matrix2 = torch.tensor([[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]], device="cuda")
expected = torch.tensor([[7.0, 16.0, 27.0], [40.0, 55.0, 72.0]], device="cuda")
result = matrix1 * matrix2
assert torch.allclose(result, expected)
assert result.device.type == "cuda"
def test_transpose(self):
matrix = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], device="cuda")
expected = torch.tensor([[1.0, 4.0], [2.0, 5.0], [3.0, 6.0]], device="cuda")
transposed = torch.t(matrix)
assert torch.allclose(transposed, expected)
assert transposed.device.type == "cuda"
def test_dot_product(self):
vector1 = torch.tensor([1.0, 2.0, 3.0], device="cuda")
vector2 = torch.tensor([4.0, 5.0, 6.0], device="cuda")
expected = torch.tensor(32.0, device="cuda")
result = torch.dot(vector1, vector2)
assert torch.allclose(result, expected)
assert result.device.type == "cuda"
def test_matrix_vector_multiplication(self):
matrix = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], device="cuda")
vector = torch.tensor([7.0, 8.0, 9.0], device="cuda")
expected = torch.tensor([50.0, 122.0], device="cuda")
result = torch.mv(matrix, vector)
assert torch.allclose(result, expected)
assert result.device.type == "cuda"
def test_matrix_multiplication_matmul(self):
matrix1 = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], device="cuda")
matrix2 = torch.tensor(
[[7.0, 8.0, 9.0, 10.0], [11.0, 12.0, 13.0, 14.0], [15.0, 16.0, 17.0, 18.0]],
device="cuda",
)
expected = torch.tensor(
[[74.0, 80.0, 86.0, 92.0], [173.0, 188.0, 203.0, 218.0]], device="cuda"
)
result = torch.matmul(matrix1, matrix2)
assert torch.allclose(result, expected)
assert result.device.type == "cuda"
class TestConvolutions:
def teardown_method(self):
# TODO(#999): fix tests stalling on exit without this
torch.cuda.synchronize()
def test_conv_transpose2d(self):
inputs = torch.randn(1, 4, 5, 5, device="cuda")
weights = torch.randn(4, 8, 3, 3, device="cuda")
# Simply running any conv op exercises MIOpen and library loading.
# On Windows, this may fail if `amd_comgr_3.dll` (from build output) is
# used instead of `amd_comgr0605.dll` that is expected at runtime.
result = torch.nn.functional.conv_transpose2d(inputs, weights, padding=1)
# TODO: check conv output values (and don't use randn)
assert result.device.type == "cuda"
# Lifted from
# https://github.com/pytorch/pytorch/blob/main/test/nn/test_convolution.py
def test_conv_cudnn_nhwc_support(self):
input = torch.randn(
(1, 16, 1, 1), dtype=torch.float, device="cuda", requires_grad=True
)
weight = torch.randn(
(8, 16, 3, 3), dtype=torch.float, device="cuda", requires_grad=True
)
weight = weight.to(memory_format=torch.channels_last)
o = torch.conv2d(input, weight, None, (2, 1), (1, 1), (1, 1), 1)
assert o.is_contiguous(memory_format=torch.channels_last)
class TestOpenBLASAvailability:
def test_openblas_is_selected_blas(self):
cfg_text = torch.__config__.show().lower()
patterns = [
r"blas_info=open",
]
assert any(
re.search(p, cfg_text) for p in patterns
), "OpenBLAS is not available or not detected by PyTorch"
def test_config_indicates_lapack_enabled(self):
cfg_text = torch.__config__.show().lower()
patterns = [
r"lapack is enabled",
]
assert any(
re.search(p, cfg_text) for p in patterns
), "LAPACK is not available or not detected by PyTorch"
# Implementation of svd on CPU uses LAPACK:
# See https://docs.pytorch.org/docs/stable/generated/torch.svd.html
def test_lapack_available_svd(self):
input = torch.randn(50, 50, device="cpu")
output_u, output_s, output_vh = torch.linalg.svd(input)
assert output_u.device == torch.device("cpu")
assert output_s.device == torch.device("cpu")
assert output_vh.device == torch.device("cpu")