Documentation and formatting updates #1
165
README.md
165
README.md
|
@ -1,8 +1,7 @@
|
||||||
# Modulation Recognition Demo
|
# Modulation Recognition Demo
|
||||||
|
|
||||||
RIA Hub Workflows is an automation platform built into RIA Hub. This project contains an example machine learning
|
RIA Hub Workflows is an automation platform integrated into RIA Hub. This project provides an example machine learning
|
||||||
workflow for the problem of signal modulation classification. It also serves as an excellent introduction to
|
workflow for signal modulation classification, offering a practical introduction to RIA Hub Workflows
|
||||||
RIA Hub Workflows.
|
|
||||||
|
|
||||||
|
|
||||||
## 📡 The machine learning development workflow
|
## 📡 The machine learning development workflow
|
||||||
|
@ -10,24 +9,24 @@ RIA Hub Workflows.
|
||||||
The development of intelligent radio solutions involves multiple steps:
|
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
|
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
|
dataset curation to extract and qualify examples. Finally, we need to perform any required data preprocessing—such as
|
||||||
—such as augmentation—and split the dataset into training and test sets.
|
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
|
2. Secondly, we need to design and train a model. This is typically an iterative process, often accelerated using
|
||||||
Neural Architecture Search (NAS) and hyperparameter optimization to automate finding a suitable model structure and
|
techniques such as Neural Architecture Search (NAS) and hyperparameter optimization (HPO), which help automate the
|
||||||
optimal hyperparameter configuration, respectively.
|
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.
|
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
|
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.
|
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
|
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
|
where we come in. RIA Hub offers a no-code and low-code solution for automating the end-to-end development of
|
||||||
systems, allowing for a sharper focus on innovation.
|
intelligent radio systems.
|
||||||
|
|
||||||
|
|
||||||
## ▶️ RIA Hub Workflows
|
## ▶️ 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.
|
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:
|
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
|
- 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.
|
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 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 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
|
||||||
|
|
||||||
Qoherent-hosted runners are job containers that Qoherent provides and manages to run your workflows and jobs in RIA Hub
|
Qoherent-hosted runners are workflow runners that Qoherent provides and manages to run your workflows and jobs in
|
||||||
Workflows.
|
RIA Hub Workflows.
|
||||||
|
|
||||||
Why use GitHub-hosted runners?
|
Why use Qoherent-hosted runners?
|
||||||
- Easy to set up and start running workflows quickly, without the need to set up your own infrastructure.
|
- Start running workflows right away, 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
|
- Qoherent maintains runners equipped with access to hardware and tools common for radio ML development, including
|
||||||
SDR testbeds and common embedded targets.
|
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.
|
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.
|
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
|
## 🔍 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
|
## 🚀 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*).
|
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
|
3. Check for available runners. The runner management tab can found at the top of the 'Workflows' tab in your
|
||||||
are available, you'll need to register one before proceeding.
|
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
|
```commandline
|
||||||
git clone https://git.riahub.ai/user/modrec-workflow.git
|
git clone https://git.riahub.ai/user/modrec-workflow.git
|
||||||
cd modrec-workflow
|
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
|
```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
|
**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.
|
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
|
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? The default configuration is suitable for getting started.
|
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.
|
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
|
## 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.
|
- `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.)
|
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
|
## 🤝 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
|
input is valuable. To get started, please [contact us](https://www.qoherent.ai/contact/) directly, we're looking forward to collaborating with
|
||||||
you. 🚀
|
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/)
|
Alternative licensing options are available. Alternative licensing options are available. Please [contact us](https://www.qoherent.ai/contact/)
|
||||||
for further details.
|
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