Danswer 接入 Llama 2 模型 | 免费在 Google Colab 上托管 Llama 2 API
一、前言
前面在介绍本地部署免费开源的知识库方案时,已经简单介绍过 Danswer《Danswer 快速指南:不到15分钟打造您的企业级开源知识问答系统》,它支持即插即用不同的 LLM 模型,可以很方便的将本地知识文档通过不同的连接器接入到 Danswer,然后实现本地基于知识库的语义检索。它是完全开源的(MIT 许可证)并且免费使用。
1.1、为什么选择 Danswer
默认设置下,Danswer 使用 OpenAI 的 GPT 系列模型,由于很多时候我们因为数据隐私问题需要在本地部署离线的知识库系统,需要接入本地开源的模型,今天本文将简单介绍下如何使用开源模型 Llama 2 接入 Danswer。
至于为什么选择 Danswer,简单啰嗦一下,更具体的信息可以访问官方文档:
-
它是完全开源的(MIT 许可证)并且免费使用。
-
允许您即插即用不同的 LLM 模型,例如 GPT、HuggingFace、GPT4All、Llama cpp,甚至自定义自托管模型。
-
具有开箱即用的关键功能,如文档访问控制、前端 UI、管理仪表板、轮询文档更新和灵活的部署选项。
-
与 Slack、GitHub、GoogleDrive 等其他工具的连接器的不错列表。
1.2、为什么选择 Llama 2
自从 Meta 公司发布了最新的 LLaMA 2 模型并且开源之后,在LLM领域掀起了一阵不小的浪潮,至少从各种排行榜和评估结果来看,Llama 2 在开源界要优于其它的产品,它击败了 Falcon-40B(之前最好的开源基础模型),与 GPT-3.5 相当,仅低于 GPT-4 和 PALM 2(均为闭源模型,分别由 OpenAI 和 Google 拥有)。
从以上排行榜不难看出,基本上整个列表大部分的开源模型都是由 Llama 2 衍生品组成的。
二、在 Google Colab 上托管 Llama 2 模型
Llama 2 型号有 3 种不同尺寸:7B、13B 和 70B 参数。700 亿参数版本需要多个 GPU,因此无法免费托管。在 13B 和 7B 版本中,13B 版本更强大,但需要一些压缩(量化或降低浮点精度)才能适合单个中档 GPU。幸运的是,Llama cpp 库使这变得相当简单。这里我们将以 Llama 2 13B量化模型来进行演示。
在开始之前,请确保在 Google Colab 上设置了 T4 GPU 运行时
2.1、安装依赖
-
运行 FastAPI 服务器所需的依赖项
-
通过 Ngrok 创建公共模型服务 URL 所需的依赖项
-
运行 Llama2 13B(包括量化)所需的依赖项
# 构建 Llama cpp
!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python# 如果出现依赖解析器的错误提示,可以忽略
!pip install fastapi[all] uvicorn python-multipart transformers pydantic tensorflow# 这将在 Google Colab 实例中下载并设置 Ngrok 可执行文件
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip -o ngrok-stable-linux-amd64.zip
Ngrok 用于通过公共 URL 访问 FastAPI 服务器。
用户需要创建一个免费账户并提供他们的身份验证令牌以使用 Ngrok。免费版本只允许一个本地隧道,并且身份验证令牌用于跟踪此使用限制。
在 Ngrok 设置页面上获取 Auth token,如图中红框所示
# https://dashboard.ngrok.com/signup
!./ngrok authtoken <YOUR-NGROK-TOKEN-HERE>
2.2、创建 FastAPI 应用
这里提供了一个与 Llama 2 模型交互的 API。可以根据需要在下面的代码中更改模型版本。在这个演示示例中,我们将使用 130 亿参数版本,该版本经过微调以进行指令(聊天)跟随。尽管进行了压缩,但它仍然比 70 亿变体更强大。
%%writefile app.py
from typing import Anyfrom fastapi import FastAPI
from fastapi import HTTPException
from pydantic import BaseModel
from huggingface_hub import hf_hub_download
from llama_cpp import Llama
import tensorflow as tf# 在 T4 GPU 上拟合 Llama2-13B 需要 GGML 模型
GENERATIVE_AI_MODEL_REPO = "TheBloke/Llama-2-13B-chat-GGML"
GENERATIVE_AI_MODEL_FILE = "llama-2-13b-chat.ggmlv3.q5_1.bin"model_path = hf_hub_download(repo_id=GENERATIVE_AI_MODEL_REPO,filename=GENERATIVE_AI_MODEL_FILE
)llama2_model = Llama(model_path=model_path,n_gpu_layers=64,n_ctx=2000
)# 测试推理
print(llama2_model(prompt="Hello ", max_tokens=1))app = FastAPI()# 这里定义了端点所期望的数据 JSON 格式,根据需要进行更改
class TextInput(BaseModel):inputs: strparameters: dict[str, Any] | None@app.get("/")
def status_gpu_check() -> dict[str, str]:gpu_msg = "Available" if tf.test.is_gpu_available() else "Unavailable"return {"status": "I am ALIVE!","gpu": gpu_msg}@app.post("/generate/")
async def generate_text(data: TextInput) -> dict[str, str]:try:params = data.parameters or {}response = llama2_model(prompt=data.inputs, **params)model_out = response['choices'][0]['text']return {"generated_text": model_out}except Exception as e:raise HTTPException(status_code=500, detail=str(e))
2.3、启动 FastAPI 服务器
由于需要下载模型并将其加载到 GPU 上,初始运行时间会很长。
注意:中断 Google Colab 运行时会发送 SIGINT 并停止服务器。
# 此单元格很快完成,因为它只需要启动服务器
# 服务器将开始下载模型,并需要一段时间才能启动
# 约 5 分钟
!uvicorn app:app --host 0.0.0.0 --port 8000 > server.log 2>&1 &
检查 server.log 日志以查看进度。在继续之前,请等待模型加载完成并使用下一个单元格进行检查。
# 如果看到 "Failed to connect",那是因为服务器仍在启动中
# 等待模型下载完成和服务器完全启动
# 检查 server.log 文件以查看状态
!curl localhost:8000
2.4、使用 Ngrok 为 FastAPI 服务器创建公共 URL。
重要提示:如果您通过电子邮件创建了一个账户,请验证您的电子邮件,否则下面的两个单元格将无法正常工作。
如果您通过 Google 或 GitHub 账户注册,那就没问题了。
# 这将启动 Ngrok 并创建一个公共 URL。
from IPython import get_ipython
get_ipython().system_raw('./ngrok http 8000 &')
检查下一个单元格生成的 URL,它应该显示 FastAPI 服务器正在运行,并且 GPU 可用。
要访问模型的端点,只需在 URL 后面添加 /generate
。
curl --location --request POST '<REPLACE-WITH-YOUR-NGROK-PUBLIC-URL>/generate' \
--header 'Content-Type: application/json' \
--data-raw '{"inputs": "请介绍下 Danswer 如何接入 Llama 2 模型?","parameters": {"temperature": 0.0,"max_tokens": 25}
}'
# 获取公共 URL
# 如果无法正常工作,请确保您已验证您的电子邮件。
# 然后再次运行上一个代码单元格和这个代码单元格。
!curl -s http://localhost:4040/api/tunnels | python3 -c "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
2.5、关闭服务
要关闭进程,请在一个新的单元格中运行以下命令:
!pkill uvicorn
!pkill ngrok
[Google Colab 代码]
https://colab.research.google.com/drive/1HhqGGzV-q1m0igdhpGt5Wmf8VmDiyIcn#scrollTo=liqVEsGfZPse
三、在 Danswer 中接入 Llama 2 模型
Danswer 可以通过 REST 请求向任意模型服务器发出请求。可以选择传入访问令牌。要自定义请求格式和响应处理,可能需要更新/重建 Danswer 容器。
3.1、部署 Danswer
Danswer 提供 Docker 容器,可以轻松部署在任何云上,无论是在单个实例上还是通过 Kubernetes。在本演示中,我们将使用 Docker Compose 在本地运行 Danswer。
首先拉去 danswer 代码:
git clone https://github.com/danswer-ai/danswer.git
接下来导航到部署目录:
cd danswer/deployment/docker_compose
Danswer 默认使用的模型是 GPT-3.5-Turbo,如果想使用开源的如 Llama 2 模型API,通过创建 .env 文件来覆盖一些默认值(针对 Linux 显示),将 Danswer 配置为使用新的 Llama 2 端点:
GEN_AI_MODEL_PROVIDER=custom
GEN_AI_API_ENDPOINT=<REPLACE-WITH-YOUR-NGROK-PUBLIC-URL>/generate
3.3、添加文档到 Danswer
这里我们将 Danswer 文档网站建立索引。只需要在Web连接器中添加文档URL地址即可。
3.4、从 Danswer 获取答案
单击 Danswer 徽标返回主页,现在您可以询问有关新索引文档的问题。
四、总结
本文主要介绍了如何在Google Colab上托管Llama 2模型,并将其接入Danswer。Danswer是一个开源的知识问答系统,支持不同的LLM模型,可以方便地将本地知识文档接入到Danswer,实现基于知识库的语义检索。
虽然使用 Google Colab 可以免费托管您的 LLM,但是需要注意以下几点:
-
Google Colab 更适用于开发目的,如果您想要永久端点,可能需要投资专用硬件,因为在一段时间不活动后,Google Colab 将回收实例。也可考虑在 HF 上托管。
-
免费套餐中不支持高端 GPU 如 A100。
-
在免费套餐中,每个会话最多只能申请 12 小时的实例。
五、References
[1] Danswer 代码:https://github.com/danswer-ai/danswer
[2] Danswer 文档:https://docs.danswer.dev/
相关文章:

