在Ubuntu24.04搭建VLLM, SGLang 和 LangChain环境

在Ubuntu24.04搭建VLLM, SGLang 和 LangChain环境

[!NOTE] 概述
整片文章是笔者的回忆(白天忙碌了一天,晚上进行的总结),所以有些地方的描述可能有误差,本文更多的是大体方向问题,细节步骤不是本文的重点,见谅 !!!

如何安装Ubuntu 24.04

  1. 制作启动U盘,作者使用的是rufus.exe工具
  2. 下载Ubuntu24.04ISO镜像
  3. 使用rufus.exe工具刷入Ubuntu22.04.iso文件
  4. 插入服务起(或电脑)进入BISO页面,选择U盘作为启动项
  5. 选择Try and Install Ubuntu(可能记忆有错误,第一个位置的选项,整片文章是笔者的回忆,所以有些名词可能有误差,见谅)
  6. 无脑Next,知道出现分区页面 (这里是重点,一定仔细!!!)
    1. 选择手动分区(Manual partitioning,选择带有Manual的选项)
    2. 先点击左下角选择启动盘
    3. 点击后会出现/et/uefi区,这个分区不要手动修改
    4. 然后对下面的内容进行分区,如果你是新手,那么建议
      1. 分区swap大小和你的运存一样就行,如果你的运存512G或者更大,那就无看你情况想给多大,有这么大分区的人,也不是新手,自己肯定也懂
      2. 剩下的都给/就可以了
      3. 这是最简单的,但是绝对不是最有效的
      4. 哦对了,分区格式为/ext4如果你没有特殊需求
  7. 无脑Next,等待安装完成
  8. 选择重启电脑,然后在退出页面中,先拔出U盘,后敲击键盘Enter按键

如何安装SGLang

安装NVIDIA驱动(重点,不要出错)

  1. 首先明确官方推荐的是530版本,但是Ubutnu24.04的内核对它不兼容!!!(血泪的教训,卡了我上一上午)
  2. 直接安装最新版的便可以
    1. 命令:sudo apt update && sudo apt upgrade 获取并更新安装包的命令,装完系统后记得执行
    2. sudo ubuntu-drivers autoinstall, 自动安装适配的版本
      1. 优势:无脑安装,兼容性好
      2. 劣势:如果你的项目不支持这个驱动,嘿嘿,那你就惨了
      3. 小幸运:SGLang支持
      4. 时间:autoinstall的安装版本会随时间变化,截止到2025-5-3安装版本为575.51.03

安装CUDA,(一步一坑的噩梦)

  1. SGLang推荐的CUDA版本是CUDA 12.1版本,但是实测CUDA 12.9也可以
  2. 多CUDA环境配置方法
    1. 从官网下载.run
    # CUDA 12.9
    wget https://developer.download.nvidia.com/compute/cuda/12.9.0/local_installers/cuda_12.9.0_575.51.03_linux.run
    sudo sh cuda_12.9.0_575.51.03_linux.run
    
    # CUDA 12.1
     wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
     sudo sh cuda_12.1.0_530.30.02_linux.run
    
    1. sudo bash cuda_xxx_linux.run 来进行安装
    2. 如果报错
      1. cat /path/log.conf,出错会告诉你在哪看日志
      2. sudo apt insnstall gcc, g++ #下载对应版本
      3. sudo bash cuda_xxx_linux.run --override
    3. 安装选项 重点
      1. 输入accept
      2. 然后不要选择安装驱动
      3. 进入Option高级选项,选择下载路径,不要使用Sympol链接
    4. 修改export, source .bashrc 和将下面自动切换脚本写入.bashrc文件
    # ~/.bashrc 或 ~/.zshrc
    # 定义一个切换 CUDA 版本的函数
    switch_cuda() {
    local desired_version=$1
    # 假设你的 CUDA 版本都安装在 /usr/local/cuda-X.Y 格式的路径下
    local cuda_path="/usr/local/cuda-${desired_version}"
    
    # 检查目标版本的 CUDA 目录是否存在
    if [ -d "${cuda_path}" ]; then
       export CUDA_HOME="${cuda_path}"
       export CUDA_PATH="${CUDA_HOME}" # 有些应用可能也看这个变量
    
       # 从 PATH 和 LD_LIBRARY_PATH 中移除旧的 CUDA 路径 (避免冲突)
       # (注意: 这个移除逻辑可能需要根据你的具体 PATH/LD_LIBRARY_PATH 结构调整)
       export PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=':' '!/\/usr\/local\/cuda-[0-9.]+\/bin/' | sed 's/:$//')
       export LD_LIBRARY_PATH=$(echo "$LD_LIBRARY_PATH" | awk -v RS=':' -v ORS=':' '!/\/usr\/local\/cuda-[0-9.]+\/lib64/' | sed 's/:$//')
    
       # 添加新版本的 CUDA 路径
       export PATH="${CUDA_HOME}/bin:${PATH}"
       # 确保 LD_LIBRARY_PATH 非空再加冒号
       if [ -z "$LD_LIBRARY_PATH" ]; then
          export LD_LIBRARY_PATH="${CUDA_HOME}/lib64"
       else
          export LD_LIBRARY_PATH="${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}"
       fi
    
       echo "Switched to CUDA ${desired_version}"
       echo "CUDA_HOME is now: ${CUDA_HOME}"
       echo "Verifying nvcc version:"
       nvcc --version
    else
       echo "Error: CUDA version ${desired_version} not found at ${cuda_path}"
    fi
    }
    
    # (可选) 在启动时设置一个默认的 CUDA 版本
    # switch_cuda 12.1
    
    # (可选) 创建别名方便切换
    alias cuda12.1="switch_cuda 12.1"
    # 假设你的 "12.9" 版本在 /usr/local/cuda-12.9 (请根据实际情况修改)
    alias cuda12.9="switch_cuda 12.9"
    
    1. 使用nvcc --versionnvidia-smi 检查配置是否完成

