| # Gemma-4 26B-A4B (MoE) TP=8 on Inferentia2 (inf2.24xlarge, 8 of 12 cores) — NxD ModelBuilder server. | |
| # | |
| # THIN image: the 108 GB compiled model + 62 GB weights are NOT baked (impractical to push/pull as a | |
| # layer). The entrypoint pulls them from the Hugging Face repo at first container start into /data, | |
| # then serves. Set HF_REPO_INF to the published inference repo. | |
| # | |
| # Bases on the proven E2B image (Neuron SDK 2.23 runtime, torch 2.8 / torch-neuronx, transformers 5.13) | |
| # and adds neuronx-distributed (ModelBuilder) + huggingface_hub for the runtime artifact pull. | |
| FROM xbill9/gemma4-optb:latest | |
| # NOTE: pin neuronx-distributed to the version validated on hardware (filled in after the live run). | |
| ARG NXD_VERSION="0.17.26814" | |
| RUN pip install --no-cache-dir "huggingface_hub>=0.34" && \ | |
| pip install --no-cache-dir --extra-index-url https://pip.repos.neuron.amazonaws.com \ | |
| ${NXD_VERSION:+neuronx-distributed==${NXD_VERSION}} && \ | |
| if [ -z "${NXD_VERSION}" ]; then pip install --no-cache-dir --extra-index-url https://pip.repos.neuron.amazonaws.com neuronx-distributed; fi | |
| COPY optb_server_tp.py /app/optb_server_tp.py | |
| COPY tp_mb_moe.py /app/tp_mb_moe.py | |
| COPY entrypoint.sh /app/entrypoint.sh | |
| RUN chmod +x /app/entrypoint.sh | |
| ENV MODEL_DIR=/data/real-gemma4-26B-A4B-it \ | |
| MB_LOAD=/data/mb_26b_256.pt \ | |
| TP_DEGREE=8 KV_MAX=256 KV_BUCKET=64 \ | |
| HF_REPO_INF=xbill9/gemma-4-26B-A4B-it-inferentia2 \ | |
| HF_REPO=google/gemma-4-26B-A4B-it \ | |
| NEURON_RT_VISIBLE_CORES=0-7 PORT=8080 \ | |
| PYTHONPATH=/app | |
| EXPOSE 8080 | |
| # run with (needs all 6 neuron devices for 8 cores): | |
| # docker run -d --device /dev/neuron0 --device /dev/neuron1 --device /dev/neuron2 \ | |
| # --device /dev/neuron3 --device /dev/neuron4 --device /dev/neuron5 --ipc=host \ | |
| # -e HF_TOKEN=... -v gemma31b-data:/data -p 8080:8080 xbill9/gemma4-optb-26b:latest | |
| ENTRYPOINT ["/app/entrypoint.sh"] | |