Danswer 接入 Llama 2 模型 | 免费在 Google Colab 上托管 Llama 2 API
一、前言 前面在介绍本地部署免费开源的知识库方案时,已经简单介绍过 Danswer《Danswer 快速指南:不到15分钟打造您的企业级开源知识问答系统》,它支持即插即用不同的 LLM 模型,可以很方便的将本地知识文档通过不同的连接器接入到…...

react:路由
官方文档:https://reactrouter.com/en/main/start/overview#pending-navigation-ui 一:简单版本 先 npm i react-router-dom main.ts中内容替换为 import ReactDOM from react-dom/client import App from ./App.tsx import ./index.css import {creat…...

【AI工具】手把手带你使用Gradio分享你的模型
手把手带你使用Gradio分享你的模型 1. 快速入门2. 基本参数|支持的接口2.1 Interface类以及基础模块2.2 组件属性2.3 多输入输出组件2,4 图像组件2.5 Chatbots2.6 动态界面接口2.7 Blocks:更具灵活性和调控性2.7.1 Blocks入门2.7.2 更复杂的Blocks3. 分享自定义采样训练参考资…...

海洋专用cmocean颜色包_共22种--全平台可用
海洋专用cmocean颜色包_共22种–全平台可用 往期推荐: Python语言_matplotlib包_共80种–全平台可用 Python语言_single_color_共140种–全平台可用 R语言_RColorBrewer包–全平台可用 R语言gplots包的颜色索引表–全平台可用 R语言中的自带的调色板–五种–全平台…...

