Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
e03662b
initial updates for learning path
NinaARM Sep 29, 2025
95b5199
Deploy Node.js on Google Cloud C4A (Arm-based Axion VMs)
odidev Sep 23, 2025
da24c70
updates after team review
NinaARM Sep 30, 2025
a915d06
Deploy PHP on Google Cloud C4A (Arm-based Axion VMs)
odidev Sep 29, 2025
1cdb2cc
Deploy Multi-Architecture Docker Images with Buildkite on GCP C4A (Ar…
odidev Sep 22, 2025
d0885d7
Revise copilot instructions for clarity and structure; enhance conten…
madeline-underwood Oct 13, 2025
3b8f7ef
Refine word choice and style guidelines for clarity and consistency; …
madeline-underwood Oct 13, 2025
7357554
First review of resource usage on Window on Arm
jasonrandrews Oct 13, 2025
7deaf55
Merge pull request #2411 from jasonrandrews/review
jasonrandrews Oct 13, 2025
7840c05
Update Windows on Arm WSL Learning Path
jasonrandrews Oct 13, 2025
5a314b6
Merge pull request #2413 from jasonrandrews/review
jasonrandrews Oct 13, 2025
7e60bab
Merge pull request #2410 from madeline-underwood/optimize_ai
jasonrandrews Oct 13, 2025
f06c7e5
Refactor introduction to clarify neural graphics model development an…
madeline-underwood Oct 13, 2025
d555266
Update learning path for Model Training Gym
madeline-underwood Oct 13, 2025
f2bc39f
Remove draft status from Model Gym learning path
madeline-underwood Oct 13, 2025
bfc5f3b
Remove unnecessary blank line in Model Training Gym index
madeline-underwood Oct 13, 2025
391077b
Correct title casing in Model Training Gym index
madeline-underwood Oct 13, 2025
04b2e25
Fix title casing and improve clarity in introduction and environment …
madeline-underwood Oct 13, 2025
44a7038
updates for technical review:
NinaARM Oct 13, 2025
f5300ca
Merge pull request #2414 from madeline-underwood/nssmodelgym
jasonrandrews Oct 13, 2025
06efa45
Update commands for Windows on Arm resource usage
jasonrandrews Oct 13, 2025
189d132
Merge pull request #2415 from jasonrandrews/review
jasonrandrews Oct 13, 2025
a8fdea3
Merge pull request #2368 from NinaARM/feature/voice-assistant-updates
pareenaverma Oct 14, 2025
1e9a32a
Updated to multimodal VA LP
pareenaverma Oct 14, 2025
d90e7d6
Merge pull request #2416 from pareenaverma/content_review
pareenaverma Oct 14, 2025
bfa2402
Update _index.md
pareenaverma Oct 14, 2025
d438455
Merge pull request #2376 from odidev/php_LP
pareenaverma Oct 14, 2025
89a5ab5
Merge pull request #2344 from odidev/buildkite_LP
jasonrandrews Oct 14, 2025
390abda
Buildkite in draft mode for tech review
jasonrandrews Oct 14, 2025
f996eea
Merge pull request #2417 from jasonrandrews/review
jasonrandrews Oct 14, 2025
235135a
Merge pull request #2343 from odidev/Node_LP
jasonrandrews Oct 14, 2025
f4c49a2
Put node.js Learning Path in draft mode for tech review
jasonrandrews Oct 14, 2025
4561333
Merge pull request #2418 from jasonrandrews/review2
jasonrandrews Oct 14, 2025
a7cbacf
update output explanation
chrismoroney Oct 14, 2025
9f7068b
add more detail to profile
chrismoroney Oct 15, 2025
7861101
Update ubuntu machine instructions
chrismoroney Oct 15, 2025
8f36648
Update stats_current_test_info.yml
chrismoroney Oct 15, 2025
655ed50
Update section headings for clarity in VM creation instructions
madeline-underwood Oct 15, 2025
553bad8
Updates
madeline-underwood Oct 15, 2025
7322d17
Merge pull request #2423 from madeline-underwood/win
jasonrandrews Oct 15, 2025
3c68feb
Merge pull request #2421 from ArmDeveloperEcosystem/update-stats-curr…
jasonrandrews Oct 15, 2025
7a24f8d
Merge pull request #2420 from chrismoroney/cmoroney-pytorch-last-revi…
jasonrandrews Oct 15, 2025
91d9a52
First pass
madeline-underwood Oct 15, 2025
34ac528
Refine documentation for ONNX deployment on Azure Cobalt 100, enhanci…
madeline-underwood Oct 15, 2025
e6b5596
Improve clarity and consistency in documentation for ONNX Runtime tes…
madeline-underwood Oct 15, 2025
6d3dda6
Refine background documentation for Azure Cobalt 100 and ONNX, enhanc…
madeline-underwood Oct 16, 2025
7d5c8fa
Updates to ONNX on Azure learning path
madeline-underwood Oct 16, 2025
e1d708f
Refine MySQL deployment instructions for Azure Cobalt 100: update cla…
madeline-underwood Oct 16, 2025
7a80f23
Merge pull request #2425 from madeline-underwood/squeeze
jasonrandrews Oct 16, 2025
039929b
Enhance clarity and consistency in MySQL validation instructions for …
madeline-underwood Oct 16, 2025
954d3e6
Updates to MySQL on Azure learning path
madeline-underwood Oct 16, 2025
9ff5570
validation updates. Changed flow to use NVM as nodeJS installer
DougAnsonAustinTX Oct 16, 2025
f428c4d
Tech review of PHP LP
pareenaverma Oct 16, 2025
3522721
Merge branch 'content_review' of https://github.com/pareenaverma/arm-…
pareenaverma Oct 16, 2025
2703257
Merge pull request #2428 from pareenaverma/content_review
pareenaverma Oct 16, 2025
b14cac2
switched sample http server to invoke with privs and listen in port 80
DougAnsonAustinTX Oct 16, 2025
e6afb45
Tech review of Buildkite Learning Path
jasonrandrews Oct 16, 2025
618987d
more polish
DougAnsonAustinTX Oct 16, 2025
a550eb2
Merge pull request #2429 from jasonrandrews/review
jasonrandrews Oct 16, 2025
97a402f
Merge pull request #2430 from DougAnsonAustinTX/qc_nodejs_tech_review
jasonrandrews Oct 16, 2025
1c25a17
Merge pull request #2419 from chrismoroney/cmoroney-nlp-last-reviewed…
jasonrandrews Oct 16, 2025
c3aecf9
Continue tech review of Node.js on Google Axion
jasonrandrews Oct 16, 2025
604de1a
Merge pull request #2431 from jasonrandrews/review
jasonrandrews Oct 16, 2025
4bc9cc4
Merge branch 'ArmDeveloperEcosystem:main' into mysql
madeline-underwood Oct 16, 2025
2d5f70f
First pass content review
madeline-underwood Oct 17, 2025
ad328af
Merge branch 'mysql' of https://github.com/madeline-underwood/arm-lea…
madeline-underwood Oct 17, 2025
e41ae5c
Update Multipass installation instructions for macOS and correct Snap…
jasonrandrews Oct 17, 2025
c642ff0
Merge pull request #2435 from jasonrandrews/review
jasonrandrews Oct 17, 2025
19e68e2
Refine content for Azure Cobalt 100 documentation, enhancing clarity …
madeline-underwood Oct 17, 2025
4527c1f
Merge pull request #2436 from madeline-underwood/mysql
jasonrandrews Oct 17, 2025
5e60e36
Update author field in copilot instructions for consistency and remov…
jasonrandrews Oct 17, 2025
3271b3c
Merge pull request #2437 from jasonrandrews/review
jasonrandrews Oct 17, 2025
90ef245
Update _index.md
pareenaverma Oct 17, 2025
98b2a94
Update _index.md
pareenaverma Oct 17, 2025
d4ae2e2
Merge pull request #2438 from pareenaverma/content_review
pareenaverma Oct 17, 2025
cc6ff10
spelling and category updates
jasonrandrews Oct 20, 2025
01ec3b9
spelling and category updates
jasonrandrews Oct 20, 2025
bc716df
Merge pull request #2440 from jasonrandrews/review
jasonrandrews Oct 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
522 changes: 283 additions & 239 deletions .github/copilot-instructions.md

Large diffs are not rendered by default.

62 changes: 62 additions & 0 deletions .wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4978,3 +4978,65 @@ multidisks
testsh
uops
subgraph
ArgumentList
Autocannon
Buildkite
CimInstance
ClassName
DischargeRate
FPM
FastCGI
FilePath
Halide’s
HasExited
ImportError
NIC’s
NVM
NodeJS
Opcache
OpenBMC’s
PHPBench
ParentProcessId
PassThru
ProcessID
QAT
REPL
RaceNight
RemainingCapacity
Ruifeng
Xdebug
appPid
argList
autocannon
autoexit
autoloading
benchArrayPush
benchStringConcat
buildkite
childPid
childProcess
cmdLine
eq
exePath
ffplay
fpm
gpl
hh
mW
mWh
mbstring
memPriv
npmjs
opcache
outHead
outLine
outputFile
phar
phpbench
phpinfo
utf
vesion
wwwrun
xdebug
zoneIdentifier
zypper
23 changes: 11 additions & 12 deletions content/install-guides/multipass.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,15 @@ Multipass uses the terms virtual machine and instance synonymously.
Download Multipass for macOS.

```console
wget https://github.com/canonical/multipass/releases/download/v1.16.0/multipass-1.16.0+mac-Darwin.pkg
wget https://github.com/canonical/multipass/releases/download/v1.16.1/multipass-1.16.1+mac-Darwin.pkg
```

### How do I install Multipass on macOS?

Install the download using the package command.

```console
sudo installer -pkg multipass-1.16.0+mac-Darwin.pkg -target /
sudo installer -pkg multipass-1.16.1+mac-Darwin.pkg -target /
```

The getting started instructions below use the command line interface. If you prefer to use the graphical interface start it from the macOS Launchpad, the initial screen is shown below. You can use the UI to create, start, and stop virtual machines.
Expand Down Expand Up @@ -112,7 +112,7 @@ HINT: sudo /usr/sbin/kvm-ok

If KVM is available, proceed with the install.

### How do I install the Sanp daemon on Arm Linux?
### How do I install the Snap daemon on Arm Linux?

You may need to install the Snap daemon, `snapd`, before installing Multipass.

Expand All @@ -130,8 +130,6 @@ If you need to install `snapd` run:
sudo apt install snapd -y
```



{{% notice Note %}}
You can select from three Multipass releases: stable, beta, or edge. The default version is stable.
Add `--beta` or `--edge` to the install command below to select these more recent versions.
Expand Down Expand Up @@ -166,25 +164,26 @@ Multipass runs Ubuntu images. The last three LTS (long-term support) versions ar
To see the available images run the `find` command. Any of the listed images can be used to create a new instance.

```bash
sudo multipass find
multipass find
```

The output from `find` will be similar to the below.

```output
Image Aliases Version Description
20.04 focal 20240821 Ubuntu 20.04 LTS
22.04 jammy 20241002 Ubuntu 22.04 LTS
24.04 noble,lts 20241004 Ubuntu 24.04 LTS
daily:24.10 oracular,devel 20241009 Ubuntu 24.10
22.04 jammy 20251001 Ubuntu 22.04 LTS
24.04 noble,lts 20251001 Ubuntu 24.04 LTS
25.04 plucky 20251003 Ubuntu 25.04
daily:25.10 questing,devel 20251015 Ubuntu 25.10

Blueprint Aliases Version Description
Blueprint (deprecated) Aliases Version Description
anbox-cloud-appliance latest Anbox Cloud Appliance
charm-dev latest A development and testing environment for charmers
docker 0.4 A Docker environment with Portainer and related tools
jellyfin latest Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
minikube latest minikube is local Kubernetes
ros-noetic 0.1 A development and testing environment for ROS Noetic.
ros2-humble 0.1 A development and testing environment for ROS 2 Humble.
ros2-jazzy 0.1 A development and testing environment for ROS 2 Jazzy.
```

### How do I launch a Multipass instance?
Expand Down
3 changes: 2 additions & 1 deletion content/install-guides/pytorch.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ PyTorch requires Python 3, and this can be installed with `pip`.
For Ubuntu, run:

```bash
sudo apt update
sudo apt install python-is-python3 python3-pip python3-venv -y
```

Expand All @@ -71,7 +72,7 @@ source venv/bin/activate
In your active virtual environment, install PyTorch:

```bash
sudo pip install torch torchvision torchaudio
pip install torch torchvision torchaudio
```

## How do I get started with PyTorch?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ tools_software_languages_filter:
- DSTREAM: 2
- Edge AI: 2
- Edge Impulse: 1
- ExecuTorch: 3
- ExecuTorch: 4
- FastAPI: 1
- FPGA: 1
- Fusion 360: 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ tools_software_languages:
- Generative AI
- Raspberry Pi
- Hugging Face
- ExecuTorch



Expand Down
6 changes: 4 additions & 2 deletions content/learning-paths/laptops-and-desktops/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ operatingsystems_filter:
- ChromeOS: 2
- Linux: 34
- macOS: 9
- Windows: 45
- Windows: 46
subjects_filter:
- CI-CD: 5
- Containers and Virtualization: 7
- Migration to Arm: 29
- Migration to Arm: 30
- ML: 2
- Performance and Architecture: 27
subtitle: Create and migrate apps for power efficient performance
Expand All @@ -38,6 +38,7 @@ tools_software_languages_filter:
- CSS: 1
- Daytona: 1
- Docker: 5
- FFmpeg: 1
- GCC: 12
- Git: 1
- GitHub: 3
Expand All @@ -62,6 +63,7 @@ tools_software_languages_filter:
- ONNX Runtime: 1
- OpenCV: 1
- perf: 4
- PowerShell: 1
- Python: 6
- QEMU: 1
- Qt: 2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ who_is_this_for: This is an introductory topic for developers who want to measur

learning_objectives:
- Run video encode and decode tasks by using FFmpeg
- Benchmark video encode task
- Sample CPU / memory / power usage of video decode task
- Benchmark the video encode task
- Sample CPU, memory, and power usage for the video decode task

prerequisites:
- A Windows on Arm computer such as the Lenovo Thinkpad X13s running Windows 11
- Any code editor. [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user) is suitable.
- A code editor such as [Visual Studio Code for Windows on Arm](https://code.visualstudio.com/docs/?dv=win32arm64user)

author: Ruifeng Wang

Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,69 @@
---
title: Application and data set
title: Set up FFmpeg and encode a test video
weight: 2

### FIXED, DO NOT MODIFY
layout: learningpathall
---

## Overview
System resource usage provides an approach to understand the performance of an application as a black box. This Learning Path demonstrates how to sample system resource usage by using a script.
System resource usage provides an approach to understand the performance of an application as a black box. This Learning Path demonstrates how to sample system resource usage using a script.

The application used is FFmpeg. It is a tool set that performs video encode and decode tasks. We will run the same tests with both x86_64 binary (through emulation) and Arm64 native binary.
The example application you will use is FFmpeg, a tool set that performs video encode and decode tasks. You will run the same tests with both the x86_64 binary (using Windows instruction emulation) and the Arm64 native binary on a Windows on Arm computer.

## Application
Binary builds are available. You don't need to build them from source. Download executable files for Windows:
Binary builds of FFmpeg are available, so you don't need to build them from source.

1. Download [x86_64 package](https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2025-07-31-14-15/ffmpeg-n7.1.1-56-gc2184b65d2-win64-gpl-7.1.zip).
2. Download [Arm64 native package](https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2025-07-31-14-15/ffmpeg-n7.1.1-56-gc2184b65d2-winarm64-gpl-7.1.zip).
To get started:

Unzip the downloaded packages. You can find the binaries in **bin** folder. Note paths to **ffmpeg.exe** and **ffplay.exe**. They are used in later steps.
1. Download the [FFmpeg x86_64 package](https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2025-07-31-14-15/ffmpeg-n7.1.1-56-gc2184b65d2-win64-gpl-7.1.zip).

2. Download the [FFmpeg Arm64 native package](https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2025-07-31-14-15/ffmpeg-n7.1.1-56-gc2184b65d2-winarm64-gpl-7.1.zip).

3. Unzip the downloaded packages.

You can find the binaries in the `bin` folder.

{{% notice Note %}}
Make note of the paths to both versions of `ffmpeg.exe` and `ffplay.exe`, so you can run each one and compare the results.
{{% /notice %}}

## Video source
Download test video [RaceNight](https://ultravideo.fi/video/RaceNight_3840x2160_50fps_420_8bit_YUV_RAW.7z) from a public dataset. Unzip the package and note path to the uncompressed yuv file.
Download the test video [RaceNight](https://ultravideo.fi/video/RaceNight_3840x2160_50fps_420_8bit_YUV_RAW.7z) from a public dataset.

Unzip the package and note the path to the uncompressed `.yuv` file.

## Video encoding
The downloaded video file is in yuv raw format. It means playback of the video file involves no decoding effort. You need to encode the raw video with some compressing algorithms to add computation pressure at playback.
The downloaded video file is in YUV raw format, which means playback of the video file involves no decoding effort. You need to encode the raw video with compression algorithms to add computation pressure during playback.

Use `ffmpeg.exe` to compress the YUV raw video with the x265 encoder and convert the file format to `.mp4`.

Assuming you downloaded the files and extracted them in the current directory, open a terminal and run the following command:

Use **ffmpeg.exe** to compress the yuv raw video with x265 algorithm and convert file format to mp4. Open a terminal and run command:
```console
path\to\ffmpeg.exe -f rawvideo -pix_fmt yuv420p -s 3840x2160 -r 50 -i D:\path\to\RaceNight_YUV_RAW\RaceNight_3840x2160_50fps_8bit.yuv -vf scale=1920:1080 -c:v libx265 -preset medium -crf 20 D:\RaceNight_1080p.mp4 -benchmark -stats -report
ffmpeg-n7.1.1-56-gc2184b65d2-win64-gpl-7.1\ffmpeg-n7.1.1-56-gc2184b65d2-win64-gpl-7.1\bin\ffmpeg.exe -f rawvideo -pix_fmt yuv420p -s 3840x2160 -r 50 -i RaceNight_3840x2160_50fps_420_8bit_YUV_RAW\RaceNight_3840x2160_50fps_8bit.yuv -vf scale=1920:1080 -c:v libx265 -preset medium -crf 20 RaceNight_1080p.mp4 -benchmark -stats -report
```

{{% notice Note %}}
Modify the paths to `ffmpeg.exe` and yuv raw video file accordingly.
Modify the paths to `ffmpeg.exe` and the YUV raw video file to match your locations.
{{% /notice %}}

The command transforms video size, compresses the video into a H.265 encoded mp4 file. `benchmark` option is turned on to show performance data at the same time. The generated file is at D:\RaceNight_1080p.mp4.
The command transforms the video size and compresses the video into an MP4 file using H.265 encoding (via the x265 encoder).

The `benchmark` option is turned on to show performance data at the same time.

The generated file will be at RaceNight_1080p.mp4.

Run the command with both the x86_64 and the Arm64 versions of FFmpeg and compare the output.

### View results
Shown below is example output from running x86_64 version ffmpeg.exe:

The output below is from the x86_64 version of `ffmpeg.exe`:

```output
x265 [info]: tools: rd=3 psy-rd=2.00 early-skip rskip mode=1 signhide tmvp
x265 [info]: tools: b-intra strong-intra-smoothing lslices=6 deblock sao
Output #0, mp4, to 'D:\RaceNight_1080p.mp4':
Output #0, mp4, to 'RaceNight_1080p.mp4':
Metadata:
encoder : Lavf61.7.100
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080, q=2-31, 50 fps, 12800 tbn
Expand All @@ -61,11 +83,12 @@ x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%
encoded 600 frames in 71.51s (8.39 fps), 9075.96 kb/s, Avg QP:27.27
```

Example output from running Arm64 native ffmpeg.exe:
The output below is from the Arm64 native compiled `ffmpeg.exe`:

```output
x265 [info]: tools: rd=3 psy-rd=2.00 early-skip rskip mode=1 signhide tmvp
x265 [info]: tools: b-intra strong-intra-smoothing lslices=6 deblock sao
Output #0, mp4, to 'D:\RaceNight_1080p.mp4':
Output #0, mp4, to 'RaceNight_1080p.mp4':
Metadata:
encoder : Lavf61.7.100
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080, q=2-31, 50 fps, 12800 tbn
Expand All @@ -83,4 +106,8 @@ x265 [info]: frame B: 451, Avg QP:28.40 kb/s: 5878.38
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%

encoded 600 frames in 26.20s (22.90 fps), 9110.78 kb/s, Avg QP:27.23
```
```

The last line of each output shows the run time and the frames per second for each build of FFmpeg.

Continue to learn how to track resource usage and compare each version.
Loading
Loading