当前位置: 首页 > news >正文

Gemma 3 多模态推理 通过vllm运行Gemma-3-27B-IT模型的推理服务

Gemma 3 多模态推理 通过vllm运行Gemma-3-27B-IT模型的推理服务

flyfish

例子

通过vllm启动Gemma-3-27B-IT模型的推理服务,在2个GPU上分布式加载Gemma-3-27B-IT模型,通过vllm启动一个高性能推理服务器(端口8102),支持最长16384 tokens的上下文。

vllm serve gemma-3-27b-it --tensor-parallel-size 2 --max-model-len 16384 --port 8102 --trust-remote-code --served-model-name gemma3-27b --enable-chunked-prefill --max-num-batched-tokens 2048 --gpu-memory-utilization 0.95

命令:vllm serve

这是vllm的核心指令,用于启动一个高性能的模型推理服务器,提供API接口(如OpenAI兼容的/v1/chat/completions等),方便客户端通过HTTP请求调用模型。

参数:

  1. gemma-3-27b-it
    必选参数,指定要加载和服务的模型名称/路径。这里表示加载Gemma-3-27B-IT模型(需确保模型已下载到本地或可通过Hugging Face Hub访问)。

  2. --tensor-parallel-size 2
    用于大模型的“张量并行”配置,指定将模型的层拆分到2个GPU上运行。
    由于Gemma-3-27B模型参数量大(270亿参数),单GPU内存可能无法容纳,通过张量并行将模型分散到多个GPU,实现分布式加载和推理。

  3. --max-model-len 16384
    限制模型支持的“最大序列长度”(输入+输出的总tokens数)。
    这里设置为16384,意味着模型最多可处理16384个tokens的上下文(包括用户输入、历史对话和生成的回答),超过此长度会被截断。

  4. --port 8102
    指定vllm服务器监听的端口号。
    客户端需通过http://localhost:8102(或服务器IP:8102)访问API,与之前日志中显示的“Starting vLLM API server on http://0.0.0.0:8102”对应。

  5. --trust-remote-code
    允许执行模型仓库中的“远程代码”。
    部分模型(尤其是自定义或非标准结构的模型)可能需要加载仓库中附带的Python代码(如modeling_*.py)来正确初始化,此参数用于信任并执行这些代码(注意潜在安全风险)。

  6. --served-model-name gemma3-27b
    自定义API中使用的“模型名称”。
    客户端调用时需指定此名称(如在/v1/chat/completions请求中通过"model": "gemma3-27b"指定),方便区分同一服务器上的多个模型。

  7. --enable-chunked-prefill
    启用“分块预填充”优化。
    对于长输入(如长文本、多轮对话),vllm会将输入拆分为多个“块”进行预处理(prefill),减少一次性占用的内存,提升长序列推理的效率和稳定性。

  8. --max-num-batched-tokens 2048
    限制“批处理中最大的tokens总数”。
    vllm通过“批处理”(将多个请求合并处理)提升GPU利用率,此参数控制一批请求中所有输入的tokens总和不超过2048,避免内存溢出。

  9. --gpu-memory-utilization 0.95
    设置GPU内存的“最大利用率”(0.95即95%)。
    vllm会根据此比例分配GPU内存(预留5%避免内存碎片化或突发占用导致OOM错误),平衡内存使用效率和稳定性。

import requests
import base64
import jsondef encode_image(image_path):"""将图像文件编码为base64字符串"""with open(image_path, "rb") as image_file:return base64.b64encode(image_file.read()).decode('utf-8')def read_prompt_from_file(prompt_path):"""从文本文件读取prompt内容"""with open(prompt_path, "r", encoding="utf-8") as file:return file.read().strip()def send_to_vllm(image_path, prompt_path, vllm_server_url="http://127.0.0.1:8102/v1/chat/completions"):# 读取并处理输入base64_image = encode_image(image_path)prompt_text = read_prompt_from_file(prompt_path)# 构造符合OpenAI格式的消息,包含图像和文本messages = [{"role": "system","content": "You are a helpful assistant."},{"role": "user","content": [{"type": "text","text": prompt_text},{"type": "image_url","image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}]}]# 构造vllm请求,符合OpenAI API格式payload = {"model": "gemma3-27b",  # 模型名称"messages": messages,"max_tokens": 2048,"temperature": 0.7,"top_p": 0.9}headers = {"Content-Type": "application/json"}try:# 发送请求到vllm服务器response = requests.post(vllm_server_url, headers=headers, json=payload)response.raise_for_status()  # 检查请求是否成功# 解析并返回结果result = response.json()return result['choices'][0]['message']['content']except requests.exceptions.RequestException as e:print(f"请求发生错误: {e}")if response is not None:print(f"响应内容: {response.text}")return Noneif __name__ == "__main__":# 替换为你的本地图像路径和prompt文本文件路径IMAGE_PATH = "local_image.jpg"  # 本地图像文件PROMPT_PATH = "prompt.txt"      # 包含prompt的文本文件# 发送请求并获取结果response_text = send_to_vllm(IMAGE_PATH, PROMPT_PATH)if response_text:print("模型响应:")print(response_text)