uni-app多端开发
uni-app 多端开发 一、命令创建uni-app 项目二、在微信小程序后台找到 appId 填写 appId三、运行项目四、使用 uni-ui4-1、下载4-2、自动导入4-3、ts项目下载类型校验 (uni-ui 组件库)4-3-1、下载4-3-2、配置 五、持久化 pinia六、数据请求封装七、获取组…...

Linux中固定ip端口和修改ip地址
一,更改虚拟网络编辑器 1,首先启动VMware,选择自己要更改ip或固定ip的虚拟机,并找到虚拟网络配编辑器,点击进入 2,进入之后需要点击右下角获取管理员权限后才能修改,有管理员权限之后图片如下 …...
csdn初始模板【自用】
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...

2311rust无畏并发.
原文 Rust无畏并发 Rust是为了解决两个麻烦问题: 1,如何安全系统编程 2,如何无畏并发 最初,这些问题似乎是无关的,但令惊讶的是,方法竟然是相同的:使Rust安全的相同工具也可帮助解决并发问题. 内存安全和并发错误,一般认为是代码在不应访问数据时访问数据.Rust依靠所有权为…...

阿里云中的云服务器的ubuntu中的vim没有显示行号
没有行号: 在终端输入命令: vim ~/.vimrc set nu...

Golang 在 Mac、Linux、Windows 下如何交叉编译
Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序。 GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm) 具体组合…...

