Build from Source
This document outlines the steps to download, build, and deploy the open source edition of NVIDIA HeavyAI.
Prerequisites
Confirm the following is in place before starting:
- Docker Engine, NVIDIA drivers, and
nvidia-container-toolkitinstalled on the build host (see Step 1)
1. Prepare the environment
The host that will build and run the HeavyAI Docker image must have Docker Engine, NVIDIA drivers, and nvidia-container-toolkit installed. This can be your production machine or a separate build host — the resulting image is a self-contained artifact that can be transferred afterward.
Install the following on your Linux host using the official documentation for each:
- Docker Engine — install and configure Docker Engine on Ubuntu
- NVIDIA drivers — datacenter and GPU driver installation guide
- NVIDIA Container Toolkit — enables GPU access inside Docker containers
To configure for docker, execute the following:
Verification: Confirm the GPU passthrough is working:
If it prints your GPU details, the environment is ready.
2. Clone the repository
This repository will give you access to all the source code and additional tools for building your container. Clone it to your host and enter the project directory:
3. Pull the build container
The HeavyAI build system compiles all components inside a deps container, ensuring a consistent toolchain regardless of what is installed on the host. Pull the deps image for your target distribution before building, executing the below in your heavydb (or heavydb-internal) cloned repository folder:
Other supported distributions:
Note: Pulling the deps image is a one-time operation per distro. Building the deps image from scratch (if no pre-built image is available) is a multi-hour process; pulling a pre-built image from GHCR is the expected workflow. The build system auto-detects the local deps image on subsequent runs and prefers Ubuntu over Rocky when multiple images are present. Override with
--deps-image=<image>if needed.
4. Build the Docker image
Run the full build from inside the heavydb directory.
This builds the following components and packages them into a single Docker image:
Build output is written to build/ubuntu22.04/logs/. If a step fails, the last 50 lines of the relevant log are printed automatically. You can also tail a log directly:
5. Confirm the image
Once the build completes, confirm that the new HeavyAI product image was created:
You should see two new images. For example:
Warning: The image whose name begins with
core-build-is the build container used to compile HeavyAI — it does not run HeavyAI. Only the product image (e.g.heavyai-ubuntu22.04-cuda-render-x86_64:10.0.0) should be deployed to your production environment.
Note the full product image name and tag from your output — you will need it in Step 6.
6. Deployment
Update your existing docker-compose.yml with the new image name, then start the service.
Update docker-compose.yml
Open your existing docker-compose.yml and update the image: field:
Note: Only the
image:value needs to change — all other settings in yourdocker-compose.yml(volumes, ports, environment, restart policy) can remain as-is.
If you built on the same machine where HeavyAI runs, apply the updated compose file and start the service now:
Export and transfer
If the build machine differs from the production host, save the image and transfer it:.
On the build machine:
On the destination host:
Note: A full HeavyAI image is typically 15–20 GB uncompressed. Ensure sufficient disk space on both machines before exporting. The
--progressflag onrsyncwill show live transfer throughput.
7. Initial configuration (optional)
See Post-Installation Actions for steps to change the admin password, configure servers.json, enable TLS, and set up Mapbox/Google API keys in heavy.conf.
References
- Docker Engine installation — Ubuntu
- NVIDIA driver installation guide
- NVIDIA Container Toolkit installation guide
- HeavyAI Immerse customization guide — servers.json reference, feature flags, UI keys, branding, custom basemaps
- HeavyAI web server configuration parameters
- HeavyDB configuration parameters
- Mapbox access tokens
- Google Geocoding API