AIStudio SSH 公钥管理,一处配置,处处可用AIStudio SSH 公钥管理,一处配置,处处可用 ,只为更佳开发体验如何配置
Skip to content
回到全部文章

使用 AIStudio 开发机和 SGLang 运行 Qwen2.5-VL-7B-Instruct 进行视觉问答

视觉语言模型(VLM)是能够处理图像和文本的大型语言模型(LLM),不仅能回答文本问题,还能根据图片生成回答。本示例展示如何使用 SGLang 运行 Qwen2.5-VL-7B-Instruct 模型,提供视觉问答功能。SGLang 是一个高效的服务框架,支持快速部署视觉语言模型,并通过 OpenAI 兼容的 API 提供推理服务。

前提条件

  • 由于国内网络环境问题,安装 sglang 过程中可能遇到障碍。建议在有代理服务的情况下体验。
  • 如需了解如何在 AIStudio 开发机安装 Clash 客户端并为 Shell 环境启用代理服务,您可以参考第三方学术加速服务指南

准备 CUDA 镜像

Sglang 要求环境支持系统级 CUDA。可以先使用镜像中心,以提交 Dockerfile 的方式免费构建镜像。镜像名称/标签示例:cuda-12.4-cudnn9:v1

Dockerfile 内容:

dockerfile
FROM cr.infini-ai.com/infini-ai/ubuntu:22.04-20240429

# 设置环境变量
# DEBIAN_FRONTEND=noninteractive 防止安装过程中的交互式提示
# PATH 添加CUDA可执行文件路径
# LD_LIBRARY_PATH 添加CUDA库文件路径
# CUDA_HOME 设置CUDA根目录
ENV PATH=/usr/local/cuda/bin:/usr/local/cuda-12.4/bin${PATH:+:${PATH}} \
    LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda-12.4/lib64:/usr/lib/x86_64-linux-gnu${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} \
    CUDA_HOME=/usr/local/cuda \
    CPATH=/usr/include${CPATH:+:${CPATH}} \
    LIBRARY_PATH=/usr/lib/x86_64-linux-gnu${LIBRARY_PATH:+:${LIBRARY_PATH}}

