模拟多模态大模型gradio使用教程

文章目录

  • 前言
  • 一、使用change监听demo
    • 1、代码
    • 3、网页结果显示
    • 4、输入信息结果显示
  • 二、Button功能的demo
    • 1、代码
    • 2、结果显示
    • 3、变换参数结果显示
  • 三、参数gr.Slider滑动demo
    • 1、代码
    • 2、结果显示
    • 3、具有下拉参数代码
    • 4、具有下拉结果显示
  • 四、模拟多模态大模型网页demo
    • 1、代码
    • 2、界面显示内容
    • 3、函数解读
      • gr.Markdown函数
      • gr.Image(type="pil")函数
      • gr.Textbox函数
      • gr.Button("clear")函数
      • gr.Examples函数
    • 4、输入信息页面显示


前言

最近,在看多模态推理模块,涉及到gradio相关用法。介于此,我将介绍网页界面gradio如何与大模型结合使用,实现与模型交互。我主要用到gr.Row()与gr.Column()方法实现界面部署,使用button方法触发事件,以及如何界面输入或输出使用图片等内容。读懂该部分基本已可实现大模型界面基本设置,也能更易解读别人源码。


一、使用change监听demo

我使用change使用blocks创建网页方法,使用Markdown给出网页显示(如下图),使用Textbox构建文本,placeholder这个为文本内的提示。在使用change直接监听,实际直接调用welcome函数,直接给到out。

1、代码

