Hi, new here and new to the Spark. I have two Sparks and I have successfully connected them using the Amphenol cable purchased from the Marketplace.
I have been working to get Nemotron3 120 Super running in the cluster via vLLM, and started with a working configuration that gave me 12-14 TPS. However, the connection was falling back to TCP and not leveraging RoCE. Once I had RoCE visible in the container, I was able to get 17+ TPS. A decent bump.
In tests I’m seeing about 115 Gbps. I have no idea if this is good or not. Seems I read that it’s expected, then, no - you should be able to get close to 200. On one cable. Nope, need two. No you don’t… etc. I just can’t find a clear answer!
Can someone clarify this for me? And, if I should be able to get 200 on one cable, where is the configuration documented?
The short version is that they did not have a PCIe x8 lane but had two PCIe x4 lanes. The x4 lane isn’t enough for a full 200GB. So the physical interfaces are split across two PCIe x4 lanes. As such, there is limited (bandwidth) value in hooking up more than one 200GB physical interface on the spark.
If you hook up both cables, you could probably get around 250G since that’s around the theoretical max of two x4 lanes. The extra 50G is likely not worth the extra complexity.
The OOB recipe for for Nemotron-3-Super-120B had terrible performance for me, ~15 TPS.
I made some changes and now have it back to 18-19 TPS. The logs seem to show it using the full RoCE capability (I think) and I can see both GPUs being engaged during inference.
Marlin backend had some issues with NVFP4, so I switched all recipes to VLLM_CUTLASS about a month ago. You can also try running it with FLASHINFER_CUTLASS now that it is stable on Spark:
I’ll try your above setup - but my initial results with the out-of-box recipe for this model in the repo used Cutlass and I saw ~15 tps, which was worse than with Marlin.
Make sure you rebuild the container using latest wheels:
git pull
./build-and-copy.sh
I have this model in my build pipeline and it shows ~25 t/s on dual sparks. It was dropping to ~18 t/s last week due to one of the vLLM PRs, but those builds were never published because the pipeline was failing, but if you built from the source (like by forcing with --rebuild-vllm), you may have one of those degraded builds.
I am apparently already running the latest Wheels.
Commit hash matches (4f072c4f) — wheels are up to date. All flashinfer wheels are up to date — skipping download. FlashInfer wheels ready. Commit hash matches (17ed5e61f) — wheels are up to date. All vllm wheels are up to date — skipping download. vLLM wheels ready. Generated build-metadata.yaml Building runner image with command: docker build -t vllm-node --build-arg BUILD_JOBS=16 --build-arg TORCH_CUDA_ARCH_LIST=12.1a --build-arg FLASHINFER_CUDA_ARCH_LIST=12.1a . [+] Building 4.7s (20/20) FINISHED
how do you launch the recipe? Can you also post the startup log? You should be getting ~25 t/s on dual Sparks. Another possibility is that one (or both) Sparks are stuck in low power state. In this case, shut down both Sparks, unplug the USB-C power cable from the back (this is important!), plug it back in, and start the sparks back up.
I launch the recipe (above in this thread) using a little script which just wraps run-recipe.sh
#!/usr/bin/env bash
set -euo pipefail
RECIPE="${1:?Usage: spark-launch.sh <recipe-yaml> [--setup]}"
SETUP_ARG="${2:-}"
source ~/.config/sparkrun-local/env.sh
if [[ -z "${HF_TOKEN:-}" ]]; then
echo "HF_TOKEN is not set."
exit 1
fi
cd ~/spark-vllm-docker
echo "Launching recipe: $RECIPE"
if [[ "$SETUP_ARG" == "--setup" ]]; then
./run-recipe.sh "$RECIPE" --setup -e HF_TOKEN="$HF_TOKEN"
else
./run-recipe.sh "$RECIPE" -e HF_TOKEN="$HF_TOKEN"
fi
Can you try to run with the current nemotron-3-super-nvfp4.yaml recipe and see if the performance improves? Pull the updates from the repo in case it’s not up to date.