NVFP4 量化
将模型量化为 NVFP4,以使用 TensorRT Model Optimizer 在 Spark 上运行。
基本思路
NVFP4 是 NVIDIA Blackwell GPU 引入的一种 4 位浮点格式,旨在保持模型精度的同时,降低推理工作负载的内存带宽和存储需求。与统一的 INT4 量化不同,NVFP4 保留了浮点语义,采用共享指数和紧凑尾数,从而实现更高的动态范围和更稳定的收敛性。NVIDIA Blackwell Tensor Core 原生支持 FP16、FP8 和 FP4 之间的混合精度执行,使模型能够使用 FP4 计算权重和激活值,同时以更高的精度(通常为 FP16)进行累加。这种设计最大限度地减少了矩阵乘法期间的量化误差,并支持 TensorRT-LLM 中的高效转换流水线,从而实现精细的逐层量化。
直接益处包括:
内存使用量比 FP16 降低约 3.5 倍,比 FP8 降低约 1.8 倍。
保持接近 FP8 的准确度(通常损失小于1%)
提高推理速度和能源效率
您将完成
您将使用 NVIDIA 的 TensorRT 模型优化器在 TensorRT-LLM 容器内量化 DeepSeek-R1-Distill-Qwen-7B 模型,生成 NVFP4 量化模型,以便在 NVIDIA DGX Spark 上部署。
这些示例使用了 NVIDIA FP4 量化模型,通过降低模型层的精度,可以将模型大小减少约一半。这种量化方法旨在保持精度的同时,显著提升吞吐量。但是,需要注意的是,量化可能会影响模型精度——我们建议您运行评估,以验证量化模型是否能满足您的应用场景要求。
前置知识
使用 Docker 容器和 GPU 加速工作负载
理解模型量化概念及其对推理性能的影响
具备 NVIDIA TensorRT 和 CUDA 工具包环境的使用经验
熟悉 Hugging Face 模型库和身份验证
先决条件
采用 Blackwell 架构 GPU 的 NVIDIA Spark 设备
已安装支持 GPU 的 Docker
已配置 NVIDIA Container Toolkit
足够的模型文件和输出存储空间
Hugging Face 账户可以访问目标模型
请检查您的设置:
# Check Docker GPU access docker run --rm --gpus all nvcr.io/nvidia/tensorrt-llm/release:spark-single-gpu-dev nvidia-smi # Verify sufficient disk space df -h .
时间和风险
预计时间:45-90 分钟,具体取决于网络速度和模型尺寸大小
- 风险等级:
模型下载可能因网络问题或 Hugging Face 认证问题而失败。
量化过程会占用大量内存,在 GPU 内存不足的系统上可能会失败。
输出文件较大(数 GB),需要足够的存储空间
回滚:删除输出目录和所有拉取的 Docker 镜像以恢复原始状态。
- 最后更新时间:2025 年 12 月 15 日
在步骤 8 中修复无法访问的客户端 CURL 请求。
更新 ModelOptimizer 项目名称
第 1 步 – 配置 Docker 权限
要轻松管理容器而无需使用 sudo,您必须处于 Docker 组中。如果您选择跳过此步骤,则需要使用 sudo 运行 Docker 命令。
打开一个新的终端并测试 Docker 访问权限。在终端中运行:
docker ps
如果您看到权限被拒绝错误(例如 permission denied while trying to connect to the Docker daemon socket),请将您的用户添加到 docker 组,这样就不再需要使用 sudo 命令。
sudo usermod -aG docker $USER newgrp docker
第 2 步 – 准备环境
创建一个本地输出目录,用于存储量化后的模型文件。该目录将被挂载到容器中,以便在容器退出后保留结果。
mkdir -p ./output_models chmod 755 ./output_models
第 3 步 - 使用 Hugging Face 验证
通过设置 Hugging Face 身份验证令牌来确保可以访问 DeepSeek 模型。
# Export your Hugging Face token as an environment variable # Get your token from: https://huggingface.co/settings/tokens export HF_TOKEN="your_token_here"
容器将自动使用该令牌进行模型下载。
第 4 步 - 运行 TensorRT 模型优化器容器
启动 TensorRT-LLM 容器,启用 GPU 访问权限,针对多 GPU 工作负载优化 IPC 设置,并挂载卷以进行模型缓存和输出持久化。
docker run --rm -it --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 \ -v "./output_models:/workspace/output_models" \ -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \ -e HF_TOKEN=$HF_TOKEN \ nvcr.io/nvidia/tensorrt-llm/release:spark-single-gpu-dev \ bash -c " git clone -b 0.35.0 --single-branch https://github.com/NVIDIA/Model-Optimizer.git /app/TensorRT-Model-Optimizer && \ cd /app/TensorRT-Model-Optimizer && pip install -e '.[dev]' && \ export ROOT_SAVE_PATH='/workspace/output_models' && \ /app/TensorRT-Model-Optimizer/examples/llm_ptq/scripts/huggingface_example.sh \ --model 'deepseek-ai/DeepSeek-R1-Distill-Qwen-7B' \ --quant nvfp4 \ --tp 1 \ --export_fmt hf "
注意:您可能会遇到这种情况 pynvml.NVMLError_NotSupported:Not Supported. 在某些环境下,出现这种情况属于正常现象,不会影响结果,我们将在即将发布的版本中修复此问题。注意:如果您的模型过大,可能会遇到内存不足的错误。您可以尝试量化一个较小的模型。
这条命令:
以完全 GPU 访问权限和优化的共享内存设置运行容器
将输出目录挂载到持久化量化模型文件的位置
挂载您的 Hugging Face 缓存,以避免重新下载模型。
从源代码克隆并安装 TensorRT 模型优化器
使用 NVFP4 量化参数执行量化脚本
第 5 步 - 监控量化过程
量化过程将显示以下进度信息:
来自 Hugging Face 的模型下载进度
量化校准步骤
模型导出和验证阶段
第 6 步 - 验证量化模型
容器完成后,验证量化模型文件是否已成功创建。
# Check output directory contents ls -la ./output_models/ # Verify model files are present find ./output_models/ -name "*.bin" -o -name "*.safetensors" -o -name "config.json"
您应该在输出目录中看到模型权重文件、配置文件和分词器文件。
第 7 步 - 测试模型加载
首先,设置量化模型的路径:
# Set path to quantized model directory export MODEL_PATH="./output_models/saved_models_DeepSeek-R1-Distill-Qwen-7B_nvfp4_hf/"
现在使用一个简单的测试来验证量化模型是否可以正确加载:
docker run \
-e HF_TOKEN=$HF_TOKEN \
-v $HOME/.cache/huggingface/:/root/.cache/huggingface/ \
-v "$MODEL_PATH:/workspace/model" \
--rm -it --ulimit memlock=-1 --ulimit stack=67108864 \
--gpus=all --ipc=host --network host \
nvcr.io/nvidia/tensorrt-llm/release:spark-single-gpu-dev \
bash -c '
python examples/llm-api/quickstart_advanced.py \
--model_dir /workspace/model/ \
--prompt "Paris is great because" \
--max_tokens 64
'第 8 步 - 使用 OpenAI 兼容的 API 运行模型
使用量化模型启动 TensorRT-LLM OpenAI 兼容 API 服务器。首先,设置量化模型的路径:
# Set path to quantized model directory
export MODEL_PATH="./output_models/saved_models_DeepSeek-R1-Distill-Qwen-7B_nvfp4_hf/"
docker run \
-e HF_TOKEN=$HF_TOKEN \
-v "$MODEL_PATH:/workspace/model" \
--rm -it --ulimit memlock=-1 --ulimit stack=67108864 \
--gpus=all --ipc=host --network host \
nvcr.io/nvidia/tensorrt-llm/release:spark-single-gpu-dev \
trtllm-serve /workspace/model \
--backend pytorch \
--max_batch_size 4 \
--port 8000运行以下命令,使用客户端 CURL 请求测试服务器:
curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",
"messages": [{"role": "user", "content": "What is artificial intelligence?"}],
"max_tokens": 100,
"temperature": 0.7,
"stream": false
}'第 9 步 - 清理和回滚
清理环境并删除生成的文件:
警告:
这将永久删除所有量化模型文件和缓存数据。
# Remove output directory and all quantized models rm -rf ./output_models # Remove Hugging Face cache (optional) rm -rf ~/.cache/huggingface # Remove Docker image (optional) docker rmi nvcr.io/nvidia/tensorrt-llm/release:spark-single-gpu-dev
第 10 步 - 后续步骤
可部署的量化模型现已准备就绪。后续步骤通常包括:
与原始模型相比,对推理性能进行基准测试。
将量化模型集成到推理流程中。
部署到 NVIDIA Triton 推理服务器以用于生产环境。
针对您的具体用例进行额外的验证测试。
在单个 Spark 上运行的常见问题
错误 | 原因 | 修复 |
|---|---|---|
访问 Hugging Face 时显示“权限被拒绝” | HF令牌缺失或无效 | 使用有效令牌运行 huggingface-cli login |
容器因 CUDA 内存不足而退出 | GPU 内存不足 | 减小批处理大小或使用具有更多 GPU 内存的机器 |
输出目录中未找到模型文件 | 卷挂载失败或路径错误 | 核实 $(pwd)/output_models 解析正确 |
容器内 Git clone 失败 | 网络连接问题 | 请检查网络连接并重试。 |
量化过程停滞 | 容器资源限制 | 增加 Docker 内存限制或使用 --ulimit |
无法访问 URL 的受限存储库 | 部分 HuggingFace 模型的访问权限受限 |
注意:
DGX Spark 使用统一内存架构 (UMA),支持 GPU 和 CPU 之间的动态内存共享。由于许多应用程序仍在更新以利用 UMA,即使在 DGX Spark 的内存容量范围内,您也可能会遇到内存问题。如果发生这种情况,请手动刷新缓冲区缓存:
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'