首页/详情

VLLM 在异构 GPU 环境下使用 FP8 模型可能导致精度丢失和输出错误

Reddit r/LocalLLaMA2026/02/12 22:37机翻/自动摘要/自动分类
5 阅读

摘要

本文揭示了在使用 VLLM 推理框架时,当部署于异构 GPU 环境并结合 FP8 量化模型(特别是 Unsloth 优化的模型)时,可能出现的精度丢失和输出错误问题。具体表现为文本生成中出现乱码、重复字符、缺失空格及格式错误等。初步分析指向 VLLM 在处理异构硬件时的数字溢出问题。该问题对模型输出的准确性和安全性构成潜在风险。文章建议用户在遇到此类问题时,考虑使用流水线并行或 FP16 数据类型,并提供了相关的 GitHub 和 Hugging Face 问题链接以供参考和追踪。

正文

近期发现,在使用 VLLM 的张量并行模式处理异构 GPU 时,可能会出现输出不一致或错误的问题,尤其是在使用 FP8 量化模型时。用户报告称,与 Qwen 的官方 FP8 量化模型相比,使用 Unsloth 团队优化的 FP8 模型(如 Qwen3-Coder-Next-FP8-Dynamic)在 VLLM 中运行时,文本输出会产生冗余字符、乱码、单词重复(如 "someonesomeone")、缺失的空格以及未闭合的标签(如 "context without closing")。

这些问题在特定问题(例如询问 /users/me 端点是否为不良实践)的测试中尤为明显,导致输出内容出现安全隐患(如 "Forgetting to require auth → anyone gets someonesomeone’s data")和格式错误。

用户尝试调整采样参数(如 temperature)并未能解决问题,甚至在 temp=0.0 时错误更加严重。初步判断,这可能是 VLLM 在处理异构 GPU 时,由于数字溢出导致的精度丢失问题。虽然在 FP16 下可能不明显,但用户在使用 FP8 模型时应警惕此问题,并考虑尝试流水线并行(pipeline parallel)作为替代方案。

以下是用户提供的 VLLM 启动命令示例,其中配置了多 GPU 和张量并行大小为 1,流水线并行大小为 4:

  qwen3-coder-80b:
    env:
      - VLLM_SLEEP_WHEN_IDLE=1
      - VLLM_LOG_STATS_INTERVAL=5
      - CUDA_DEVICE_ORDER=PCI_BUS_ID
      - CUDA_VISIBLE_DEVICES=0,1,2,3
      - OMP_NUM_THREADS=12
      - VLLM_MARLIN_USE_ATOMIC_ADD=1
      - VIRTUAL_ENV=/home/gleb/llm/env_vllm
      - VLLM_LOGGING_COLOR=0
    cmd: |
      /home/gleb/.local/bin/uv run
        -m vllm.entrypoints.openai.api_server
        --model /mnt/data/llm-data/models/Qwen/Qwen3-Coder-Next-FP8
        --dtype bfloat16
        --served-model-name "qwen3-coder-80b"
        --port ${PORT}
        --tensor-parallel-size 1
        --pipeline-parallel-size 4
        --enable-prefix-caching
        --attention-backend flashinfer
        --max-model-len 200000
        --gpu-memory-utilization 0.92
        --max-num-seqs 4
        --enable-auto-tool-choice
        --tool-call-parser qwen3_coder

此问题已在 GitHub 和 Hugging Face 上提交讨论,开发者正在寻求解决方案。

标签