llama 3 8b型号配备了A10 GPU,在VLLM的情况下出现了OOM问题,但在HF transformer pipeline上表现良好,

2sbarzqh  于 2个月前  发布在  其他
关注(0)|答案(7)|浏览(78)

你好,
GPU:A10 24 GB
带有安全Tensor的模型大小:总共26 GB
使用HF管道,可以加载llama3 8b,然后将其转换为fp16并运行推理,但在使用VLLM时,当我尝试加载模型本身时,它会OOM。这是否意味着VLLM在加载速度上需要更多的内存,无法处理这种情况?只有在应用了针对模型权重(量化)的优化后,我才能推断出llama 3 8b吗?像这样的博客有点误导人。
https://neuralmagic.com/blog/deploy-llama-3-8b-with-vllm/

With int4 quantized models you can use parameter `--gpu-memory-utilization` that take up less GPU memory, for Llama3-8B, this parameter can be set to a minimum of 0.6(~12GB) with 4-bit quantization, but not with the original fp16 model(~19GB)!
  • 原帖作者 @yangxianpku 在#2948(评论)*
jucafojl

jucafojl1#

L3-8B是约16GB,而不是26GB...因此它应该能够舒适地适应A10G GPU。
你使用什么命令来启动vllm?

q7solyqu

q7solyqu2#

是的,L2-8B在fp16中大约为16GB,但使用FP32时大小约为26GB。
它存储在安全Tensor中。
vllm加载代码

engine_args = EngineArgs(
    model=PATH,
    trust_remote_code=True,
    tensor_parallel_size=1,
    trust_remote_code=True,
    load_format="auto",
    dtype = "float16",
)
self.engine = LLMEngine.from_engine_args(engine_args)

HF Transformer库

self.pipeline = transformers.pipeline(
    "text-generation",  # task
    model=model_uri,
    tokenizer=self.tokenizer,
    trust_remote_code=True,
    device_map="auto",
    torch_dtype=torch.bfloat16, # or fp16 anything at this stage
    max_length=1024,
    max_new_token=512,
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    eos_token_id=self.tokenizer.eos_token_id,
)

当模型导出为fp16时,VLLM能够加载并处理它,但是直接使用fp32加载会失败。
我认为HF通过加速库能够处理它,某种程度上管理内存。
但是将模型分片存储在安全Tensor中,以及实现内存高效的加载的想法似乎缺失了。
或者我是否漏掉了关于VLLM参数的一些事情?

ndh0cuux

ndh0cuux3#

看起来没问题。你能贴出你看到的错误吗?

uyto3xhc

uyto3xhc5#

这个错误信息表示在运行过程中,CUDA内存不足。尝试分配112.00 MiB的显存时出现问题。这可能是由于GPU内存不足或者程序中存在内存泄漏导致的。

你可以尝试以下方法来解决这个问题:

  1. 减小批量大小(batch size),这样可以减少每次迭代所需的显存。
  2. 使用梯度累积(gradient accumulation),即在多个小批量上累积梯度,然后再进行一次参数更新。这样可以在不增加显存需求的情况下,实现较大的批量大小。
  3. 清理不再使用的变量和Tensor,以释放显存。
  4. 如果可能的话,尝试在具有更多显存的GPU上运行程序。
  5. 检查程序中是否存在内存泄漏,如果有,修复它们。
vnjpjtjt

vnjpjtjt6#

你的GPU上已经有其他程序在运行了吗?

eqoofvh9

eqoofvh97#

当模型导出为fp16时,VLLM能够加载和处理它,但直接使用fp32加载会失败。我认为这是vLLM的预期行为?您试图加载一个默认情况下比设备容量所需的GPU内存更多的FP32模型。您可以尝试启用CPU卸载并查看是否有所帮助。

相关问题