NLP——基于vLLM的RAG服务部署


系统说明和环境安装

系统说明

  • 本文采用 Ubuntu 22.04 LTS

Python基础环境准备

  • 包括 anaconda, python 等环境安装

创建虚拟环境

  • conda创建python环境
    1
    conda create -n llm_py310 python==3.10

安装相关包

  • 安装下面的依赖项

    1
    2
    3
    pip install pytorch langchain vllm gptcache modelscope
    pip install transformers accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed
    `
    • 如果出错建议一个个安装

huggingface命令行工具安装

  • 安装工具
    1
    git lfs install

下载模型到本地(可跳过)

  • 使用 git 命令下载 huggingface 项目(方便从本地启动)

    1
    git clone https://huggingface.co/Qwen/Qwen3-0.6B
  • 推荐使用 modelscope,这样不需要科学上网

    1
    2
    3
    pip install modelscope
    modelscope download --model Qwen/Qwen3-0.6B # 缓存到本地 ~/.cache/modelscope/hub/models/Qwen/Qwen3-0.6B/ 目录下
    modelscope download --model Qwen/Qwen3-0.6B --local_dir ./Qwen3-0.6B/ # 保存到 ./Qwen3-0.6B/ 目录下

生成检索 embedding

  • 这里可能遇到一些问题:
    • modelscope 版本问题,遇到相关报错时改用 1.15.0 版本解决
    • 可能需要安装 langchain_community

加载模型时显存爆炸问题

  • 显存可能爆炸(即使加载很小的模型,亲测24G显存会被 Qwen3-0.6B直接占满)
  • 加载模型会默认将整个GPU 所有显存都占用(原因未知)
  • 解决方案:
    • 可以增加 gpu_memory_utilization=0.8 来指定模型的显存使用,也可以根据需要使用其他值,比如0.7,但需要满足最低使用要求
  • 注:除模型参数外的其他显存占用要求
    • 模型需要提前分配 KV Cache,且该值与max_model_len有关,且默认使用比较大的值(比如 max_model_len=40960,导致需要提前分配较大的 KV Cache,从而增加显存)

Bug 记录


附录:vLLM 使用代码示例

  • 以下是一个简单的 vLLM 使用示例,展示了如何使用 vLLM 加载模型并生成文本:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    from vllm import LLM, SamplingParams

    model_name = "llama-2-7b-chat-hf"
    llm = LLM(model=model_name)
    sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.95,
    max_tokens=1024
    )
    prompts = [
    "介绍一下人工智能的发展历程",
    "解释一下量子计算的基本原理",
    "推荐几部好看的科幻电影"
    ]

    outputs = llm.generate(prompts, sampling_params)

    for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"提示: {prompt}")
    print(f"生成内容: {generated_text}")
    print("-" * 80)