[!NOTE] 吐槽
真的是一步一坑,最难是的是如果CUDA装错了,想要卸载很容易将驱动也破坏,还要考虑兼容性,Kernel, NVIDIA Driver 和 CUDA三者之间的兼容真的逆天,而且Ubuntu24.04的资料不多,很多都是笔者自己一种搭配一种搭配尝试出来的,哎

安装Miniconda/anaconda

  1. 去官网下载相关安装包Anaconda Linux版本
  2. 处理多人共享conda环境
    1. sudo bash Anaconda3-2024.10-1-Linux-x86_64.sh
      1. 不要使用默认位置,要手动输入修改安装路径为/opt/anaconda3
      2. 注意最后初始化要选则no
      3. sudo chmod -R u=rwX,go=rX /opt/miniconda3 修改权限
  3. export PATH=/opt/anaconda3/bin:$PATH写入~/.bashrc文件
  4. 执行conda init

[!IMPORTANT]赋予用户conda权限
为每一个需要运行conda的用户都执行3,4步骤

安装SGLang步骤

  1. conda create --name SGL python=3.10
  2. pip install sglang 需要下载魔塔社区
  3. AI模型安装
    import torch
    from modelscope import AutoModelForCausalLM, AutoTokenizer
    from sglang import srt
    from transformers import BitsAndBytesConfig
    # 从 ModelScope 加载模型
    model = AutoModelForCausalLM.from_pretrained(
       "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",
       device_map="auto",
       trust_remote_code=True,
       quantization_config=quant_config
    )
    tokenizer = AutoTokenizer.from_pretrained(
       "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",
       trust_remote_code=True
    )
    
  4. 运行模型
    python -m sglang.launch_server \     
    --model-path /home/bera/.cache/modelscope/hub/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B \
    --port 30000 \
    --log-level info \
    --trust-remote-code \
    --mem-fraction-static 0.7
    
  5. 测试代码click.py
    # 1.py (修改后)
    
    import sglang as sgl
    import torch # 如果需要清理缓存或者进行其他 PyTorch 操作
    # 如果需要处理 Chat Template,保留这个 import
    from transformers import AutoTokenizer
    
    # --- 配置 ---
    # 模型文件所在的本地路径 (从之前的 ModelScope 下载日志中获取或者从魔塔社区进行下载)
    local_model_path = "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
    
    # *** 明确指定 SGLang 后端服务器的地址 (可选,如果使用默认 localhost:30000) ***
    sgl.set_default_backend(sgl.RuntimeEndpoint("http://localhost:30000"))
    
    # 定义 SGLang 推理函数
    @sgl.function
    def generate_poem(s, user_prompt_text):
       # 当 SGLang 服务器已经加载了模型时,客户端的 @sgl.function
       # 【通常不需要】再写 s += sgl.Model(...) 了。
       # 服务器会使用它启动时加载的模型。
    
       # --- 处理 Chat/Instruction 模型的 Prompt ---
       # 这一步仍然非常重要,需要根据模型要求格式化输入
       # 假设模型是 Qwen 类型,可能需要类似格式 (需要用实际的 Tokenizer 验证)
       try:
          # 仍然可以从本地加载 Tokenizer 来格式化 Prompt
          tokenizer = AutoTokenizer.from_pretrained(local_model_path, trust_remote_code=True) # 确保 tokenizer 加载也信任远程代码
    
          # 构建适合模型的聊天或指令 Prompt (以 Qwen 为例,具体需核对)
          # messages = [{"role": "user", "content": user_prompt_text}]
          # formatted_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    
          # 临时代替:直接使用,效果可能不好,请替换为正确的格式化
          formatted_prompt = f"User: {user_prompt_text}\nAssistant:"
    
          s += formatted_prompt # 将格式化后的 Prompt 传递给后端
       except Exception as e:
          print(f"警告:无法格式化 Prompt 或加载 Tokenizer: {e}")
          print("将尝试使用原始 Prompt,效果可能不佳。")
          s += user_prompt_text # 备用
    
       # 使用 sgl.gen 进行生成
       s += sgl.gen(
          "poem_text",            # 结果变量名
          max_tokens=512,
          temperature=0.7
       )
    
    # 准备用户输入
    prompt = "你好,请用中文写一首关于夏天的诗。"
    
    # 运行 SGLang 函数 (连接到正在运行的服务器)
    # 函数的参数名需要匹配 @sgl.function 定义中的参数名 (除了第一个 's')
    state = generate_poem.run(user_prompt_text=prompt)
    
    # 打印结果
    print(state["poem_text"])
    
    # (可选)清理缓存
    # torch.cuda.empty_cache()
    
  6. 如果报错
    1. conda update -c conda-forge libstdcxx-ng --force-reinstall