如何写好一篇学术论文
目录 前言 1.标题和摘要 1.1标题 1.2摘要及关键词 1.2.1摘要 1.2.2关键词 2.正文 2.1引言 2.2问题建模 2.3研究方法及分析 2.4仿真(伪代码) 2.5实验结果及分析 2.6 总结 2.7延深 2.7.1图片处理 2.7.2审稿回复 2.7.3如何避免拒稿 2.7.4写…...

kubernetes资源监控
目录 一、资源限制 1、limitrange 2、ResourceQuota 二、metrics-server 三、图形化监控和代码行监控 1、dashboard 2、k9s 四、hpa 一、资源限制 Kubernetes采用request和limit两种限制类型来对资源进行分配。request(资源需求):即运行Pod的节点必须满足运…...

Bitget Wallet:使用 Base 链购买 ETH 的简明教程
Base 链是一种 Layer 2(L2)公链,它可以为用户提供以太坊(ETH)代币,而 Bitget Wallet 是一款多功能加密货币钱包,支持 Base 链以及其他主要区块链。...

PostgreSQL简介及安装步骤
PostgreSQL简介 PostgreSQL是一款开源的关系型数据库管理系统,具有强大的扩展性、高度的可定制性和可靠的稳定性,因此在企业级应用和开发领域中得到了广泛的应用。本文将介绍PostgreSQL的基本概念以及在各种操作系统上的安装步骤。 安装步骤 1. Window…...

《安富莱嵌入式周报》第326期:航空航天级CANopen协议栈,开源USB PD电源和功耗分析,开源EtherCAT伺服驱动板,时序绘制软件,现代机器人设计
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程: BSP视频教程第28期:CANopen协议栈专题,CANopen主从机组网实战&a…...

[Kettle] Excel输入
Excel文件采用表格的形式,数据显示直观,操作方便 Excel文件采用工作表存储数据,一个文件有多张不同名称的工作表,分别存放相同字段或不同字段的数据 数据源 物理成绩(Kettle数据集2).xls https://download.csdn.net/download/H…...

vue3+ts 项目遇到的问题和bug
1.router中使用pinia报错 pinia.mjs:1709 Uncaught Error: [🍍]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"? See https://pinia.vuejs.org/core-concep…...

【Linux】补充:进程管理之手动控制进程,以及计划任务
目录 一、手动启动进程 1、理解前台启动与后台启动 2、如何完成前台启动后台启动的切换 3、完成并行执行多个任务 4、结束进程 1、kill 2、killall 2、pkill 二、计划任务 1、at一次性计划任务 2、实操 2、周期性计划任务 1、关于设置周期性任务的配置文件以及格式…...

