VLLM相关问题

一、使用V100的显卡,设置多个进程并发调用Vllm加载的大模型时发现,模型运行起来的时间是累加起来的,说明vllm响应的多并发是按照串行的方式。

原因:目前这个问题不清楚是因为Vllm的不支持Vllm的原因还是其他原因。

二、在引用vllm包的时候提示“ImportError: No module named vllm”

(一)错误提示:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    from vllm import LLM, SamplingParams
ImportError: No module named vllm

(二)排查:

首先,排查是否正确安装了vllm包,如果没有的话,就pip install vllm。

我这里是正常安装了的,甚至又重新装了一遍。

(三)原因:

当前或父级目录下有一个文件夹名字vllm与vllm库名字冲突,import命令将其放在了vllm库优先级之前,换个路径运行就可以了,或者重命名文件夹(我选择重命名了文件夹)。

三、vllm中的参数enforce_eager设为True后会导致统计的推理时间变长

1.概念:

enforce_eager是一个参数,用于控制vLLM是否始终使用PyTorch的eager模式(即时执行模式),默认为False,vLLM会默认使用eager模式和CUDA图的混合模式来执行操作,这种混合模式旨在提供最大的性能和灵活性。

CUDA图是PyTorch中用于优化性能的一种技术。禁用CUDA图(即设置enforce_eager为True)可能会影响性能,但可以减少内存需求。对于小型模型,CUDA图可能对性能提升有帮助,但对于大型模型,性能差异可能不大

2.总结:

(1)如果模型较小,且性能是关键考虑因素,可以考虑使用CUDA图,即默认状态,不做变动。
(2)如果模型较大,或者需要减少内存使用,可以考虑启用enforce_eager
(3)在实际部署之前,最好进行一系列的测试,以确定最佳的配置。可以先尝试不启用enforce_eager,如果遇到显存不足或性能问题,再考虑启用它。

3.解决方案:

最终去掉了这个参数后,总体推理时间恢复到20s,如果设置enforce_eager=True,则推理时间为100s+,推理时间差距太大了。

from vllm import LLM, SamplingParams

llm = LLM(
        model="model/Qwen2.5-32B-Instruct-GPTQ-Int4",
        tensor_parallel_size=8,
        trust_remote_code=True,
        dtype="half",
        max_num_batched_tokens=32768,  # 减小批处理token数--最大32768可能超出内存
        gpu_memory_utilization=0.85,  # 降低GPU显存使用率
        swap_space=4,  # 增加CPU内存交换空间
        # enforce_eager=True,  # 强制即时执行模式
        max_num_seqs=64,  # 限制最大序列数
        # max_model_len=4096,  # 限制模型最大长度(这个参数是R1蒸馏的模型必须要有的)
    )

四、swap_space 设为多少合适?如何进行选择?

swap_space 参数的选择需要根据以下几个因素来权衡:
1.模型大小:
Qwen2.5-32B 模型约需要 32GB 的模型权重空间
在 half precision (FP16) 下,基础内存需求约为 16GB
运行时还需要额外的内存用于 attention cache 和中间激活值
2.GPU显存容量:
如果您使用 8 张 GPU (tensor_parallel_size=8)
每张卡大约需要处理 32B/8 ≈ 4GB 的模型权重
加上运行时内存,每张卡实际需求会更高
3.swap_space 计算参考公式:
recommended_swap = (model_size_gb / num_gpus) * swap_factor

选择建议:
1.保守设置:
如果 GPU 显存较小,设置较大的 swap_space (6-8GB)
会牺牲一些性能,但能确保稳定运行
2.平衡设置:
对于常见的配置,设置 4GB 通常是个不错的选择
在性能和稳定性之间取得平衡
3.激进设置:
如果 GPU 显存充足,可以设置较小的 swap_space (2GB或更少)
能获得更好的性能,但要注意监控内存使用
4.动态调整:
可以从较大值开始(如 6GB)
逐步减小并监控性能和稳定性
找到最适合您硬件的值
5.监控指标:
如果看到 OOM 错误,需要增加 swap_space
如果 CPU 使用率过高,可能 swap 太大
如果生成速度明显变慢,可以尝试减小 swap_space
6.# 根据不同情况选择 swap_space
    swap_space=6,  # 如果 GPU 显存较小(如 24GB)
    # swap_space=4,  # 如果 GPU 显存较大(如 32GB)
    # swap_space=2,  # 如果 GPU 显存充足(如 40GB+)

五、VLLM无法加载AWQ量化的模型

结论:经过实验,VLLM无法加载AWQ量化的模型。