安装VLLM

[!Note] 注意
We’ll assume you want to use a common 7B Deepseek model available on Hugging Face, like deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct (optimized for coding) or deepseek-ai/DeepSeek-LLM-7B-Chat (optimized for general chat). I’ll use deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct in the examples, but you can substitute the other name if you prefer.

前提条件:

  1. NVIDIA GPU: 需配备NVIDIA GPU并确保显存充足(7B参数模型通常需要至少16GB显存,具体需求可能因量化和配置而异,请参考VLLM官方文档)。
  2. CUDA工具包: 安装兼容的NVIDIA驱动程序和CUDA工具包。VLLM安装通常会自动处理PyPI中的CUDA依赖,但需预先安装基础驱动。
  3. Python: 需Python 3.8或更新版本。
  4. pip: 确保已安装Python包管理工具。

分步操作指南:

步骤1:安装VLLM

打开终端或命令提示符,通过pip安装VLLM:

pip install vllm
  • 注意: 安装时间可能较长,若预编译的CUDA内核不适用当前GPU架构,将自动进行本地编译。
步骤2:安装LangChain和OpenAI客户端库

安装LangChain核心库和OpenAI客户端库,VLLM的OpenAI兼容API需要这些依赖:

pip install langchain langchain-openai
步骤3:启动VLLM服务端

在新终端窗口运行以下命令启动服务端(保持此窗口常驻):

python -m vllm.entrypoints.openai.api_server \
    --model deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct \
    --trust-remote-code  # Deepseek模型可能需要此参数
    # 可选:多GPU环境下添加--tensor-parallel-size N(N=GPU数量)
    # 可选:指定端口--port 8000(默认为8000)
  • 说明:
    • 服务端将自动从Hugging Face Hub下载模型(本地无缓存时)
    • 成功启动后终端会显示INFO: Uvicorn running on http://0.0.0.0:8000,API端点位于http://localhost:8000/v1
步骤4:配置LangChain连接VLLM服务端

在Python脚本中配置LangChain指向本地VLLM服务:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage

MODEL_NAME = "deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct"  # 需与VLLM加载的模型ID一致

llm = ChatOpenAI(
    model=MODEL_NAME,
    openai_api_key="dummy",  # VLLM无需鉴权,此处为占位符
    openai_api_base="http://localhost:8000/v1",  # 本地API端点
    max_tokens=100,   # 可选:设置生成最大token数
    temperature=0.7,  # 可选:控制生成随机性
)

# 构建对话消息
messages = [
    SystemMessage(content="你是一个基于DeepSeek Coder V2 Lite的编程助手"),
    HumanMessage(content="编写一个计算阶乘的Python函数"),
]

