I purchased a NucBox K11 Mini PC for my AI homelab in June 2026. Setting up JupyterHub on K3s allowed me to spin up pre-configured notebook environments in a single click. Unfortunately, until August, I couldn’t get my hands on the OrangePi AI Studio Pro extension dock.
The dock finally arrived in August. It features 2 Huawei Ascend 310P NPUs providing a combined 352 TOPS / 176 TFLOPS AI processing power for running deep learning workloads based on PyTorch and MindSpore, a significant upgrade over the 20 TOPS AI processing power provided by the OrangePi AIpro (20T) I was using since the beginning of 2026.


With the extension dock in place, I could finally proceed with my remaining setup and run my deep learning experiments with proper NPU acceleration. This article outlines the steps I took to finally make my AI homelab dream a reality.
Installing the drivers for the extension dock
The first thing after connecting the AI Studio Pro to my Mini PC was to install the necessary drivers. The official downstream drivers are optimized specifically for the extension dock and Orange Pi specifically recommends against installing the upstream 310P NPU drivers from the Ascend community. The installation was simple and straightforward. My only gripe was that the downstream drivers are only available on Baidu Netdisk which requires signing up for an account and imposes restrictive bandwidth limitations for non-paying users. The driver package was a few hundred MiB in size and my download bandwidth was limited to a few dozen KiB/s which took about an hour to complete.
With the drivers installed, the official PDF manual generously provided a few commands to benchmark the actual AI processing performance of the AI Studio Pro extension dock. As expected, I got close to 352 TOPS performance for INT8 precision and 176 TFLOPS for FP16 precision. Excellent!
Installing Ascend Docker Runtime
Ascend Docker Runtime handles the mounting of NPU device nodes and drivers to Kubernetes pods. It is the core runtime component included with MindCluster, Huawei’s distributed AI/ML training and inference platform optimized for operating datacenter-grade AI computing clusters at scale.
Installing Ascend Docker Runtime on K3s involves a few caveats due to how containerd is bundled and how its configuration is managed.
- The
--install-scene=containerdflag informs the installer that containerd is used as the container runtime as opposed to Docker - The
--config-file-pathflag must be provided during installation so the installer knows to update the containerdconfig.tomlconfiguration under the K3s-specific path/var/lib/rancher/k3s/agent/etc/containerd/config.toml - Since K3s regenerates the containerd
config.tomlconfiguration every time the service is restarted, we must manually modify theconfig-v3.toml.tmplfile to include a custom runtime class and restart K3s afterwards
The technical details are described in my reply to the GitHub issue k3s-io/k3s#13553.

Building custom notebook images with MindSpore + CANN pre-installed
Recall that MindSpore and CANN are key software components of the Ascend ecosystem similar to PyTorch and CUDA respectively within the NVIDIA ecosystem. Unfortunately, the upstream Jupyter Docker Stacks project do not (yet) provide base notebook images with MindSpore + CANN pre-installed, nor could I find such notebook images publicly available from AscendHub.
So I decided to roll my own notebook images with MindSpore + CANN pre-installed. The Dockerfile and associated resources are available on GitHub. I used the official examples from Ascend/cann-container-image as a starting point for building my Dockerfile since the CANN multi-stage build is non-trivial. Furthermore, both the CANN and Jupyter notebook base images inject their own set of environment variables at runtime by overriding the ENTRYPOINT and CMD directives, both of which must be carefully combined within my customized notebook image. To this end, I did not hesitate to consult my beloved mentor DeepSeek-V4-Pro who helped me construct the final working Dockerfile and saved me hours (or days) of unnecessary trial and error 😉

Extending JupyterHub with custom images and resource specifications
With my custom notebook images uploaded to Quay.io, I updated my JupyterHub Helm chart values to include multiple profiles which can be selected on notebook startup. Each profile specifies:
- A notebook image preloaded with a curated set of packages such as MindSpore 2.10.0 + CANN 8.5.0
- Pod resource specifications such as 4 vCPU + 16Gi memory + 1 Ascend 310P NPU
The one-click experience is similar to what you might encounter in a managed cloud environment such as Amazon SageMaker or Azure ML.

My JupyterHub instance is managed via Argo CD and the GitOps manifest is available on GitHub.
Validating my JupyterHub environment with a real example
Of course, we need to make sure all of this actually works 😉
I prepared a deep learning experiment training a garment classifier with MindSpore adapted from the Training with PyTorch official YouTube tutorial. The experiment ran to completion without any issues. Needless to say I’m proud of my work! 😎

Concluding remarks and going further
So this was how I built my AI homelab with Kubernetes using the NucBox K11 Mini PC and OrangePi AI Studio Pro extension dock. I hope you enjoyed reading this article as much as I did authoring it and stay tuned for updates! 😉
Leave a Reply