Skip to content

[CPU][GHA] CPU tests on riscV arch #67

[CPU][GHA] CPU tests on riscV arch

[CPU][GHA] CPU tests on riscV arch #67

name: Linux developer RISC-V workflow for CPU plugin (Ubuntu 22.04, Python 3.10)
on:
workflow_dispatch:
pull_request:
paths:
- '.github/workflows/dev_cpu_linux_riscv.yml'
concurrency:
# github.ref is not unique in post-commit
group: ${{ github.event_name == 'push' && github.run_id || github.ref }}-dev-cpu-linux-riscv
cancel-in-progress: true
permissions: read-all
jobs:
# copypaste form linux_riscv.yml until refactoring with reusable actions
Smart_CI:
runs-on: ubuntu-latest
outputs:
affected_components: "${{ steps.smart_ci.outputs.affected_components }}"
changed_components: "${{ steps.smart_ci.outputs.changed_components }}"
skip_workflow: "${{ steps.smart_ci.outputs.skip_workflow }}"
steps:
- name: checkout action
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
sparse-checkout: .github/actions/smart-ci
- name: Get affected components
id: smart_ci
uses: ./.github/actions/smart-ci
with:
repository: ${{ github.repository }}
pr: ${{ github.event.number }}
commit_sha: ${{ github.sha }}
ref_name: ${{ github.ref_name }}
component_pattern: "category: (.*)"
repo_token: ${{ secrets.GITHUB_TOKEN }}
skip_when_only_listed_labels_set: 'docs'
skip_when_only_listed_files_changed: '*.md,*.rst,*.png,*.jpg,*.svg,*/layer_tests_summary/*,*/conformance/*'
Docker:
needs: Smart_CI
runs-on: aks-linux-4-cores-16gb-docker-build
container:
image: openvinogithubactions.azurecr.io/docker_build:0.2
volumes:
- /mount:/mount
outputs:
images: "${{ steps.handle_docker.outputs.images }}"
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: ./.github/actions/handle_docker
id: handle_docker
with:
images: |
ov_build/ubuntu_22_04_riscv
registry: 'openvinogithubactions.azurecr.io'
dockerfiles_root_dir: '.github/dockerfiles'
changed_components: ${{ needs.smart_ci.outputs.changed_components }}
Build:
needs: [Smart_CI, Docker]
timeout-minutes: 150
defaults:
run:
shell: bash
runs-on: aks-linux-16-cores-32gb
container:
image: ${{ fromJSON(needs.docker.outputs.images).ov_build.ubuntu_22_04_riscv }}
volumes:
- /mount:/mount
env:
DEBIAN_FRONTEND: noninteractive # to prevent apt-get from waiting user input
CMAKE_BUILD_TYPE: 'Release'
CMAKE_GENERATOR: 'Ninja Multi-Config'
CMAKE_CXX_COMPILER_LAUNCHER: ccache
CMAKE_C_COMPILER_LAUNCHER: ccache
SCCACHE_IGNORE_SERVER_IO_ERROR: 1
SCCACHE_SERVER_PORT: 35555
SCCACHE_ERROR_LOG: /__w/openvino/sccache_log.txt
SCCACHE_LOG: warn
GITHUB_WORKSPACE: '/__w/openvino/openvino'
OPENVINO_REPO: /__w/openvino/openvino/openvino
INSTALL_DIR: /__w/openvino/openvino/openvino_install
INSTALL_TEST_DIR: /__w/openvino/openvino/tests_install
BUILD_DIR: /__w/openvino/openvino/openvino_build
SCCACHE_AZURE_KEY_PREFIX: ubuntu20_x86_64_Release
XUANTIE_DIR: /__w/openvino/xuantie
CCACHE_REMOTE_DIR: /mount/caches/ccache/ubuntu22_riscv64/${{ github.base_ref || github.ref_name }}
CCACHE_DIR: /__w/openvino/openvino/ccache
CCACHE_TEMPDIR: /__w/openvino/openvino/ccache_temp
CCACHE_MAXSIZE: 2G
XUANTIE_BIN_PATH: /mount/testdata1/
XUANTIE_TAR_NAME: 'Xuantie-900-gcc-linux-5.15.0-glibc-x86_64-V2.8.1'
if: "!needs.smart_ci.outputs.skip_workflow"
steps:
- name: Clone OpenVINO
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
path: ${{ env.OPENVINO_REPO }}
submodules: 'true'
#
# Print system info
#
- name: System info
uses: ./openvino/.github/actions/system_info
# remove ?
- name: Setup ccache
id: ccache_restore
uses: ./openvino/.github/actions/cache
with:
save-always: ${{ github.event_name == 'push' && 'true' || 'false' }}
cleanup-always: ${{ github.event_name == 'push' && 'true' || 'false' }}
cache-size: 10
max-cache-size: 50
cache-path: ${{ env.CCACHE_REMOTE_DIR }}
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-${{ runner.arch }}-ccache-${{ github.sha }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-ccache
- name: Init XUANTIE
run: |
mkdir ${XUANTIE_DIR}
pushd ${XUANTIE_DIR}
echo 'what is going on ?'
ls -la ${XUANTIE_BIN_PATH}
cp ${XUANTIE_BIN_PATH}${XUANTIE_TAR_NAME}.tar ${XUANTIE_DIR}
ls -la ${XUANTIE_DIR}
tar -xf ${XUANTIE_TAR_NAME}.tar
chmod -R 777 ${XUANTIE_TAR_NAME}
ls -la ${XUANTIE_TAR_NAME}/libexec/gcc/riscv64-unknown-linux-gnu/10.4.0/
python3 -m pip install --upgrade pip setuptools wheel
echo 'prepare py - riscv interaction'
ln -s /usr/include/riscv64-linux-gnu/ /usr/include/python3.10/
# echo 'show old link'
# ls -la ${XUANTIE_DIR}/libexec/gcc/riscv64-unknown-linux-gnu/10.4.0/
# echo 'show new link'
# cd ${XUANTIE_DIR}/libexec/gcc/riscv64-unknown-linux-gnu/10.4.0/
# ln -s liblto_plugin.so.0.0.0 liblto_plugin.so
popd
- name: CMake configure - OpenVINO - 2
run: |
cmake \
-G "${{ env.CMAKE_GENERATOR }}" \
-DENABLE_CPPLINT=OFF \
-DENABLE_NCC_STYLE=OFF \
-DENABLE_TESTS=ON \
-DENABLE_INTEL_CPU=ON \
-DENABLE_INTEL_GPU=OFF \
-DENABLE_INTEL_NPU=OFF \
-DENABLE_SAMPLES=ON \
-DCMAKE_TOOLCHAIN_FILE=${OPENVINO_REPO}/cmake/toolchains/riscv64-071-thead-gnu.toolchain.cmake \
-DRISCV_TOOLCHAIN_ROOT=${XUANTIE_DIR}/${XUANTIE_TAR_NAME} \
-DENABLE_PYTHON=ON \
-DENABLE_PYTHON_PACKAGING=ON \
-DENABLE_WHEEL=ON \
-DENABLE_STRICT_DEPENDENCIES=OFF \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DCPACK_GENERATOR=TGZ \
-DCMAKE_COMPILE_WARNING_AS_ERROR=OFF \
-DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CMAKE_CXX_COMPILER_LAUNCHER }} \
-DCMAKE_C_COMPILER_LAUNCHER=${{ env.CMAKE_C_COMPILER_LAUNCHER }} \
-S ${OPENVINO_REPO} \
-B ${BUILD_DIR}
- name: Cmake build - OpenVINO
run: cmake --build ${BUILD_DIR} --parallel --config ${{ env.CMAKE_BUILD_TYPE }}
- name: Cmake install - OpenVINO
run: |
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -P ${BUILD_DIR}/cmake_install.cmake
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} -DCOMPONENT=tests -P ${BUILD_DIR}/cmake_install.cmake
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCOMPONENT=python_wheels -P ${BUILD_DIR}/cmake_install.cmake
- name: Pack Artifacts
run: |
pushd ${INSTALL_DIR}
tar -czvf ${BUILD_DIR}/openvino_package.tar.gz *
popd
pushd ${INSTALL_TEST_DIR}
tar -czvf ${BUILD_DIR}/openvino_tests.tar.gz *
popd
#
# Upload build artifacts and logs
#
- name: Upload XUANTIE
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
if: always()
with:
name: xuantie
path: ${{ env.XUANTIE_DIR }}
if-no-files-found: 'ignore'
- name: Upload build logs
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
if: always()
with:
name: build_logs
path: ${{ env.SCCACHE_ERROR_LOG }}
if-no-files-found: 'ignore'
- name: Upload openvino package
if: ${{ always() }}
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
with:
name: openvino_package
path: ${{ env.BUILD_DIR }}/openvino_package.tar.gz
if-no-files-found: 'error'
- name: Upload openvino tests package
if: ${{ always() }}
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
with:
name: openvino_tests
path: ${{ env.BUILD_DIR }}/openvino_tests.tar.gz
if-no-files-found: 'error'
- name: Clean ccache
run: ccache --cleanup
CPU_Functional_Tests:
name: CPU functional tests
needs: [ Docker, Build, Smart_CI ]
timeout-minutes: 30
runs-on: aks-linux-8-cores-32gb
container:
image: ${{ fromJSON(needs.docker.outputs.images).ov_build.ubuntu_22_04_riscv }}
volumes:
- /mount:/mount
defaults:
run:
shell: bash
env:
DEBIAN_FRONTEND: noninteractive # to prevent apt-get from waiting user input
INSTALL_DIR: ${{ github.workspace }}/install
INSTALL_TEST_DIR: ${{ github.workspace }}/install/tests
# PARALLEL_TEST_SCRIPT: ${{ github.workspace }}/install/tests/functional_test_utils/layer_tests_summary/run_parallel.py
XUANTIE_TAR_NAME: 'Xuantie-900-gcc-linux-5.15.0-glibc-x86_64-V2.8.1'
XUANTIE_DIR: /__w/openvino/xuantie
steps:
- name: Download OpenVINO package
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: xuantie
path: ${{ env.XUANTIE_DIR }}
- 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 "INSTALL_TEST_DIR=$GITHUB_WORKSPACE/install/tests" >> "$GITHUB_ENV"
# echo 'show tests dir'
# ls -la ${{ env.INSTALL_TEST_DIR }}
# Needed as ${{ github.workspace }} is not working correctly when using Docker
- name: Setup Variables
run: |
echo "INSTALL_DIR=$GITHUB_WORKSPACE/install" >> "$GITHUB_ENV"
echo "INSTALL_TEST_DIR=$GITHUB_WORKSPACE/install/tests" >> "$GITHUB_ENV"
# echo "PARALLEL_TEST_SCRIPT=$GITHUB_WORKSPACE/install/tests/functional_test_utils/layer_tests_summary/run_parallel.py" >> "$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_TEST_DIR
ls -la $INSTALL_TEST_DIR/tests
popd
# - name: Fetch setup_python action
# uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
# with:
# sparse-checkout: |
# .github/actions/setup_python/action.yml
# sparse-checkout-cone-mode: false
# path: 'openvino'
# # - name: Setup Python 3.11
# # uses: ./openvino/.github/actions/setup_python
# # with:
# # version: '3.11'
# # should-setup-pip-paths: 'false'
# # self-hosted-runner: ${{ runner.os == 'Linux' }}
# - name: Install python dependencies for run_parallel.py
# run: python3 -m pip install -r ${INSTALL_DIR}/functional_test_utils/layer_tests_summary/requirements.txt
- name: Intel CPU plugin func tests
run: |
# Needed as the Linux CC does not require setupvars to work
if [[ -f "${INSTALL_DIR}/setupvars.sh" ]]; then
source ${INSTALL_DIR}/setupvars.sh
fi
# Needed as ze_loader.so is under INSTALL_TEST_DIR
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${INSTALL_TEST_DIR}/tests
# ls -LA ${XUANTIE_DIR}/${XUANTIE_TAR_NAME}/
chmod -R 777 ${XUANTIE_DIR}/${XUANTIE_TAR_NAME}
# apt-get install libgomp1
# apt-get update && apt-get install -y --no-install-recommends apt-utils
# apt-get -y install curl
# apt-get install libgomp1
${XUANTIE_DIR}/${XUANTIE_TAR_NAME}/bin/qemu-riscv64 ${INSTALL_TEST_DIR}/tests/ov_cpu_func_tests --gtest_filter=*smoke_AdaPoolAvg4DLayoutTest* --gtest_print_time=1
timeout-minutes: 25
# - name: Upload Test Results
# uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
# if: always()
# with:
# name: test-results-functional-cpu
# path: |
# ${{ env.INSTALL_TEST_DIR }}/temp/*.log
# ${{ env.INSTALL_TEST_DIR }}/logs/*.log
# ${{ env.INSTALL_TEST_DIR }}/logs/failed/*.log
# ${{ env.INSTALL_TEST_DIR }}/logs/crashed/*.log
# ${{ env.INSTALL_TEST_DIR }}/logs/hanged/*.log
# ${{ env.INSTALL_TEST_DIR }}/logs/interapted/*.log
# ${{ env.INSTALL_TEST_DIR }}/logs/hash_table.csv
# if-no-files-found: 'error'
# Overall_Status:
# name: ci/gha_overall_status_linux_riscv
# needs: [Smart_CI, Build]
# if: ${{ always() }}
# runs-on: ubuntu-latest
# steps:
# - name: Check status of all jobs
# if: >-
# ${{
# contains(needs.*.result, 'failure') ||
# contains(needs.*.result, 'cancelled')
# }}
# run: exit 1