[CI] [GHA] Introduce the Linux ARM64 workflow (#20809)

* add arm as a matrix for build job

* uncomment

* comment

* try inside pipeline

* check location

* another dirs

* try to privide correct action path

* use corrected action

* use newer commit

* use newer commit

* use newer commit

* use newer action commit

* add setting

* rm from pipeline, adapt action iteslf

* add missing deps

* enable samples and debian jobs

* correct yml

* correct image name

* correct syntax, use self-hosted option

* enable onnx runtime and c++, use newer action

* enable Python and CPU Func tests

* add missing deps for arm64

* increase timeout for python tests

* disable some tests, add more time

* skip failing tests

* skip speech sample test on arm

* dummy chang

* skip mxnet mo on arm, run all tests

* rm quotes

* separate linux x86 and arm64 workflows

* rm unused matrix refs, add timeouts

* add skips for c++ tests and some Python tests

* correct cache keys, extend timeout

* skip more python tests

* add more skips: for python and CPU func

* extend cpu func list with skips

* disable cpu func tests and python api 2.0 tests

* rm disable job

* styling, rm pr trigger, rm always(), rm unnecessary changes

* revert

* use ifs instead of comments, provide better wording for skips
This commit is contained in:
Andrey Kashchikhin 2023-12-05 08:14:02 +00:00 committed by GitHub
parent a6903b8398
commit 62f5bd6570
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 1571 additions and 29 deletions

View File

@ -26,7 +26,7 @@ runs:
- if: ${{ runner.os == 'Linux' && inputs.self-hosted-runner == 'true' }}
name: Install 'actions/setup-python@v4' dependencies
shell: bash
run: apt-get update && apt-get install -y ca-certificates
run: apt-get update && apt-get install -y ca-certificates software-properties-common
- if: ${{ runner.os == 'Linux' && runner.arch == 'ARM64' }}
name: Setup sudo
@ -35,7 +35,7 @@ runs:
- if: ${{ runner.os == 'Linux' && runner.arch == 'ARM64' }}
name: Setup Python ${{ inputs.version }}
uses: deadsnakes/action@v3.0.1
uses: akashchi/deadsnakes-action@f01521a69eee61eaca3a34440bea3ce838317846
with:
python-version: ${{ inputs.version }}

1472
.github/workflows/linux_arm64.yml vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -82,7 +82,12 @@ class CompressQuantizeWeightsTests
}
};
#ifdef OPENVINO_ARCH_ARM64
// Ticket: CVS-122397
TEST_P(CompressQuantizeWeightsTests, DISABLED_FusionTest) {}
#else
TEST_P(CompressQuantizeWeightsTests, FusionTest) {}
#endif
static std::vector<CompressQuantizeWeightsParams> params = {
{Shape{2, 3, 1, 1},

View File

@ -164,3 +164,7 @@ xfail_issue_119919 = xfail_test(reason="While validating ONNX node '<Node(Pad):
xfail_issue_119922 = xfail_test(reason="ai.onnx.ml operators domain isn't supported")
xfail_issue_119925 = xfail_test(reason="AveragePool AssertionError: Not equal to tolerance rtol=0.001, atol=1e-07")
xfail_issue_119926 = xfail_test(reason="ROIAlign AssertionError: Not equal to tolerance rtol=0.001, atol=1e-07")
xfail_issue_122776 = xfail_test(reason="test_mish_expanded_cpu - "
"Not equal to tolerance")
xfail_issue_122775 = xfail_test(reason="test_resize_downsample_scales_linear_cpu - "
"Not equal to tolerance")

View File

@ -392,3 +392,15 @@ IE_CPU.onnx_model_top_k_repeating_unsorted
# Accuracy regression - Ticket 105909
IE_CPU.onnx_model_attention_qkv_hidden_sizes
# Accuracy issues on ARM CPU - Ticket 122663
IE_CPU.onnx_model_bias_gelu
IE_CPU.onnx_model_embed_layer_normalization_diff_seq_len_pos_embed_len
IE_CPU.onnx_model_embed_layer_normalization_with_position_ids
IE_CPU.onnx_resize10_down_scales_const_linear
IE_CPU.onnx_resize11_down_scales_linear_asymmetric
IE_CPU.onnx_model_softplus
IE_CPU.onnx_model_instance_normalization
IE_CPU.quant_dequant_pattern_axis
IE_CPU/GRUSequenceOp.onnx_model_gru_reverse_mixed_seq_len_const
IE_CPU/RNNSequenceOp.onnx_model_rnn_fwd_bias_initial_h_const

View File

@ -72,6 +72,8 @@ from tests import (
xfail_issue_119922,
xfail_issue_119925,
xfail_issue_119926,
xfail_issue_122775,
xfail_issue_122776
)
from tests.tests_python.utils.onnx_backend import OpenVinoTestBackend
@ -685,6 +687,14 @@ if platform.system() == 'Darwin':
)]
)
if platform.system() == 'Linux' and platform.machine() in ['arm', 'armv7l', 'aarch64', 'arm64', 'ARM64']:
tests_expected_to_fail.extend(
[
(xfail_issue_122775, "OnnxBackendNodeModelTest.test_resize_downsample_scales_linear_cpu"),
(xfail_issue_122776, "OnnxBackendNodeModelTest.test_mish_expanded_cpu")
]
)
for test_group in tests_expected_to_fail:
for test_case in test_group[1:]:
expect_fail(f"{test_case}", test_group[0])

