【书生大模型实战营】进阶岛 第6关 MindSearch 快速部署

news2024/11/14 16:30:45

文章目录

  • 【书生大模型实战营】进阶岛 第6关 MindSearch 快速部署
  • MindSearch 部署到Github Codespace 和 Hugging Face Space
  • 创建开发机 & 环境配置
  • MindSearch下载及环境配置
  • 获取硅基流动API Key
  • 作业 - 基础任务
  • 在Github codespaces 启动 MindSearch
  • 通过 Github Codespace 完成HuggingFace Space部署
  • 把刚才准备的文件都copy进来

【书生大模型实战营】进阶岛 第6关 MindSearch 快速部署

MindSearch 部署到Github Codespace 和 Hugging Face Space

和原有的CPU版本相比区别是把internstudio换成了github codespace。

随着硅基流动提供了免费的 InternLM2.5-7B-Chat 服务(免费的 InternLM2.5-7B-Chat 真的很香),MindSearch 的部署与使用也就迎来了纯 CPU 版本,进一步降低了部署门槛。那就让我们来一起看看如何使用硅基流动的 API 来部署 MindSearch 吧。

创建开发机 & 环境配置

由于HuggingFace被墙,我们通过github-codespace 的 vscode Linux 环境提交到 hugging face。打开codespace主页,选择blank template,浏览器会自动在新的页面打开一个web版的vscode。
在这里插入图片描述

MindSearch下载及环境配置

#MindSearch下载
mkdir -p /workspaces/mindsearch
cd /workspaces/mindsearch
git clone https://github.com/InternLM/MindSearch.git
cd MindSearch && git checkout b832275 && cd …

#创建环境
conda create -n mindsearch python=3.10 -y
#激活环境
conda activate mindsearch
#安装依赖
pip install -r /workspaces/mindsearch/MindSearch/requirements.txt

获取硅基流动API Key

首先打开 https://account.siliconflow.cn/login 来注册硅基流动的账号。完成注册后,打开 https://cloud.siliconflow.cn/account/ak 来准备 API Key。首先创建新 API 密钥,然后点击密钥进行复制,以备后续使用。
在这里插入图片描述

作业 - 基础任务

将 MindSearch 部署到 HuggingFace,并提供截图。(记录复现过程并截图)

在Github codespaces 启动 MindSearch

启动后端
硅基流动 API 的相关配置已经集成在了 MindSearch 中,所以我们可以直接执行下面的代码来启动 MindSearch 的后端。

export SILICON_API_KEY=第二步中复制的密钥

cd /workspaces/mindsearch/MindSearch
python -m mindsearch.app --lang cn --model_format internlm_silicon --search_engine DuckDuckGoSearch
在这里插入图片描述

启动前端
在后端启动完成后,我们打开新终端运行如下命令来启动 MindSearch 的前端。

cd /workspaces/mindsearch/MindSearch
python frontend/mindsearch_gradio.py
在这里插入图片描述

通过InternLM 启动web浏览器访问
上述同样步骤在InternLM开发机(10%A100即可)部署启动后 把 8002 端口和 7882 端口都映射到本地:

ssh -CNg -L 8002:127.0.0.1:8002 -L 7882:127.0.0.1:7882 root@ssh.intern-ai.org.cn -p 42678
然后在本地浏览器中打开 localhost:7882 即可体验啦。
在这里插入图片描述
效果

如果遇到了 timeout 的问题,可以按照 文档 换用 Bing 的搜索接口。

通过 Github Codespace 完成HuggingFace Space部署

我们首先打开 https://huggingface.co/spaces ,并点击 Create new Space。然后进入 Settings,配置硅基流动的 API Key。选择 New secrets,name 一栏输入 SILICON_API_KEY,value 一栏输入你的 API Key 的内容。

在这里插入图片描述

先新建一个目录,准备提交到 HuggingFace Space 的全部文件。

#创建新目录
mkdir -p /root/mindsearch/mindsearch_deploy
#准备复制文件
cd /root/mindsearch
cp -r /root/mindsearch/MindSearch/mindsearch /root/mindsearch/mindsearch_deploy
cp /root/mindsearch/MindSearch/requirements.txt /root/mindsearch/mindsearch_deploy
#创建 app.py 作为程序入口
touch /root/mindsearch/mindsearch_deploy/app.py
其中,app.py 的内容如下:
import json
import os

