The Second Launch: Deploying GLM-5-NVFP4 Across 8 Blackwell GPUs

Introduction

In the high-stakes world of deploying cutting-edge large language models, few moments are as charged as the second launch attempt. Message 130 in this opencode session captures precisely such a moment: the assistant issues a bash command via SSH to launch the GLM-5-NVFP4 model server across eight NVIDIA RTX PRO 6000 Blackwell GPUs using a freshly built main-branch version of SGLang. This message is not merely a command execution—it is the culmination of an intensive debugging session that resolved two distinct blocking issues, and it sets the stage for a cascade of numerical stability problems that would dominate the subsequent conversation. Understanding this single message requires unpacking the technical context, the reasoning that led to its specific parameter choices, and the assumptions embedded in every flag and environment variable.

The Path to This Message

To appreciate why message 130 was written, one must trace the journey that preceded it. The session began with environment setup on an Ubuntu 24.04 machine equipped with eight RTX PRO 6000 Blackwell GPUs (96 GB each). After installing NVIDIA drivers, CUDA Toolkit 13.1, and a Python virtual environment with PyTorch, the assistant attempted a first launch of the GLM-5-NVFP4 model in message 109. That attempt failed immediately with a KeyError: 'glm_moe_dsa'—the installed Transformers library (version 4.57.1) did not recognize the model architecture used by GLM-5, a state-of-the-art Mixture-of-Experts model quantized to NVFP4 format. The fix was straightforward: upgrade Transformers to version 5.2.0, which added support for the glm_moe_dsa architecture.

But a second, more subtle issue emerged. The user interjected in message 117 with a critical observation: the installed SGLang version (0.5.8.post1) lacked support for the SM120 compute capability of the Blackwell GPUs. A specific pull request, #14311, had been merged into SGLang's main branch three weeks earlier to fix shared memory block sizes for the RTX PRO 6000's architecture. Without this fix, attention kernels would use Hopper-sized block sizes that exceeded the Blackwell GPU's smaller shared memory capacity (100 KB versus 160+ KB on Hopper), causing crashes or silent correctness issues. The assistant verified this by inspecting the source code: the installed version only had branches for compute capability ≥9 (Hopper) and ≥8 (Ampere), with no special handling for capability 12 (Blackwell). The solution was to install SGLang from the main branch, which required cloning the repository and building from source.

Message 130 is therefore the second launch attempt, issued only after both blockers were resolved: Transformers 5.2.0 for the model architecture, and SGLang main branch (commit 632c7af) for the GPU architecture.

Anatomy of the Launch Command

The command itself is a study in deliberate configuration. Let us examine its components in detail.

Environment variables set the stage for distributed inference across eight GPUs:

Assumptions Embedded in the Configuration

Every parameter in this launch command encodes an assumption about the hardware, software, and model behavior. Some of these assumptions would prove incorrect.

The most significant assumption is that the FlashInfer attention backend and the modelopt_fp4 quantization would work correctly together on Blackwell GPUs. The model card on HuggingFace recommended this exact configuration, and the assistant trusted those recommendations. However, as the subsequent log output would reveal (message 131), a warning appeared immediately: "DeepGemm is enabled but the scale_fmt of checkpoint is not ue8m0. This might cause accuracy degradation on Blackwell." This warning, which the assistant noted but could not act on at this stage, foreshadowed the NaN crashes that would plague the server during decode operations.

A second assumption concerns the Transformers 5.2.0 compatibility. The log warned: "Transformers version 5.2.0 is used for model type glm_moe_dsa. If you experience issues related to RoPE parameters, they may..." This warning hinted at potential positional encoding incompatibilities between the new Transformers release and the custom model architecture. The assistant acknowledged this warning but proceeded, hoping the --trust-remote-code flag would handle any discrepancies.

The assistant also assumed that the main-branch SGLang build, with the SM120 shared memory fix, would resolve all GPU-related issues. While the fix was necessary for correct attention kernel execution, it did not address the DeepGemm scale format problem, which would later manifest as catastrophic NaN values in the probability tensor during decode.

Input Knowledge Required

Understanding this message requires substantial domain knowledge. The reader must be familiar with:

Output Knowledge Created

This message creates several important outputs:

  1. A baseline launch configuration that would be iteratively modified as debugging progressed. Every subsequent change to attention backends, KV cache dtype, or CUDA graph settings would be measured against this initial attempt.
  2. A process (PID 4640) running on the remote machine, whose log output would become the primary debugging interface. The assistant would monitor this log across the next ten messages, watching the model download progress from 31 GB to 296 GB.
  3. A set of warnings (DeepGemm scale format, Transformers RoPE compatibility) that would guide the subsequent debugging direction. These warnings, visible in the log but not in the launch command itself, represent the first hints of the NaN crash problem.
  4. A documented decision point in the session's history. Future readers can see exactly which parameters were chosen, and why, before the stability issues emerged.

The Thinking Process Visible in This Message

While the message itself is a single bash command, the reasoning behind it is visible through the preceding context. The assistant's thinking process reveals a methodical approach to troubleshooting:

First, it identified the root cause of the first launch failure (missing glm_moe_dsa in Transformers) and applied the fix (upgrade to 5.2.0). Then, when the user flagged the SM120 issue, the assistant did not simply trust the user's assertion—it verified by inspecting the source code of the installed SGLang, confirming that the SM120 fix was absent. It then located the relevant PR, identified the merge commit, and built from the main branch. After installation, it verified the fix by re-inspecting the source code for the CUDA_CAPABILITY[0] == 12 branch.

This verification step is crucial. The assistant could have assumed the fix was present in the latest release (v0.5.8.post1), but instead it checked the actual code. This habit of verification—testing assumptions against reality—is a hallmark of effective debugging.

The assistant also demonstrated awareness of dependency interactions. When installing SGLang from source, the uv pip install -e command downgraded Transformers back to 4.57.1 (a dependency constraint in the SGLang build). The assistant caught this regression and re-upgraded Transformers, ensuring both fixes remained in place.

The Broader Context: What Followed

Message 130 is a pivot point. The server launched successfully, and the model began downloading. Over the next several messages, the assistant monitored the download progress (31 GB → 70 GB → 145 GB → 254 GB → 296 GB) and watched the weight loading process. But when the server began handling decode requests, the NaN crashes appeared—a device-side assert triggered error caused by infinite or NaN values in the probability tensor.

The subsequent debugging would consume much of the session. The assistant would try switching attention backends (Triton, FlashMLA sparse), forcing FP8 GEMM backends to Cutlass, disabling CUDA graphs, and consulting a local research repository (FINDINGS.md) that documented similar issues with Kimi K2-Thinking deployments. The DeepGemm scale format warning from message 130's log would prove to be the key clue, though the solution would require deeper investigation into Blackwell's numerical precision requirements.

Conclusion

Message 130 is far more than a simple bash command. It represents the convergence of two parallel debugging threads—Transformers version compatibility and SGLang GPU architecture support—into a single launch attempt. It encodes dozens of assumptions about hardware behavior, software compatibility, and model correctness. Some of these assumptions held; others did not. The warnings that appeared in the subsequent log output would become the roadmap for the next phase of debugging.

For the technical writer studying this session, message 130 serves as a case study in the complexity of deploying cutting-edge AI models. It illustrates that a successful launch is not the end of the journey but the beginning of a new phase of investigation, where theoretical compatibility meets the unforgiving reality of numerical computation on novel hardware architectures.