openvino/docs/dev/ci/github_actions/runners.md

5.0 KiB

Overview of the Runners used in the OpenVINO GitHub Actions CI

The machines that execute the commands from the workflows are referred to as runners in GitHub Actions.

Two types of runners are available in this repository:

The runners are specified for each job using the runs-on key.

An example Build job from the linux.yml workflow:

Build:
  ...
  runs-on: aks-linux-16-cores-32gb
  ...

The aks-linux-16-cores-32gb runners group is used for this job.

Available GitHub Actions Runners

GitHub provides runners with different combinations of available resources and software.

The OpenVINO repositories make use of the following runners:

  • The default runners: ubuntu-22/20.04, windows-2019/2022, macos-12/13, etc.
    • Used for not-so-intensive memory and CPU tasks
  • The larger runners: you can find the list of the available larger runners here
    • Used for memory and CPU heavy tasks

Available Self-hosted Runners

The self-hosted runners are dynamically spawned for each requested pipeline. Several configurations of the self-hosted runners are available, they are identified by different group names.

The group names generally follow the pattern: aks-{OS}-{CORES_N}-cores-|{RAM_SIZE}gb|-|{ARCH}|, where:

  • {OS} - the operating system: win/linux
    • Note: Currently, only Windows and Linux self-hosted runners are available.
  • {CORES_N} - the number of cores available to the runners in the group: 4/8/etc.
  • |{RAM_SIZE}gb| - optional, the RAM size in GB available to the runners in the group: 8/16/etc.
    • Note: The groups with unspecified {RAM_SIZE} consist of the runners with 32 GB of RAM
  • |{ARCH}| - optional, the architecture of the runners in the group: arm
    • Note: The groups with unspecified {ARCH} consist of the x86_64 runners

Examples:

  • aks-win-16-cores-32gb - the Windows x86_64 runners with 16 cores and 32 GB of RAM available
  • aks-linux-16-cores-arm - the Linux ARM64 runners with 16 cores and 32 GB of RAM available

The available configurations are:

Group Name CPU Cores RAM in GB Architecture Examples
Windows aks-win-* 4/8/16 8/16/32 x86_64* aks-win-4-cores-8gb/aks-win-16-cores-32gb
Linux aks-linux-* 4/8/16 16/32 x86_64* aks-linux-4-cores-16gb/aks-linux-16-cores-32gb
Linux ARM64 aks-linux-*-arm 16 32* arm aks-linux-16-cores-arm
  • * - Not specified in the group name

How to choose a Runner

The configuration of a runner required for a job (building, testing, etc.) stems from the nature of the job: the more memory and/or CPU-intensive it is, the more robust configuration is required.

The Build job in the linux.yml workflow uses the aks-linux-16-cores-32gb group as specified in the runs-on key:

Build:
  ...
  runs-on: aks-linux-16-cores-32gb
  ...

This group has machines with 16 core CPU and 32 GB of RAM, which could be utilized in parallel by the build tools used in the Build job.

The C++ unit tests job in the linux.yml workflow uses the aks-linux-4-cores-16gb group:

CXX_Unit_Tests:
  name: C++ unit tests
  ...
  with:
    runner: aks-linux-4-cores-16gb
    ...

As the C++ tests could not utilize the large number of cores for parallel execution as the build tools in the Build job could, it would be pointless to use the aks-linux-16-cores-32gb group for them.

The advice is to use runners with more cores/RAM size for the tasks that could load them.

It is possible to experiment with different configurations before deciding, i.e., run a job on runners from different groups and observe the gains; if they are significant, e.g., 60 minutes on a 4-core runner vs. 15 minutes on a 16-core runner, it is better to use those with more cores.