import gradio as gr
import requests
from lagent.schema import AgentStatusCode

os.system(“python -m mindsearch.app --lang cn --model_format internlm_silicon &”)

PLANNER_HISTORY = []
SEARCHER_HISTORY = []

def rst_mem(history_planner: list, history_searcher: list):
‘’’
Reset the chatbot memory.
‘’’
history_planner = []
history_searcher = []
if PLANNER_HISTORY:
PLANNER_HISTORY.clear()
return history_planner, history_searcher

def format_response(gr_history, agent_return):
if agent_return[‘state’] in [
AgentStatusCode.STREAM_ING, AgentStatusCode.ANSWER_ING
]:
gr_history[-1][1] = agent_return[‘response’]
elif agent_return[‘state’] == AgentStatusCode.PLUGIN_START:
thought = gr_history[-1][1].split(‘')[0] if agent_return['response'].startswith('’):
gr_history[-1][1] = thought + ‘\n’ + agent_return[‘response’]
elif agent_return[‘state’] == AgentStatusCode.PLUGIN_END:
thought = gr_history[-1][1].split('')[0] if isinstance(agent_return['response'], dict): gr_history[-1][ 1] = thought + '\n' + f'json\n{json.dumps(agent_return[“response”], ensure_ascii=False, indent=4)}\n' # noqa: E501 elif agent_return['state'] == AgentStatusCode.PLUGIN_RETURN: assert agent_return['inner_steps'][-1]['role'] == 'environment' item = agent_return['inner_steps'][-1] gr_history.append([ None, f"json\n{json.dumps(item[‘content’], ensure_ascii=False, indent=4)}\n```"
])
gr_history.append([None, ‘’])
return

def predict(history_planner, history_searcher):

def streaming(raw_response):
    for chunk in raw_response.iter_lines(chunk_size=8192,
                                         decode_unicode=False,
                                         delimiter=b'\n'):
        if chunk:
            decoded = chunk.decode('utf-8')
            if decoded == '\r':
                continue
            if decoded[:6] == 'data: ':
                decoded = decoded[6:]
            elif decoded.startswith(': ping - '):
                continue
            response = json.loads(decoded)
            yield (response['response'], response['current_node'])

global PLANNER_HISTORY
PLANNER_HISTORY.append(dict(role='user', content=history_planner[-1][0]))
new_search_turn = True

url = 'http://localhost:8002/solve'
headers = {'Content-Type': 'application/json'}
data = {'inputs': PLANNER_HISTORY}
raw_response = requests.post(url,
                             headers=headers,
                             data=json.dumps(data),
                             timeout=20,
                             stream=True)

for resp in streaming(raw_response):
    agent_return, node_name = resp
    if node_name:
        if node_name in ['root', 'response']:
            continue
        agent_return = agent_return['nodes'][node_name]['detail']
        if new_search_turn:
            history_searcher.append([agent_return['content'], ''])
            new_search_turn = False
        format_response(history_searcher, agent_return)
        if agent_return['state'] == AgentStatusCode.END:
            new_search_turn = True
        yield history_planner, history_searcher
    else:
        new_search_turn = True
        format_response(history_planner, agent_return)
        if agent_return['state'] == AgentStatusCode.END:
            PLANNER_HISTORY = agent_return['inner_steps']
        yield history_planner, history_searcher
return history_planner, history_searcher

