Hi everyone,
I’m trying to run the Llama‑3.1‑8B‑Instruct NIM container (nvcr.io/nim/meta/llama-3.1-8b-instruct:latest) on a fully air‑gapped server, and I’m running into an unexpected issue.
Working setup
On a first server with Internet access, the container runs perfectly.
Goal
Run the same container on a second server without Internet access, following the air‑gapped installation procedure.
Steps performed
1. Transferred the Docker image
I exported the image from the online server and imported it on the offline one using:
docker save- file transfer
docker load
2. First run on the offline server
The container fails to start (expected), since it cannot download the model files.
From the logs I extracted the selected profile:
a4783dadbd6fe8f6af0bd3d03f4928fa4a59dfebbfe2ff8493b5ea847adbe4cd
3. Downloaded the cache on the online server
On the server with Internet access, I started the container and ran:
nim download-to-cache -p <profile>
The resulting cache directory looks like this:
├── blobs
│ ├── 1dc9bbfdb10d89c8968e5a7e7775a3a9
│ ├── ...
│ └── cef2a8a4421c1cedc1f9e5587900a521-9
├── refs
│ ├── fp8-tool-calling
│ └── trtllmapi-pt-runtime-params-l40sx2-latency-fp8-n64ve9jqfq
└── snapshots
├── fp8-tool-calling
│ ├── model-00001-of-00002.safetensors
│ ├── model-00002-of-00002.safetensors
│ ├── tokenizer.json
│ ├── ...
└── trtllmapi-pt-runtime-params-l40sx2-latency-fp8-n64ve9jqfq
├── runtime_params.json
└── ...
4. Copied the cache to the offline server
I copied the entire .cache directory to the air‑gapped server.
5. Started the container offline
I launched it with:
-e NIM_MODEL_PROFILE="$PROFILE_HASH"
-v $AIR_GAP_NIM_CACHE:/opt/nim/.cache
The container starts correctly and all endpoints respond.
Problem
The /v1/chat/completions and /v1/completions endpoints return corrupted output, consisting of unreadable or nonsensical characters.
What I’ve already checked
- All cache files are present.
checksums.blake3matches correctly.- The profile hash is exactly the one shown in the logs.
- The same image works fine on the online server.
Question
What could cause corrupted model output in an air‑gapped setup, even when:
- the Docker image is identical,
- the correct profile is used,
- the cache appears complete and checksums are valid?
Is there anything else that needs to be included in the cache besides blobs/, refs/, and snapshots/?
Or is there an additional step required for FP8 / TRT‑LLM profiles?
Thanks in advance for any help!
NIM logs.txt (92.2 KB)