六、Vllm加载Qwen2.5-7B-Instruct-GPTQ-Int4Qwen2.5-14B-Instruct-GPTQ-Int4模型提示错误。

提示内容:The input size is not aligned with the quantized weight shape. This can be caused by too large tensor parallel size.(输入大小与量化权重形状不对齐。这可能是由太大的张量并行大小引起的)

设置的参数:

python -m vllm.entrypoints.openai.api_server \
--model /data/sxw/3-model/Qwen2.5-14B-Instruct-GPTQ-Int4  \
--served-model-name Qwen2.5-14B-Instruct-GPTQ-Int4 \
--gpu-memory-utilization 0.85 \
--max-num-batched-tokens 32768 \
--max-model-len 8192 \
--dtype half \
--tensor-parallel-size 8 \
--swap-space 4 \
--max-num-seqs 100 \

修改参数:

python -m vllm.entrypoints.openai.api_server \
--model /data/sxw/3-model/Qwen2.5-14B-Instruct-GPTQ-Int4  \
--served-model-name Qwen2.5-14B-Instruct-GPTQ-Int4 \
--gpu-memory-utilization 0.85 \
--max-num-batched-tokens 32768 \
--max-model-len 4096 \
--dtype half \
--tensor-parallel-size 8 \
--swap-space 4 \
--max-num-seqs 64 \

 提示:Total number of attention heads (40) must be divisible by tensor parallel size (7)

并行数设为8不合适,并且并行数还得能被40整除,于是将tensor-parallel-size设为4。但依然报错

UserWarning: resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown warnings.warn('resource_tracker: There appear to be %d '。

Failed: Cuda error /workspace/csrc/custom_all_reduce.cuh:364 'invalid argument'

最终原因:是Qwen2.5-7B-Instruct-GPTQ-Int4和Qwen2.5-14B-Instruct-GPTQ-Int4的模型在用vllm运行的时候,只能使用一张卡。tensor parallel size 只能设为1

七、Vllm不能同时运行多个模型

经过测试,在Vllm使用命令已经加一个模型运行后,再运行另一个模型,就会提示:OSError: [Errno 98] Address already in use

所以,Vllm无法像ollama那样同时加载多个模型在显存中,想调用哪个的模型的时候就直接使用API等方式调用。

### vLLM Vicuna-Llama Windows Setup and Issues #### 安装环境配置 为了在Windows上成功安装和运行vLLM(基于Vicuna或LLaMA模型),需要确保满足特定的依赖项和库的要求。推荐使用Anaconda来管理Python环境以及相关包,这可以简化许多复杂性的处理。 对于CUDA支持版本的选择至关重要,因为不同的GPU架构对应不同版本的CUDA驱动程序和支持软件栈。通常情况下,建议采用最新的稳定版CUDA工具链以获得最佳性能表现[^3]。 ```bash # 创建新的Conda虚拟环境并激活它 conda create -n vllm_env python=3.9 conda activate vllm_env # 安装PyTorch及相关组件 pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117/ # 安装Transformers库和其他必要的依赖项 pip install transformers accelerate bitsandbytes datasets peft ``` #### 常见问题及解决方案 ##### GPU兼容性和驱动更新 如果遇到与GPU相关的错误消息,比如`cudaErrorNoKernelImageForDevice`或其他类似的提示,则可能是因为当前使用的CUDA Toolkit版本不匹配硬件或者缺少相应的驱动更新。此时应该访问NVIDIA官方网站下载最新版本的显卡驱动,并确认已正确安装了相适应的操作系统补丁。 ##### 数据加载失败 当尝试加载预训练权重文件时发生异常中断,可能是由于网络连接不稳定造成部分资源未能完全获取到本地缓存目录内;或者是存储路径中含有非法字符影响到了正常读取操作。针对前者可以通过多次重试直至完成整个过程;而后者则需仔细检查指定位置是否符合命名规范要求。 ##### 内存不足警告 鉴于大型语言模型本身具有较高的计算开销,在某些低端配置机器上面可能会触发OOM(out-of-memory)告警信息。对此类状况的有效应对措施之一就是启用混合精度模式(即FP16),从而减少一半以上的浮点数占用空间量级;另外还可以考虑调整批量尺寸(batch size)至更小数值范围以内减轻瞬时间负载压力。 ```python from transformers import AutoModelForCausalLM, BitsAndBytesConfig bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, ) model = AutoModelForCausalLM.from_pretrained( "your_model_name", quantization_config=bnb_config ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuSuStarSmile

共同成长,一起进步,顶峰相见!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值