Documentation and formatting updates #1
165
README.md
165
README.md
|
@ -1,8 +1,7 @@
|
|||
# Modulation Recognition Demo
|
||||
|
||||
RIA Hub Workflows is an automation platform built into RIA Hub. This project contains an example machine learning
|
||||
workflow for the problem of signal modulation classification. It also serves as an excellent introduction to
|
||||
RIA Hub Workflows.
|
||||
RIA Hub Workflows is an automation platform integrated into RIA Hub. This project provides an example machine learning
|
||||
workflow for signal modulation classification, offering a practical introduction to RIA Hub Workflows
|
||||
|
||||
|
||||
## 📡 The machine learning development workflow
|
||||
|
@ -10,24 +9,24 @@ RIA Hub Workflows.
|
|||
The development of intelligent radio solutions involves multiple steps:
|
||||
|
||||
1. First, we need to prepare a machine learning-ready dataset. This involves signal synthesis or capture, followed by
|
||||
dataset curation to extract and qualify training examples. Finally, we need to perform any required data preprocessing
|
||||
—such as augmentation—and split the dataset into training and test sets.
|
||||
dataset curation to extract and qualify examples. Finally, we need to perform any required data preprocessing—such as
|
||||
augmentation—and split the dataset into training and test sets.
|
||||
|
||||
|
||||
2. Secondly, we need to design and train a model. This is often an iterative process and can leverage techniques like
|
||||
Neural Architecture Search (NAS) and hyperparameter optimization to automate finding a suitable model structure and
|
||||
optimal hyperparameter configuration, respectively.
|
||||
2. Secondly, we need to design and train a model. This is typically an iterative process, often accelerated using
|
||||
techniques such as Neural Architecture Search (NAS) and hyperparameter optimization (HPO), which help automate the
|
||||
discovery of an effective model structure and optimal hyperparameter settings.
|
||||
|
||||
|
||||
3. Once a machine learning model has been trained and validated, the next step is to build an inference application.
|
||||
This step transforms the model from a research artifact into a practical tool capable of making predictions in
|
||||
real-world conditions. Building an inference application typically involves several substeps including model
|
||||
real-world conditions. Building an inference application typically involves several steps including model
|
||||
optimization, packaging and integration, and monitoring and logging.
|
||||
|
||||
This is a lot of work, and much of it involves tedious software development and repetitive tasks like setting up and
|
||||
This is a lot of work, and much of it involves tedious software development and repetitive tasks, like setting up and
|
||||
configuring infrastructure. What's more? There is a shortage of domain expertize in ML and MLOps for radio. That's
|
||||
where we come in. RIA Hub offers a no- and low-code solution for the end-to-end development of intelligent radio
|
||||
systems, allowing for a sharper focus on innovation.
|
||||
where we come in. RIA Hub offers a no-code and low-code solution for automating the end-to-end development of
|
||||
intelligent radio systems.
|
||||
|
||||
|
||||
## ▶️ RIA Hub Workflows
|
||||
|
@ -35,25 +34,34 @@ systems, allowing for a sharper focus on innovation.
|
|||
One of the core principles of RIA Hub is Workflows, which allow users to run jobs in isolated Docker containers.
|
||||
|
||||
You can create workflows in one of two ways:
|
||||
- Writing YAML and placing it in the special `.riahub/workflows/` directory in your repository.
|
||||
- Writing YAML and placing it in the special `.riahub/workflows/` directory in your repository.
|
||||
|
||||
|
||||
- Using RIA Hub's built-in tools for Dataset Management, Model Building, and Application Development, which will
|
||||
automatically generate the YAML workflow file(s) for you.
|
||||
|
||||
Workflows can be configured to run automatically on push and pull request events. You can monitor and manage running
|
||||
workflows in the 'Workflows' tab in your repository.
|
||||
|
||||
Workflows require a _runner_, which retrieves job definitions from RIA Hub, executes them in isolated containers, and
|
||||
reports the results back to RIA Hub. The next section outlines the convenience and advantage of using Qoherent-hosted
|
||||
runners. The workflow configuration defines the specifications and settings of the available job containers.
|
||||
|
||||
The best part? RIA Hub Workflows are built on [Gitea Actions](https://docs.gitea.com/usage/actions/overview) (similar to [GitHub Actions](https://github.com/features/actions)), providing a
|
||||
familiar syntax and allowing you to leverage a wide range of third-party Actions.
|
||||
|
||||
|
||||
## ⚙️ Qoherent-hosted runners
|
||||
|
||||
Qoherent-hosted runners are job containers that Qoherent provides and manages to run your workflows and jobs in RIA Hub
|
||||
Workflows.
|
||||
Qoherent-hosted runners are workflow runners that Qoherent provides and manages to run your workflows and jobs in
|
||||
RIA Hub Workflows.
|
||||
|
||||
Why use GitHub-hosted runners?
|
||||
- Easy to set up and start running workflows quickly, without the need to set up your own infrastructure.
|
||||
- Qoherent maintains runners equipped with access to common hardware and tools for radio ML development, including
|
||||
Why use Qoherent-hosted runners?
|
||||
- Start running workflows right away, without the need to set up your own infrastructure.
|
||||
- Qoherent maintains runners equipped with access to hardware and tools common for radio ML development, including
|
||||
SDR testbeds and common embedded targets.
|
||||
|
||||
If you want to learn more about the runners we have available, please feel free to reach out. We can also provide
|
||||
If you want to learn more about the runners we have available, [contact us](https://www.qoherent.ai/contact/) directly. We can also provide
|
||||
custom runners equipped with specific radio hardware and RAN software upon request.
|
||||
|
||||
Want to register your own runner? No problem! Please refer to the RIA Hub documentation for more details.
|
||||
|
@ -61,6 +69,18 @@ Want to register your own runner? No problem! Please refer to the RIA Hub docume
|
|||
|
||||
## 🔍 Modulation Recognition
|
||||
|
||||
In radio, the modulation scheme refers to the method used to encode information onto a carrier signal. Common schemes
|
||||
such as BPSK, QPSK, and QAM vary the amplitude, phase, or frequency of the signal in structured ways to represent
|
||||
digital data. These schemes are fundamental to nearly all wireless communication systems, enabling efficient and
|
||||
reliable transmission over different channels and under various noise conditions.
|
||||
|
||||
Machine learning-based modulation classification helps identify which modulation scheme is being used, especially
|
||||
in scenarios where prior knowledge of the signal format is unavailable or unreliable. Traditional methods often rely
|
||||
on expert-designed features and rule-based algorithms, which can struggle in real-world environments with multipath,
|
||||
interference, or hardware impairments. In contrast, ML-based approaches can learn complex patterns directly from
|
||||
raw signal data, offering higher robustness and adaptability. This is particularly valuable in applications like
|
||||
cognitive radio, spectrum monitoring, electronic warfare, and autonomous communication systems, where accurate and
|
||||
fast modulation recognition is critical.
|
||||
|
||||
|
||||
## 🚀 Getting started
|
||||
|
@ -69,44 +89,61 @@ Want to register your own runner? No problem! Please refer to the RIA Hub docume
|
|||
|
||||
|
||||
2. Enable Workflows (*Settings → Advanced Settings → Enable Repository Actions*).
|
||||
_TODO: Remove this point once default units have been updated to include actions in forks_
|
||||
|
||||
|
||||
3. Check for available runners. The runner management tab can found at the top of the 'Workflows' tab. If no runners
|
||||
are available, you'll need to register one before proceeding.
|
||||
3. Check for available runners. The runner management tab can found at the top of the 'Workflows' tab in your
|
||||
repository. If no runners are available, you'll need to register one before proceeding.
|
||||
|
||||
|
||||
4. Clone down the project. For example:
|
||||
4. Configure Git API credentials, if not suitable credentials are already set. This is required for accessing Utils
|
||||
in the job container. This requires three steps:
|
||||
|
||||
- Create a personal access token with the following permissions: `read:packages` (*User Settings → Applications → Manage Access Tokens*).
|
||||
|
||||
- Create a Workflow Variable `RIAHUB_USER` with your RIA Hub username (*Repo Settings → Actions → Variables Management*)
|
||||
|
||||
- Create a Workflow Secret `RIAHUB_TOKEN` with the token created above (*Repo Settings → Actions → Secrets Management*)
|
||||
|
||||
_TODO: Remove this point once the Utils wheel file has been added to this project._
|
||||
|
||||
|
||||
5. Clone down the project. For example:
|
||||
```commandline
|
||||
git clone https://git.riahub.ai/user/modrec-workflow.git
|
||||
cd modrec-workflow
|
||||
```
|
||||
|
||||
5. Set the workflow runner in `.riahub/workflows/workflow.yaml`. The runner is set on line 13:
|
||||
6. Set the workflow runner in `.riahub/workflows/workflow.yaml`. The runner is set on line 13:
|
||||
```yaml
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-latest-2080
|
||||
```
|
||||
**Note:** We recommend running this demo on a GPU-enabled runner. If a GPU runner is not available, you can still run
|
||||
the workflow, but we suggest reducing the number of training epochs to keep runtime reasonable.
|
||||
|
||||
|
||||
6. (Optional) Configure the workflow. All parameters—including file paths, model architecture, and training
|
||||
settings—are set in `conf/app.yaml`. Want to jump right in? The default configuration is suitable for getting started.
|
||||
7. (Optional) Configure the workflow. All parameters—including file paths, model architecture, and training
|
||||
settings—are set in `conf/app.yaml`. Want to jump right in? No problem, the default configuration is suitable.
|
||||
|
||||
|
||||
7. Push changes. This will start the workflow automatically.
|
||||
8. Push changes. This will automatically trigger the workflow. You can monitor workflow progress under the 'Workflows'
|
||||
tab in the repository.
|
||||
|
||||
|
||||
8. Inspect the workflow output. You can expand and collapse individual steps to view their terminal output. A check
|
||||
9. Inspect the workflow output. You can expand and collapse individual steps to view terminal output. A check
|
||||
mark indicates that the step completed successfully.
|
||||
|
||||
|
||||
9. Inspect the workflow artifacts. Additional information on workflow artifacts can be found in the next section.
|
||||
|
||||
10. Inspect the workflow artifacts. Additional information on workflow artifacts can be found in the next section.
|
||||
|
||||
|
||||
## Workflow artifacts
|
||||
|
||||
The example generates several workflow artifacts, including:
|
||||
This workflow generates several artifacts, including:
|
||||
|
||||
- `recordings`: Folder of synthetic signal recordings.
|
||||
|
||||
|
||||
- `dataset`: The training and validation datasets: `train.h5` and `val.h5`, respectively.
|
||||
|
||||
|
||||
|
@ -121,18 +158,22 @@ stages of training.
|
|||
by [ONNX Runtime](https://onnxruntime.ai/) for more efficient loading and execution.)
|
||||
|
||||
|
||||
- `profile-data`: Model execution traces, in JSON format.
|
||||
- `profile-data`: Model execution traces, in JSON format. See the section below for instructions on how to inspect the
|
||||
trace using Perfetto.
|
||||
|
||||
|
||||
- `recordings`: Folder of synthesised signal recordings.
|
||||
|
||||
## 📊 Inspecting the model trace using Perfetto
|
||||
|
||||
[Perfetto](https://ui.perfetto.dev/) is an open-source trace visualization tool developed by Google. It provides a powerful web-based
|
||||
interface for inspecting model execution traces. Perfetto is especially useful for identifying bottlenecks.
|
||||
|
||||
To inspect model trace, navigate to Perfetto. Select *Navigation → Open trace file*, and choose the JSON trace file
|
||||
includes in the `profile-data` artifact.
|
||||
|
||||
|
||||
## 🤝 Contribution
|
||||
|
||||
We welcome contributions from the community! Whether it's an enhancement, bug fix, or new how-to guide, your
|
||||
We welcome contributions from the community! Whether it's an enhancement, bug fix, or new tutorial, your
|
||||
input is valuable. To get started, please [contact us](https://www.qoherent.ai/contact/) directly, we're looking forward to collaborating with
|
||||
you. 🚀
|
||||
|
||||
|
@ -158,57 +199,3 @@ This example is **free and open-source**, released under [AGPLv3](https://www.gn
|
|||
|
||||
Alternative licensing options are available. Alternative licensing options are available. Please [contact us](https://www.qoherent.ai/contact/)
|
||||
for further details.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Configure GitHub Secrets
|
||||
|
||||
Before running the pipeline, add the following repository secrets in GitHub (Settings → Secrets and variables → Actions):
|
||||
|
||||
- **RIAHUB_USER**: Your RIA Hub username.
|
||||
- **RIAHUB_TOKEN**: RIA Hub access token with `read:packages` scope (from your RIA Hub account **Settings → Access Tokens**).
|
||||
- **CLONER_TOKEN**: Personal access token for `stark_cloner_bot` with `read_repository` scope (from your on-prem Git server user settings).
|
||||
|
||||
Once secrets are configured, you can run the pipeline:
|
||||
|
||||
|
||||
3.
|
||||
|
||||
|
||||
## How to View the JSON Trace File
|
||||
|
||||
- Captures a full trace of model training and inference performance for profiling and debugging
|
||||
- Useful for identifying performance bottlenecks, optimizing resource usage, and tracking metadata
|
||||
-
|
||||
Access this [link](https://ui.perfetto.dev/)
|
||||
Click on Open Trace File -> Select your specific JSON trace file
|
||||
Explore detailed visualizations of performance metrics, timelines, and resource usage to diagnose bottlenecks and optimize your workflow.
|
||||
|
||||
|
||||
|
||||
## Submiting Issues
|
||||
Found a bug or have a feature request?
|
||||
Please submit an issue via the GitHub Issues page.
|
||||
When reporting bugs, include:
|
||||
Steps to reproduce
|
||||
- Error logs and screenshots (if applicable)
|
||||
- Your app.yaml configuration (if relevant)
|
||||
|
||||
|
||||
|
||||
## Developer Details
|
||||
Coding Guidelines:
|
||||
Follow PEP 8 for Python code style.
|
||||
Include type annotations for all public functions and methods.
|
||||
Write clear docstrings for modules, classes, and functions.
|
||||
Use descriptive commit messages and reference issue numbers when relevant.
|
||||
Contributing
|
||||
All contributions must be reviewed via pull requests.
|
||||
Run all tests and ensure code passes lint checks before submission.
|
Loading…
Reference in New Issue
Block a user