Skip to content

Commit 3160cf2

Browse files
authored
Technical review from @tgonzalezorlandoarm (DevX Topo team)
Suggest changes to the Topo Learning Path
2 parents c41361e + 7f66265 commit 3160cf2

4 files changed

Lines changed: 76 additions & 61 deletions

File tree

content/learning-paths/cross-platform/deploy-containerized-workloads-with-topo/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Deploy containerized workloads to Arm-based Linux targets with Topo
33

44
description: Learn how to use Topo to detect device capabilities, select a compatible template, and deploy containerized workloads to Arm-based Linux targets over SSH.
55

6-
minutes_to_complete: 45
6+
minutes_to_complete: 30
77

88
who_is_this_for: This is an introductory topic for embedded, edge, and cloud software developers who want to easily deploy containerized workloads to Arm-based Linux targets with Topo.
99

content/learning-paths/cross-platform/deploy-containerized-workloads-with-topo/assess-compatibility.md

Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,56 @@ layout: learningpathall
88

99
## Run Topo health checks
1010

11+
### Prepare host environment
12+
13+
Confirm that the required dependencies are available on the host by running this command in your host terminal:
14+
15+
```bash
16+
topo health
17+
```
18+
19+
The output should appear similar to the following:
20+
21+
```bash
22+
Host
23+
----
24+
SSH: ✅ (ssh)
25+
Container Engine: ✅ (docker)
26+
27+
Target
28+
------
29+
ℹ️ provide --target or set TOPO_TARGET to check target health
30+
```
31+
32+
If Docker is missing, please use [Install Docker](https://learn.arm.com/install-guides/docker/).
33+
34+
If SSH is missing, please use [Install SSH](https://learn.arm.com/install-guides/ssh/).
35+
36+
## Prepare target environment
37+
38+
Now that the host device is prepared, we will setup the target. On the host device, connect to your target with SSH.
39+
40+
```bash
41+
ssh user@your-target
42+
```
43+
44+
Once connected to the target, use the following commands to verify both Docker and `lscpu` are installed:
45+
46+
```bash
47+
docker --version
48+
lscpu
49+
```
50+
51+
The output should apear similar to the following:
52+
53+
```output
54+
Docker version xx.x.x
55+
Architecture: aarch64
56+
CPU(s): ...
57+
```
58+
59+
### Prepare Topo for target
60+
1161
We will now run a health check against your target. Run the following command from the terminal of your host device.
1262

1363
If you are using your host device simultaneously as your target, use `topo health --target localhost`.
@@ -21,19 +71,22 @@ The output should appear similar to:
2171
```output
2272
Host
2373
----
24-
SSH: ✅
25-
Container Engine: ✅
74+
SSH: ✅ (ssh)
75+
Container Engine: ✅ (docker)
2676
2777
Target
2878
------
2979
Connectivity: ✅
30-
Container Engine: ✅
31-
Hardware Info: ✅
80+
Container Engine: ✅ (docker)
81+
Remoteproc Runtime: ✅ (remoteproc-runtime)
82+
Remoteproc Shim: ✅ (containerd-shim-remoteproc-v1)
83+
Hardware Info: ✅ (lscpu)
84+
Subsystem Driver (remoteproc): ✅ (m33, m0)
3285
```
3386

3487
A Topo health check confirms connectivity between the host and target, as well as the verifying the presence of dependencies such as docker.
3588

36-
You should resolve any `` errors before moving on. Warnings (`⚠️`) can indicate optional capabilities you can add later. `ℹ️` provides other information. A `` confirms the presence of dependencies and no warnings or errors.
89+
You should resolve any `` errors before moving on. Warnings (⚠️) can indicate optional capabilities that may be needed in certain projects. `ℹ️` provides other information. A `` confirms the presence of dependencies and no warnings or errors.
3790

3891
If you are using password-based SSH, you will likely see the `` error below:
3992

@@ -48,9 +101,9 @@ This is because Topo requires key-based SSH. You can use the command specified a
48101

49102
If using a Cortex-A + Cortex-M device, such as the i.MX 93, you may see a `⚠️` warning if `remoteproc-runtime` is not installed on the target.
50103

51-
[`remoteproc`](https://docs.kernel.org/staging/remoteproc.html) is a Linux kernel framework for managing remote / auxiliary processors in a heterogeneous SoC. It allows the main CPU (e.g., Cortex-A) to load firmware on to the auxiliary processors (e.g., Cortex-M), start and stop them, and to communicate with them (e.g. using `rpmsg`).
104+
[`remoteproc`](https://docs.kernel.org/staging/remoteproc.html) is a Linux kernel framework for managing remote / auxiliary processors in a heterogeneous SoC. It allows the main CPU (e.g., Cortex-A) to load firmware on to the auxiliary processors (e.g., Cortex-M), start and stop them, and to communicate with them (e.g. using [`rpmsg`](https://docs.kernel.org/staging/rpmsg.html)).
52105

53-
[`remoteproc-runtime`](https://github.com/arm/remoteproc-runtime) builds on this by adding a container-style (OCI) interface. This lets you package and manage firmware like container images using standard tools (e.g. Docker or containerd), even though the code runs as firmware on the Cortex-M. OCI (Open Container Initiative) defines open standards for container image formats and runtimes, ensuring compatibility across container tools.
106+
[`remoteproc-runtime`](https://github.com/arm/remoteproc-runtime) builds on this by adding a container-style (OCI - Open Container Initiative) interface. This lets you package and manage firmware like container images using standard tools (e.g. Docker or containerd), even though the code runs as firmware on the Cortex-M. [OCI](https://opencontainers.org/) defines open standards for container image formats and runtimes, ensuring compatibility across container tools.
54107

55108
You can use Topo to install `remoteproc-runtime`. Run the following command from the host device:
56109

@@ -62,7 +115,7 @@ Run the health command again to verify installation. Topo uses `remoteproc-runti
62115

63116
## Generate a target description
64117

65-
In this step, you ask Topo to probe your target hardware and create a machine-readable YAML description.
118+
In this step, you ask Topo to probe your target and create a machine-readable YAML description of the hardware.
66119

67120
On your host device, run:
68121

@@ -121,7 +174,7 @@ An example output for an AWS Graviton instance is shown below:
121174
displays a lightbulb in either the on or off state. The lightbulb state is
122175
described by an LLM in any user-specified style.
123176
124-
✅ topo-v9-cpu-chat | https://github.com/Arm-Examples/topo-v9-cpu-chat.git | main
177+
✅ topo-cpu-ai-chat | https://github.com/Arm-Examples/topo-cpu-ai-chat.git | main
125178
Features: SVE, NEON
126179
Complete LLM chat application optimized for Arm CPU inference.
127180

content/learning-paths/cross-platform/deploy-containerized-workloads-with-topo/deploy-workload.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Choose one of the pre-existing templates that is compatible with your target har
1313
To use a template, we clone it from git on our host device by running the following command:
1414

1515
```bash
16-
topo clone template:topo-v9-cpu-chat
16+
topo clone https://github.com/Arm-Examples/topo-cpu-ai-chat.git
1717
```
1818

1919
If a template asks for build arguments, Topo prompts you interactively.
@@ -29,7 +29,7 @@ services:
2929
build:
3030
context: ./llama-inference
3131
args:
32-
ENABLE_SVE: ON
32+
ENABLE_SVE: OFF
3333
HF_MODEL: bartowski/Qwen_Qwen3.5-0.8B-GGUF
3434
HF_MODEL_FILE: ""
3535
ports:
@@ -45,7 +45,7 @@ services:
4545
build:
4646
context: ./simple-chat
4747
args:
48-
ENABLE_SVE: ON
48+
ENABLE_SVE: OFF
4949
depends_on:
5050
llama-server:
5151
condition: service_healthy
@@ -76,10 +76,10 @@ Changes can be made to the `compose.yaml` files to adjust arguments after the fa
7676

7777
## Deploy the app on the target
7878

79-
On your host device, enter the project directory created by the `topo clone` command. In the case of the LLM chatbot, this directory is `topo-v9-cpu-chat`:
79+
On your host device, enter the project directory created by the `topo clone` command. In the case of the LLM chatbot, this directory is `topo-cpu-ai-chat`:
8080

8181
```bash
82-
cd topo-v9-cpu-chat/
82+
cd topo-cpu-ai-chat/
8383
```
8484

8585
Then use `topo deploy` to automatically build the container images on the host, transfer the images to the target via SSH, and start the application on the target:
@@ -112,4 +112,4 @@ Topo is packaged as a single executable with a `README.md` file. It is straightf
112112

113113
Choose your preferred agent. If you do not have a CLI Agent pre-configured, you can follow our guides to [Install Codex](https://learn.arm.com/install-guides/codex-cli/), [Install Claude Code](https://learn.arm.com/install-guides/claude-code/), or [Install Gemini](https://learn.arm.com/install-guides/gemini/).
114114

115-
Once your agent is ready, ensure you have setup your host and target to have the required dependencies. Then ask your agent to leverage Topo to deploy an application to your target device.
115+
Once your agent is ready, ensure you have setup your host and target to have the required dependencies. Then ask your agent to leverage Topo to deploy an application to your target device.

content/learning-paths/cross-platform/deploy-containerized-workloads-with-topo/overview-and-setup.md

Lines changed: 7 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ layout: learningpathall
88

99
## What is Topo?
1010

11-
[Topo](https://github.com/arm/topo) is an open-source command-line tool, developed by Arm. Topo connects from a host device (e.g., your development laptop) to an Arm-based Linux target (e.g., a Raspberry Pi) over SSH, detects hardware capabilities, and allows the user to deploy compatible containerized workloads with ease. Topo builds container images on the host, transfers them to the target, and starts the services on the target. The public repository showcases several pre-built template workloads you can deploy, including a "Hello World" webpage, an LLM Chatbot, and a SIMD Benchmark comparing Scalar, Neon, and the Scalable Vector Extension (SVE).
11+
[Topo](https://github.com/arm/topo) is an open-source command-line tool, developed by Arm. Topo connects from a host device (e.g., your development laptop) to an Arm-based Linux target (e.g., a Raspberry Pi) over SSH, detects hardware capabilities, and allows the user to deploy compatible containerized workloads with ease. Topo builds container images on the host, transfers them to the target, and starts the services on the target. Building and deploying on target is also possible. Topo also showcases several sample templates defining workloads you can deploy, including a "Hello World" webpage, an LLM Chatbot, and a SIMD Benchmark comparing Scalar, Neon, and the Scalable Vector Extension (SVE).
1212

1313
[Topo templates](https://github.com/arm/topo-template-format) are based on the [Compose Specification](https://github.com/compose-spec/compose-spec), extended with `x-topo` metadata that describes requirements such as CPU features and build arguments. The Compose Specification is a standard, YAML-based format for describing how to run multi-container applications. Instead of manually starting containers one-by-one, you define everything in a single file that includes which services to run, what images to use, how they connect, and what configuration they need.
1414

@@ -18,11 +18,14 @@ The optional heterogeneous deployment with `remoteproc-runtime` requires a heter
1818

1919
## Why use Topo?
2020

21-
Topo streamlines deploying pre-existing containerized workloads to new Arm-based Linux devices. Once a template is defined, use of Topo removes the need to deal with low-level setup and compatibility issues manually. Topo first assesses the system to identify processor features such as SVE or Neon on CPU, then advises which templates are appropriate for the device, before automating the deployment.
21+
Topo streamlines deploying containerized workloads to Arm-based Linux devices.
22+
If you have an heterogeneous device (e.g. Cortex-A + Cortex-M SoC such as the i.MX 93), Topo enables you to use it fully, deploying both firmware and application as containerized workloads through standard container tooling.
23+
24+
Once a template is defined, use of Topo removes the need to deal with low-level setup and compatibility issues manually. Topo first assesses the system to identify processor features such as SVE or Neon on CPU, then advises which templates are appropriate for the device, before automating the end to end deployment, for which Topo deals with all the low-level instructions.
2225

2326
Topo can also be leveraged by AI Agents to further streamline and automate.
2427

25-
## Prepare host environment
28+
## Install Topo
2629

2730
In this step, you install Topo on the host, along with other dependencies.
2831

@@ -47,47 +50,6 @@ topo --help
4750

4851
You should see an output confirming Topo is present, and describing the available commands.
4952

50-
Confirm that the required dependencies are available on the host bu running these commands in your host terminal:
51-
52-
```bash
53-
ssh -V
54-
docker --version
55-
```
56-
57-
You should see an output confirming version numbers, for example:
58-
59-
```output
60-
OpenSSH_x.x
61-
Docker version xx.x.x
62-
```
63-
64-
If Docker is missing, please use [Install Docker](https://learn.arm.com/install-guides/docker/).
65-
66-
If SSH is missing, please use [Install SSH](https://learn.arm.com/install-guides/ssh/).
67-
68-
## Prepare target environment
69-
70-
Now that the host device is prepared, we will setup the target. On the host device, connect to your target with SSH.
71-
72-
```bash
73-
ssh user@your-target
74-
```
75-
76-
Once connected to the target, use the following commands to verify both Docker and `lscpu` are installed:
77-
78-
```bash
79-
docker --version
80-
lscpu
81-
```
82-
83-
The output should apear similar to the following:
84-
85-
```output
86-
Docker version xx.x.x
87-
Architecture: aarch64
88-
CPU(s): ...
89-
```
90-
9153
## What you've completed and what's next
9254

93-
You have now prepared both your host and target for use with Topo. In the next step, you will utilize Topo to probe your target device for features, assessing its compability with template containerized workloads.
55+
You have now installed Topo on your host. In the next step, you will utilize Topo to prepare your host machine and to probe your target device for features, assessing its compability with template containerized workloads.

0 commit comments

Comments
 (0)