try:
    response = llm.invoke(messages)
    print("模型响应:\n", response.content)
except Exception as e:
    print(f"请求异常: {e}\n请检查VLLM服务是否正常运行")
步骤5:执行LangChain代码
  1. 将代码保存为test_vllm.py
  2. 确保VLLM服务端正在运行
  3. 新终端中执行:
python test_vllm.py

观察终端输出,VLLM服务端窗口将显示请求处理日志。


故障排查与技巧:

  • 显存不足: 运行nvidia-smi检查显存占用。可尝试更小模型、启用量化(参考VLLM文档)或升级硬件。
  • 模型名称不匹配: 确保ChatOpenAImodel参数与VLLM启动命令中的模型ID完全一致。
  • 端口冲突: 若修改默认端口(如8000),需同步更新openai_api_base中的端口号。
  • 远程代码信任: 部分模型需添加--trust-remote-code参数才能加载。
  • 依赖版本: 确认CUDA版本与Python版本符合VLLM最新要求(参考官方文档)。
  • 跨设备访问: 若服务端运行于其他设备,需将localhost替换为实际IP地址,并确保防火墙放行。

附加说明:

  • 实际使用时建议将服务端部署为后台进程(如使用nohupsystemd
  • 生产环境需考虑启用API鉴权、设置速率限制等安全措施
  • 可通过--quantization awq等参数启用量化压缩,降低显存占用

安装LangChain

  1. conda create --name langchain python=3.10
  2. pip install langchain langchain-openai
  3. 通用测试脚本
    from langchain_openai import ChatOpenAI
    from langchain_core.messages import HumanMessage, SystemMessage, AIMessage
    import os
    import langchain # Import for debugging
    
    # --- Setup llm as before ---
    sglang_api_base_url = "http://localhost:30000/v1" # <----- change url to adaptive your back url
    sglang_model_name = "DeepSeep-R1-Distill-Qwen-1.5" # <------ chage model name to adaptive your model_name
    sglang_api_key = ""
    
    llm = ChatOpenAI(
       model=sglang_model_name,
       openai_api_key=sglang_api_key,
       openai_api_base=sglang_api_base_url,
       temperature=0.7,
       max_tokens=512,
    )
    
    # --- Conversation Example ---
    
    # Start with system message and first question
    conversation_history = [
       SystemMessage(content="You are a helpful assistant discussing machine learning."),
       HumanMessage(content="What is quantization?")
    ]
    
    print("--- Sending first question ---")
    first_response = llm.invoke(conversation_history)
    print("First response:", first_response.content)
    
    # Add the first response (as AIMessage) and the second question (as HumanMessage)
    conversation_history.append(AIMessage(content=first_response.content)) # Add AI's answer
    conversation_history.append(HumanMessage(content="How does it help make models faster on edge devices?")) # Add user's second question
    
    print("\n--- Sending second question (with context) ---")
    # The 'conversation_history' now contains the system prompt, Q1, A1, and Q2
    second_response = llm.invoke(conversation_history)
    print("Second response:", second_response.content)
    
    # The 'conversation_history' list now contains:
    # [SystemMessage, HumanMessage (Q1), AIMessage (A1), HumanMessage (Q2)]
    # When invoking for the second response, LangChain sends this entire list.
    

Author: Bear

Written: May 4, 2025

Last Updated: May 4, 2025, 9:01 AM SGT

<think>好的,我现在需要在Ubuntu 24.04安装VLLM框架。首先,我得了解VLLM是什么,以及它的安装依赖。根据用户提供的参考信息,特别是引用[3]中的Docker命令引用[4]中提到的部署DeepSeek R1 14B的方案,VLLM可能是一个用于大型语言模型推理的高效库,需要GPU支持。 首先,我需要确认系统环境。用户提到Ubuntu 24.04,可能已经安装了NVIDIA驱动,因为引用[2]中提到了NVIDIA cuBLAS的性能数据。安装VLLM可能需要CUDA工具包,所以第一步应该是检查CUDAcuDNN的安装情况。如果系统没有安装,需要先安装这些依赖。 接下来,根据引用[3]中的Docker命令,用户可能使用了容器化部署,但问题是如何直接在Ubuntu安装。可能需要使用Python的pip来安装vllm包。不过,VLLM安装可能有特定的版本要求,比如需要Python 3.8以上,PyTorch的某个版本,以及相应的CUDA版本支持。 另外,引用[4]中的健康检查脚本使用了Ollama的API,但用户的问题是关于VLLM安装,可能需要关注VLLM的官方文档。根据经验,VLLM通常需要安装vllm包,可能还需要安装特定的CUDA扩展或者依赖库,比如nvidia-cublas-cu12等。 可能的步骤包括: 1. 更新系统并安装必要的依赖,如Python3、pip、CUDA等。 2. 创建Python虚拟环境以隔离依赖。 3. 使用pip安装vllm,可能需要指定版本或添加额外的索引。 4. 验证安装是否成功,运行示例代码。 此外,引用[3]中的Docker命令涉及到了设备权限卷挂载,这可能意味着在裸机安装时需要配置相应的设备访问权限,比如NVIDIA的GPU设备。可能需要安装nvidia-container-toolkit或者配置Docker环境,但如果用户不想使用容器,可能需要直接安装NVIDIA驱动相关库。 在检查过程中,需要注意Ubuntu 24.04的软件源是否包含所需的软件包,或者是否需要添加第三方PPA。例如,安装CUDA可能需要从NVIDIA官网下载.run文件或通过APT仓库安装。 另外,引用[2]中提到不同发行版的数学库优化,Ubuntu 24.04使用的是NVIDIA cuBLAS,这可能对VLLM的性能有影响,因此在安装时需要确保CUDA正确配置,并且VLLM能够调用这些库。 可能的错误点包括:CUDA版本不兼容、Python环境冲突、缺少系统依赖库等。需要逐步检查每个步骤的输出,确保没有报错。例如,安装vllm时可能会提示需要安装CMake或Ninja等构建工具,因此需要提前安装这些依赖。 总结下来,安装步骤可能如下: - 安装NVIDIA驱动CUDA工具包 - 安装Python虚拟环境 - 安装VLLM via pip - 测试安装 需要查阅VLLM的官方安装指南,确认最新的安装命令依赖要求。例如,VLLM官方可能推荐使用pip install vllm,或者需要从源码编译,特别是如果使用特定版本的CUDA。 最后,根据用户提供的引用,可能需要考虑使用Docker来简化安装,如引用[3]中的命令,但用户明确询问的是在Ubuntu安装,而不是使用Docker,所以需要提供裸机安装的步骤。</think>### 在 Ubuntu 24.04安装 VLLM 框架的步骤 #### 1. 安装系统依赖 NVIDIA 驱动 确保系统已安装 NVIDIA 驱动 CUDA 工具包(VLLM 需要 CUDA 11.8 或更高版本): ```bash # 检查 NVIDIA 驱动是否安装 nvidia-smi # 若未安装,添加官方驱动仓库并安装(以 535 驱动为例) sudo apt update sudo apt install ubuntu-drivers-common sudo ubuntu-drivers autoinstall sudo reboot # 安装 CUDA Toolkit(以 CUDA 12.1 为例) wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda-repo-ubuntu2404-12-1-local_12.1.0-530.30.02-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2404-12-1-local_12.1.0-530.30.02-1_amd64.deb sudo apt update sudo apt install cuda-toolkit-12-1 ``` #### 2. 配置 Python 虚拟环境 ```bash # 安装 Python 3.10 虚拟环境工具 sudo apt install python3.10-venv python3-pip # 创建并激活虚拟环境 python3 -m venv vllm-env source vllm-env/bin/activate ``` #### 3. 安装 VLLM 及其依赖 ```bash # 安装 PyTorch VLLM(需匹配 CUDA 版本) pip install torch==2.3.0+cu121 --extra-index-url https://download.pytorch.org/whl/cu121 pip install vllm # 验证安装 python -c "from vllm import LLM; print('VLLM 安装成功!')" ``` #### 4. 测试 GPU 加速推理 ```python from vllm import LLM, SamplingParams llm = LLM(model="facebook/opt-125m") sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=64) outputs = llm.generate("Hello, my name is", sampling_params) print(outputs[0].outputs[0].text) ``` #### 5. 可选:Docker 部署(参考引用[3]) 若需容器化部署,可使用官方镜像: ```bash docker run --gpus all -p 8000:8000 --rm -itvllm/vllm-openai:latest ``` --- ### 关键配置说明 1. **CUDA 版本匹配**:VLLM 依赖 CUDA 12.1+,需与 PyTorch 的 CUDA 版本一致[^2] 2. **性能优化**:Ubuntu 24.04 默认使用 NVIDIA cuBLAS,可提升推理速度[^2] 3. **健康监控**:可参考引用[4]编写脚本监控 GPU 利用率 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值