Integrate GPU-Accelerated Channel Simulation + CI Test Pipeline This MR builds on top of MR !3588 (feat: GPU Accelerated Channel Simulation Pipeline). The main portion of the changes is directly taken from MR !3588, and focuses on integrating the GPU-accelerated channel simulation. On top of that, this MR adds CI-related configurations to introduce a new channel simulation testing pipeline into the CI --> RAN-Channel-Simulation This MR introduces a CUDA-based pipeline to offload the multipath_channel and add_noise channel simulation functions to the GPU. This enables large-scale, real-time physical layer simulations not possible on the CPU. For full documentation, please see the file at openair1/SIMULATION/TOOLS/DOC/gpu_acceleration.md. System & Compiler Requirements: An NVIDIA GPU with a compatible driver and the CUDA Toolkit installed. This feature was developed and tested on the GH200 server using the GCC 12 toolchain. To ensure reproducibility, building with GCC 12 is highly recommended. Build Instructions The primary flag to enable this feature is -DCUDA_ENABLE=ON. The following command shows a sample configuration used during development on the GH200 server: ./build_oai --phy_simulators --cmake-opt "\ -DCUDA_ENABLE=ON \ -DUSE_UNIFIED_MEMORY=ON \ -DUSE_ATS_MEMORY=OFF \ -DCMAKE_C_COMPILER=/usr/bin/gcc-12 \ -DCMAKE_CXX_COMPILER=/usr/bin/g++-12 \ -DENABLE_TESTS=ON" Memory Model Configuration The pipeline supports multiple CUDA memory management modes, which can be configured at compile time. ATS Memory (-DUSE_ATS_MEMORY=ON) is enabled by default. To use another memory model, you must first disable ATS. For a detailed explanation of these models, please refer to Section 3 of the gpu_acceleration.md report.
This document outlines how to use the OAI CI framework and gives a quickstart.
[[TOC]]
Quickstart
There is a script main.py that
- reads scenario files from XML
- executes the steps (e.g., deployment of CN/gNB/UE, attach, ping, ...)
To simplify, a script run_locally.sh can be used to run a single scenario
locally. First, download images for gNB&UE (we assume you already downloaded
the CN) and tag them "latest", which is expected by run_locally.sh:
docker pull oaisoftwarealliance/oai-gnb:develop
docker tag oaisoftwarealliance/oai-gnb:develop oai-gnb
docker pull oaisoftwarealliance/oai-nr-ue:develop
docker tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue
Now, run the scenario:
cd ~/openairinterface5g/ci-scripts/
./run_locally.sh xml_files/container_5g_rfsim_simple.xml
Output should look like
[2025-08-07 18:07:49,631] INFO: ----------------------------------------
[2025-08-07 18:07:49,631] INFO: Creating HTML header
[2025-08-07 18:07:49,631] INFO: ----------------------------------------
[2025-08-07 18:07:49,766] INFO: ----------------------------------------
[2025-08-07 18:07:49,767] INFO: Starting Scenario: xml_files/container_5g_rfsim_simple.xml
[2025-08-07 18:07:49,767] INFO: ----------------------------------------
[2025-08-07 18:07:49,767] INFO: placing all artifacts for this run in /home/richie/oai/cmake_targets/log/container_5g_rfsim_simple.xml.d/
[...]
[2025-08-07 18:07:49,771] INFO: ----------------------------------------
[2025-08-07 18:07:49,771] INFO: Test ID: 1 (#1)
[2025-08-07 18:07:49,771] INFO: Deploy OAI 5G CoreNetwork
[2025-08-07 18:07:49,771] INFO: ----------------------------------------
it will run an end-to-end test, connecting one UE to the gNB, and ping, before
undeploying. As shown, logs will be under
/home/richie/oai/cmake_targets/log/container_5g_rfsim_simple.xml.d/. The
python code also produces an HTML report in ci-scripts/test_results.html.
Running with local changes
In order to run the tests as above, with local changes, please build images locally.
It is not yet possible to override an existing image with changes made locally to a source file and run it directly through the CI framework. However, it is possible to override an existing image with local changes, and run the scenario manually following the console logs steps provided above. This is described in the 5G RFsimulator README.