GPUStack
vLLM
Tesla V100
Multi-Node
GPU 集群运维备忘录
解决 V100 上 pipeline_parallel=2 崩溃的问题,
并通过 tensor_parallel=4 + 64K 上下文实现稳定运行 #
在使用 GPUStack v2.1.1 + vLLM 0.17.1 于多节点(4× Tesla V100)环境上运行 Qwen2.5-14B-Instruct 时,每次发送聊天消息,引擎都会在 _TorchTensorAcceleratorChannel 中崩溃并抛出 AttributeError。根本原因在于 pipeline_parallel 与 V100 不兼容。通过切换为 tensor_parallel=4 / pipeline_parallel=1,问题得到彻底解决,并进一步将上下文长度扩展到了 64K。本文记录了这一处理过程。
观察到的现象 #
模型能够正常启动,但每次发送聊天消息后,引擎总会在几分钟到几十分钟内崩溃。日志中反复出现以下错误。
AttributeError: '_TorchTensorAcceleratorChannel' object
has no attribute '_accelerator_group'.
Did you mean: '_accelerator_group_id'?
ray.exceptions.ActorUnavailableError: The actor is temporarily unavailable:
RpcError: RPC error: Socket closed rpc_code: 14.该错误是崩溃后清理(teardown)阶段出现的 Ray 2.54.0 缺陷,并非直接原因。真正的根本原因出在更上游:pipeline_parallel 各阶段之间 GPU 加速器通信通道的初始化失败。
根本原因:V100 不支持 pipeline_parallel 所需的 P2P GPU 传输 #
vLLM 的 pipeline_parallel(流水线并行)在各阶段之间传输激活值时使用 _TorchTensorAcceleratorChannel(GPU 间直接 P2P 传输)。这需要 NVLink 或高速 GPU P2P 支持,而 Tesla V100-PCIE(计算能力 7.0)并不具备该能力。
pipeline_parallel=2 的问题 #
- 各阶段间的激活值传输使用 P2P GPU 通道
- V100 缺乏 NVLink/P2P 支持,导致初始化无法完整完成
- 在推理过程中或清理阶段抛出 AttributeError 崩溃
- 与 Ray 2.54.0 的缺陷叠加后极易复现
tensor_parallel=4 的运作方式 #
- 模型权重按注意力头维度横向切分到 4 块 GPU 上
- GPU 之间的通信仅使用 NCCL AllReduce
- NCCL 在 V100 上运行正常(已确认 nccl==2.27.5 可用)
- 完全不使用 P2P 通道,从而彻底规避该缺陷
解决方案:仅通过配置变更即可彻底解决 #
在 GPUStack UI 中按如下方式变更模型配置后,问题得到彻底解决,无需对基础设施做任何改动。
变更前(崩溃配置) #
--tensor-parallel-size 2
--pipeline-parallel-size 2
--distributed-executor-backend ray
--max-model-len 32768
--generation-config vllm变更后(稳定配置) #
--tensor-parallel-size 4
--pipeline-parallel-size 1
--distributed-executor-backend ray
--max-model-len 65536
--generation-config vllm
--enable-auto-tool-choice
--tool-call-parser hermes此外,RAY_CGRAPH_get_timeout 是用于设置 pipeline_parallel 各阶段间通信超时的配置项,因此在 pipeline_parallel=1 时已不再需要,可以安全地从环境变量中移除。
变更效果对比 #
显存占用 #
模型被均匀分布到 4 块 GPU 上,每块 GPU 的显存占用大幅降低。
# Before change (handled by 2 GPUs)
Model loading took 15-17 GiB / GPU
# After change (handled by 4 GPUs)
Model loading took 6.95 GiB / GPUKV 缓存 #
富余的显存直接转化为缓存容量。
# Before change
KV cache: Limited (VRAM constrained)
# After change
Available KV cache memory: 20.97 GiB
GPU KV cache size: 458,稳定性变化 #
变更前,每次提交聊天请求都会崩溃。变更后确认,同时提交多个长文本请求也不会引发崩溃。并发处理时生成速度下降属于正常的排队行为,并非问题。
将上下文长度扩展到 64K #
由于 tensor_parallel=4 带来了显存余量,我们尝试进一步扩展上下文长度。
关于 Qwen2.5-14B 的上下文长度 #
这里,max_position_embeddings 位于 config.json 中,默认为 32768,但这只是默认设置值。通过启用 YaRN 缩放(rope_scaling),可以将其扩展到 128K。不过 vLLM 默认会拒绝超过 32768 的取值,因此需要通过环境变量显式放行。
添加到环境变量:
VLLM_ALLOW_LONG_MAX_MODEL_LEN=1后端参数:
--max-model-len 65536启动验证:
INFO: Using max model len 65536
INFO: Available KV cache memory: 20.97 GiB
INFO: GPU KV cache size: 458,
INFO: Maximum concurrency for 32, per request: 13.98x
INFO: Starting vLLM API server ← Normal startup最终稳定运行配置汇总 #
后端参数 #
--distributed-executor-backend ray
--tensor-parallel-size 4
--pipeline-parallel-size 1
--max-model-len 65536
--generation-config vllm
--enable-auto-tool-choice
--tool-call-parser hermes运行验证结果 #
已确认 Qwen2.5-14B-Instruct(float16)在 4× Tesla V100-PCIE-32GB(双节点配置)环境下,能够在上下文长度 65, 及高负载并发请求条件下稳定运行。每块 GPU 显存占用 6.95GiB,KV 缓存 20.97GiB 得到保障。
检查清单 #
- 在 V100 环境中,使用
--pipeline-parallel-size 1(pipeline_parallel 需要 P2P GPU 通信,而 V100 不支持该功能) - 在多节点配置中使用 4 块 GPU 时,统一采用
--tensor-parallel-size 4 - 在 pipeline_parallel=1 时
RAY_CGRAPH_get_timeout已无必要,可以移除 - 如需 64K 上下文,请添加
VLLM_ALLOW_LONG_MAX_MODEL_LEN=1到环境变量 - 使用
--ipc=host --shm-size=64g选项启动 gpustack-worker 容器 - 在正式上线前,请使用长文本及并发请求进行负载测试,以验证稳定性
相关文章 #
本文是生产环境中的故障排查记录。IP、令牌等内部信息已作抽象化处理。实际行为可能因 GPU 环境、驱动及 vLLM 版本而异。