听说,工作能力强的项目经理都有这几个特征
大家好,我是老原。 很多项目经理每天忙忙碌碌,但是一看结果,团队业绩没有完成、人才没有培养起来、自己的管理水平和个人领导力也没有得到提升。 明明付出了很多时间和精力,结果却只收获了团队的抱怨,以及老板对你管…...

合并两个有序链表OJ
合并两个有序链表OJ 文章目录 合并两个有序链表OJ一、题目及要求二、思路分析三、代码实现 一、题目及要求 二、思路分析 其次,题目里说了新链表是通过拼接原来的结点形成的,所以说我们不需要开辟新的空间。 三、代码实现 if (list1 NULL) {return li…...

2023NOIP A层联测27 A.kotori
2023NOIP A层联测27 A.kotori 文章目录 2023NOIP A层联测27 A.kotori题目大意思路code 题目大意 琴里的飞船中有 n n n 个人,其中有 n − 1 n - 1 n−1 个通道,所以飞船的内部是一个树形结构。每个人从 1 − n 1-n 1−n 编号,编号越小代表…...

循环生成el-descriptions-item
0 后端返回数据格式 {"msg": "操作成功","code": 200,"data": {"id": 42,"contactInfo": [{"contactPerson": "张三","contactPhone": "13688888888"},{"contactP…...

【原创】java+swing+mysql爱心捐赠管理系统设计与实现
摘要: 爱心捐赠管理系统旨在管理和优化捐赠过程,提高效率,增强透明度,并鼓励更多的个人和企业参与公益捐赠,用户可以捐款或者捐物。本系统采用javaswing界面可视化技术,数据库使用mysql。 功能分析&#…...

【小技巧】WPS统计纯汉字(不计标点符号)
【小技巧】WPS统计纯汉字(不计标点符号) 首先,CtrlF打开查找页面: 选择“高级搜索”,然后勾选“使用通配符”,然后在“查找内容”后面输入:[一-﨩]。注意:一定要带“[]”和“-”且…...

【押题】24考研押题
数二选手来押24数一考研大题 1.大题必有级数。级数出在压轴题,考级数敛散性与数列极限的结合 2.数一倒数第二题65%考画不出图的三重积分,参考19年出法;35%考第一类曲面积分与空间解析几何的结合。大题不会考第二类线面积分 3.概率大题会考参数…...

前端设计模式
前端设计模式 🎨 设计模式是在软件开发中,针对常见问题的解决方案的经验总结。在前端开发中,设计模式可以帮助我们组织和管理代码,提高代码的可维护性和可扩展性。下面列举一些常见的前端设计模式: 1. 单例模式 (Sin…...

Tomcat的类加载器
详情可以参考:https://tomcat.apache.org/tomcat-10.1-doc/class-loader-howto.html 简要说明 Tomcat安装了多种类加载器,以便容器的不同部分、容器中的应用访问能够不同的类和资源。 在Java环境中,类加载器被组织为父-子树的形式。通常情况…...

汽车驾驶智能座舱太阳光模拟器老化试验
一、太阳光模拟器老化试验目的 太阳光模拟器氙光灯老化试验是一种常用的材料老化测试方法,通过模拟自然光照条件下的老化过程,评估材料的耐光性能和耐候性能其主要目的有: 1.评估材料在长时间暴露于自然光照条件下的耐久性能: 2.比较不同材料的耐光性…...

记录一次校园CTF--wp
一.第一题简单nc 这题直接nc 地址端口即可得到flags没有套路 二.第二题pwn:ezstack 这是一题栈溢出题目,查看保护: 没有开启PIE,运行下查看效果: 题目是一个文字购物游戏。 接着扔进IDA中分析: 在主函数中我们找到…...

基于减法平均算法的无人机航迹规划-附代码
基于减法平均算法的无人机航迹规划 文章目录 基于减法平均算法的无人机航迹规划1.减法平均搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用减法平均算法来优化无人机航迹规划。 …...