View File

@ -26,7 +26,13 @@ TEST_F(CompileModelsTests, NgramCompilation) {
EXPECT_EQ(runtime_model->get_results().size(), 1);
}
TEST_F(CompileModelsTests, ModelWithSplitConvConcat) {
#ifdef OPENVINO_ARCH_ARM64
// Ticket: CVS-122396
TEST_F(CompileModelsTests, DISABLED_ModelWithSplitConvConcat)
#else
TEST_F(CompileModelsTests, ModelWithSplitConvConcat)
#endif
{
{
auto model = convert_model("split_conv_concat/split_conv_concat.pbtxt");
ov::Core core;

View File

@ -1027,8 +1027,8 @@ class TestMoConvertPyTorch(CommonMOConvertTest):
def __init__(self):
super(DataModel, self).__init__()
self.data = torch.tensor([1, 2, 3, 4])
def forward(self, x):
def forward(self, x):
return self.data, x
data_model = DataModel()
@ -1051,13 +1051,13 @@ class TestMoConvertPyTorch(CommonMOConvertTest):
def test_sharing_memory_switched_on(self, ie_device, precision, ir_version, temp_dir):
from openvino.tools.ovc import convert_model
from openvino.runtime import Core
class DataModel(torch.nn.Module):
def __init__(self):
super(DataModel, self).__init__()
self.data = torch.tensor([1, 2, 3, 4])
def forward(self, x):
def forward(self, x):
return self.data, x
data_model = DataModel()
@ -1236,8 +1236,10 @@ class TestPrecisionSensitive():
@pytest.mark.parametrize("create_model", test_data)
@pytest.mark.nightly
@pytest.mark.precommit
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
reason='Ticket - 122714')
@pytest.mark.xfail(condition=platform.system() in ('Darwin', 'Linux') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 122714, 122710')
def test_precision_sensitive(self, create_model, ie_device, precision, ir_version, temp_dir, use_new_frontend, use_old_api):
import numpy.testing as npt
from pathlib import Path

View File

@ -234,8 +234,10 @@ class TestReduceL1L2(OnnxRuntimeLayerTest):
@pytest.mark.parametrize("keep_dims", [True, False])
@pytest.mark.parametrize("reduce_p", [1, 2])
@pytest.mark.precommit
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
reason='Ticket - 122846')
@pytest.mark.xfail(condition=platform.system() in ('Darwin', 'Linux') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 122846, 122783, 126312')
def test_reduce_lp_precommit(self, params, keep_dims, reduce_p, ie_device, precision,
ir_version, temp_dir, use_old_api):
self._test(*self.create_reduce_lp(**params, keep_dims=keep_dims, reduce_p=reduce_p,

View File

@ -136,8 +136,10 @@ class TestROIAlign(OnnxRuntimeLayerTest):
@pytest.mark.nightly
@pytest.mark.precommit
@pytest.mark.xfail(condition=platform.system() == 'Windows', reason="Ticket - 122731")
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
reason='Ticket - 122846')
@pytest.mark.xfail(condition=platform.system() in ('Linux', 'Darwin') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 122846, 122783, 126312')
def test_roi_alignv10(self, params, ie_device, precision, ir_version, temp_dir, use_old_api):
# TODO: ticket for investigating GPU failures: CVS-86300
if ie_device != "GPU":

View File

@ -73,7 +73,9 @@ class TestAll(PytorchLayerTest):
])
@pytest.mark.nightly
@pytest.mark.precommit
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
@pytest.mark.xfail(condition=platform.system() in ('Darwin', 'Linux') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 122715')
def test_all(self, input_shape, d_type, keepdim, ie_device, precision, ir_version):
if type(input_shape) is list:

View File

@ -73,7 +73,9 @@ class TestArgMinArgMax(PytorchLayerTest):
@pytest.mark.parametrize("dtype", ["float32", "int32", "int64"])
@pytest.mark.nightly
@pytest.mark.precommit
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
@pytest.mark.xfail(condition=platform.system() in ('Darwin', 'Linux') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 122715')
def test_argmin_argmax(self, axes, keep_dims, op_type, dtype, ie_device, precision, ir_version):
self._test(*self.create_model(op_type, axes, keep_dims),

View File

@ -118,7 +118,9 @@ class TestDivTypes(PytorchLayerTest):
]))
@pytest.mark.nightly
@pytest.mark.precommit
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
@pytest.mark.xfail(condition=platform.system() in ('Darwin', 'Linux') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 122715')
def test_div_types(self, ie_device, precision, ir_version, lhs_type, lhs_shape, rhs_type, rhs_shape, rounding_mode):
self.lhs_type = lhs_type

View File

@ -76,7 +76,9 @@ class TestNativeMultiHeadAttention(PytorchLayerTest):
["need_weights", "average_attn_weights"],
[[False, False], [True, False], [True, True]]
)
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
@pytest.mark.xfail(condition=platform.system() in ('Darwin', 'Linux') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 122715')
def test_native_multi_head_attention(self, ie_device, precision, ir_version, mask, need_weights, average_attn_weights):
self._test(aten_native_multi_head_attention(mask, need_weights, average_attn_weights),

View File

@ -263,7 +263,9 @@ class TestLinalgMatrixNorm(PytorchLayerTest):
@pytest.mark.parametrize("dtype", ["float32", "float64", None])
@pytest.mark.parametrize("out", [True, False])
@pytest.mark.parametrize("prim_dtype", [True, False])
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
@pytest.mark.xfail(condition=platform.system() in ('Darwin', 'Linux') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 122715')
def test_linalg_matrix_norm(self, p, dim, keepdim, dtype, out, prim_dtype, ie_device, precision, ir_version):
self._test(*self.create_model(p, dim, keepdim, dtype, out, prim_dtype),

View File

@ -1,6 +1,8 @@
# Copyright (C) 2018-2023 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import platform
import numpy as np
import pytest
import tensorflow as tf
@ -54,6 +56,10 @@ class TestComplexFFT(CommonTFLayerTest):
@pytest.mark.parametrize("params", test_data_basic)
@pytest.mark.precommit_tf_fe
@pytest.mark.nightly
@pytest.mark.xfail(condition=platform.system() == 'Linux' and platform.machine() in ['arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'],
reason='Ticket - 126314')
def test_complex_fft_basic(self, params, fft_op,
ie_device, precision, ir_version, temp_dir,
use_new_frontend, use_old_api):

View File

@ -61,8 +61,10 @@ class TestMaxPoolWithArgmax(CommonTFLayerTest):
])
@pytest.mark.precommit_tf_fe
@pytest.mark.nightly
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
reason='Ticket - 122716')
@pytest.mark.xfail(condition=platform.system() in ('Linux', 'Darwin') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 126314, 122716')
def test_max_pool_with_argmax_basic(self, params, input_type, padding, targmax,
include_batch_in_index, with_second_output,
ie_device, precision, ir_version, temp_dir,

View File

@ -32,8 +32,10 @@ class TestNormalizeL2(CommonTFLayerTest):
@pytest.mark.precommit
@pytest.mark.precommit_tf_fe
@pytest.mark.nightly
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
reason='Ticket - 122716')
@pytest.mark.xfail(condition=platform.system() in ('Linux', 'Darwin') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 126314, 122716')
def test_normalize_l2_basic(self, params, ie_device, precision, ir_version, temp_dir,
use_new_frontend, use_old_api):
self._test(*self.create_normalize_l2_net(**params),

View File

@ -48,8 +48,10 @@ class TestTopKV2(CommonTFLayerTest):
@pytest.mark.parametrize("params", test_basic)
@pytest.mark.precommit_tf_fe
@pytest.mark.nightly
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
reason='Ticket - 122716')
@pytest.mark.xfail(condition=platform.system() in ('Linux', 'Darwin') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 126314, 122716')
def test_topk_v2_basic(self, params, ie_device, precision, ir_version, temp_dir, use_new_frontend,
use_old_api):
self._test(*self.create_topk_v2_net(**params),

View File

@ -44,8 +44,10 @@ class TestTruncateDiv(CommonTFLayerTest):
@pytest.mark.parametrize("params", test_data_basic)
@pytest.mark.precommit_tf_fe
@pytest.mark.nightly
@pytest.mark.xfail(condition=platform.system() == 'Darwin' and platform.machine() == 'arm64',
reason='Ticket - 122716')
@pytest.mark.xfail(condition=platform.system() in ('Linux', 'Darwin') and platform.machine() in ('arm', 'armv7l',
'aarch64',
'arm64', 'ARM64'),
reason='Ticket - 126314, 122716')
def test_truncate_div_basic(self, params, ie_device, precision, ir_version, temp_dir,
use_new_frontend, use_old_api):
self._test(*self.create_truncate_div_net(**params),

View File

@ -12,6 +12,7 @@
"""
import os
import pytest
import platform
import sys
import logging as log
from common.samples_common_test_class import SamplesCommonTestClass
@ -56,7 +57,8 @@ class TestSpeechSample(SamplesCommonTestClass):
super().setup_class()
@pytest.mark.parametrize("param", test_data)
@pytest.mark.skipif(sys.platform == 'darwin', reason="GNA is not available on macOS")
@pytest.mark.skipif(condition=platform.system() == 'Darwin' or platform.machine() == 'aarch64',
reason="GNA is not available on macOS or aarch64")
def test_speech_sample_nthreads(self, param):
stdout = self._test(param).split('\n')
@ -65,7 +67,8 @@ class TestSpeechSample(SamplesCommonTestClass):
assert avg_error <= self.threshold
@pytest.mark.parametrize("param", new_format_test_data)
@pytest.mark.skipif(sys.platform == 'darwin', reason="GNA is not available on macOS")
@pytest.mark.skipif(condition=platform.system() == 'Darwin' or platform.machine() == 'aarch64',
reason="GNA is not available on macOS or aarch64")
def test_speech_sample_new_format(self, param):
stdout = self._test(param, complete_path=False).split('\n')