with gr.Blocks() as demo:
gr.HTML(“”“

MindSearch Gradio Demo

”“”)
gr.HTML(“”“

MindSearch is an open-source AI Search Engine Framework with Perplexity.ai Pro performance. You can deploy your own Perplexity.ai-style search engine using either closed-source LLMs (GPT, Claude) or open-source LLMs (InternLM2.5-7b-chat).

”“”)
gr.HTML(“”"

🔗 GitHub
📄 Arxiv
📚 Hugging Face Papers
🤗 Hugging Face Demo

“”")
with gr.Row():
with gr.Column(scale=10):
with gr.Row():
with gr.Column():
planner = gr.Chatbot(label=‘planner’,
height=700,
show_label=True,
show_copy_button=True,
bubble_full_width=False,
render_markdown=True)
with gr.Column():
searcher = gr.Chatbot(label=‘searcher’,
height=700,
show_label=True,
show_copy_button=True,
bubble_full_width=False,
render_markdown=True)
with gr.Row():
user_input = gr.Textbox(show_label=False,
placeholder=‘帮我搜索一下 InternLM 开源体系’,
lines=5,
container=False)
with gr.Row():
with gr.Column(scale=2):
submitBtn = gr.Button(‘Submit’)
with gr.Column(scale=1, min_width=20):
emptyBtn = gr.Button(‘Clear History’)
def user(query, history):
    return '', history + [[query, '']]

submitBtn.click(user, [user_input, planner], [user_input, planner],
                queue=False).then(predict, [planner, searcher],
                                  [planner, searcher])
emptyBtn.click(rst_mem, [planner, searcher], [planner, searcher],
               queue=False)

demo.queue()
demo.launch(server_name=‘0.0.0.0’,
server_port=7860,
inbrowser=True,
share=True)

在最后,将 /root/mindsearch/mindsearch_deploy 目录下的文件(使用 git)提交到 HuggingFace Space 即可完成部署了。

部署到 HuggingFace Space
接下来创建一个有写权限的token。
在这里插入图片描述
从huggingface把空的代码仓库clone到codespace。在Codespaces shell 命令行窗口中执行:

cd /workspaces/codespaces-blank
git clone https://zhangdeqiang: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@huggingface.co/spaces/zed5337/MyMindSearch
codespace就是本地仓库,huggingface space是远程仓库,接下来使用方法就和常规的git一样了。

cd /workspaces/codespaces-blank/MyMindSearch

把刚才准备的文件都copy进来

cp -r /workspaces/mindsearch/mindsearch_deploy/* .

把上述代码提交到huggingface space。

在这里插入图片描述
后续一样就不在多做赘述。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring框架4 - bean加载

本节内容&#xff1a;beanFactory.getBean("user"); Testvoid testGetBean() {Gun gun beanFactory.getBean("m416", Gun.class);log.info("gun{}", gun);} public <T> T getBean(String name, Class<T> requiredType) throws Bea…

2024年威胁暴露管理两大新趋势

文章目录 前言一、威胁暴露管理的两大新类别二、EAP:减少对CVSS的依赖三、AEV:锁定现实威胁四、CTEM实施面临的挑战与应对策略五、主动风险管理的新时代前言 2024年,安全运营(SecOps)领域迎来重大变革。根据Gartner最新发布的《安全运营技术成熟度曲线》报告,持续威胁暴…

一款人脸识别的芯片内部

三年前在一家3D人脸识别的芯片公司&#xff0c;先后做过两个稍具规模的芯片项目&#xff0c;因为各种原因&#xff0c;这些最终都没有上市&#xff0c;成为沉寂在实验室的产物。但是这些芯片的总体设计都颇具匠心&#xff0c;自己在当时也很有触动&#xff0c;现在拿出一点来供…

揭秘难以复现Bug的解决之道:堆栈分析实战

目录 引言 友情提示难以复现的Bug之痛 寄存器(SP、LR)详解 SP寄存器&#xff1a;堆栈的指路明灯LR寄存器&#xff1a;函数调用与异常处理的桥梁 问题分析与解决流程揭秘 保存现场分析堆栈数据 堆栈结构入栈顺序 案例 J-Link工具 常用命令保存RAM数据到本地 分析栈基本信息 分…

【最新华为OD机试E卷】最大报酬(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

【Python】企业排名、地域分布与词云分析可视化

目录 数据处理 Pyecharts 各国数量 分布地图 数量占比 城市分布 营业收入 利润转化 数据处理 2021世界五百强企业数据&#xff0c;包含公司名称、公司链接、营业收入(百万美元)、利润(百万美元)、国家等信息。数据集下载&#xff1a;Python企业排名、地域分布与词云分…

opencv-python 图像增强十七:泊松图像融合

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、概述二&#xff0c;实现&#xff1a; 前言 在深入探讨图像处理与计算机视觉领域的过程中&#xff0c;我们不禁对图像融合技术的精妙与实用性感到着迷。图像…

物联网之云平台架构

一&#xff0c;一个典型的物联网云平台 一个典型的物联网&#xff08;IoT&#xff09;云平台需要实现多个功能&#xff0c;以支持物联网设备的接入、数据处理、设备管理、实时控制等需求。 &#xff08;一&#xff09;核心功能 1&#xff0c;设备接入与管理&#xff1a; - 设…

【达梦数据库】DBeaver连接达梦数据库

打开 DBeaver&#xff0c;新建驱动管理器 新建驱动管理器&#xff0c;配置信息如下 添加库文件&#xff0c;jar包使用项目上使用的jdbc驱动包即可&#xff0c;找到本地maven仓库jar位置进行添加。 <dependency><groupId>com.dameng</groupId><artifact…

打开配置好的gee的jupyter Lab环境

目录 打开anconda 打开箭头下的cmd环境&#xff0c;输入jupyter lab

Spring MVC 八股文

目录 重点 SpringMVC的工作原理 Spring MVC 拦截器 Spring MVC 的拦截器和 Filter 过滤器有什么差别&#xff1f; 基础 什么是SpringMVC SpringMVC的优点 Spring MVC的核心组件 Spring MVC的常用注解由有哪些 Controller 注解有什么用 重点 SpringMVC的工作原理 1、客…

人脸静态活体检测(高精度版) API 对接说明

人脸静态活体检测&#xff08;高精度版&#xff09; API 对接说明 本文将介绍人脸静态活体检测&#xff08;高精度版&#xff09;API 对接说明&#xff0c;它可用于对用户上传的静态图片进行防翻拍活体检测&#xff0c;以判断是否是翻拍图片。 接下来介绍下 人脸静态活体检测…

浅谈sizeof() 函数在Arduino中的使用

下面浅谈 sizeof() 函数在Arduino中的使用 注意&#xff1a;这里用sizeof(str[2])&#xff0c;sizeof(str[0])&#xff0c;sizeof(str[1])都是一样的 String str[6]{"abc","defg","hijk","lm","n"}; int num; void setup…

C++项目详细分析_WebServer

前言 项目地址 项目介绍 源码详细分析 项目路径如下&#xff1a; 1.webserver.cpp 头文件和构造函数 #include "webserver.h"WebServer::WebServer() {// http_conn类对象users new http_conn[MAX_FD];// root文件夹路径char server_path[200];getcwd(server…

【C++】N卡无法录制,如何下载C++

N卡无法录制&#xff0c;如何下载C C 官方下载路径&#xff1a; https://www.microsoft.com/zh-cn/download/details.aspx?id48145&134b2bb0-86c1-fe9f-d523-281faef416951&751be11f-ede8-5a0c-058c-2ee190a24fa6True 第一步 检查N卡驱动是不是最新版本 第二步 下载…

拓扑结构_替代SN6505推挽式低噪声隔离变压驱动器输出功率1-3W

PC6505 是一款专门为小体积、低待机功耗微功率隔离电源而设计的推挽式变压器驱动器&#xff0c;其外围只需匹配简单的输入输出滤波电容、隔离变压器和整流电路&#xff0c;即可实现 3.3V 或 5V 输入、3.3V~24V 输出、输出功率 1~3W 的隔离电源。 PC6505 芯片内部集成振荡器&am…

简单的棒棒图绘制教程

原文教程链接&#xff1a;R 语言绘图 | GO、KEGG等富集棒棒图 往期部分文章 1. 最全WGCNA教程&#xff08;替换数据即可出全部结果与图形&#xff09; WGCNA分析 | 全流程分析代码 | 代码一 WGCNA分析 | 全流程分析代码 | 代码二 WGCNA分析 | 全流程代码分享 | 代码三 WGC…

stun和trun

在 WebRTC 中&#xff0c;STUN&#xff08;Session Traversal Utilities for NAT&#xff09;和 TURN&#xff08;Traversal Using Relays around NAT&#xff09;是用于NAT穿透的两种不同的技术&#xff0c;它们解决的问题不同&#xff0c;因此在某些情况下需要同时使用。 ST…

VM虚拟机:虚拟机能ping通主机,主机ping不通虚拟机,永久解决办法。

最近在安装VM虚拟机的时候,出现了虚拟机能ping通主机,主机ping不通虚拟机。着实令人恶心,尤其是虚拟机在设置网络的时候,网上五花八门,修改什么配置的都有,最多的就是修改宿主机的ipv4,这种我个人感觉不可取。宿主机不要乱改配置,需要修改尽量在虚拟机中修改即可。 还需…

el-time-select 动态增加时间

<template><div><div v-for"(item, index) in timeSlots" :key"index"><el-time-select placeholder"起始时间" v-model"item.startTime" :picker-options"{start: 00:00,step: 00:15,end: 23:59,}"&g…