A newer version of the Gradio SDK is available:
5.13.0
「streamlit」快速搭建你的算法demo
在搭建demo之前,首先得做好这些准备工作:
- 模型训练完毕
- 模型的入参确定
- 安装streamlit库,
pip install streamlit
就可以安装。
streamlit脚本的启动方式是 streamlit run demo.py
,很简单就启动了一个demo页面,页面会随着脚本代码的改变实时刷新的。所以在没有经验的时候,可以创建一个demo.py的文件,照着下面的教程一步一步添加代码,看页面的展示情况。下面开始上干货,具体细节在代码注释中有说明!
第一步 导包
import streamlit as st
# 其他包更具你的需要导入
streamlit是一个用于构建机器学习、深度学习、数据可视化demo的python框架。它不需要你有web开发的经验,会写python就可以高效的开发你的demo。
第二步 页面导航信息以及布局配置
st.set_page_config(
page_title="余元医疗问答", # 页面标签标题
page_icon=":shark:", # 页面标签图标
layout="wide", # 页面的布局
initial_sidebar_state="expanded", # 左侧的sidebar的布局方式
# 配置菜单按钮的信息
menu_items={
'Get Help': 'https://www.extremelycoolapp.com/help',
'Report a bug': "https://www.extremelycoolapp.com/bug",
'About': "# This is a header. This is an *extremely* cool app!"
}
)
这一步可以省略,如果想让app更加个性化,可以添加这些设置。
第三步 设置demo标题
st.title('Demo for MedicalQA')
streamlit的每一个小组件对应于页面都有一个默认的样式展示。
第四步 配置demo的参数
# 此处是用的sidebar,侧边栏作为参数配置模块
st.sidebar.header("参数配置")
# 这里是在sidebar里面创建了表单,每个表单一定有一个标题和提交按钮
sbform = st.sidebar.form("固定参数设置")
# slider是滑动条组建,可以配置数值型参数
n_sample = sbform.slider("设置返回条数",min_value=1,max_value=10,value=3)
text_length = sbform.slider('生成长度:',min_value=32,max_value=512,value=64,step=32)
text_level = sbform.slider('文本多样性:',min_value=0.1,max_value=1.0,value=0.9,step=0.1)
# number_input也可以配置数值型参数
model_id = sbform.number_input('选择模型号:',min_value=0,max_value=13,value=13,step=1)
# selectbox选择组建,只能选择配置的选项
trans = sbform.selectbox('选择翻译内核',['百度通用','医疗生物'])
# 提交表单的配置,这些参数的赋值才生效
sbform.form_submit_button("提交配置")
# 这里是页面中的参数配置,也是demo的主体之一
form = st.form("参数设置")
# 本demo是qa demo,所以要录入用户的文本输入,text_input组建可以实现
input_text = form.text_input('请输入你的问题:',value='',placeholder='例如:糖尿病的症状有哪些?')
form.form_submit_button("提交")
以上就把demo的参数基本配置完成了。
第五步 模型预测
# 定义一个前向预测的方法
# @st.cache(suppress_st_warning=True)
def generate_qa(input_text,n_sample,model_id='7',length=64,translator='baidu',level=0.7):
# 这里我们是把模型用fastapi搭建了一个api服务
URL = 'http://192.168.190.63:6605/qa'
data = {
"text":input_text,"n_sample":n_sample,
"model_id":model_id,"length":length,
'translator':translator,'level':level
}
r = requests.get(URL,params=data)
return r.text
# 模型预测结果
results = generate_qa(input_text,n_sample,model_id=str(model_id),
translator=translator,length=text_length,level=text_level)
这里说明一下,由于demo展示机器没有GPU,所以模型部署采用的是Fastapi部署在后台的。如果demo展示的机器可以直接部署模型,这里可以直接把模型预测的方法写在这里,不需要另外部署模型,再用api的方式调用。这样做有一个值得注意的地方,因为streamlit的代码每一次运行,都是从头到尾执行一遍,就导致模型可能会重复加载,所以这里需要用到st.cache组建,当内容没有更新的时候,会把这一步的结果缓存,而不会重新执行。保证了效率不会因此而下降。
第六步 结果展示
with st.spinner('老夫正在思考中🤔...'):
if input_text:
results = generate_qa(input_text,n_sample,model_id=str(model_id),
translator=translator,length=text_length,level=text_level)
for idx,item in enumerate(eval(results),start=1):
st.markdown(f"""
**候选回答「{idx}」:**\n
""")
st.info('中文:%s'%item['fy_next_sentence'])
st.info('英文:%s'%item['next_sentence'])
streamlit对不同格式的内容展示,有丰富的组建,对于文本可以用st.markdown
组建以及st.text
和st.write
展示。更多组建和功能可以参考官方文档:https://docs.streamlit.io
至此,一个完整的demo展示就完成了。效果图如下:
完整的代码可以参考:Fengshenbang-LM/fengshen/examples/FastDemo/YuyuanQA.py