当前位置: 首页 > 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.dtcms.com/a/331931.html

相关文章:

  • 【系统安装】虚拟机中安装win10IOT企业版系统记录
  • 解决安装 scikit-learn==1.3.1 时出现的版本匹配错误
  • PHP 开发全解析:从基础到实战的进阶之路
  • sFlow原理与配置
  • Java面试场景题大全精简版
  • MySql——聚簇索引(主键索引)和非聚簇索索引(非主键索引)引区别(即聚集索引和非聚集索引区别)
  • MyBatis学习总结(六)
  • 【面板数据】各省及市省级非物质文化遗产数据合集(2005-2024年)
  • 《嵌入式 C 语言编码规范与工程实践个人笔记》参考华为C语言规范标准
  • 解锁 Docker:一场从入门到源码的趣味解谜之旅
  • 卸载python遇到msi文件权限不足
  • Python闭包详解:理解闭包与可变类型和不可变类型的关系
  • 新手如何高效运营亚马逊跨境电商:从传统SP广告到DeepBI智能策略
  • docker 容器管理入门教程
  • 身份全景图
  • Encoder-Decoder Model编码器-解码器模型
  • 【学习笔记】Java并发编程的艺术——第4章 Java并发编程基础
  • CMake笔记:Alias Target在哪些地方可以使用
  • 傅里叶变换+attention机制,深耕深度学习领域
  • shellgpt
  • Linux计划任务
  • 当GitHub宕机时,我们如何协作?
  • nginx入门需知(含安装教程)
  • OpenCV图像注册模块
  • Spring 三级缓存三个小问题记录
  • linux常见文件系统+用户管理+常见故障
  • Redis面试精讲 Day 21:Redis缓存穿透、击穿、雪崩解决方案
  • 纸箱拆垛:物流自动化中的“开箱密码”与3D视觉的智能革命
  • JavaScript方法借用技术详解
  • 【软件安装|1】CentOS7最新可用国内 yum 镜像源配置和Linux版MySQL8.0安装及其相关知识