Skip to content

.github/workflows/job_python_unit_tests.yml #1

.github/workflows/job_python_unit_tests.yml

.github/workflows/job_python_unit_tests.yml #1

name: Python unit tests
on:
workflow_call:
inputs:
runner:
description: 'Machine on which the tests would run'
type: string
required: true
container:
description: 'JSON to be converted to the value of the "container" configuration for the job'
type: string
required: false
default: '{"image": null}'
affected-components:
description: 'Components that are affected by changes in the commit defined by the Smart CI Action'
type: string
required: true
env:
PIP_CACHE_PATH: /mount/caches/pip/linux
PYTHON_VERSION: '3.11'
jobs:
Python_Unit_Tests:
name: Python unit tests
timeout-minutes: 60
runs-on: ${{ inputs.runner }}
container: ${{ fromJSON(inputs.container) }}
defaults:
run:
shell: bash
env:
DEBIAN_FRONTEND: noninteractive # to prevent apt-get from waiting user input
OPENVINO_REPO: ${{ github.workspace }}/openvino
INSTALL_DIR: ${{ github.workspace }}/install
INSTALL_TEST_DIR: ${{ github.workspace }}/install/tests
LAYER_TESTS_INSTALL_DIR: ${{ github.workspace }}/install/tests/layer_tests
PDM_PROJECT: ${{ github.workspace }}/install/tests/pyopenvino
steps:
- name: Set apt retries
if: runner.os == 'Linux'
run: echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80-retries
- name: Download OpenVINO package
uses: actions/download-artifact@v4
with:
name: openvino_package
path: ${{ env.INSTALL_DIR }}
- name: Download OpenVINO tests package
uses: actions/download-artifact@v4
with:
name: openvino_tests
path: ${{ env.INSTALL_TEST_DIR }}
- name: Download OpenVINO tokenizers extension
if: ${{ runner.os != 'macOS' && runner.arch != 'ARM64' }} # Ticket: 126287
uses: actions/download-artifact@v4
with:
name: openvino_tokenizers_wheel
path: ${{ env.INSTALL_DIR }}
# Needed as ${{ github.workspace }} is not working correctly when using Docker
- name: Setup Variables
run: |
echo "OPENVINO_REPO=$GITHUB_WORKSPACE/openvino" >> "$GITHUB_ENV"
echo "INSTALL_DIR=$GITHUB_WORKSPACE/install" >> "$GITHUB_ENV"
echo "INSTALL_TEST_DIR=$GITHUB_WORKSPACE/install/tests" >> "$GITHUB_ENV"
echo "LAYER_TESTS_INSTALL_DIR=$GITHUB_WORKSPACE/install/tests/layer_tests" >> "$GITHUB_ENV"
echo "PYTHON_RUN_PREFIX=${{ runner.arch == 'ARM64' && 'python3' || 'pdm run -v' }}" >> "$GITHUB_ENV"
echo "PYTHON_RUN_TESTS_PREFIX=${{ runner.arch == 'ARM64' && 'python3 -m' || 'pdm run -v' }}" >> "$GITHUB_ENV"
echo "PYTHON_INSTALL_PREFIX=${{ runner.arch == 'ARM64' && 'python3 -m pip install' || 'pdm add -v -G tests_ov_api' }}" >> "$GITHUB_ENV"
echo "PYTHON_INSTALL_PYTHON_REQS=${{ runner.arch == 'ARM64' && 'python3 -m pip install -r ${INSTALL_TEST_DIR}/mo/requirements_dev.txt -r ${INSTALL_TEST_DIR}/python/preprocess/torchvision/requirements.txt' || 'pdm sync -v' }}" >> "$GITHUB_ENV"
echo "PYTHON_INSTALL_LAYER_REQS=${{ runner.arch == 'ARM64' && 'python3 -m pip install -r ${LAYER_TESTS_INSTALL_DIR}/requirements.txt' || 'pdm sync -L ${LAYER_TESTS_INSTALL_DIR}/layer-tests.pdm.lock -v --venv layer-test' }}" >> "$GITHUB_ENV"
- name: Extract OpenVINO packages
run: |
pushd $INSTALL_DIR
tar -xzf openvino_package.tar.gz -C $INSTALL_DIR
popd
pushd $INSTALL_TEST_DIR
tar -xzf openvino_tests.tar.gz -C $INSTALL_DIR
popd
- name: Install OpenVINO dependencies (Linux)
if: runner.os == 'Linux'
run: $INSTALL_DIR/install_dependencies/install_openvino_dependencies.sh -c=core -c=dev -y -c=gpu
- name: Fetch setup_python action
uses: actions/checkout@v4
with:
sparse-checkout: |
.github/actions/setup_python/action.yml
sparse-checkout-cone-mode: false
path: 'openvino'
- name: Setup Python ${{ env.PYTHON_VERSION }}
uses: ./openvino/.github/actions/setup_python
with:
version: ${{ env.PYTHON_VERSION }}
pip-cache-path: ${{ runner.os == 'Linux' && env.PIP_CACHE_PATH || '' }}
should-setup-pip-paths: ${{ runner.os == 'Linux' }}
self-hosted-runner: ${{ runner.os == 'Linux' }}
- name: Set up PDM
if: ${{ runner.arch != 'ARM64' }}
uses: pdm-project/setup-pdm@v3
with:
python-version: ${{ env.PYTHON_VERSION }}
#
# Tests
#
- name: Install OpenVINO Python wheels
run: |
if [[ "${{ runner.arch }}" != "ARM64" ]]; then
#Initialize pdm environment
pdm venv create --name for-test ${{ env.PYTHON_VERSION }}
pdm use --venv for-test
pdm lock -v --strategy no_cross_platform -G tests_ov_api -G tests_mo
fi
# Install the core OV wheel
${PYTHON_INSTALL_PREFIX} ${INSTALL_DIR}/tools/openvino-*.whl
if [[ "${{ runner.arch }}" != "ARM64" ]]; then
${PYTHON_INSTALL_PREFIX} ${INSTALL_DIR}/openvino_tokenizers-*.whl
fi
extras_to_install="caffe,kaldi,onnx,tensorflow2,pytorch"
if [[ "${{ runner.arch }}" != "ARM64" ]]; then
extras_to_install="mxnet,$extras_to_install"
fi
# Find and install OV dev wheel
pushd ${INSTALL_DIR}/tools
ov_dev_wheel_name=$(find . -name 'openvino_dev*.whl')
${PYTHON_INSTALL_PREFIX} $ov_dev_wheel_name[$extras_to_install]
popd
- name: Install Python API tests dependencies
run: |
# To enable pytest parallel features
${PYTHON_INSTALL_PREFIX} pytest-xdist[psutil]
# For torchvision to OpenVINO preprocessing converter
# TODO: replace with Python API tests requirements and add to test pkg
${PYTHON_INSTALL_PYTHON_REQS}
#
# Tests
#
- name: Python API Tests
# if: ${{ fromJSON(inputs.affected-components).Python_API.test && runner.arch != 'ARM64' }} # Ticket: 126380, 127101
run: |
# for 'template' extension
export LD_LIBRARY_PATH=${INSTALL_TEST_DIR}:$LD_LIBRARY_PATH
${PYTHON_RUN_TESTS_PREFIX} pytest -sv ${INSTALL_TEST_DIR}/pyopenvino/tests \
--junitxml=${INSTALL_TEST_DIR}/TEST-Pyngraph.xml \
--ignore=${INSTALL_TEST_DIR}/pyopenvino/tests/test_utils/test_utils.py
- name: Model Optimizer unit tests
if: fromJSON(inputs.affected-components).MO.test
run: |
if [[ "${{ runner.os }}" == "Linux" ]] && [[ "${{ runner.arch }}" != "ARM64" ]]; then
# required for MxNet
apt-get install -y libgomp1 libquadmath0
fi
# Skips under tickets: 133405, 122666
${PYTHON_RUN_TESTS_PREFIX} pytest -s ${INSTALL_TEST_DIR}/mo/unit_tests \
--junitxml=${INSTALL_TEST_DIR}/TEST-ModelOptimizer.xml \
--ignore-glob="**/mo/unit_tests/mo/front/mxnet/**"
- name: Python ONNX operators tests
if: (fromJSON(inputs.affected-components).Python_API.test ||
fromJSON(inputs.affected-components).ONNX_FE.test) &&
runner.arch != 'ARM64' # Ticket: 123325
run: |
# Skip test_onnx/test_zoo_models and test_onnx/test_backend due to long execution time - ONNX Model Zoo tests are run separately
${PYTHON_RUN_TESTS_PREFIX} pytest -sv ${INSTALL_TEST_DIR}/onnx -k 'not cuda' \
--junitxml=${INSTALL_TEST_DIR}/TEST-onnx_frontend.xml \
--ignore=${INSTALL_TEST_DIR}/onnx/test_python/test_zoo_models.py
- name: OVC unit tests
if: fromJSON(inputs.affected-components).MO.test
run: ${PYTHON_RUN_TESTS_PREFIX} pytest -s ${INSTALL_TEST_DIR}/ovc/unit_tests --junitxml=${INSTALL_TEST_DIR}/TEST-OpenVinoConversion.xml
- name: Install Python Layer tests dependencies
run: |
if [[ "${{ runner.arch }}" != "ARM64" ]]; then
# #Initialize pdm environment
pdm venv create --name layer-test ${{ env.PYTHON_VERSION }}
pdm use --venv layer-test
extras_to_install="caffe,kaldi,onnx,tensorflow2,pytorch"
ov_dev_wheel_name=$(find ${INSTALL_DIR}/tools -name 'openvino_dev*.whl')
# add extra openvino, openvino-dev dependency to layer-tests groups
pdm add -L ${LAYER_TESTS_INSTALL_DIR}/layer-tests.pdm.lock -v --no-sync ${INSTALL_DIR}/tools/openvino-*.whl pytest-xdist[psutil] $ov_dev_wheel_name[$extras_to_install]
fi
# layer test requirements
${PYTHON_INSTALL_LAYER_REQS}
- name: MO Python API Tests
if: fromJSON(inputs.affected-components).MO.test
run: |
# Import 'test_utils' installed in '<package_test>/tests/python/openvino'
export LD_LIBRARY_PATH=${PIP_INSTALL_PATH}/openvino/libs:$LD_LIBRARY_PATH
export PYTHONPATH=${INSTALL_TEST_DIR}/python
if [[ "${{ runner.os }}" == "Linux" ]] && [[ "${{ runner.arch }}" == "ARM64" ]]; then
# Find gomp lib
GOMP_LIB=$(find "${PIP_INSTALL_PATH}/torch/lib/../../torch.libs/" -name '*libgomp-*so*')
export LD_PRELOAD=${GOMP_LIB}
fi
${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/mo_python_api_tests --junitxml=${INSTALL_TEST_DIR}/TEST-test_mo_convert.xml
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP16
- name: OVC Python API Tests
if: fromJSON(inputs.affected-components).MO.test
run: |
# Import 'test_utils' installed in '<package_test>/tests/python/openvino'
export PYTHONPATH=${INSTALL_TEST_DIR}/python
export LD_LIBRARY_PATH=${PIP_INSTALL_PATH}/openvino/libs:$LD_LIBRARY_PATH
if [[ "${{ runner.os }}" == "Linux" ]] && [[ "${{ runner.arch }}" == "ARM64" ]]; then
# Find gomp lib
GOMP_LIB=$(find "${PIP_INSTALL_PATH}/torch/lib/../../torch.libs/" -name '*libgomp-*so*')
export LD_PRELOAD=${GOMP_LIB}
fi
${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/ovc_python_api_tests --junitxml=${INSTALL_TEST_DIR}/TEST-test_ovc_convert.xm
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP16
- name: Python Frontend tests
if: fromJSON(inputs.affected-components).PyTorch_FE.test ||
fromJSON(inputs.affected-components).PDPD_FE.test
run: |
# to allow 'libtest_builtin_extensions.so' to find 'libopenvino_onnx_frontend.so'
export LD_LIBRARY_PATH=${PIP_INSTALL_PATH}/openvino/libs:$LD_LIBRARY_PATH
${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/py_frontend_tests --junitxml=${INSTALL_TEST_DIR}/TEST-test_py_fontend.xml
- name: PyTorch Layer Tests
if: ${{ fromJSON(inputs.affected-components).PyTorch_FE.test && runner.arch != 'ARM64' }} # Ticket: 126287
run: ${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/
-n logical -m precommit --junitxml=${INSTALL_TEST_DIR}/TEST-pytorch.xml

Check failure on line 256 in .github/workflows/job_python_unit_tests.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/job_python_unit_tests.yml

Invalid workflow file

You have an error in your yaml syntax on line 256
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP32
- name: PyTorch torch.export Layer Tests
if: ${{ fromJSON(inputs.affected-components).PyTorch_FE.test && runner.arch != 'ARM64' }} # Ticket: 126287
run: |
${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/pytorch_tests -n logical -m precommit_torch_export --junitxml=${INSTALL_TEST_DIR}/TEST-pytorch.xml
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP32
PYTORCH_TRACING_MODE: EXPORT
- name: PyTorch torch.compile TORCHFX Layer Tests
if: ${{ fromJSON(inputs.affected-components).PyTorch_FE.test && runner.os != 'macOS' && runner.arch != 'ARM64' }} # Ticket: 126287
run: |
${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/pytorch_tests -m precommit_fx_backend --junitxml=${INSTALL_TEST_DIR}/TEST-pytorch.xml
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP32
PYTORCH_TRACING_MODE: TORCHFX
- name: ONNX Layer Tests
if: fromJSON(inputs.affected-components).ONNX_FE.test
run: |
# requires 'unit_tests' from 'tools/mo'
export PYTHONPATH=${INSTALL_TEST_DIR}/mo:$PYTHONPATH
${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/onnx_tests -m "not launch_only_if_manually_specified and precommit" --junitxml=${INSTALL_TEST_DIR}/TEST-onnx.xml
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP16
- name: TensorFlow 1 Layer Tests - TF FE
if: fromJSON(inputs.affected-components).TF_FE.test
run: |
# requires 'unit_tests' from 'mo'
export PYTHONPATH=${INSTALL_TEST_DIR}/mo
${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/tensorflow_tests/ -m precommit -n logical --junitxml=${INSTALL_TEST_DIR}/TEST-tf_fe.xml
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP16
- name: TensorFlow 2 Layer Tests - TF FE
if: fromJSON(inputs.affected-components).TF_FE.test && runner.os != 'macOS' # Ticket: 123322
run: |
# requires 'unit_tests' from 'mo'
export PYTHONPATH=${INSTALL_TEST_DIR}/mo
${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/tensorflow2_keras_tests/ -n logical -m precommit_tf_fe --junitxml=${INSTALL_TEST_DIR}/TEST-tf2_fe.xml
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP16
- name: JAX Layer Tests - TF FE
if: ${{ fromJSON(inputs.affected-components).TF_FE.test && runner.arch != 'ARM64' && runner.os != 'macOS' }}
run: ${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/jax_tests/ -m precommit --junitxml=${INSTALL_TEST_DIR}/TEST-jax.xml
env:
TEST_DEVICE: CPU
- name: TensorFlow 1 Layer Tests - Legacy FE
if: fromJSON(inputs.affected-components).TF_FE.test
run: ${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/tensorflow_tests/test_tf_Roll.py --use_legacy_frontend --ir_version=10 --junitxml=${INSTALL_TEST_DIR}/TEST-tf_Roll.xml
- name: TensorFlow 2 Layer Tests - Legacy FE
if: fromJSON(inputs.affected-components).TF_FE.test
run: ${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/tensorflow2_keras_tests/test_tf2_keras_activation.py --use_legacy_frontend --ir_version=11 -k "sigmoid" --junitxml=${INSTALL_TEST_DIR}/TEST-tf2_Activation.xml
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP16
- name: TensorFlow Lite Layer Tests - TFL FE
if: fromJSON(inputs.affected-components).TFL_FE.test
run: ${PYTHON_RUN_TESTS_PREFIX} pytest ${LAYER_TESTS_INSTALL_DIR}/tensorflow_lite_tests/ --junitxml=${INSTALL_TEST_DIR}/TEST-tfl_fe.xml
env:
TEST_DEVICE: CPU
TEST_PRECISION: FP16
- name: Clone API snippets
if: runner.os != 'macOS'
uses: actions/checkout@v4
with:
sparse-checkout: openvino/docs/snippets
path: ${{ env.OPENVINO_REPO }}
submodules: 'false'
- name: Docs Python snippets
if: runner.os != 'macOS'
run: |
# to find 'snippets' module in docs
export PYTHONPATH=${OPENVINO_REPO}/docs
# for 'template' extension
export LD_LIBRARY_PATH=${INSTALL_TEST_DIR}:$LD_LIBRARY_PATH
${PYTHON_RUN_PREFIX} ${OPENVINO_REPO}/docs/snippets/main.py
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: test-results-python
path: |
${{ env.INSTALL_TEST_DIR }}/TEST*.html
${{ env.INSTALL_TEST_DIR }}/TEST*.xml
if-no-files-found: 'warn'