Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
a8bfcd9
Update uppercase images
annietllnd Nov 6, 2025
0feae02
Rename new images
annietllnd Nov 6, 2025
6b13787
[feat]: Add learning path for vLLM high throughput serving on aarch64…
nikhil-arm Nov 10, 2025
5954f91
Update 2-ml-ext-for-vulkan.md
annietllnd Nov 10, 2025
b72bdd8
Update GKE multi-arch Axion learning path content and structure
madeline-underwood Nov 10, 2025
818bd54
Update titles in background and project setup documentation
madeline-underwood Nov 10, 2025
3f6c570
Merge pull request #2528 from annietllnd/neural-graphics
pareenaverma Nov 10, 2025
d0c1f05
Refine content and structure in GKE multi-arch Axion learning path do…
madeline-underwood Nov 10, 2025
a623176
Merge pull request #2515 from annietllnd/main
pareenaverma Nov 10, 2025
d2ad4ff
Updates to GKE Multi-Arch Axion Background
madeline-underwood Nov 10, 2025
fdc3c72
Update _index.md
pareenaverma Nov 10, 2025
474fafd
Merge pull request #2527 from nikhil-arm/vllm_int4
pareenaverma Nov 10, 2025
145ed0a
Update title and enhance overview in GKE multi-arch Axion documentation
madeline-underwood Nov 10, 2025
afdb779
Merge branch 'ArmDeveloperEcosystem:main' into gke_multi_arch_axion
madeline-underwood Nov 10, 2025
45d9ebd
Update GKE multi-arch Axion documentation for clarity and accuracy
madeline-underwood Nov 10, 2025
da5d24d
Merge pull request #2530 from madeline-underwood/gke_multi_arch_axion
jasonrandrews Nov 10, 2025
6880a5b
add storefront images to GKE migration Learning Path
jasonrandrews Nov 10, 2025
1993d07
add storefront images to GKE migration Learning Path
jasonrandrews Nov 10, 2025
c2fe3ce
Merge pull request #2531 from jasonrandrews/review
jasonrandrews Nov 10, 2025
a6d63c0
spelling fix on GKE migration Learning Path
jasonrandrews Nov 10, 2025
83fa643
Merge pull request #2532 from jasonrandrews/review
jasonrandrews Nov 10, 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
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Now run the Mobilenet V2 computer vision model, using [executorch/examples/arm/r

Observe that the FVP loads the model file, compiles the PyTorch model to ExecuTorch `.pte` format and then shows an instruction count in the top right of the GUI:

![Terminal and FVP output#center](./Terminal%20and%20FVP%20Output.jpg "Terminal and FVP output")
![Terminal and FVP output#center](./terminal_and_fvp_output.jpg "Terminal and FVP output")

{{% notice Note %}}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ Before you start coding, here are some useful tips:
1. Navigate to **File** > **New** > **New Project**.

2. Select **Empty Views Activity** in the **Phone and Tablet** gallery as Figure 1 shows, then select **Next**.
![Empty Views Activity.png alt-text#center](images/2/empty%20project.png "Figure 1: Select Empty Views Activity.")
![Empty Views Activity.png alt-text#center](images/2/empty_project.png "Figure 1: Select Empty Views Activity.")

3. Choose a project name, and select the default configurations as Figure 2 shows.

Make sure that the **Language** field is set to **Kotlin**, and the **Build configuration language** field is set to **Kotlin DSL**.
![Project configuration.png alt-text#center](images/2/project%20config.png "Figure 2: Project Configuration.")
![Project configuration.png alt-text#center](images/2/project_config.png "Figure 2: Project Configuration.")

## Add CameraX dependencies

Expand All @@ -45,7 +45,7 @@ Before you start coding, here are some useful tips:

2. Once the project is synced, navigate to `libs.versions.toml` in your project's root directory. See Figure 3. This file serves as the version catalog for all dependencies that the project uses.

![Version Catalog.png alt-text#center](images/2/dependency%20version%20catalog.png "Figure 3: Version Catalog.")
![Version Catalog.png alt-text#center](./images/2/dependency_version_catalog.png "Figure 3: Version Catalog.")

{{% notice Info %}}

Expand Down Expand Up @@ -88,20 +88,20 @@ camera-view = { group = "androidx.camera", name = "camera-view", version.ref = "

2. You should see that a notification appears. See Figure 4. Click **Sync Now** to sync your project.

![Gradle sync.png alt-text#center](images/2/gradle%20sync.png "Figure 4: Gradle Sync.")
![Gradle sync.png alt-text#center](images/2/gradle_sync.png "Figure 4: Gradle Sync.")

{{% notice Tip %}}

You can also click the **Sync Project with Gradle Files** button in the toolbar, or enter the corresponding shortcut to start a sync.

![Sync Project with Gradle Files](images/2/sync%20project%20with%20gradle%20files.png)
![Sync Project with Gradle Files](images/2/sync_project_with_gradle_files.png)
{{% /notice %}}

3. Navigate to the `MainActivity.kt` source file and make the changes that Figure 5 shows in the View Binding screenshot.

This inflates the layout file into a view binding object, and stores it in a member variable within the view controller for easier access later.

![view binding alt-text#center](images/2/view%20binding.png "Figure 5: View Binding.")
![view binding alt-text#center](images/2/view_binding.png "Figure 5: View Binding.")

## Configure CameraX preview

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ See the previous section [Set up the Development Environment](../2-app-scaffoldi

2. Now you should see both model asset bundles in your `assets` directory, as shown below:

![model asset bundles](images/4/model%20asset%20bundles.png)
![model asset bundles](images/4/model_asset_bundles.png)

3. You are ready to import MediaPipe's Face Landmark Detection and Gesture Recognizer into the project.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,5 +366,5 @@ class GestureOverlayView(context: Context?, attrs: AttributeSet?) :

4. Build and run the app again. Now you should see face and gesture overlays on top of the camera preview as shown below. Good job!

![overlay views alt-text#center](images/6/overlay%20views.png "Figure 7: Face and Gesture Overlays.")
![overlay views alt-text#center](images/6/overlay_views.png "Figure 7: Face and Gesture Overlays.")

Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ This makes sure each of the three parallel `launch` code sections run in its own
5. Build and run the app again.
Now you should see two switches on the bottom of the screen as shown below, which turn on and off while you smile and show thumb-up gestures. Good job!

![indicator UI alt-text#center](images/7/indicator%20ui.png "Figure 8: Indicator UI.")
![indicator UI alt-text#center](images/7/indicator_ui.png "Figure 8: Indicator UI.")

## Recap on SharedFlow vs StateFlow

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ You must use a version >= 1.4.321 for the Vulkan SDK.

For this Learning Path, a pre-built of package of the emulation layers is available. Download them by clicking the link.

[ML Emulation Layer for Vulkan](https://www.arm.com/-/media/Files/developer/MLEmulationLayerForVulkan)
[ML Emulation Layer for Vulkan](https://www.arm.com/-/media/Files/developer/MLEmulationLayerForVulkan20251107)

Extract the downloaded file in a location of your choice. You’re now ready to enable the emulation layers in Vulkan Configurator.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
---
title: From x86 to Arm on GKE - Build, Deploy, and Migrate with Google Axion

draft: true
cascade:
draft: true
title: Migrate x86 workloads to Arm on Google Kubernetes Engine with Axion processors

minutes_to_complete: 90

who_is_this_for: This is an advanced topic for cloud, platform, and site reliability engineers operating Kubernetes on Google Cloud who need a prescriptive path to build multi-architecture images and migrate services from x86 to Arm using Google Axion processors.
who_is_this_for: This is an advanced topic for cloud, platform, and site reliability engineers who operate Kubernetes on Google Cloud and need to build multi-architecture images and migrate services from x86 to Arm using Google Axion processors.

learning_objectives:
- Prepare Dockerfiles for multi-architecture builds by adding arm64 support
- Create a dual-architecture GKE standard cluster with two node pools, amd64 and arm64
- Build and publish multi-architecture images to Artifact Registry using Docker Buildx without using QEMU to emulate Arm instructions
- Deploy a Kubernetes application amd64 first, then migrate to arm64 using Kustomize overlays and progressive rollout
- Optionally automate builds and rollouts with Cloud Build and Skaffold
- Create a dual-architecture GKE standard cluster with amd64 and arm64 node pools
- Build and publish multi-architecture images to Artifact Registry using Docker Buildx
- Deploy a Kubernetes application on amd64, then migrate to arm64 using Kustomize overlays
- Automate builds and rollouts with Cloud Build and Skaffold

prerequisites:
- A [Google Cloud account](https://console.cloud.google.com/) with billing enabled
- A local Linux or macOS computer or Cloud Shell access with Docker, Kubernetes CLI (kubectl), Google Cloud CLI (gcloud), and Git installed
- A local Linux or macOS computer with Docker, Kubernetes CLI (kubectl), Google Cloud CLI (gcloud), and Git installed, or access to Google Cloud Shell
- Basic familiarity with Docker, Kubernetes, and gcloud

author:
Expand All @@ -40,11 +36,11 @@ tools_software_languages:

further_reading:
- resource:
title: GKE documentation
title: Google Kubernetes Engine documentation
link: https://cloud.google.com/kubernetes-engine/docs
type: documentation
- resource:
title: Create Arm-based clusters and node pools
title: Create standard clusters and node pools with Arm nodes
link: https://cloud.google.com/kubernetes-engine/docs/how-to/create-arm-clusters-nodes
type: documentation

Expand Down
Loading
Loading