# 安装CUDA并配置系统环境
# 1. 更新apt并安装必要工具
# 2. 清理apt缓存减小镜像体积
# 3. 下载CUDA安装包
# 4. 静默安装CUDA工具包(请勿安装 driver)
# 5. 配置动态链接库搜索路径
# 6. 更新动态链接库缓存
# 7. 清理安装包
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y wget build-essential \
    && rm -rf /var/lib/apt/lists/* \
    && wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run \
    && sh cuda_12.4.1_550.54.15_linux.run --toolkit --silent --override \
    && echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf \
    && echo '/usr/local/cuda-12.4/lib64' >> /etc/ld.so.conf \
    && ldconfig \
    && rm cuda_12.4.1_550.54.15_linux.run

# 安装cuDNN并配置环境
# 1. 下载并安装NVIDIA CUDA仓库公钥
# 2. 更新apt源
# 3. 安装cuDNN
# 4. 配置额外的库路径
# 5. 更新动态链接库缓存
# 6. 清理安装包和apt缓存
RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb \
    && dpkg -i cuda-keyring_1.1-1_all.deb \
    && apt-get update \
    && apt-get install -y cudnn-cuda-12 \
    && echo '/usr/lib/x86_64-linux-gnu' >> /etc/ld.so.conf \
    && ldconfig \
    && rm cuda-keyring_1.1-1_all.deb \
    && rm -rf /var/lib/apt/lists/*

创建 AIStudio 开发机

点击下方链接,直接访问智算云控制台的创建开发机页面。建议选择 A100 / H800 等满足 Flashinfer 要求的机型。

进入创建页面后,请根据页面提示,完成开发机相应配置。在选择镜像时,请务必选择您创建的自定义 CUDA 环境镜像。

安装 SGLang

根据 SGLang 官方指导进行安装。在本次实验中,直接允许 uv 安装到系统环境即可(--system)。您可以可以自行创建虚拟环境。

shell
pip install --upgrade pip
pip install uv
uv pip install "sglang[all]>=0.4.4.post1" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer-python --system

启动 SGLang 服务器

SGLang 支持通过命令行启动服务器,为视觉语言模型提供推理服务。以下是使用指定配置启动服务器的步骤,针对 Qwen2.5-VL-7B-Instruct 模型进行了优化:

  1. 在终端中运行以下命令以启动 SGLang 服务器:

    bash
    export SGLANG_USE_MODELSCOPE=true
    export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
    
    # 8k 上下文
    python3 -m sglang.launch_server --model-path Qwen/Qwen2.5-VL-7B-Instruct --port 8888 --host 0.0.0.0 --context-length 8096 --max-running-requests 1 --mem-fract
    ion-static 0.35 --tensor-parallel-size 1 --chat-template qwen2-vl
    
    # 32k 上下文
    # python3 -m sglang.launch_server --model-path Qwen/Qwen2.5-VL-7B-Instruct --port 8888 --host 0.0.0.0 --context-length 8192 --max-running-requests 2 --mem-fraction-static 0.45 --tensor-parallel-size 1 --chat-template qwen2-vl --chunked-prefill-size -1
    • export SGLANG_USE_MODELSCOPE=true: 启用 ModelScope 支持。本地不存在模型时,从 ModelScope 下载指定模型。
    • export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True: 配置 PyTorch 的 CUDA 内存分配器,启用可扩展内存段,减少内存碎片并提高大模型的稳定性。
    • --model-path Qwen/Qwen2.5-VL-7B-Instruct: 指定模型路径,若本地已有则使用本地路径,否则自动下载。
    • --port 8888: 服务监听端口,设为 8888。
    • --host 0.0.0.0: 绑定到所有网络接口,允许外部访问。
    • --context-length 8196: 设置最大上下文长度。如需支持高分辨率图片,则需要支持长序列输入,可设置 32768,但较大的上下文长度极易造成 OOM 问题。如果图片分辨率较低,建议设置更小的值,例如 8196。
    • --max-running-requests 2: 限制最大并发请求数为 2,避免过载。
    • --mem-fraction-static 0.7: 分配 60% 的 GPU 显存用于静态缓存,剩余用于动态分配。
    • --tensor-parallel-size 1: 张量并行大小设为 1,表示单 GPU 运行。
    • --chat-template qwen2-vl: 使用 Qwen2-VL 的视觉聊天模板,必需参数以支持图像输入。

    WARNING

    运行 Qwen2.5-VL 模型时且上下文长度设置较大值时,SGLang 可能存在问题。暂可咱通过设置 --chunked-prefill-size -1 禁用分块预填充(chunked prefill) 绕过。详见 https://github.com/sgl-project/sglang/issues/4171

  2. 启动后,SGLang 服务器会自动下载模型、加载模型权重并初始化运行时。日志会显示类似以下信息:

    shell
    [INFO] Server running on http://0.0.0.0:8888

    加载时间取决于硬件性能和模型大小(7B 参数量在单 GPU 上通常需要数分钟)。

发送视觉问答请求

SGLang 提供 OpenAI 兼容的 API 接口,可以通过 HTTP 请求与服务器交互。以下是如何发送包含图像和文本的请求的示例:

运行以下代码,向服务器发送视觉问答请求:

shell
curl --request POST \
  --url "http://localhost:8888/v1/chat/completions" \
  --header "Content-Type: application/json" \
  --data '{
      "model": "Qwen/Qwen2.5-VL-7B-Instruct",
      "messages": [
        {
          "role": "user",
          "content": [
            {
              "type": "image_url",
              "image_url": {
                "url": "https://sf-maas-uat-prod.oss-cn-shanghai.aliyuncs.com/dog.png"
              }
            },
            {
              "type": "text",
              "text": "请简要描述图片是什么内容?"
            }
          ]
        }
    ],
    "temperature": 0.7,
    "stream": false
  }'

返回的 JSON 示例:

json
{
  "id": "1250f5a07f9e400298132dad89115a3b",
  "object": "chat.completion",
  "created": 1742978926,
  "model": "Qwen/Qwen2.5-VL-7B-Instruct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "这张图片展示了一只可爱的金毛犬。狗狗的眼神清澈而深情,耳朵微微垂下,显得非常友善和平静。背景是柔和的绿色模糊,突出了狗狗的面部特征。",
        "reasoning_content": null,
        "tool_calls": null
      },
      "logprobs": null,
      "finish_reason": "stop",
      "matched_stop": 151645
    }
  ],
  "usage": {
    "prompt_tokens": 1398,
    "total_tokens": 1440,
    "completion_tokens": 42,
    "prompt_tokens_details": null
  }
}

技术细节

  • 视觉聊天模板--chat-template qwen2-vl 是必需的,因为 Qwen2-VL 的默认模板仅支持文本。若未指定,服务器将无法处理图像,导致性能下降或错误。
  • SGLang 与视觉模型:本教程旨在指导用户在开发机安装 SGLang,不代表任何推荐意见。建议您充分对比 SGLang 与 vLLM 等框架在视觉模型推理上的效果。您也可以自行尝试 SGLang 在大语言模型上的推理效果。

使用 GenStudio 的 Qwen2.5-VL 服务

大模型服务平台已上架通义千问视觉语言模型,涵盖 Qwen2.5-VL 7B/72B 等尺寸模型。为开发者和企业提供了强大的多模态能力支持,打造更智能的 AI 应用。欢迎接入使用。

结论

这个示例展示了如何使用 SGLang 独立运行 Qwen2.5-VL-7B-Instruct,实现视觉问答功能。你可以根据需求修改请求内容或服务器参数,进一步定制服务!