Development Workflow
The development workflow is for engineers who need to change AODT source code, rebuild worker binaries, or produce custom Docker images. It complements the Runtime Workflow, which uses prebuilt images and binaries.
Development vs runtime
In the development workflow, the worker is started independently inside the container. The client connects over gRPC after the worker process is running.
Container types
Runtime container — A lightweight image without build tools. Use it to run simulations after code is built and tested.
Development container — Includes compilers, CMake, and other development tools. Use it to modify and rebuild source code.
Development cycle
- Download the worker source code from NGC.
- Build a development container image (once per development cycle).
- Open an interactive shell in the development container.
- Modify source code inside the shell.
- Build and test the changes.
- When the code is stable, build a runtime container image.
- Run simulations using the runtime container.
The sections below walk through each step.
Download the worker from NGC
From the NGC website:
Using the NGC CLI:
- Download and install the NGC CLI.
- Download the worker using the NGC CLI command:
Build the development container image
Run once at the start of a development cycle, or after container recipe changes:
Devel and MATLAB images are built from HPCCM recipes in container/.
Get the source
After cloning, install Git LFS and initialize submodules:
Initialize the MatX submodule (GPU-accelerated tensor library used by the EM solver):
Start the development container
From the AODT package root on the worker host, launch an interactive development shell alongside the full infrastructure stack (ClickHouse, MinIO, Nessie):
Continue building and testing inside this shell.
Build the source
Inside the development container, configure and build the worker:
Adjust CMAKE_CUDA_ARCHITECTURES to match the GPUs in your system.
Run the worker
Still inside the container, start the Digital Twin server:
The worker listens on port 50051 and waits for the client to connect and start a simulation.
Connect the client
- Colocated — Run client examples from the same machine or container network.
- Non-colocated — Run client examples from a separate machine and pass the worker IP, S3 endpoint, and Iceberg catalog URI. See Worker Installation for remote connection arguments.
For end-to-end examples, continue to the Quickstart guide.
Build a runtime container image
After code is built and tested, package it into a lighter runtime image:
Run the runtime container
Start an interactive runtime shell:
Stop and remove containers when finished:
Additional information
Use locally built development or MATLAB images:
MATLAB runtime image
Build a MATLAB image (layers MATLAB Runtime on top of the development image):