背景
使用Xinference(VLLM)启动Qwen1.5-110b-awq模型,需要把模型加载到多块显卡上。
系统配置
|
|
症状
开机之后,第一次启动多卡的模型可以正常启动,但是模型退出之后,要再次启动,就会卡住。显卡利用率100%,不占用显存,CPU线程占满核心。但是只占用单卡的模型不受影响。
按照 https://docs.vllm.ai/en/stable/getting_started/debugging.html 打开vllm日志,最后的日志卡在NCCL的Init COMPLETE。使用vllm debugging指南的test.py
,情况相同。
不打卡调试日志,运行输出卡在:
|
|
打卡调试日志,进一步看到:
|
|
尝试
相关issue:
- [Bug]: vLLM 0.5.1 tensor parallel 2 stuck with Mixtral-8x7B-Instruct-v0.1 #6201
- [Bug]: vLLM 0.5.1 tensor parallel 2 hang
- [Bug]: Error when –tensor-parallel-size > 1
- Question about nccl p2p disable
使用NCCL_P2P_DISABLE=1
选项,禁用显卡的P2P通信。模型能够成功加载,但是推理的时候还是会报错。这时候可以确定,就是显卡间的通信问题。在ada lovelace系列显卡中,游戏卡被禁用了P2P,但是工作站卡是支持P2P的,于是不打算走禁用P2P路子继续调下去,找找看P2P出了什么问题。
解决
最后再NCCL文档的Troubleshooting里找到了答案:https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/troubleshooting.html#pci-access-control-services-acs
IO virtualization (also known as VT-d or IOMMU) can interfere with GPU Direct by redirecting all PCI point-to-point traffic to the CPU root complex, causing a significant performance reduction or even a hang. You can check whether ACS is enabled on PCI bridges by running:
1
sudo lspci -vvv | grep ACSCtl
重启,进入BIOS,关闭IOMMU
和PCI ACS
。再次启动,就恢复正常了。