SGLang 多模态完整指南:让模型看图、懂视频、做图文检索一步到位
2026/9/2 11:29:29 网站建设 项目流程

SGLang 多模态完整指南:让模型看图、懂视频、做图文检索一步到位

【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang

丢一张截图给模型问"这是啥",或者把一段会议录屏丢过去让它总结重点——这类需求看起来离生产环境还差一步,其实也就是几行 API 调用的距离。SGLang 是一个面向大语言模型与多模态模型的高性能推理服务框架,图像问答、视频理解、图文嵌入检索这些能力都能接。读完全文,你会知道能接哪些视觉模型、怎么一条命令拉起服务,以及视频抽帧和图文检索该怎么调。

能接哪些多模态模型:端侧、主力、专项三档

端侧轻量

  • MiniCPM-V 2.6(openbmb/MiniCPM-V-2_6,约 8B)面向移动/边缘部署优化,MiniCPM-o 版本再加音频、视频模态。

主力视觉模型(图像+文本进、文本出)

  • Qwen-VL:Qwen/Qwen3-VL-235B-A22B-Instruct,图像分析与讨论的当前标杆。
  • Llama 3.2 Vision 11B:meta-llama/Llama-3.2-11B-Vision-Instruct,适合视觉问答这类任务。
  • Gemma 3:google/gemma-3-4b-it(4B/12B/27B 三档),每张图像编码成 256 个 token,放在 128K 上下文里。
  • LLaVA 系:liuhaotian/llava-v1.5-13blmms-lab/llava-next-72b;LLaVA-OneVisionlmms-lab/llava-onevision-qwen2-7b-ov可一次输入多张图甚至视频帧,兼容 OpenAI Vision API 的格式。
  • DeepSeek-VL2(deepseek-ai/deepseek-vl2)带专用图像处理器;Kimi-VL(moonshotai/Kimi-VL-A3B-Instruct)可从图像理解并生成文本;MiMo-VL 7B(XiaomiMiMo/MiMo-VL-7B-RL)用原生分辨率 ViT 抓细粒度细节。
  • Mistral-Small-3.1-24B(mistralai/Mistral-Small-3.1-24B-Instruct-2503)支持图像输入,还带工具调用和结构化输出。

专项能力

  • Janus-Pro 1B/7B(deepseek-ai/Janus-Pro-7B):图像理解和生成都能做,视觉编码路径与生成解耦。
  • Phi-4-multimodal(microsoft/Phi-4-multimodal-instruct):文本、视觉、音频三模态,多模态能力通过 LoRA 增强。
  • GLM-4.5V 106B / GLM-4.1V 9B(zai-org/GLM-4.5V):靠可扩展强化学习做多模态推理,启动时记得加--chat-template glm-4v
  • DotsVLM(rednote-hilab/dots.vlm1.inst)及其 OCR 变体rednote-hilab/dots.ocr:后者是专用 OCR 模型,注意别给它加--trust-remote-code

另外,如果模型的对话格式比较特殊,启动时可以指定自定义模板,仓库里就有现成参考:examples/chat_template/vision_template_sarashina_vl.jinja(Sarashina-VL 用)。

🖼️ 场景一:让模型看懂一张图(含多图)

先把服务拉起来,一条命令的事:

python3 -m sglang.launch_server \ --model-path meta-llama/Llama-3.2-11B-Vision-Instruct \ --host 0.0.0.0 --port 30000

调用侧直接用 OpenAI 客户端就行——SGLang 的接口和 OpenAI 兼容,你原来对接其他推理服务的代码基本能原样搬过来:

from openai import OpenAI client = OpenAI(base_url="http://localhost:30000/v1", api_key="None") resp = client.chat.completions.create( model="meta-llama/Llama-3.2-11B-Vision-Instruct", messages=[{"role": "user", "content": [ {"type": "text", "text": "这张图里有什么?"}, {"type": "image_url", "image_url": { "url": "https://github.com/sgl-project/sglang/blob/main/test/lang/example_image.png?raw=true"}}, ]}], max_tokens=300, ) print(resp.choices[0].message.content)

