diff --git a/.github/actions/install_ov_wheels/action.yml b/.github/actions/install_ov_wheels/action.yml new file mode 100644 index 00000000000000..131d4d0bd068d8 --- /dev/null +++ b/.github/actions/install_ov_wheels/action.yml @@ -0,0 +1,80 @@ +name: 'Find and install OpenVINO Python wheels' +description: 'Finds the OpenVINO Python wheels (core, dev and tokenizers) suitable for "python3" executable and installs them' +inputs: + install-dir-path: + description: 'Path to the INSTALL directory in which wheels are located' + required: true + install-core-wheel: + description: 'Whether to install the OpenVINO Core wheel (openvino-*.whl)' + required: true + install-dev-wheel: + description: 'Whether to install the OpenVINO Dev wheel (openvino_dev*.whl)' + required: true + extras-to-install: + description: 'Extras to install with the OpenVINO Dev wheel (openvino_dev.whl[caffe,kaldi,onnx,tensorflow2,pytorch])' + required: false + default: '' + install-tokenizers-wheel: + description: 'Whether to install the OpenVINO Dev wheel (openvino_tokenizes*.whl)' + required: true +runs: + using: 'composite' + steps: + - name: Install OpenVINO Python wheels (Windows) + shell: pwsh + if: runner.os == 'Windows' + run: | + if ( "${{ inputs.install-core-wheel }}" -eq "true" ) + { + Push-Location "${{ inputs.install-dir-path }}\tools" + $py_version = python3 -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor}')" + $ov_wheel_name = Get-ChildItem -Name "openvino-*cp$py_version*.whl" -Recurse + python3 -m pip install $ov_wheel_name + Pop-Location + } + + if ( "${{ inputs.install-tokenizers-wheel }}" -eq "true" ) + { + $ovCoreWheelPath=Get-ChildItem -Path ${{ inputs.install-dir-path }} -Filter openvino_tokenizers-*.whl | % { $_.FullName } + python3 -m pip install "$ovCoreWheelPath" + } + + if ( "${{ inputs.install-core-wheel }}" -eq "true" ) + { + $ovDevWheelPath=Get-ChildItem -Path "${{ inputs.install-dir-path }}\tools" -Filter openvino_dev*.whl | % { $_.FullName } + if ( "${{ inputs.extras-to-install }}" ) + { + python3 -m pip install "$ovDevWheelPath[${{ inputs.extras-to-install }}]" + } + else + { + python3 -m pip install "$ovDevWheelPath" + } + } + + - name: Install OpenVINO Python wheels (Linux and macOS) + shell: bash + if: runner.os != 'Windows' + run: | + if [[ "${{ inputs.install-core-wheel }}" == "true" ]]; then + pushd ${{ inputs.install-dir-path }}/tools + py_version=$(python3 -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor}')") + ov_wheel_name=$(find . -name "openvino-*cp$py_version*.whl") + python3 -m pip install $ov_wheel_name + popd + fi + + if [[ "${{ inputs.install-tokenizers-wheel }}" == "true" ]]; then + python3 -m pip install ${{ inputs.install-dir-path }}/openvino_tokenizers-*.whl + fi + + if [[ "${{ inputs.install-dev-wheel }}" == "true" ]]; then + pushd ${{ inputs.install-dir-path }}/tools + ov_dev_wheel_name=$(find . -name 'openvino_dev*.whl') + if [[ "${{ inputs.extras-to-install }}" ]]; then + python3 -m pip install $ov_dev_wheel_name[${{ inputs.extras-to-install }}] + else + python3 -m pip install $ov_dev_wheel_name + fi + popd + fi diff --git a/.github/dockerfiles/docker_tag b/.github/dockerfiles/docker_tag index 413b6019a3b0be..c71ecff7375019 100644 --- a/.github/dockerfiles/docker_tag +++ b/.github/dockerfiles/docker_tag @@ -1 +1 @@ -pr-26586 \ No newline at end of file +pr-26897 \ No newline at end of file diff --git a/.github/dockerfiles/ov_build/ubuntu_22_04_x64/Dockerfile b/.github/dockerfiles/ov_build/ubuntu_22_04_x64/Dockerfile index 80e3c0259dc482..85259ba3e45ce9 100644 --- a/.github/dockerfiles/ov_build/ubuntu_22_04_x64/Dockerfile +++ b/.github/dockerfiles/ov_build/ubuntu_22_04_x64/Dockerfile @@ -24,9 +24,18 @@ RUN apt-get update && \ tzdata \ libtbb2 \ # Pythons \ + python3.9-dev \ + python3.9-venv \ + python3.9-distutils \ + python3.10-dev \ + python3.10-venv \ + python3.10-distutils \ python3.11-dev \ python3.11-venv \ python3.11-distutils \ + python3.12-dev \ + python3.12-venv \ + python3.12-distutils \ # For Java API default-jdk \ && \ @@ -52,10 +61,20 @@ ENV PATH="$SCCACHE_HOME:$PATH" # Setup pip ENV PIP_VERSION="24.0" RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ - python3 get-pip.py --no-cache-dir pip==${PIP_VERSION} && \ + python3.9 get-pip.py --no-cache-dir pip==${PIP_VERSION} && \ + python3.10 get-pip.py --no-cache-dir pip==${PIP_VERSION} && \ python3.11 get-pip.py --no-cache-dir pip==${PIP_VERSION} && \ + python3.12 get-pip.py --no-cache-dir pip==${PIP_VERSION} && \ rm -f get-pip.py +# Setup wheel and setuptools packages +ENV SETUPTOOLS_VERSION=75.1.0 +ENV WHEEL_VERSION=0.44.0 +RUN python3.9 -m pip install wheel==${WHEEL_VERSION} setuptools==${SETUPTOOLS_VERSION} && \ + python3.10 -m pip install wheel==${WHEEL_VERSION} setuptools==${SETUPTOOLS_VERSION} && \ + python3.11 -m pip install wheel==${WHEEL_VERSION} setuptools==${SETUPTOOLS_VERSION} && \ + python3.12 -m pip install wheel==${WHEEL_VERSION} setuptools==${SETUPTOOLS_VERSION} + # Use Python 3.11 as default # Using venv here 'cause other methods to switch the default Python on Ubuntu break both system and wheels build RUN python3.11 -m venv venv diff --git a/.github/workflows/job_build_linux.yml b/.github/workflows/job_build_linux.yml index 0520336ccd20c0..c4d3340bc49599 100644 --- a/.github/workflows/job_build_linux.yml +++ b/.github/workflows/job_build_linux.yml @@ -51,6 +51,11 @@ on: type: boolean required: false default: false + build-additional-python-wheels: + description: 'Whether to build additional, i.e., non-system Python wheels. Should have Python 3.9-3.12 installed under /usr/bin' + type: boolean + required: false + default: false permissions: read-all @@ -180,6 +185,18 @@ jobs: cmake -DCMAKE_INSTALL_PREFIX=${DEVELOPER_PACKAGE_DIR} -DCOMPONENT=developer_package -P ${BUILD_DIR}/cmake_install.cmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCOMPONENT=python_wheels -P ${BUILD_DIR}/cmake_install.cmake + - name: Build additional Python wheels + if: ${{ inputs.build-additional-python-wheels }} + run: | + for py_version in "3.9" "3.10" "3.11" "3.12" + do + export PY_BUILD_DIR=/__w/openvino/openvino/py$py_version + mkdir -p ${PY_BUILD_DIR} + cmake -DPython3_EXECUTABLE=/usr/bin/python$py_version -DOpenVINODeveloperPackage_DIR=${BUILD_DIR} -S ${OPENVINO_REPO}/src/bindings/python -B ${PY_BUILD_DIR} + cmake --build ${PY_BUILD_DIR} --parallel + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCOMPONENT=python_wheels -P ${PY_BUILD_DIR}/cmake_install.cmake + done + - name: Pack Artifacts run: | diff --git a/.github/workflows/job_jax_models_tests.yml b/.github/workflows/job_jax_models_tests.yml index 74dc28078e300f..79fb149c3b3364 100644 --- a/.github/workflows/job_jax_models_tests.yml +++ b/.github/workflows/job_jax_models_tests.yml @@ -71,11 +71,12 @@ jobs: tar -xzf openvino_tests.tar.gz -C ${INSTALL_DIR} popd - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -87,11 +88,12 @@ jobs: self-hosted-runner: ${{ contains(inputs.runner, 'aks') }} - name: Install OpenVINO Python wheels - run: | - # To enable pytest parallel features - python3 -m pip install pytest-xdist[psutil] - python3 -m pip install ${INSTALL_DIR}/tools/openvino-* - python3 -m pip install ${INSTALL_DIR}/openvino_tokenizers-* + uses: ./openvino/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: false + install-tokenizers-wheel: true - name: Install JAX tests requirements for precommit run: | diff --git a/.github/workflows/job_onnx_models_tests.yml b/.github/workflows/job_onnx_models_tests.yml index 69fc100890a9f5..791ac216bd47ff 100644 --- a/.github/workflows/job_onnx_models_tests.yml +++ b/.github/workflows/job_onnx_models_tests.yml @@ -84,18 +84,22 @@ jobs: # - name: Update Models # run: bash ${OPENVINO_REPO}/src/frontends/onnx/tests/tests_python/model_zoo_preprocess.sh -d ${MODELS_SHARE_PATH} -o -s "${{ env.ONNX_MODEL_ZOO_SHA }}" - - name: Install OpenVINO Python wheels - run: | - # Install the core OV wheel - python3 -m pip install ${INSTALL_DIR}/tools/openvino-*.whl - - extras_to_install="onnx" + - name: Fetch install wheels action + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: + sparse-checkout: | + .github/actions/install_ov_wheels/action.yml + sparse-checkout-cone-mode: false + path: 'openvino' - # Find and install OV dev wheel - pushd ${INSTALL_DIR}/tools - ov_dev_wheel_name=$(find . -name 'openvino_dev*.whl') - python3 -m pip install $ov_dev_wheel_name[$extras_to_install] - popd + - name: Install OpenVINO Python wheels + uses: ./openvino/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: true + extras-to-install: 'onnx' + install-tokenizers-wheel: false - name: Install Python tests dependencies run: | diff --git a/.github/workflows/job_python_api_tests.yml b/.github/workflows/job_python_api_tests.yml new file mode 100644 index 00000000000000..4d872b1a92d2bd --- /dev/null +++ b/.github/workflows/job_python_api_tests.yml @@ -0,0 +1,149 @@ +name: OpenVINO Python API 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}' + python-version: + description: 'Python version to setup. E.g., "3.11"' + type: string + required: true + +permissions: read-all + +env: + PIP_CACHE_PATH: /mount/caches/pip/linux + +jobs: + Python_Unit_Tests: + name: OpenVINO Python API tests + timeout-minutes: 30 + 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 + steps: + + - name: Download OpenVINO package + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: openvino_package + path: ${{ env.INSTALL_DIR }} + + - name: Download OpenVINO tests package + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: openvino_tests + path: ${{ env.INSTALL_TEST_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" + + - 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: Fetch setup_python and install wheels actions + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: + sparse-checkout: | + .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml + sparse-checkout-cone-mode: false + path: 'action_root' + + - name: Setup Python ${{ inputs.python-version }} + uses: ./action_root/.github/actions/setup_python + with: + version: ${{ inputs.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' }} + + # + # Tests + # + - name: Install OpenVINO Python wheels + uses: ./action_root/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: true + extras-to-install: 'caffe,kaldi,onnx,tensorflow2,pytorch' + install-tokenizers-wheel: false + + - name: Install Python API tests dependencies + run: python3 -m pip install -r ${INSTALL_TEST_DIR}/bindings/python/requirements_test.txt + + # + # Tests + # + + - name: Python API Tests + run: | + # for 'template' extension + export LD_LIBRARY_PATH=${INSTALL_TEST_DIR}:$LD_LIBRARY_PATH + python3 -m pytest -sv ${INSTALL_TEST_DIR}/pyopenvino \ + --junitxml=${INSTALL_TEST_DIR}/TEST-Pyngraph.xml \ + --ignore=${INSTALL_TEST_DIR}/pyopenvino/tests/test_utils/test_utils.py + + - name: Python API Tests -- numpy>=2.0.0 + run: | + python3 -m pip uninstall -y numpy + python3 -m pip install "numpy>=2.0.0,<2.1.0" + python3 -m pip install -r ${INSTALL_TEST_DIR}/bindings/python/requirements_test.txt + # for 'template' extension + export LD_LIBRARY_PATH=${INSTALL_TEST_DIR}:$LD_LIBRARY_PATH + python3 -m pytest -sv ${INSTALL_TEST_DIR}/pyopenvino \ + --junitxml=${INSTALL_TEST_DIR}/TEST-Pyngraph_new_numpy.xml \ + --ignore=${INSTALL_TEST_DIR}/pyopenvino/tests/test_utils/test_utils.py + + - name: Clone API snippets + if: runner.os != 'macOS' + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: + sparse-checkout: docs/articles_en/assets/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/articles_en/assets + # for 'template' extension + export LD_LIBRARY_PATH=${INSTALL_TEST_DIR}:$LD_LIBRARY_PATH + python3 ${OPENVINO_REPO}/docs/articles_en/assets/snippets/main.py + + - name: Upload Test Results + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + if: ${{ !cancelled() }} + with: + name: test-results-python-api-${{ inputs.python-version }} + path: | + ${{ env.INSTALL_TEST_DIR }}/TEST*.html + ${{ env.INSTALL_TEST_DIR }}/TEST*.xml + if-no-files-found: 'warn' diff --git a/.github/workflows/job_python_unit_tests.yml b/.github/workflows/job_python_unit_tests.yml index 26ee7933d5f3b3..36d35c34ae8580 100644 --- a/.github/workflows/job_python_unit_tests.yml +++ b/.github/workflows/job_python_unit_tests.yml @@ -72,11 +72,12 @@ jobs: tar -xzf openvino_tests.tar.gz -C $INSTALL_DIR popd - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'action_root' @@ -91,19 +92,14 @@ jobs: # # Tests # - - name: Install OpenVINO Python wheels - run: | - # Install the core OV wheel - python3 -m pip install ${INSTALL_DIR}/tools/openvino-*.whl - - extras_to_install="caffe,kaldi,onnx,tensorflow2,pytorch" - - # Find and install OV dev wheel - pushd ${INSTALL_DIR}/tools - ov_dev_wheel_name=$(find . -name 'openvino_dev*.whl') - python3 -m pip install $ov_dev_wheel_name[$extras_to_install] - popd + uses: ./action_root/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: true + extras-to-install: 'caffe,kaldi,onnx,tensorflow2,pytorch' + install-tokenizers-wheel: false - name: Install Python API tests dependencies run: | @@ -119,15 +115,6 @@ jobs: # Tests # - - name: Python API Tests - if: ${{ fromJSON(inputs.affected-components).Python_API.test }} - run: | - # for 'template' extension - export LD_LIBRARY_PATH=${INSTALL_TEST_DIR}:$LD_LIBRARY_PATH - python3 -m pytest -sv ${INSTALL_TEST_DIR}/pyopenvino \ - --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: | @@ -160,7 +147,7 @@ jobs: python3 -m pip install -r ${LAYER_TESTS_INSTALL_DIR}/requirements.txt - name: MO Python API Tests - if: fromJSON(inputs.affected-components).MO.test + if: ${{ 'false' }} run: | # Import 'test_utils' installed in '/tests/python/openvino' export LD_LIBRARY_PATH=${PIP_INSTALL_PATH}/openvino/libs:$LD_LIBRARY_PATH @@ -244,40 +231,11 @@ jobs: TEST_DEVICE: CPU TEST_PRECISION: FP16 - - name: Clone API snippets - if: runner.os != 'macOS' - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - with: - sparse-checkout: docs/articles_en/assets/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/articles_en/assets - # for 'template' extension - export LD_LIBRARY_PATH=${INSTALL_TEST_DIR}:$LD_LIBRARY_PATH - python3 ${OPENVINO_REPO}/docs/articles_en/assets/snippets/main.py - - - name: Python API Tests -- numpy>=2.0.0 - if: ${{ fromJSON(inputs.affected-components).Python_API.test }} - run: | - python3 -m pip uninstall -y numpy - python3 -m pip install "numpy>=2.0.0,<2.1.0" - python3 -m pip install -r ${INSTALL_TEST_DIR}/bindings/python/requirements_test.txt - # for 'template' extension - export LD_LIBRARY_PATH=${INSTALL_TEST_DIR}:$LD_LIBRARY_PATH - python3 -m pytest -sv ${INSTALL_TEST_DIR}/pyopenvino \ - --junitxml=${INSTALL_TEST_DIR}/TEST-Pyngraph.xml \ - --ignore=${INSTALL_TEST_DIR}/pyopenvino/tests/test_utils/test_utils.py - - name: Upload Test Results uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 if: ${{ !cancelled() }} with: - name: test-results-python + name: test-results-python-${{ inputs.python-version }} path: | ${{ env.INSTALL_TEST_DIR }}/TEST*.html ${{ env.INSTALL_TEST_DIR }}/TEST*.xml diff --git a/.github/workflows/job_pytorch_layer_tests.yml b/.github/workflows/job_pytorch_layer_tests.yml index 50942cf331ab72..11bca1fa926a0d 100644 --- a/.github/workflows/job_pytorch_layer_tests.yml +++ b/.github/workflows/job_pytorch_layer_tests.yml @@ -83,11 +83,12 @@ jobs: Expand-Archive openvino_tests.zip -DestinationPath ${{ env.INSTALL_DIR }} popd - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -99,18 +100,13 @@ jobs: should-setup-pip-paths: ${{ runner.os == 'Linux' }} self-hosted-runner: ${{ runner.os == 'Linux' }} - - name: Install OpenVINO Python wheels (Linux and macOS) - if: runner.os != 'Windows' - run: | - # Install the core OV wheel - python3 -m pip install ${INSTALL_DIR}/tools/openvino-*.whl - - - name: Install OpenVINO Python wheels (Windows) - if: runner.os == 'Windows' - run: | - # Find and install the core OV wheel - $ovCoreWheelPath=Get-ChildItem -Path ${{ env.INSTALL_DIR }}\tools -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" + - name: Install OpenVINO Python wheels + uses: ./openvino/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: false + install-tokenizers-wheel: false - name: Install Pytorch Layer tests dependencies run: | diff --git a/.github/workflows/job_pytorch_models_tests.yml b/.github/workflows/job_pytorch_models_tests.yml index 6164bdb29c7d6f..e0a0d4683ff5a3 100644 --- a/.github/workflows/job_pytorch_models_tests.yml +++ b/.github/workflows/job_pytorch_models_tests.yml @@ -84,11 +84,12 @@ jobs: tar -xzf openvino_tests.tar.gz -C ${INSTALL_DIR} popd - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -107,10 +108,12 @@ jobs: self-hosted-runner: ${{ contains(inputs.runner, 'aks') }} - name: Install OpenVINO Python wheels - run: | - # To enable pytest parallel features - python3 -m pip install ${INSTALL_DIR}/tools/openvino-* - python3 -m pip install ${INSTALL_DIR}/openvino_tokenizers-* + uses: ./openvino/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: false + install-tokenizers-wheel: true - name: Install PyTorch tests requirements for precommit if: ${{ inputs.model_scope == 'precommit' }} diff --git a/.github/workflows/job_samples_tests.yml b/.github/workflows/job_samples_tests.yml index 0ada0e1557d965..29c6be4577ea42 100644 --- a/.github/workflows/job_samples_tests.yml +++ b/.github/workflows/job_samples_tests.yml @@ -120,9 +120,14 @@ jobs: export IE_APP_PATH=$INSTALL_DIR/samples_bin export IE_APP_PYTHON_PATH=$INSTALL_DIR/samples/python export SHARE=$INSTALL_TEST_DIR/smoke_tests/samples_smoke_tests_data - + # Install Python benchmark_app by installing openvino-*.whl - python3 -m pip install --ignore-installed PyYAML -r $INSTALL_TEST_DIR/smoke_tests/requirements.txt $INSTALL_DIR/tools/openvino-*.whl + pushd ${INSTALL_DIR}/tools + py_version=$(python3 -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor}')") + ov_wheel_name=$(find . -name "openvino-*cp$py_version*.whl") + python3 -m pip install --ignore-installed PyYAML -r $INSTALL_TEST_DIR/smoke_tests/requirements.txt $ov_wheel_name + popd + export LD_LIBRARY_PATH=${IE_APP_PATH}:$LD_LIBRARY_PATH source ${INSTALL_DIR}/setupvars.sh diff --git a/.github/workflows/job_tensorflow_layer_tests.yml b/.github/workflows/job_tensorflow_layer_tests.yml index e8d7b51e14c02f..afe016e262dc70 100644 --- a/.github/workflows/job_tensorflow_layer_tests.yml +++ b/.github/workflows/job_tensorflow_layer_tests.yml @@ -89,11 +89,12 @@ jobs: Expand-Archive openvino_tests.zip -DestinationPath ${{ env.INSTALL_DIR }} popd - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -105,25 +106,13 @@ jobs: should-setup-pip-paths: ${{ runner.os == 'Linux' }} self-hosted-runner: ${{ runner.os == 'Linux' }} - - name: Install OpenVINO Python wheels (Linux and macOS) - if: runner.os != 'Windows' - run: | - # Install the core OV wheel - python3 -m pip install ${INSTALL_DIR}/tools/openvino-*.whl - - # Install the core OV Tokenizers wheel - python3 -m pip install ${INSTALL_DIR}/openvino_tokenizers-*.whl - - - name: Install OpenVINO Python wheels (Windows) - if: runner.os == 'Windows' - run: | - # Find and install the core OV wheel - $ovCoreWheelPath=Get-ChildItem -Path ${{ env.INSTALL_DIR }}\tools -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" - - # Find and install the core OV Tokenizers wheel - $ovCoreWheelPath=Get-ChildItem -Path ${{ env.INSTALL_DIR }} -Filter openvino_tokenizers-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" + - name: Install OpenVINO Python wheels + uses: ./openvino/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: false + install-tokenizers-wheel: true - name: Install Python Layer tests dependencies run: | diff --git a/.github/workflows/job_tensorflow_models_tests.yml b/.github/workflows/job_tensorflow_models_tests.yml index e9f6f130e0c24e..46d22ea9dc37e8 100644 --- a/.github/workflows/job_tensorflow_models_tests.yml +++ b/.github/workflows/job_tensorflow_models_tests.yml @@ -76,11 +76,12 @@ jobs: tar -xzf openvino_tests.tar.gz -C ${INSTALL_DIR} popd - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -92,9 +93,12 @@ jobs: self-hosted-runner: ${{ contains(inputs.runner, 'aks') }} - name: Install OpenVINO Python wheels - run: | - python3 -m pip install ${INSTALL_DIR}/tools/openvino-* - python3 -m pip install ${INSTALL_DIR}/openvino_tokenizers-* + uses: ./openvino/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: false + install-tokenizers-wheel: true - name: Install TF Models tests requirements run: python3 -m pip install -r ${INSTALL_TEST_DIR}/requirements_tensorflow diff --git a/.github/workflows/job_tokenizers.yml b/.github/workflows/job_tokenizers.yml index fdd0a76088c725..f7bca646dad153 100644 --- a/.github/workflows/job_tokenizers.yml +++ b/.github/workflows/job_tokenizers.yml @@ -55,6 +55,7 @@ jobs: with: sparse-checkout: | .github/actions/setup_python + .github/actions/install_ov_wheels/action.yml .github/actions/cache install_build_dependencies.sh @@ -97,21 +98,13 @@ jobs: # Dependencies # - - name: Install OpenVINO Python wheel (Linux and macOS) - if: runner.os != 'Windows' - run: | - # Find and install wheel - pushd ${INSTALL_DIR}/tools - wheel_name=$(find . -name 'openvino-*.whl') - python3 -m pip install $wheel_name - popd - - - name: Install OpenVINO Python wheel (Windows) - if: runner.os == 'Windows' - run: | - # Find and install wheel - $ovCoreWheelPath=Get-ChildItem -Path "${{ env.INSTALL_DIR }}\\tools" -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" + - name: Install OpenVINO Python wheels + uses: ./.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: false + install-tokenizers-wheel: false # # Build diff --git a/.github/workflows/linux_arm64.yml b/.github/workflows/linux_arm64.yml index e4e608f3aca6d4..2baba97390b962 100644 --- a/.github/workflows/linux_arm64.yml +++ b/.github/workflows/linux_arm64.yml @@ -167,6 +167,16 @@ jobs: affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' + Python_API_Tests: + name: OpenVINO Python API tests + needs: [ Docker, Build, Smart_CI ] + uses: ./.github/workflows/job_python_api_tests.yml + with: + runner: 'aks-linux-16-cores-arm' + container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_20_04_arm64 }}", "volumes": ["/mount:/mount"]}' + python-version: '3.11' + if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test + TensorFlow_Layer_Tests: name: TensorFlow Layer Tests needs: [ Build, Docker, Smart_CI, Openvino_tokenizers ] diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml index 20db9de1776015..9285caa5559caf 100644 --- a/.github/workflows/mac.yml +++ b/.github/workflows/mac.yml @@ -270,6 +270,15 @@ jobs: affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' + Python_API_Tests: + name: OpenVINO Python API tests + needs: [ Build, Smart_CI ] + uses: ./.github/workflows/job_python_api_tests.yml + with: + runner: 'macos-13' + python-version: '3.11' + if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test + TensorFlow_Layer_Tests: name: TensorFlow Layer Tests needs: [ Build, Smart_CI, Openvino_tokenizers ] diff --git a/.github/workflows/mac_arm64.yml b/.github/workflows/mac_arm64.yml index a38179f71fb60c..47bc710006e252 100644 --- a/.github/workflows/mac_arm64.yml +++ b/.github/workflows/mac_arm64.yml @@ -269,6 +269,15 @@ jobs: affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' + Python_API_Tests: + name: OpenVINO Python API tests + needs: [ Build, Smart_CI ] + uses: ./.github/workflows/job_python_api_tests.yml + with: + runner: 'macos-13-xlarge' + python-version: '3.11' + if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test + TensorFlow_Layer_Tests: name: TensorFlow Layer Tests needs: [ Build, Smart_CI, Openvino_tokenizers ] diff --git a/.github/workflows/ubuntu_22.yml b/.github/workflows/ubuntu_22.yml index 2c20e5136cfc4e..d0e39354faa06d 100644 --- a/.github/workflows/ubuntu_22.yml +++ b/.github/workflows/ubuntu_22.yml @@ -92,6 +92,7 @@ jobs: build-contrib: true build-debian-packages: true build-rpm-packages: false + build-additional-python-wheels: true cmake-options: |- -G "Ninja Multi-Config" \ -DENABLE_CPPLINT=OFF \ @@ -299,6 +300,20 @@ jobs: affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' + Python_API_Tests: + name: OpenVINO Python API tests + needs: [ Docker, Build, Smart_CI ] + uses: ./.github/workflows/job_python_api_tests.yml + strategy: + fail-fast: false + matrix: + python-version: [ '3.9', '3.10', '3.11', '3.12' ] + with: + runner: 'aks-linux-4-cores-16gb' + container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' + python-version: ${{ matrix.python-version }} + if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test + TensorFlow_Layer_Tests: name: TensorFlow Layer Tests needs: [ Docker, Build, Smart_CI, Openvino_tokenizers ] diff --git a/.github/workflows/ubuntu_24.yml b/.github/workflows/ubuntu_24.yml index 295a4dd0e2c61a..4a9aa20ff2a045 100644 --- a/.github/workflows/ubuntu_24.yml +++ b/.github/workflows/ubuntu_24.yml @@ -133,6 +133,16 @@ jobs: affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.12' + Python_API_Tests: + name: OpenVINO Python API tests + needs: [ Docker, Build, Smart_CI ] + uses: ./.github/workflows/job_python_api_tests.yml + with: + runner: 'aks-linux-4-cores-16gb' + container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_24_04_x64 }}", "volumes": ["/mount:/mount"]}' + python-version: '3.12' + if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test + Pytorch_Layer_Tests: name: Pytorch Layer Tests needs: [ Docker, Build, Smart_CI ] diff --git a/.github/workflows/windows_vs2019_release.yml b/.github/workflows/windows_vs2019_release.yml index 122fcc3c1c5021..1dc7b3aa35a020 100644 --- a/.github/workflows/windows_vs2019_release.yml +++ b/.github/workflows/windows_vs2019_release.yml @@ -127,8 +127,12 @@ jobs: - name: Samples tests run: | # Install Python benchmark_app by installing openvino-*.whl - $ovCoreWheelPath=Get-ChildItem -Path "${{ env.INSTALL_DIR }}\tools" -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install --ignore-installed PyYAML -r ${{ env.INSTALL_TEST_DIR }}/smoke_tests/requirements.txt "$ovCoreWheelPath" + # Find and install OV core wheel + Push-Location "${{ env.INSTALL_DIR }}\tools" + $py_version = python3 -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor}')" + $ov_wheel_name = Get-ChildItem -Name "openvino-*cp$py_version*.whl" -Recurse + python3 -m pip install --ignore-installed PyYAML -r ${{ env.INSTALL_TEST_DIR }}/smoke_tests/requirements.txt $ov_wheel_name + Pop-Location . "${{ env.INSTALL_DIR }}/setupvars.ps1" $Env:PYTHONCOERCECLOCALE="warn" python3 -bb -W error -X dev -X warn_default_encoding -m pytest ${{ env.INSTALL_TEST_DIR }}/smoke_tests --numprocesses auto @@ -262,11 +266,12 @@ jobs: Expand-Archive openvino_tests.zip -DestinationPath "${{ env.INSTALL_DIR }}" popd - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -279,14 +284,13 @@ jobs: self-hosted-runner: 'true' - name: Install OpenVINO Python wheels - run: | - # Find and install the core OV wheel - $ovCoreWheelPath=Get-ChildItem -Path "${{ env.INSTALL_DIR }}\tools" -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" - - # Find and install the dev OV wheel - $ovDevWheelPath=Get-ChildItem -Path "${{ env.INSTALL_DIR }}\tools" -Filter openvino_dev*.whl | % { $_.FullName } - python3 -m pip install "$ovDevWheelPath[caffe,kaldi,onnx,tensorflow2,pytorch]" + uses: ./openvino/.github/actions/install_ov_wheels + with: + install-dir-path: ${{ env.INSTALL_DIR }} + install-core-wheel: true + install-dev-wheel: true + extras-to-install: 'caffe,kaldi,onnx,tensorflow2,pytorch' + install-tokenizers-wheel: false - name: Install Python API tests dependencies run: |