输入

使用中文描述这张图像
在这里插入图片描述

输出

模型响应:
这张图描述了一个知识蒸馏(Knowledge Distillation)的流程。图中包含以下几个主要元素:* **Dataset (数据集):** 一个圆柱体,代表用于训练模型的数据集。
* **Teacher model (教师模型):** 一个矩形,代表已经训练好的“教师”模型,它具有较高的准确性。
* **Student model (学生模型):** 一个矩形,代表需要训练的“学生”模型,目标是尽可能接近教师模型的性能。
* **Teacher logits (教师模型的输出):** 一个矩形,表示教师模型对数据的预测结果(未经softmax处理的输出)。
* **Student logits (学生模型的输出):** 一个矩形,表示学生模型对数据的预测结果(未经softmax处理的输出)。
* **Loss (损失函数):** 一个椭圆形,代表用于衡量学生模型预测结果与教师模型预测结果差异的损失函数。通常会结合教师模型logits和学生模型logits计算损失。
* **Weight updates (权重更新):** 一个菱形,代表通过损失函数计算出的梯度,用于更新学生模型的权重。**流程描述:**1.  数据集被输入到教师模型和学生模型中。
2.  教师模型和学生模型分别输出logits。
3.  教师模型logits和学生模型logits被输入到损失函数中,计算损失值。
4.  损失值被用于计算权重更新,从而更新学生模型的权重。
5.  整个过程重复进行,直到学生模型达到预期的性能。总而言之,这张图展示了知识蒸馏的核心思想:利用一个已经训练好的教师模型来指导一个学生模型的训练,使得学生模型能够学习到教师模型的知识,从而提高自身的性能。
http://www.xdnf.cn/news/1296127.html

相关文章:

  • NineData云原生智能数据管理平台新功能发布|2025年7月版
  • 基于U-NET遥感影像语义分割任务快速上手
  • git upstream
  • 流式数据服务端怎么传给前端,前端怎么接收?
  • 入门概述(面试常问)
  • vercel部署上线
  • 【数据分享】351个地级市农业相关数据(2013-2022)-有缺失值
  • 数智先锋 | 告别运维黑盒!豪鹏科技×Bonree ONE构建全栈智能可观测体系
  • 带环链表详解:环形链表检测与入环节点查找
  • 从 Notion 的水土不服到 Codes 的本土突围:研发管理工具的适性之道​
  • Linux下的软件编程——framebuffer(文件操作的应用)
  • 表达式树实战:Unity动态逻辑编程
  • tp5集成elasticsearch笔记
  • Unity中的神经网络遗传算法实战
  • 一篇文章读懂.Net的依赖注入
  • .NET 的 WebApi 项目必要可配置项都有哪些?
  • .Net4.0 WPF中实现下拉框搜索效果
  • 面试题之项目中git如何进行管理
  • 如何启动本机mysql数据库
  • 在mysql> 下怎么运行 .sql脚本
  • XCTF-warmup详细题解(含思考过程)
  • Morph Studio-一站式AI视频创作平台
  • Vue浅学
  • Elasticsearch 中如何配置 RBAC 权限-实现安全的访问控制
  • QT6(创建第一个QT项目)
  • Win10上Qt使用Libcurl库
  • Qt 实现Ymodem协议源码分享
  • MySQL工具包中的其他程序
  • 从概率填充到置信度校准:GPT-5如何从底层重构AI的“诚实”机制
  • 树莓派 4B 上部署 Minecraft PaperMC 1.20.x 的一键部署脚本