多图就更有意思了:在同一个content列表里继续追加image_url项即可,模型能把两张毫不相关的图分别描述再对比。不想引客户端库的话,直接 POST/v1/chat/completions也行,JSON 结构完全一样。

🎬 场景二:让模型看懂视频(抽帧转 base64)

视频理解本质上是"把视频变成一串图片"。思路三步走:用 decord 均匀抽帧 → 每帧压成 JPEG → base64 编码后塞进contentimage_url用:

import base64, io from decord import VideoReader, cpu from PIL import Image vr = VideoReader("jobs_presenting_ipod.mp4", ctx=cpu(0)) n = 10 # 抽帧数量 idx = [int(i * (len(vr) - 1) / (n - 1)) for i in range(n)] # 均匀采样 frames = vr.get_batch(idx).asnumpy() content = [] for f in frames: buf = io.BytesIO() Image.fromarray(f).save(buf, format="JPEG") content.append({"type": "image_url", "image_url": { "url": "data:image/jpeg;base64," + base64.b64encode(buf.getvalue()).decode()}}) content.append({"type": "text", "text": "请描述这段视频。"})

剩下的照旧:把messages=[{"role": "user", "content": content}]发给client.chat.completions.create,模型就会输出一段视频描述。

帧数怎么取舍?帧多信息全,但 token 变长、响应变慢、显存吃紧。问"这视频讲了什么"这类整体性问题,均匀抽 10 帧通常够用;要定位某个具体动作或时间点,就在该时段附近加帧、加密采样。特别长的视频建议先分段处理,别一次性把整个文件读进来。

🔍 场景三:图文嵌入检索(embedding)

想做"以文搜图""找相似图"或者聚类,就走嵌入这条路:先用--is-embedding参数启动服务(模型Alibaba-NLP/gme-Qwen2-VL-2B-Instruct),请求体里文本、图像可以混着传,返回的是同一个向量空间的 embedding:

import requests payload = { "model": "gme-qwen2-vl", "input": [ {"text": "Represent this image in embedding space."}, {"image": "https://huggingface.co/datasets/liuhaotian/llava-bench-in-the-wild/resolve/main/images/023.jpg"}, ], } resp = requests.post("http://127.0.0.1:30000/v1/embeddings", json=payload).json() print(resp["data"][0]["embedding"])

文字和图片的向量落在同一个空间,直接算相似度就能做检索、聚类,接上向量数据库就是一套图文搜索系统。

⚡ 参数与性能怎么调:6 条可操作清单

  1. 特征张量留在 GPU 上:默认情况下多模态特征张量处理完会搬回 CPU 省显存;显存够的话启动时加--keep-mm-feature-on-device,张量常驻 GPU,少一次设备间拷贝,延迟直接受益。
  2. 控制分辨率:分辨率越高计算和内存开销越大,先按模型的要求降采样(多数模型对输入分辨率有明确规格)。
  3. 批处理提吞吐:请求可以排队的话就让多个多模态请求攒一批,框架会自动合并,GPU 利用率更实在。
  4. GPU 打底,多卡扩展:视觉编码器的计算量不小,大模型直接多 GPU 或上云部署。
  5. 挂上监控:仓库自带 Prometheus/Grafana 配置,边调边看延迟、吞吐和 GPU 占用,瓶颈一眼定位。
  6. 重复请求吃缓存:同一批图反复问,命中内置缓存就不用重算,省时间也省卡。

收尾

服务一拉起来,看图、读视频、图文检索之间只是请求体的差别——选个模型、拷走上面的代码,今天就能跑通。想继续深挖,仓库里这几处值得看一眼:

  • 官方视觉 API 文档:docs/docs/basic_usage/openai_api_vision.mdx
  • 图文嵌入示例脚本:examples/runtime/multimodal_embedding.py
  • 自定义视觉对话模板:examples/chat_template/vision_template_sarashina_vl.jinja
  • 视觉服务测试:test/registered/vlm/test_vision_openai_server_a.py

【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询