Single-Node Deployment#
This guide covers the current single-node workflow driven by ./auplc-installer.
See also
For the shortest path, see Quick Start.
What The Installer Does#
./auplc-installer install is the canonical workstation deployment path. It can:
detect supported AMD GPU families and SKUs
install K3s and supporting tools
deploy the ROCm GPU device plugin and node labeller
generate a local values overlay
pull or build required images (default: pull from
--image-registry)deploy the Hub runtime from
runtime/chart
The installer can run as a regular user. Commands that need root (install, uninstall, install-tools) prompt for your password once and keep the sudo credential cache fresh. Prefixing with sudo is optional and skips the prompt.
Prerequisites#
Ubuntu 24.04
sudo access
Supported Ryzen AI 300 series and above APUs or Radeon 9000 series PCIe GPUs (ROCm)
Docker installed if you are using the default Docker-backed runtime path
build-essentialpython3-questionaryandpython3-prompt-toolkit(apt), orpip install questionary prompt_toolkit(conda/venv), for the interactive TUI
sudo apt install build-essential
sudo apt install python3-questionary python3-prompt-toolkit
Optional Docker installation:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
docker --version
Standard Install#
Interactive (recommended):
git clone https://github.com/AMDResearch/aup-learning-cloud.git
cd aup-learning-cloud
./auplc-installer
Non-interactive:
git clone https://github.com/AMDResearch/aup-learning-cloud.git
cd aup-learning-cloud
./auplc-installer install
After installation, access the Hub at http://localhost:30890.
Interactive TUI Reference#
Launch the wizard with ./auplc-installer (or ./auplc-installer tui). The main menu offers Install, Uninstall, Pack offline, Dev mode, Runtime-only, Image management, Install helm + k9s, and Detect GPU.
For a first-time Install, the recommended choices are:
Prompt |
Recommended choice |
Notes |
|---|---|---|
Pick an action |
|
Full deploy: K3s + images + Hub |
GPU selection |
|
Uses |
K3s container runtime |
|
Default for local/dev installs. Choose |
Image source |
|
Fetches pre-built images from |
Image registry prefix |
|
Leave as-is unless you pull from a fork or private registry. |
Image tag |
|
Tag prefix only—a GPU suffix (for example |
Registry mirror prefix |
(leave blank) |
Only needed behind a registry mirror. |
PyPI mirror URL |
(leave blank) |
Only needed behind a PyPI mirror. |
npm mirror URL |
(leave blank) |
Only needed behind an npm mirror. |
Course selection |
|
Installs every course environment. Choose |
Proceed with installation? |
|
Review the configuration summary, then confirm. |
The resulting Configuration summary should look like:
Configuration summary
GPU : auto-detect
K3s runtime : Docker
Image source : pull
Image registry : ghcr.io/amdresearch
Image tag : latest
Registry mirror : (none)
PyPI mirror : (default)
npm mirror : (default)
Courses : cpu, gpu, Course-CV, Course-DL, Course-LLM, Course-PhySim
Important Defaults In This Repository#
The current checked-in runtime/values.yaml is oriented to simple local deployment:
custom.authMode: auto-logincustom.adminUser.enabled: falsehub.db.pvc.storageClassName: local-pathsingleuser.storage.dynamic.storageClass: local-pathproxy.service.type: NodePortproxy.service.nodePorts.http: 30890ingress.enabled: falseprePuller.hook.enabled: falseprePuller.continuous.enabled: false
That means NFS, ingress, TLS, and auto-created admin credentials are optional configuration choices, not default behavior.
Installer Command Matrix#
Core Lifecycle#
./auplc-installer install
./auplc-installer install --dry-run
./auplc-installer uninstall
./auplc-installer detect-gpu
./auplc-installer install-tools
./auplc-installer help
Runtime Lifecycle#
./auplc-installer rt install
./auplc-installer rt upgrade
./auplc-installer rt remove
./auplc-installer rt reinstall
Image Lifecycle#
./auplc-installer img build
./auplc-installer img build hub cv
./auplc-installer img build base-rocm --gpu=strix
./auplc-installer img pull
Development Workflow#
./auplc-installer dev
./auplc-installer dev deploy
./auplc-installer dev upgrade
./auplc-installer dev reinstall
Common Install Flags#
# Default: pull pre-built images from the configured registry
./auplc-installer install
# Preview the Configuration summary (no sudo, no system changes)
./auplc-installer install --dry-run
# Override image tag or registry
./auplc-installer install --image-tag=develop
./auplc-installer install --image-registry=ghcr.io/myfork
# Build locally instead of pull
./auplc-installer install --image-source=build
# Explicitly set GPU family / target
./auplc-installer install --gpu=strix-halo
# Restrict courses
./auplc-installer install --courses=basic
# Use containerd mode instead of Docker-backed mode
./auplc-installer install --runtime=containerd
# Use registry / package mirrors
./auplc-installer install \
--mirror=mirror.example.com \
--mirror-pip=https://pypi.example.com/simple \
--mirror-npm=https://registry.npmmirror.com
Supported install-time flags map to these environment variables:
Flag |
Environment Variable |
Meaning |
|---|---|---|
|
|
Force GPU type / family ( |
|
|
K3s container runtime (legacy: |
|
— |
Pull from registry (default) or build locally (legacy: |
|
|
Custom-image registry prefix |
|
|
Custom-image tag prefix (GPU suffix appended automatically) |
|
|
Course subset ( |
|
|
Container registry mirror prefix |
|
|
Python package mirror |
|
|
npm registry mirror |
|
— |
Print Configuration summary and exit (install only) |
|
|
Assume yes to all prompts |
|
|
Stream every subprocess line live |
Offline And Portable Workflows#
Containerd / Portable-Oriented Local Install#
./auplc-installer install --runtime=containerd
This path exports images into K3s image storage and is better suited for portable or partially disconnected use than the default Docker-backed path.
Offline Bundle Workflow#
Create an offline bundle on a connected machine:
./auplc-installer pack
# Or build bundle from local images/artifacts
./auplc-installer pack --local
Transfer the bundle to the target machine, unpack it, then run:
./auplc-installer install
The installer auto-detects the bundle via manifest.json and switches into offline mode.
Common Day-2 Operations#
Change Runtime Configuration#
Edit runtime/values.yaml or the local overlay, then run:
./auplc-installer rt upgrade
Rebuild Images After Code Or Dockerfile Changes#
./auplc-installer img build
./auplc-installer rt reinstall
Work On Selected Images Only#
./auplc-installer img build hub cv
This is useful when you only changed the Hub or a specific course image.
Local Configuration Files#
runtime/values.yaml- repository default deployment valuesruntime/values.local.yaml- installer-generated local overlay
The installer-generated overlay captures detected accelerator selectors and image tags for the local machine. Do not use it to add courses or change site policy—see Customizing a Single-Node Deployment. Prefer editing runtime/values.yaml for intentional site configuration, then redeploy with:
./auplc-installer rt upgrade
Verification#
kubectl get pods -n jupyterhub
kubectl get svc -n jupyterhub
kubectl get pvc -n jupyterhub
You can also inspect the deployed route and logs:
kubectl logs -n jupyterhub deployment/hub --tail=100
kubectl get events -n jupyterhub --sort-by=.metadata.creationTimestamp
If you explicitly enabled admin bootstrap:
kubectl -n jupyterhub get secret jupyterhub-admin-credentials \
-o jsonpath='{.data.admin-password}' | base64 -d && echo
Troubleshooting Notes#
If you changed
runtime/values.yaml, use./auplc-installer rt upgrade.If you changed container images or Dockerfiles, use
./auplc-installer img buildfollowed by./auplc-installer rt reinstall.If you need cluster-specific storage, ingress, or TLS behavior, those are configuration changes on top of the default single-node setup, not built-in assumptions.