sglang 部署Qwen/Qwen2.5-VL-7B-Instruct
编辑
2025-05-28
深度学习
00

目录

1. SGLang中Qwen2-VL的模板代码位置
2. SGLang对vLLM参数的支持情况
3. SGLang Docker 部署项目

1. SGLang中Qwen2-VL的模板代码位置

SGLang中Qwen2-VL的模板代码主要在以下文件中:

聊天模板定义:

  • python/sglang/lang/chat_template.py 第148-157行定义了qwen2-vl模板:
148:157:python/sglang/lang/chat_template.py
展开代码
register_chat_template( ChatTemplate( name="qwen2-vl", default_system_prompt="You are a helpful assistant.", role_prefix_and_suffix={ "system": ("<|im_start|>system\n", "<|im_end|>\n"), "user": ("<|im_start|>user\n", "<|im_end|>\n"), "assistant": ("<|im_start|>assistant\n", "<|im_end|>\n"), }, style=ChatTemplateStyle.PLAIN, stop_str=("<|im_end|>",), image_token="<|vision_start|><|image_pad|><|vision_end|>", ) )

会话模板定义:

  • python/sglang/srt/conversation.py 第773-787行定义了qwen2-vl会话模板:
773:787:python/sglang/srt/conversation.py
展开代码
register_conv_template( Conversation( name="qwen2-vl", system_message="You are a helpful assistant.", system_template="<|im_start|>system\n{system_message}", roles=("<|im_start|>user", "<|im_start|>assistant"), sep="<|im_end|>\n", sep_style=SeparatorStyle.ADD_NEW_LINE_SINGLE, stop_str=["<|im_end|>"], image_token="<|vision_start|><|image_pad|><|vision_end|>", ) )

多模态处理器:

  • python/sglang/srt/managers/multimodal_processors/qwen_vl.py 包含了Qwen2-VL的图像处理逻辑

2. SGLang对vLLM参数的支持情况

对比你提到的vLLM命令参数,SGLang的支持情况如下:

vLLM参数SGLang对应参数支持情况
--max-model-len 16384--context-length✅ 支持
--pipeline-parallel-size 2--pipeline-parallel-size--pp-size✅ 支持
--gpu_memory_utilization 0.75--mem-fraction-static✅ 支持,但语义稍有不同
--mm-processor-kwargs '{"min_pixels": 784, "max_pixels": 2352000, "fps": 1}'无直接对应❌ 不支持
--limit-mm-per-prompt "image=2,video=1"无直接对应❌ 不支持

详细说明:

  1. --mem-fraction-static vs --gpu_memory_utilization

    • SGLang的mem_fraction_static控制静态内存分配(模型权重和KV缓存池)的比例
    • vLLM的gpu_memory_utilization控制整体GPU内存使用比例
    • python/sglang/srt/server_args.py中,SGLang根据并行度自动设置不同的默认值
  2. Pipeline并行支持

    • SGLang完全支持pipeline parallelism
    • 参数:--pipeline-parallel-size 或简写 --pp-size
  3. 多模态参数

    • SGLang目前没有类似vLLM的--mm-processor-kwargs--limit-mm-per-prompt参数
    • 多模态配置主要通过模型特定的处理器代码硬编码实现
    • 在Qwen2-VL处理器中,像素限制等参数是在代码中预定义的

建议的SGLang启动命令:

bash
展开代码
python -m sglang.launch_server \ --model-path /Qwen2-VL-Any \ --context-length 16384 \ --pp-size 2 \ --mem-fraction-static 0.75 \ --chat-template qwen2-vl \ --host 0.0.0.0 \ --port 30000

3. SGLang Docker 部署项目

比如 sglang:v0.4.6.post1-cu121

bash
展开代码
docker run -d --gpus all \ --shm-size=32g \ -p 7860:7860 \ -p 8000:8000 \ -e PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True \ -v /root/model/:/Qwen2-VL-Any \ sglang:v0.4.6.post1-cu121 python3 -m sglang.launch_server --host 0.0.0.0 --port 8000 --chat-template qwen2-vl --mem-fraction-static 0.75 --tensor-parallel-size 2 --context-length 65536 --model-path /Qwen2-VL-Any

context-length给大,请求的时候max_tokens要小!!

请求代码:

python
展开代码
import requests import base64 # 将图片编码为 base64 def encode_image_to_base64(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode('utf-8') # 封装函数,传入图像路径,返回模型输出 def extract_text_from_image(image_path): # 构造请求数据 data = { "model": "/Qwen2-VL-Any", # 模型名称 "messages": [ { "role": "system", "content": "你是一个图像文字信息提取专家,可以识别图像中的文字,提取关键信息并输出为JSON格式。" }, { "role": "user", "content": [ { "type": "text", "text": "识别图像中的文字,提取关键信息并输出为JSON格式。" }, { "type": "image_url", "image_url": { "url": f"data:image/png;base64,{encode_image_to_base64(image_path)}" } }, # { # "type": "image_url", # "image_url": { # "url": f"data:image/png;base64,{encode_image_to_base64(image_path)}" # } # } ] } ], "max_tokens": 4096, "temperature": 0.1 } # 发送 POST 请求 response = requests.post( "http://10.150.7.41:8000/v1/chat/completions", # vLLM 的 OpenAI API 兼容端点 json=data, headers={"Authorization": "Bearer no-key-required"} # vLLM 不需要 API 密钥 ) # 返回模型输出 return response.json()["choices"][0]["message"]["content"] # 使用示例 image_path = "./yiliao.png" result = extract_text_from_image(image_path) print(result)
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!