大模型架构记录3-1-Gradio 入门

一 什么是 Gradio ?

www.gradio.app/

二 使用示例

三 使用方法

3.1 分享

3.2 聊天机器人

3.3 blocks 

3.4 布局使用

3.5 加组件名字

4-MyGPT


import gradio as gr
from loguru import logger
from MyGPT import MyGPT
from config import MODELS, DEFAULT_MODEL, MODEL_TO_MAX_TOKENS


mygpt = MyGPT()


def fn_prehandle_user_input(user_input, chat_history):
    # 检查输入
    if not user_input:
        gr.Warning("请输入您的问题")
        logger.warning("请输入您的问题")
        return chat_history

    # 用户消息在前端对话框展示
    chat_history.append([user_input, None])

    logger.info(f"\n用户输入: {user_input}, \n"
                f"历史记录: {chat_history}")
    return chat_history


def fn_predict(
        user_input,
        chat_history,
        model,
        max_tokens,
        temperature,
        stream):

    # 如果用户输入为空,则返回当前的聊天历史
    if not user_input:
        return chat_history

    # 打印日志,记录输入参数信息
    logger.info(f"\n用户输入: {user_input}, \n"
                f"历史记录: {chat_history}, \n"
                f"使用模型: {model}, \n"
                f"要生成的最大token数: {max_tokens}\n"
                f"温度: {temperature}\n"
                f"是否流式输出: {stream}")

    # 构建 messages 参数
    messages = user_input  # or [{"role": "user", "content": user_input}]
    if len(chat_history) > 1:
        messages = []
        for chat in chat_history:
            if chat[0] is not None:
                messages.append({"role": "user", "content": chat[0]})
            if chat[1] is not None:
                messages.append({"role": "assistant", "content": chat[1]})
    print(messages)

    # 生成回复
    bot_response = mygpt.get_completion(
        messages, model, max_tokens, temperature, stream)

    if stream:
        # 流式输出
        chat_history[-1][1] = ""
        for character in bot_response:
            character_content = character.choices[0].delta.content
            if character_content is not None:
                chat_history[-1][1] += character_content
                yield chat_history
    else:
        # 非流式输出
        chat_history[-1][1] = bot_response
        logger.info(f"历史记录: {chat_history}")
        yield chat_history


def fn_update_max_tokens(model, origin_set_tokens):
    """
    更新最大令牌数的函数。

    :param model: 要更新最大令牌数的模型。
    :param origin_set_tokens: 原始滑块组件设置的令牌数。
    :return: 包含新最大令牌数的滑块组件。
    """
    # 获取模型对应的新最大令牌数,如果没有设置则使用传入的最大令牌数
    new_max_tokens = MODEL_TO_MAX_TOKENS.get(model)
    new_max_tokens = new_max_tokens if new_max_tokens else origin_set_tokens

    # 如果原始设置的令牌数超过了新的最大令牌数,将其调整为默认值(这里设置为500,你可以根据需要调整)
    new_set_tokens = origin_set_tokens if origin_set_tokens <= new_max_tokens else 500

    # 创建新的最大令牌数滑块组件
    new_max_tokens_component = gr.Slider(
        minimum=0,
        maximum=new_max_tokens,
        value=new_set_tokens,
        step=1.0,
        label="max_tokens",
        interactive=True,
    )

    return new_max_tokens_component