import gradio as gr
def welcome(name):return f"Welcome to Gradio, your input:{name}!"
with gr.Blocks() as demo:gr.Markdown("""# 欢迎使用!Start typing below to see the output.""")inp = gr.Textbox(placeholder="your input here")  # 文本框定义类型与提示out = gr.Textbox()  # 这个就是定义类型inp.change(welcome, inp, out)  # 输入为inp,通过welcome函数调用返回out,而change是监听,就是不需要点击直接调用函数执行给出结果out
def demo_one():# demo.launch()  # 这个是本地使用demo.launch(server_name='192.168.1.92', server_port=8080)  # 局域网ip共享访问,若外网访问需托管if __name__ == "__main__":demo_one()
## 2、参数说明
change参数说明如下:```json
fn:函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应该返回单个值或一个值元组,其中元组中的每个元素对应一个输出组件。
inputs:用作输入的组件列表,如果函数不需要输入,应该是一个空列表。
outputs:用作输出的组件列表,如果函数不返回输出,应该是一个空列表。
api_name:字符串,用于在API文档中公开该端点。
status_tracker:无,预留参数。
scroll_to_output:布尔值,如果为True,在完成时将滚动到输出组件。
show_progress:字符串,控制是否显示进度动画。
queue:布尔值,如果为True,将在队列中排队请求(如果已启用队列)。如果为False,即使启用了队列,也不会将此事件放入队列。如果为None,则使用Gradio应用的队列设置。
batch:布尔值,如果为True,函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表应该具有相等的长度(最大长度为max_batch_size)。然后,函数必须强制返回一个元组列表(即使只有一个输出组件),元组中的每个列表对应一个输出组件。
max_batch_size:整数,如果从队列调用此方法,最大批量处理输入的数量(仅当batch=True时有效)。
preprocess:布尔值,如果为False,则在运行’fn’之前不会运行组件数据的预处理(例如,如果使用Image组件调用此方法,则保留其作为base64字符串)。
postprocess:布尔值,如果为False,则在将’fn’的输出返回给浏览器之前不会运行组件数据的后处理。
cancels:其他事件的字典或列表,当触发此监听器时取消其他事件。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消

3、网页结果显示

在这里插入图片描述

4、输入信息结果显示

在这里插入图片描述

二、Button功能的demo

1、代码

这个demo在gr.Blocks中使用了title与宽度等参数,使用Button点击方式实现函数调用,其代码如下:

def demo_two():import gradio as grblock_css = """#buttons button {min-width: min(120px,100%);}"""def greet(name):return "你好 " + name + "!"with gr.Blocks(title='LLava-owen', theme=gr.themes.colors.green,css=block_css) as demo:name = gr.Textbox(label="姓名")output = gr.Textbox(label="问候输出")greet_btn = gr.Button("生成")greet_btn.click(fn=greet, inputs=name, outputs=output, api_name="greet")demo.launch(server_name='192.168.1.92', server_port=8080)

其中theme=gr.themes.Base()就是修改主题的,有以下几种情况:

gr.themes.Base() 是一个基础主题,它提供了一个简单的外观,可以作为您创建自定义主题的起点。
gr.themes.Default() 是 Gradio 的默认主题,它提供了一个现代、简洁的外观。
gr.themes.Glass() 是一个玻璃主题,它提供了一种半透明的外观。
gr.themes.Monochrome() 是一个单色主题,它提供了一种简洁、黑白的外观。
gr.themes.Soft() 是一个柔和主题,它提供了一种温和、柔和的外观。

2、结果显示

结果图如下:

在这里插入图片描述

3、变换参数结果显示

比如使用gr.themes.Glass()变成如下:

在这里插入图片描述

三、参数gr.Slider滑动demo

1、代码

直接给出代码,主要使用gr.Slider方法实现,其源码如下:

def demo_two():import gradio as grblock_css = """#buttons button {min-width: min(120px,100%);}"""def greet(name):return "你好 " + name + "!"with gr.Blocks(title='LLava-owen', css=block_css) as demo:name = gr.Textbox(label="姓名")output = gr.Textbox(label="问候输出")greet_btn = gr.Button("生成")greet_btn.click(fn=greet, inputs=name, outputs=output, api_name="greet")# with gr.Accordion("Parameters", open=False) as parameter_row:temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.2, step=0.1, interactive=True,label="Temperature", )top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, step=0.1, interactive=True, label="Top P", )max_output_tokens = gr.Slider(minimum=0, maximum=1024, value=512, step=64, interactive=True,label="Max output tokens", )demo.launch(server_name='192.168.2.92', server_port=8080)

2、结果显示

在这里插入图片描述

3、具有下拉参数代码

需要替换上面代码(如下)进行修改,即可实现具有下拉功能。

temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.2, step=0.1, interactive=True,label="Temperature", )top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, step=0.1, interactive=True, label="Top P", )max_output_tokens = gr.Slider(minimum=0, maximum=1024, value=512, step=64, interactive=True,label="Max output tokens", )

将上面代码替换:

        with gr.Accordion("Parameters", open=False) as parameter_row:temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.2, step=0.1, interactive=True,label="Temperature", )top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, step=0.1, interactive=True, label="Top P", )max_output_tokens = gr.Slider(minimum=0, maximum=1024, value=512, step=64, interactive=True,label="Max output tokens", )

4、具有下拉结果显示

在这里插入图片描述

四、模拟多模态大模型网页demo

1、代码

这里,我直接介绍如何在网页界面布局,主要用到gr.Row()与gr.Column()方法实现,也介绍如何使用button方法触发事件,以及如何界面输入或输出使用图片等内容。读懂该部分基本已可实现大模型界面基本设置,也能更易解读别人源码。其详细代码如下:

import gradio as gr
import oscur_dir = os.path.dirname(os.path.abspath(__file__))
examples = [["图像描述了一个丰富场景,能告诉我们很多信息。","你获得了什么?",f"{cur_dir}/gradio_web/1.jpg"],["Gradio 做了一件事情,就是将这三个部分封装到一个 python 接口里,用户通过实现其封装的接口,将自己训练的算法模型以 web 服务的形式展现给大众使用。","Gradio是干什么的",f"{cur_dir}/gradio_web/2.jpg"]]#预测函数
def custom_predict(context, question,img):# 这个函数是加载模型函数# answer_result = model(context=context, question=question)answer = "模型输出answer,假设为输入question:"+ questionscore = "模型输出score,假设为输入context:"+ contextreturn answer, score, img#清除输入输出
def clear_input():return "", "", "", "",""#构建Blocks上下文
with gr.Blocks(title='demo') as demo:gr.Markdown("# 这里输入指定不变内容")gr.Markdown("模拟大模型使用gradio方法demo")# 我做一行排列一个图像与输入内容,那么我使用Row()实现行,再使用2个列即可实现一行2列排序with gr.Row():with gr.Column():imagebox = gr.Image(type="pil")with gr.Column():    # 列排列,就是一列排列多少个context = gr.Textbox(label="context")question = gr.Textbox(label="question")# 下一个使用行排列,搞2个Button键,用于控制某些事件触发with gr.Row():       # 行排列,就是一行排列多少个clear = gr.Button("clear")submit = gr.Button("submit")with gr.Row():with gr.Column(scale=1):    # 列排列answer = gr.Textbox(label="answer")score = gr.Label(label="score")with gr.Column(scale=2):output_img = gr.Image(type="pil")# 上面已经构建了context, question, answer, score,imagebox,output_img等模块,下面可以通过函数任意组合,输入输出可以是列表指定。# 为创建的button键构造执行命令,绑定submit点击函数submit.click(fn=custom_predict, inputs=[context, question, imagebox], outputs=[answer, score, output_img])# 绑定clear点击函数,使用clear_input函数,让其返回为空即可清除,则ouputs指定为空模块即可clear.click(fn=clear_input, inputs=[], outputs=[context, question, answer, score, output_img])gr.Examples(examples, inputs=[context, question, imagebox])gr.Markdown("继续使用Markdown构建页面固定文字:感兴趣的小伙伴阅读")demo.launch(server_name='192.168.2.91', server_port=8081,share=True)

2、界面显示内容

在不输入任何命令执行界面显示如下:
在这里插入图片描述

3、函数解读

gr.Markdown函数

用于界面展示内容固定语句,使用这个函数。但也存在布局。

gr.Image(type=“pil”)函数

用于构建图像模块,若在输入则可载入图片,若在输出则无法载入。

gr.Textbox函数

构建文本框内容

gr.Button(“clear”)函数

构架按键按钮,用于触发事件,这个与clear.click使用,内部是一个函数、输入、输出。

gr.Examples函数

将输入按照subit方式,即可调用,我理解应该是根据输入调用函数

注意:都是模块,需如何使用需组合,模块都遵循排序。

4、输入信息页面显示

输入图像与context内容,点击submit显示如下图:
在这里插入图片描述
使用案列图像显示如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/301523.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习300问】59、计算图是如何帮助人们理解反向传播的?

在学习神经网络的时候,势必会学到误差反向传播,它对于神经网络的意义极其重大,它是训练多层前馈神经网络的核心算法,也是机器学习和深度学习领域中最为重要的算法之一。要正确理解误差反向传播,不妨借助一个工具——计…

测开面经(pytest测试案例,接口断言,多并发断言)

pytest对用户登录接口进行自动化脚本设计 a. 创建一个名为"test_login.py"的测试文件,编写以下测试脚本 import pytest import requests# 测试用例1:验证登录成功的情况 # 第一个测试用例验证登录成功的情况,发送有效的用户名和密…

linux:du和df区别

文章目录 1. 概述2. du 命令2. df 命令3. 区别总结 1. 概述 du 和 df 都是 Linux 系统中用于查看磁盘空间使用情况的命令,但它们的功能和用法有所不同。 2. du 命令 du 是 “disk usage” 的缩写,用于显示文件或目录的磁盘使用情况。du 命令用于查看指…

Redis客户端

2.Redis客户端 安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括: 命令行客户端图形化桌面客户端编程客户端 2.1.Redis命令行客户端 Redis安装完成后就自带了命令行客户端:redis-…

二分查找 -- 力扣(LeetCode)第704题

题目 https://leetcode.cn/problems/binary-search/description/ 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例…

计算机网络针对交换机的配置

实验 目的 交换机的基本配置,交换机VLAN配置 实验条件 Windows,Cisco packet tracer 实验 内容 交换机的基本配置,交换机VLAN配置 实验 过程 一、交换机的基本配置 进入特权模式 Switch>enable 进入配置模式 Switch#configure ter…

腾讯电商运营起来竟然这么简单!视频号小店操作玩法一文详解!

大家好,我是电商小布。 在新型电商玩法的兴起下,很多的平台都在电商行业内分到了一杯羹。 腾讯自然也就坐不住了,背靠自身的视频号平台,推出了视频号小店这个项目。 有很多的小伙伴想要趁着这个初期阶段,来加入到其…

数据结构与算法:哈希表

目录 1.哈希表和哈希 1.1.知识引入 1.2.为什么需要哈希表呢? 2.简易的哈希表 2.1.哈希表的基础结构 2.2.如何实现基础的哈希表 2.2.1.增 2.2.2.删 2.2.3.查 2.3.泛型编程下的哈希表 3.简易的哈希桶 1.哈希表和哈希 1.1.知识引入 哈希表(Hash …

代码随想录-算法训练营day02【滑动窗口、螺旋矩阵】

专栏笔记:https://blog.csdn.net/weixin_44949135/category_10335122.html https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG?uc71ed002e4554fee8c262b2a4a4935d8977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结 建议…

【C++进阶】用哈希实现unordered_set和unordered_map的模拟

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:c大冒险 总有光环在陨落,总有新星在闪烁 前言: 之前我…

烧坏两块单片机,不知道原因?

没有看你的原理图,以下是造成烧毁芯片的几个环节: 1. 最大的可能性是你的单片机电机控制输出与电机驱动电路没有隔离。 我的经验,使用STM32控制电机,无论是直流电机脉宽调制,还是步进电机控制,控制电路与…

Ubuntu 20.04.06 PCL C++学习记录(十六)

[TOC]PCL中点云分割模块的学习 学习背景 参考书籍&#xff1a;《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,&#xff0c;PCL版本为1.10.0&#xff0c;CMake版本为3.16 学习内容 用一组点云数据做简单的平面的分割 源代码及所用函数 源代码 #include<iostr…

机器学习笔记 - 深度学习遇到超大图像怎么办?使用 xT 对极大图像进行建模论文简读

作为计算机视觉研究人员,在处理大图像时,避免不了受到硬件的限制,毕竟大图像已经不再罕见,手机的相机和绕地球运行的卫星上的相机可以拍摄如此超大的照片,遇到超大图像的时候,我们当前最好的模型和硬件都会达到极限。 所以通常我们在处理大图像时会做出两个次优选择之一:…

【频繁模式挖掘】FP-Tree算法(附Python实现)

一、实验内容简介 该实验主要使用频繁模式和关联规则进行数据挖掘&#xff0c;在已经使用过Apriori算法挖掘频繁模式后&#xff0c;这次使用FP-tree算法来编写和设计程序&#xff0c;依然使用不同规模的数据集来检验效果&#xff0c;最后分析和探讨实验结果&#xff0c;看其是…

微服务架构下,如何通过弱依赖原则保障系统高可用?

前言 当我初次接触高可用这个概念的时候&#xff0c;对高可用的【少依赖原则】和【弱依赖原则】的边界感模糊&#xff0c;甚至有些“傻傻分不清楚”。这两个原则都关注降低模块之间的依赖关系&#xff0c;但它们之间的确存在某些差异。 那么&#xff0c;「少依赖原则」和「弱…

15.队列集

1.简介 在使用队列进行任务之间的“沟通交流”时&#xff0c;一个队列只允许任务间传递的消息为同一种数据类型&#xff0c;如果需要在任务间传递不同数据类型的消息时&#xff0c;那么就可以使用队列集。FreeRTOS提供的队列集功能可以对多个队列进行“监听”&#xff0c;只要…

Unity类银河恶魔城学习记录12-4 p126 Item Tooltip源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using System.Collections; using System.Collections.Generic; usi…

xilinx AXI CAN驱动开发

CAN收发方案有很多&#xff0c;常见的解决方案通过是采用CAN收发芯片&#xff0c;例如最常用的SJA1000,xilinx直接将CAN协议栈用纯逻辑实现&#xff0c;AXI CAN是其中一种&#xff1b; 通过这种方式硬件上只需外接一个PHY芯片即可 上图加了一个电平转换芯片 软件设计方面&…

Scala大数据开发

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Scala简述 在此&#xff0c;简要介绍 Scala 的基本信息和情况。 Scala释义 Scala 源自于英语单词scalable&#xff0c;表示可伸缩的、可扩展的含义。 Scala作者 Scala编…

【考研数学】张宇《1000题》刷不动,做不下来怎么办❓

学长肯定是用着效果不错才给你推荐的&#xff0c;但是习题册有很多&#xff0c;各自有不同的风格&#xff0c;1000题适不适合你的情况是你要考虑的点。 选书还是要结合自身的情况&#xff0c;如果当前用着不错的话&#xff0c;继续完全没有问题&#xff0c;核心就是要从自身的…