1. [主页](/)
2. [查看所有手册](https://developer.nvidia.cn/build-spark)
3. 

用于推理的 TRT LLM

# 用于推理的 TRT LLM

在 Spark 设备上部署 LM Studio 并提供大语言模型服务；使用 LM Link 远程访问模型。

概述

单台 Spark

在两台 Spark 上运行

打开 TensorRT-LLM 的 WebUI

故障排除

## 基本理念

**NVIDIA TensorRT-LLM (TRT-LLM)** 是一个开源库，用于优化和加速 NVIDIA GPU 上的大语言模型 (LLM) 推理。  
  
它提供高效的内核、内存管理和并行策略 (如张量、工作流和序列并行) ，因此开发者可以提供延迟更低、吞吐量更高的 LLM。  
  
TRT-LLM 与 Hugging Face 和 PyTorch 等框架集成，使大规模部署先进模型变得更加容易。

## 您将完成的任务

您需要设置 TensorRT-LLM，以便在 DGX Spark 上优化和部署大语言模型，与标准 PyTorch 相比，实现更高的吞吐量和更低的延迟 通过内核级优化、高效内存布局和高级量化进行推理。

## 开始之前需要了解的内容

- 

Python 熟练掌握 PyTorch 或类似 ML 框架并具备相关经验

- 

用于运行 CLI 工具和 Docker 容器的命令行便捷性

- 

基本了解 GPU 概念，包括显存、批处理和量化 (FP16/ INT8)

- 

熟悉 NVIDIA 软件堆栈 (CUDA 工具包、驱动)

- 

具备推理服务器和容器化环境方面的经验

## 预备知识

- 

DGX Spark 设备

- 

与 CUDA 12.x 兼容的 NVIDIA 驱动程序： nvidia-smi

- 

足够的 GPU VRAM (对于 700 亿个模型，推荐 40GB 以上)

- 

通过互联网连接下载模型和容器镜像

- 

通过互联网连接下载模型和容器镜像

## 辅助文件

可以找到所有必需素材 [GitHub](https://github.com/NVIDIA/dgx-spark-playbooks/tree/main) 上

- 

[trtllm-mn-entrypoint.sh](https://github.com/NVIDIA/dgx-spark-playbooks/blob/main/nvidia/trt-llm/assets/trtllm-mn-entrypoint.sh) — 用于多节点设置的容器入口点脚本

## 模型支持矩阵

Spark 上的 TensorRT-LLM 支持以下模型。列出的所有型号均可立即使用：

| Model | Quantization | Support Status | ModelScope Handle |
| --- | --- | --- | --- |
| Qwen3.5-35B-A3B | BF16 | ✅ | Qwen/Qwen3.5-35B-A3B |
| Qwen3.5-35B-A3B | FP8 | ✅ | Qwen/Qwen3.5-35B-A3B-FP8 |
| Qwen3.5-122B-A10B | NVFP4 | ✅ | unsloth/Qwen3.5-122B-A10B-NVFP4 |
| GLM-4.7-Flash | BF16 | ✅ | ZhipuAI/GLM-4.7-Flash |
| GLM-4.5-Air | FP8 | ✅ | ZhipuAI/GLM-4.5-Air-FP8 |
| Qwen3.5-9B | BF16 | ✅ | Qwen/Qwen3.5-9B |
| GLM-4.6V-Flash | BF16 | | ZhipuAI/GLM-4.6V-Flash |
| Qwen3.6-35B-A3B | NVFP4 | ✅ | nv-community/Qwen3.6-35B-A3B-NVFP4 |
| Qwen3-8B | FP8 | ✅ | nv-community/Qwen3-8B-FP8 |
| Qwen3-8B | NVFP4 | ✅ | nv-community/Qwen3-8B-FP4 |
| Qwen3-14B | FP8 | ✅ | nv-community/Qwen3-14B-FP8 |
| Qwen3-14B | NVFP4 | ✅ | nv-community/Qwen3-14B-FP4 |
| Qwen3-32B | NVFP4 | ✅ | nv-community/Qwen3-32B-FP4 |
| Qwen3-30B-A3B | NVFP4 | ✅ | nv-community/Qwen3-30B-A3B-FP4 |
| Qwen3-235B-A22B (two Sparks only) | NVFP4 | ✅ | nv-community/Qwen3-235B-A22B-FP4 |

**注意：**

您可以使用 NVFP4 量化文档为您喜爱的模型生成自己的 NVFP4 量化检查点。这使您能够充分利用 NVFP4 量化的性能和内存优势，即使对于尚未由 NVIDIA 发布的模型也是如此。

提醒：并非所有模型架构都支持 NVFP4 量化。

## 时间和风险

- 

**时长** ：45-60 分钟，用于设置和 API 服务器部署

- 

**风险等级：** 中等 – 容器提取和模型下载可能会因网络问题而失败

- 

**回滚：** 停止推理服务器并移除下载的模型以释放资源。

- 

**上次更新时间：** 2026 年 4 月 28 日

## 第 1 步：配置 Docker 权限

要在不使用 sudo 的情况下轻松管理容器，您必须位于 docker 组。如果您选择跳过此步骤，则需要使用 sudo 运行 Docker 命令。  
  
打开新终端并测试 Docker 访问。在终端中，运行：

    docker ps

如果您看到 permission denied 错误 (例如尝试连接到 Docker 守护程序套接字时 permission denied) ，请将您的用户添加到 docker 组，这样您就不需要使用 sudo 运行命令。

    sudo usermod -aG docker $USER newgrp docker

## 第 2 步：验证环境前提条件

确认您的 Spark 设备具有必要的 GPU 访问权限和网络连接以进行下载 模型和容器。

    # Check GPU visibility and driver nvidia-smi # Verify Docker GPU support docker run --rm --gpus all nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc24 nvidia-smi

## 第 3 步：设置环境变量

    export DOCKER\_IMAGE=&quot;nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc24&quot;

## 第 4 步：验证 TensorRT-LLM 安装

确认 GPU 访问后，验证是否可以在容器内导入 TensorRT-LLM。

    docker run --rm -it --gpus all \ $DOCKER\_IMAGE \ python -c &quot;import tensorrt\_llm; print(f&#39;TensorRT-LLM version: {tensorrt\_llm.\_\_version\_\_}&#39;)&quot;

预期输出：

    [TensorRT-LLM] TensorRT-LLM version: 1.3.0rc24 TensorRT-LLM version: 1.3.0rc24

## 第 5 步：创建缓存目录

设置本地缓存，以避免在后续运行中重新下载模型。

    python3 -m venv &quot;$HOME/.venvs/modelscope-hub&quot; source &quot;$HOME/.venvs/modelscope-hub/bin/activate&quot; python3 -m pip install --upgrade modelscope # Create Modelscope cache directory mkdir -p $HOME/.cache/modelscope/

## 第 6 步：使用 quickstart\_advanced 验证设置

此快速入门通过测试模型加载、推理引擎初始化和使用真实文本生成的 GPU 执行，端到端验证您的 TensorRT-LLM 设置。在启动推理 API 服务器之前，这是确认一切正常的最快方式。  
  
**LLM 快速入门示例**

# Qwen3.5-9B 说明

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; export MODEL\_HANDLE=&quot;Qwen/Qwen3.5-9B&quot; modelscope download --model &quot;$MODEL\_HANDLE&quot; --local\_dir &quot;$MODEL\_SCOPE\_CACHE/$MODEL\_HANDLE&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker run \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope:ro&quot; \ --rm -it --ulimit memlock=-1 --ulimit stack=67108864 \ --gpus=all --ipc=host --network host \ &quot;$DOCKER\_IMAGE&quot; \ bash -c &#39; python examples/llm-api/quickstart\_advanced.py \ --model\_dir &quot;$LOCAL\_MODEL&quot; \ --prompt &quot;Paris is great because&quot; \ --max\_tokens 64 &#39;

# Qwen3.6-35B-A3B-NVFP4

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; export MODEL\_HANDLE=&quot;nv-community/Qwen3.6-35B-A3B-NVFP4&quot; modelscope download \ --model &quot;$MODEL\_HANDLE&quot; \ --local\_dir &quot;$MODEL\_SCOPE\_CACHE/$MODEL\_HANDLE&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker run \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope:ro&quot; \ --rm -it --ulimit memlock=-1 --ulimit stack=67108864 \ --gpus=all --ipc=host --network host \ &quot;$DOCKER\_IMAGE&quot; \ bash -c &#39; python examples/llm-api/quickstart\_advanced.py \ --model\_dir &quot;$LOCAL\_MODEL&quot; \ --prompt &quot;Paris is great because&quot; \ --max\_tokens 64 \ --max\_seq\_len 4096 \ --max\_batch\_size 1 \ --max\_num\_tokens 512 \ --kv\_cache\_fraction 0.20 &#39;

# Qwen3.5-122B-A10B-NVFP4

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; export MODEL\_HANDLE=&quot;nv-community/Qwen3.5-122B-A10B-NVFP4&quot; modelscope download --model &quot;$MODEL\_HANDLE&quot; --local\_dir &quot;$MODEL\_SCOPE\_CACHE/$MODEL\_HANDLE&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker run \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope:ro&quot; \ --rm -it --ulimit memlock=-1 --ulimit stack=67108864 \ --gpus=all --ipc=host --network host \ &quot;$DOCKER\_IMAGE&quot; \ bash -c &#39; python examples/llm-api/quickstart\_advanced.py \ --model\_dir &quot;$LOCAL\_MODEL&quot; \ --prompt &quot;Paris is great because&quot; \ --max\_tokens 64 \ --max\_seq\_len 4096 \ --max\_batch\_size 1 \ --max\_num\_tokens 512 \ --kv\_cache\_fraction 0.20 &#39;

## 第 7 步：使用 quickstart\_multimodal 验证设置

VLM 快速入门示例

这通过运行带有图像理解的推理来展示视觉语言模型的功能。该示例使用多模态输入来验证文本和视觉处理工作流。

# Qwen3.5-9B 多模态指令

此模型可以直接使用完整检查点运行图像理解，不需要额外加载 LoRA 权重。

# 

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; export MODEL\_HANDLE=&quot;Qwen/Qwen3.5-9B&quot; modelscope download \ --model &quot;$MODEL\_HANDLE&quot; \ --local\_dir &quot;$MODEL\_SCOPE\_CACHE/$MODEL\_HANDLE&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker run \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope:ro&quot; \ --rm -it --ulimit memlock=-1 --ulimit stack=67108864 \ --gpus=all --ipc=host --network host \ &quot;$DOCKER\_IMAGE&quot; \ bash -c &#39; python3 examples/llm-api/quickstart\_multimodal.py \ --model\_dir &quot;$LOCAL\_MODEL&quot; \ --modality image \ --media &quot;https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg&quot; \ --prompt &quot;What is happening in this image?&quot; \ --max\_batch\_size 1 \ --max\_seq\_len 4096 \ --max\_num\_tokens 4096 \ --disable\_kv\_cache\_reuse &#39;

**注意：**

如果您在下载或首次运行时遇到主机 OOM，请释放主机 (容器外部) 上的操作系统页面缓存，然后重试：

    sudo sh -c &#39;sync; echo 3 \&gt; /proc/sys/vm/drop\_caches&#39;

## 第 8 步：使用兼容 OpenAI 的 API 提供 LLM  

通过 trtllm-serve 使用兼容 OpenAI 的 API 提供服务：

# Qwen3.6-35B-A3B-NVFP4

此示例中 `qwen3.yaml` 用于 KV 缓存、MoE 和 CUDA 计算图设置，然后启动 `trtllm-serve` 在端口 8355 上使用 Qwen3.6 推理解析器。

# 

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; export MODEL\_HANDLE=&quot;nv-community/Qwen3.6-35B-A3B-NVFP4&quot; modelscope download --model &quot;$MODEL\_HANDLE&quot; --local\_dir &quot;$MODEL\_SCOPE\_CACHE/$MODEL\_HANDLE&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker run --name trtllm\_llm\_server --rm -it --gpus all --ipc host --network host \ -e MODEL\_HANDLE=&quot;$MODEL\_HANDLE&quot; \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope:ro&quot; \ &quot;$DOCKER\_IMAGE&quot; \ bash -c &#39; cat \&gt; qwen3.yaml \&lt;\&lt;EOF kv\_cache\_config: enable\_block\_reuse: false free\_gpu\_memory\_fraction: 0.80 moe\_config: backend: CUTLASS cuda\_graph\_config: enable\_padding: true max\_batch\_size: 1 max\_batch\_size: 1 EOF PYTORCH\_ALLOC\_CONF=expandable\_segments:True \ trtllm-serve serve &quot;$LOCAL\_MODEL&quot; \ --host 0.0.0.0 \ --port 8355 \ --trust\_remote\_code \ --served\_model\_name &quot;$MODEL\_HANDLE&quot; \ --reasoning\_parser qwen3 \ --tool\_parser qwen3 \ --extra\_llm\_api\_options qwen3.yaml &#39;

# Qwen3.5-9B 说明

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; export MODEL\_HANDLE=&quot;Qwen/Qwen3.5-9B&quot; modelscope download --model &quot;$MODEL\_HANDLE&quot; --local\_dir &quot;$MODEL\_SCOPE\_CACHE/$MODEL\_HANDLE&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker run --name trtllm\_llm\_server --rm -it --gpus all --ipc host --network host \ -e MODEL\_HANDLE=&quot;$MODEL\_HANDLE&quot; \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope:ro&quot; \ &quot;$DOCKER\_IMAGE&quot; \ bash -c &#39; cat \&gt; /tmp/extra-llm-api-config.yml \&lt;\&lt;EOF print\_iter\_log: false kv\_cache\_config: dtype: &quot;auto&quot; free\_gpu\_memory\_fraction: 0.9 cuda\_graph\_config: enable\_padding: true disable\_overlap\_scheduler: true EOF trtllm-serve serve &quot;$LOCAL\_MODEL&quot; \ --max\_batch\_size 64 \ --trust\_remote\_code \ --port 8355 \ --served\_model\_name &quot;$MODEL\_HANDLE&quot; \ --extra\_llm\_api\_options /tmp/extra-llm-api-config.yml &#39;

# GLM-4.7-Flash

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; export MODEL\_HANDLE=&quot;ZhipuAI/GLM-4.7-Flash&quot; modelscope download \ --model &quot;$MODEL\_HANDLE&quot; \ --local\_dir &quot;$MODEL\_SCOPE\_CACHE/$MODEL\_HANDLE&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker run --name trtllm\_llm\_server --rm -it \ --gpus all --ipc=host --network host \ -e MODEL\_HANDLE=&quot;$MODEL\_HANDLE&quot; \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope:ro&quot; \ &quot;$DOCKER\_IMAGE&quot; \ bash -c &#39; cat \&gt; /tmp/glm47-autodeploy.yml \&lt;\&lt;EOF runtime: trtllm skip\_loading\_weights: false world\_size: 1 cuda\_graph\_config: max\_batch\_size: 1 batch\_sizes: [1] enable\_padding: true transforms: resize\_kv\_cache: free\_mem\_ratio: 0.20 compile\_model: backend: torch-opt cuda\_graph\_batch\_sizes: [1] EOF PYTORCH\_ALLOC\_CONF=expandable\_segments:True \ trtllm-serve serve &quot;$LOCAL\_MODEL&quot; \ --backend \_autodeploy \ --host 0.0.0.0 \ --port 8355 \ --max\_batch\_size 1 \ --max\_seq\_len 4096 \ --max\_num\_tokens 4096 \ --trust\_remote\_code \ --served\_model\_name &quot;$MODEL\_HANDLE&quot; \ --extra\_llm\_api\_options /tmp/glm47-autodeploy.yml &#39;

最少的 OpenAI 式聊天请求。从单独的终端运行此命令。

    curl -s http://localhost:8355/v1/chat/completions \ -H &quot;Content-Type: application/json&quot; \ -d &#39;{ &quot;model&quot;: &quot;&#39;&quot;$MODEL\_HANDLE&quot;&#39;&quot;, &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Paris is great because&quot;}], &quot;max\_tokens&quot;: 64 }&#39;

## 第 9 步：清理和回滚

删除已下载的模型和容器，以便在测试完成时释放空间。

# Qwen3.5-9B 多模态指令

此模型可以直接使用完整检查点运行图像理解，不需要额外加载 LoRA 权重。

# 

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; export MODEL\_HANDLE=&quot;Qwen/Qwen3.5-9B&quot; modelscope download \ --model &quot;$MODEL\_HANDLE&quot; \ --local\_dir &quot;$MODEL\_SCOPE\_CACHE/$MODEL\_HANDLE&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker run \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope:ro&quot; \ --rm -it --ulimit memlock=-1 --ulimit stack=67108864 \ --gpus=all --ipc=host --network host \ &quot;$DOCKER\_IMAGE&quot; \ bash -c &#39; python3 examples/llm-api/quickstart\_multimodal.py \ --model\_dir &quot;$LOCAL\_MODEL&quot; \ --modality image \ --media &quot;https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg&quot; \ --prompt &quot;What is happening in this image?&quot; \ --max\_batch\_size 1 \ --max\_seq\_len 4096 \ --max\_num\_tokens 4096 \ --disable\_kv\_cache\_reuse &#39;

**警告：**

这将删除所有缓存模型，并且可能需要重新下载以备将来运行。

    ``` # Remove ModelScope cache sudo chown -R &quot;$USER:$USER&quot; &quot;$HOME/.cache/modelscope&quot; rm -rf $HOME/.cache/modelscope/ # Clean up Docker images docker image prune -f docker rmi $DOCKER_IMAGE ```

# 在单个 Spark 上运行时遇到的常见问题  

| 症状 | 原因 | 修复 |
| --- | --- | --- |
| 无法访问 URL 的门控存储库 | 某些 ModelScope 模型的访问受限 | 在对应的 ModelScope 模型页面确认访问权限；需要登录时，在实际执行下载的环境中运行 `modelscope login --token &quot;你的 ModelScope 访问令牌&quot;`。令牌可在[此处](https://modelscope.cn/my/myaccesstoken)获取。 |
| 加载权重时的 OOM (例如，[Nemotron Super 49B](https://huggingface.co/nvidia/Llama-3_3-Nemotron-Super-49B-v1_5)) | 并行权重 - 负载内存压力 | export TRT\_LLM\_DISABLE\_LOAD\_WEIGHTS\_IN\_PARALLEL=1 |
| “CUDA out of memory” | GPU 显存不足 | 减少 free\_gpu\_memory\_fraction: 0.9 或批量大小，或使用较小的模型 |
| “Model not found”报错 | ModelScope 仓库 ID 或版本不正确、模型不可访问，或本地模型目录/挂载路径不正确 | 核对 ModelScope 模型页面中的仓库 ID 和版本；本地加载时，确认模型已完整下载，`LOCAL_MODEL` 指向容器内实际存在的目录，并检查 `config.json`、权重文件和 Docker 挂载。 |
| 容器提取超时 | 网络连接问题 | 重试提取或使用本地镜像 |
| 导入 tensorrt\_llm 失败 | 容器运行时问题 | 重启 Docker 守护程序，然后重试 |

# 在两个 Spark 上运行的常见问题

| 症状 | 原因 | 修复 |
| --- | --- | --- |
| MPI 主机名测试返回单个主机名 | 网络连接问题 | 验证两个节点均位于可访问的 IP 地址上 |
| 无法访问 URL 的门控存储库 | 某些 ModelScope模型的访问受限 | 在对应的 ModelScope 模型页面确认访问权限；需要登录时，在实际执行下载的环境中运行 `modelscope login --token &quot;你的ModelScope访问令牌&quot;`。令牌可在[此处](https://modelscope.cn/my/myaccesstoken)获取。 |
| “CUDA out of memory”错误 | GPU 显存不足 | 减少--max\_batch\_size 或 --max\_num\_tokens |
| 容器立即退出 | 缺少入口点脚本 | 确保 trtllm-mn-entrypoint.sh 下载成功并具有可执行权限，还需确保您未在节点上运行容器。如果已使用端口 2233，入口点脚本将不会启动。 |
| 守护程序的错误响应：验证根 CA 证书时出现错误 | 系统时钟不同步或证书过期 | 更新系统时间以与 NTP 服务器同步 sudo timedatectl set-ntp true |
| “invalid mount config for type &#39;bind&#39;” | 缺少或无法执行入口点脚本 | 运行 docker inspect 查看完整的错误消息。验证 trtllm-mn-entrypoint.sh 存在于您主目录中的两个节点上 (ls -la $HOME/trtllm-mn-entrypoint.sh) 并具有可执行权限 (chmod +x $HOME/trtllm-mn-entrypoint.sh) |
| “task: non-zero exit (255)” | 带错误代码 255 的容器退出 | 使用检查容器日志 docker ps -a --filter &quot;name=trtllm-multinode\_trtllm&quot; 获取容器 ID，然后 docker logs 查看详细的错误消息 |
| Docker 状态卡在“Pending”(待处理)，并显示“no suitable node (insufficien...)” | 未正确配置 Docker 守护程序以进行 GPU 访问 | 验证步骤 2-4 是否已成功完成 /etc/docker/daemon.json 包含正确的 GPU 配置 |
| 服务模型失败 ptxas fatal 错误 | 模型需要运行时 Triton 内核编译 | 在“Step 10”(步骤 10) 中，添加 -x TRITON\_PTXAS\_PATH 您的 mpirun 命令 |

**注意：**

DGX Spark 采用统一内存架构 (UMA) ，可在 GPU 和 CPU 之间实现动态内存共享。 由于许多应用程序仍在更新以利用 UMA，您可能会遇到内存问题，即使在 DGX Spark 的内存容量。如果发生这种情况，请使用以下命令手动刷新缓冲区缓存：

    sudo sh -c &#39;sync; echo 3 \&gt; /proc/sys/vm/drop\_caches&#39;

## 第 1 步：配置网络连接

按照网络设置连接两个 Spark用于在 DGX Spark 节点之间建立连接的操作手册。  
  
其中包括：

- 

物理 QSFP 线缆连接

- 

网络接口配置 (自动或手动分配 IP)

- 

无密码 SSH 设置

- 

网络连接验证

## 第 2 步：配置 Docker 权限

要在不使用 sudo 的情况下轻松管理容器，您必须位于 docker 组。如果您选择跳过此步骤，则需要使用 sudo 运行 Docker 命令。  
  
打开新终端并测试 Docker 访问。在终端中，运行：

    docker ps

如果您看到 permission denied 错误 (例如尝试连接到 Docker 守护程序套接字时 permission denied)，请将您的用户添加到 docker 组，这样您就不需要使用 sudo 运行命令。

    sudo usermod -aG docker $USER newgrp docker

在两个节点上重复此步骤。

## 第 3 步：创建 OpenMPI 主机文件

为 MPI 操作创建包含两个节点 IP 地址的主机文件。在每个节点上，获取网络接口的 IP 地址：

    ip a show enp1s0f0np0

或者，如果您使用的是第二个界面：

    ip a show enp1s0f1np1

寻找 inet 查找 IP 地址的行 (例如， 192.168.1.10/24 ) 。  
  
在主节点上，创建主机文件 ~/openmpi-hostfile 收集到的 IP：

    cat \&gt; ~/openmpi-hostfile \&lt;\&lt;EOF 192.168.1.10 192.168.1.11 EOF

将 IP 地址替换为您的实际节点 IP。

## 第 4 步：在两个节点上启动容器

在每个节点 (主节点和工作节点) 上，运行以下命令以启动 TRT-LLM 容器：

# 

    export MODEL\_SCOPE\_CACHE=&quot;$HOME/.cache/modelscope&quot; mkdir -p &quot;$MODEL\_SCOPE\_CACHE&quot; docker run -d --rm \ --name trtllm-multinode \ --gpus &#39;&quot;device=all&quot;&#39; \ --network host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --device /dev/infiniband:/dev/infiniband \ -e UCX\_NET\_DEVICES=&quot;enp1s0f0np0,enp1s0f1np1&quot; \ -e NCCL\_SOCKET\_IFNAME=&quot;enp1s0f0np0,enp1s0f1np1&quot; \ -e OMPI\_MCA\_btl\_tcp\_if\_include=&quot;enp1s0f0np0,enp1s0f1np1&quot; \ -e OMPI\_MCA\_orte\_default\_hostfile=&quot;/etc/openmpi-hostfile&quot; \ -e OMPI\_MCA\_rmaps\_ppr\_n\_pernode=&quot;1&quot; \ -e OMPI\_ALLOW\_RUN\_AS\_ROOT=&quot;1&quot; \ -e OMPI\_ALLOW\_RUN\_AS\_ROOT\_CONFIRM=&quot;1&quot; \ -e CPATH=/usr/local/cuda/include \ -e TRITON\_PTXAS\_PATH=/usr/local/cuda/bin/ptxas \ -v &quot;$MODEL\_SCOPE\_CACHE:/root/.cache/modelscope&quot; \ -v ~/.ssh:/tmp/.ssh:ro \ nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc25 \ sh -c &quot;curl https://raw.githubusercontent.com/NVIDIA/dgx-spark-playbooks/refs/heads/main/nvidia/trt-llm/assets/trtllm-mn-entrypoint.sh | sh&quot;

**注意：**

请确保在主节点和工作节点上运行此命令。

## 第 5 步：验证容器是否正在运行

在每个节点上，验证容器是否正在运行：

    docker ps

您应看到类似于以下内容的输出：

    ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abc123def456 nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc25 &quot;sh -c &#39;curl https:…&quot; 10 seconds ago Up 8 seconds trtllm-multinode

## 第 6 步：将主机文件复制到主容器

在主节点上，将 OpenMPI 主机文件复制到容器中：

    docker cp ~/openmpi-hostfile trtllm-multinode:/etc/openmpi-hostfile

## 第 7 步：保存容器参考

为方便起见，请在主节点上将容器名称保存在变量中：

    export TRTLLM\_MN\_CONTAINER=trtllm-multinode

## 第 8 步：生成配置文件

在主节点上，在容器内生成配置文件：

    docker exec $TRTLLM\_MN\_CONTAINER bash -c &#39;cat \&lt;\&lt;EOF \&gt; /tmp/extra-llm-api-config.yml print\_iter\_log: false kv\_cache\_config: dtype: &quot;auto&quot; free\_gpu\_memory\_fraction: 0.9 cuda\_graph\_config: enable\_padding: true EOF&#39;

## 第 9 步：下载模型

我们可以使用以下命令从 ModelScope 下载模型。您可以替换 `nv-community/Qwen3-235B-A22B-FP4` 为您选择的 ModelScope 模型。

    # 公共 ModelScope 模型无需访问令牌。 export MODEL\_HANDLE=&quot;nv-community/Qwen3-235B-A22B-FP4&quot; export LOCAL\_MODEL=&quot;/root/.cache/modelscope/$MODEL\_HANDLE&quot; docker exec \ -e MODEL\_HANDLE=&quot;$MODEL\_HANDLE&quot; \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -it $TRTLLM\_MN\_CONTAINER bash -c &#39; mpirun python3 -m pip install --upgrade modelscope &amp;&amp; mpirun modelscope download \ --model &quot;$MODEL\_HANDLE&quot; \ --local\_dir &quot;$LOCAL\_MODEL&quot;&#39;

## 第 10 步：服务模型

在主节点上，启动 TensorRT-LLM 服务器：

    docker exec \ -e MODEL\_HANDLE=&quot;$MODEL\_HANDLE&quot; \ -e LOCAL\_MODEL=&quot;$LOCAL\_MODEL&quot; \ -it $TRTLLM\_MN\_CONTAINER bash -c &#39; mpirun -x MODEL\_HANDLE -x LOCAL\_MODEL \ trtllm-llmapi-launch trtllm-serve &quot;$LOCAL\_MODEL&quot; \ --tp\_size 2 \ --ep\_size 2 \ --backend pytorch \ --max\_seq\_len 4096 \ --max\_num\_tokens 8192 \ --max\_batch\_size 1 \ --custom\_tokenizer deepseek\_v4 \ --served\_model\_name &quot;$MODEL\_HANDLE&quot; \ --extra\_llm\_api\_options /tmp/extra-llm-api-config.yml \ --port 8355&#39;

这将在端口 8355 上启动 TensorRT-LLM 服务器。然后，您可以向 http://localhost:8355 使用兼容 OpenAI 的 API 格式。

**注意：**

您可能会看到一个警告，例如 UCX WARN network device &#39;enp1s0f0np0&#39; is not available, please use one or more of。如果您的推理成功，您可以忽略此警告，因为它与您正在使用的两个 CX-7 端口中的一个有关，而另一个则未使用。

预期输出：服务器启动日志和准备就绪消息。

## 第 11 步：验证 API 服务器

服务器运行后，您可以使用 CURL 请求对其进行测试。在主节点上运行以下命令：

    curl -s http://localhost:8355/v1/chat/completions \ -H &quot;Content-Type: application/json&quot; \ -d &#39;{ &quot;model&quot;: &quot;nvidia/Qwen3-235B-A22B-FP4&quot;, &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Paris is great because&quot;}], &quot;max\_tokens&quot;: 64 }&#39;

预期输出：生成文本完成后的 JSON 响应。

## 第 12 步：清理和回滚

停止并移除每个节点上的容器。以 SSH 方式访问每个节点并运行：

    docker stop trtllm-multinode

**警告：**

您可能会看到一个警告，例如 UCX WARN network device &#39;enp1s0f0np0&#39; is not available, please use one or more of。如果您的推理成功，您可以忽略此警告，因为它与您正在使用的两个 CX-7 端口中的一个有关，而另一个则未使用。

删除已下载的模型以释放每个节点上的磁盘空间：

    rm -rf &quot;$HOME/.cache/modelscope/nv-community/Qwen3-235B-A22B-FP4&quot;

## 第 13 步：后续步骤

您现在可以在 DGX Spark 集群上部署其他模型。

## 第 1 步：为使用 Open WebUI 和 TRT-LLM 做好准备

在单节点或多节点配置中设置 TensorRT-LLM 推理服务器后， 您可以部署 Open WebUI，通过 Open WebUI 与您的模型进行交互。要进行设置，只需确保以下内容按顺序

- 

运行并可在 http://localhost:8355 访问的 TensorRT-LLM 推理服务器

- 

Docker 的安装和配置 (请参阅前面的步骤)

- 

DGX Spark 提供端口 3000

## 第 2 步：启动 Open WebUI 容器

在运行 TensorRT-LLM 推理服务器的 DGX Spark 节点上运行以下命令。 对于多节点设置，这是主要节点。

**注意：**

如果您为兼容 OpenAI 的 API 服务器使用了其他端口，请调整 OPENAI\_API\_BASE\_URL=&quot;http://localhost:8355/v1&quot; 以匹配 TensorRT-LLM 推理服务器的 IP 和端口。

# 

    docker run \ -d \ -e OPENAI\_API\_BASE\_URL=&quot;http://localhost:8355/v1&quot; \ -v open-webui:/app/backend/data \ --network host \ --add-host=host.docker.internal:host-gateway \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:main

此命令：

- 

通过 http://localhost:8355 连接到兼容 OpenAI 的 TensorRT-LLM API 服务器

- 

允许访问 http://localhost:8080 上的 Open WebUI 界面

- 

在 Docker Volume 中保留聊天数据

- 

启用容器自动重启

- 

使用最新的 Open WebUI 镜像

## 第 3 步：访问 Open WebUI 界面

打开 Web 浏览器，然后导航至：

# 

    http://localhost:8080

您应在 http://localhost:8080 上看到 Open WebUI 界面，您可以在其中执行以下操作：

- 

与您部署的模型交流

- 

允许访问 http://localhost:8080 上的 Open WebUI 界面

- 

调整模型参数

- 

查看聊天记录

- 

管理模型配置

您可以从左上角的下拉菜单中选择模型。您只需完成这些操作，即可开始在部署的模型中使用 Open WebUI。

**注意：**

如果从远程机器访问，请将本地主机替换为 DGX Spark 的 IP 地址。

## 第 4 步：清理和回滚

**警告：**

这将删除所有聊天数据，并且可能需要重新上传以备将来运行。

使用以下命令删除容器：

    docker stop open-webui docker rm open-webui docker volume rm open-webui docker rmi ghcr.io/open-webui/open-webui:main


