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:
- GitHub Actions Runners - runners provided and managed by GitHub
- Self-hosted Runners - runners created and managed by the OpenVINO CI team and linked to the OpenVINO repositories
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
- Note: The groups with unspecified
|{ARCH}|- optional, the architecture of the runners in the group:arm- Note: The groups with unspecified
{ARCH}consist of thex86_64runners
- Note: The groups with unspecified
Examples:
aks-win-16-cores-32gb- the Windows x86_64 runners with 16 cores and 32 GB of RAM availableaks-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.