with gr.Blocks() as demo:
    # 标题
    gr.Markdown("# MyGPT")
    with gr.Row(equal_height=True):
        # 左侧对话栏
        with gr.Column(scale=4):
            chatbot = gr.Chatbot(label="聊天机器人")
            user_input_textbox = gr.Textbox(label="用户输入框", value="你好")
            with gr.Row():
                submit_btn = gr.Button("Submit")
                clear_btn = gr.Button("Clear", elem_id="btn")
        # 右侧工具箱
        with gr.Column(scale=1):
            # 创建一个包含三个滑块的选项卡,用于调整模型的温度、最大长度和Top P参数
            with gr.Tab(label="参数"):
                # 选择模型
                model_dropdown = gr.Dropdown(
                    label="model",
                    choices=MODELS,
                    value=DEFAULT_MODEL,
                    multiselect=False,
                    interactive=True,
                )
                max_tokens_slider = gr.Slider(
                    minimum=0,
                    maximum=4096,
                    value=500,
                    step=1.0,
                    label="max_tokens",
                    interactive=True)
                temperature_slider = gr.Slider(
                    minimum=0,
                    maximum=1,
                    value=0.5,
                    step=0.01,
                    label="temperature",
                    interactive=True)
                stream_radio = gr.Radio(
                    choices=[
                        True,
                        False],
                    label="stream",
                    value=True,
                    interactive=True)

    # 模型有改动时,对应的 max_tokens_slider 滑块组件的最大值随之改动。
    # https://www.gradio.app/docs/dropdown
    model_dropdown.change(
        fn=fn_update_max_tokens,
        inputs=[model_dropdown, max_tokens_slider],
        outputs=max_tokens_slider
    )

    # 当用户在文本框处于焦点状态时按 Enter 键时,将触发此侦听器。
    # https://www.gradio.app/docs/textbox
    user_input_textbox.submit(
        fn=fn_prehandle_user_input,
        inputs=[
            user_input_textbox,
            chatbot],
        outputs=[chatbot]
    ).then(
        fn=fn_predict,
        inputs=[
            user_input_textbox,
            chatbot,
            model_dropdown,
            max_tokens_slider,
            temperature_slider,
            stream_radio],
        outputs=[chatbot]
    )

    # 单击按钮时触发。
    # https://www.gradio.app/docs/button
    submit_btn.click(
        fn=fn_prehandle_user_input,
        inputs=[
            user_input_textbox,
            chatbot],
        outputs=[chatbot]
    ).then(
        fn=fn_predict,
        inputs=[
            user_input_textbox,
            chatbot,
            model_dropdown,
            max_tokens_slider,
            temperature_slider,
            stream_radio],
        outputs=[chatbot]
    )

    clear_btn.click(lambda: None, None, chatbot, queue=False)


demo.queue().launch(share=True)

### MS-Swift 模型性能评测报告 #### 1. 测试环境配置 为了确保测试结果的准确性,建议在一个稳定的环境中运行。可以使用如下命令来设置CUDA设备并启动模型部署: ```bash CUDA_VISIBLE_DEVICES=0 swift deploy \ --model /root/autodl-tmp/Qwen/Qwen2.5-7B-Instruct \ --infer_backend vllm ``` 此命令指定了GPU编号为`0`用于计算资源分配,并选择了`vLLM`作为推理后端以提高效率[^1]。 #### 2. 支持的技术特性 MS-Swift集成了多种先进的训练技术和优化方法,比如但不限于LoRA、QLoRA等低秩适应算法;同也兼容诸如GPTQ这样的量化方案,这些都极大地促进了模型在不同场景下的表现提升以及硬件利用率的最大化[^2]。 #### 3. 推理速度对比分析 通过对多个数据集上的实验验证,在采用相同条件下与其他架相比,当启用vLLM加速功能,MS-Swift能够显著减少单次预测所需间,具体数值取决于所选模型大小及输入长度等因素影响。对于大规模预训练语言模型而言,这种改进尤为明显。 #### 4. 资源消耗情况统计 除了关注处理速率外,内存占用也是衡量系统效能的重要指标之一。得益于内部实现机制的优势——特别是针对Transformer架构做了专门优化后的版本——即使是在较小规模集群上也能保持较低水平的工作负载压力,从而允许更多实例并发执行而不会造成明显的性能瓶颈现象。 #### 5. Web UI交互体验评价 考虑到实际应用场景中的便捷性和易用性需求,ms-swift特别设计了一套基于Gradio构建而成的操作面板,使得即使是不具备深厚编程背景的人群也能够快速掌握如何调整参数设定完成定制化的任务流程定义工作。这不仅降低了入门门槛,也为后续深入探索提供了良好基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值