LLM(九)| 使用LlamaIndex本地运行Mixtral 8x7大模型

news2024/11/18 9:48:08

       欧洲人工智能巨头Mistral AI最近开源Mixtral 8x7b大模型,是一个“专家混合”模型,由八个70亿参数的模型组成。Mistral AI在一篇博客文章(https://mistral.ai/news/mixtral-of-experts/)介绍了Mixtral 8x7b,在许多基准上与GPT-3.5和Llama2 70b相匹配甚至是超越。

下面我们使用LlamaIndex在本地部署一下Mixtral 8x7b大模型:

步骤1:安装Ollama

       以前,安装并运行本地模型是一件巨大的痛苦,但随着Ollama的发布,这变得简单了!它适用于MacOS和Linux(很快就会在Windows上使用,尽管你现在可以通过Windows Subsystem for Linux在Windows中使用它),是开源的,可以免费下载(https://ollama.ai/download)。

       下载后,只需一个命令即可获得Mixtral:

ollama run mixtral

       第一次运行此命令时,需要下载模型,这可能需要很长时间。运行时需要48GB的RAM,如果没有这么大的内存,可以安装Mistral 7b模型,安装方式如下:

ollama run mistral

PS:下面步骤使用Mixtral,但Mistral同样也可以。

步骤2:安装依赖项

pip install llama-index qdrant_client torch transformers

第3步:简单测试

       如果已经运行了Ollama并正确安装了LlamaIndex,使用如下脚本来测试一下是否正常:

# Just runs .complete to make sure the LLM is listeningfrom llama_index.llms import Ollamallm = Ollama(model="mixtral")response = llm.complete("Who is Laurie Voss?")print(response)

步骤4:加载数据并对其进行索引

        可以处理任何数据,这里使用(https://www.dropbox.com/scl/fi/6sos49fluvfilj3sqcvoj/tinytweets.json?rlkey=qmxlaqp000kmx8zktvaj4u1vh&dl=0)数据,并把数据存储在开源Qdrant矢量数据库中。创建一个新的python文件,并加载我们所有的依赖项:

from pathlib import Pathimport qdrant_clientfrom llama_index import (    VectorStoreIndex,    ServiceContext,    download_loader,)from llama_index.llms import Ollamafrom llama_index.storage.storage_context import StorageContextfrom llama_index.vector_stores.qdrant import QdrantVectorStore

     然后使用开源数据连接器集合LlamaHub的JSONReader从JSON文件中加载推文:

JSONReader = download_loader("JSONReader")loader = JSONReader()documents = loader.load_data(Path('./data/tinytweets.json'))

       通过初始化Qdrant并将其传递到我们稍后将使用的存储上下文中:

client = qdrant_client.QdrantClient(    path="./qdrant_data")vector_store = QdrantVectorStore(client=client, collection_name="tweets")storage_context = StorageContext.from_defaults(vector_store=vector_store)

      现在设置我们的StorageContext。我们将把它作为LLM传递给Mixtral,这样我们就可以在完成索引后测试事情是否正常工作;索引本身不需要Mixtral。通过传递“embed_mode=local”,我们指定LlamaIndex将在本地嵌入您的数据,这就是您需要torchtransformer的原因。

llm = Ollama(model="mixtral")service_context = ServiceContext.from_defaults(llm=llm,embed_model="local")

       现在将所有内容放在一起:使用已经设置的服务和存储上下文从加载的文档中构建索引,并为其提供查询:

index = VectorStoreIndex.from_documents(documents,service_context=service_context,storage_context=storage_context)query_engine = index.as_query_engine()response = query_engine.query("What does the author think about Star Trek? Give details.")print(response)

       Ollama需要启动Mixtral来回答问题,这可能需要一段时间,所以要耐心!应该得到这样的输出(但有更多细节):

Based on the provided context information, the author has a mixed opinion about Star Trek.

验证索引

使用我们预先构建的索引,启动一个新的python文件并再次加载依赖项:

import qdrant_clientfrom llama_index import (    VectorStoreIndex,    ServiceContext,)from llama_index.llms import Ollamafrom llama_index.vector_stores.qdrant import QdrantVectorStore

       这一次不需要加载数据,已经完成了!还需要Qdrant客户端和Mixtral:

client = qdrant_client.QdrantClient(    path="./qdrant_data")vector_store = QdrantVectorStore(client=client, collection_name="tweets")llm = Ollama(model="mixtral")service_context = ServiceContext.from_defaults(llm=llm,embed_model="local")

     这一次,没有从文档中创建索引,而是使用from_vector_store直接从矢量存储中加载索引。我们还将similarity_top_k=20传递给查询引擎;这意味着它将一次获取20条推文(默认为2条),以获得更多上下文并更好地回答问题。

index = VectorStoreIndex.from_vector_store(vector_store=vector_store,service_context=service_context)query_engine = index.as_query_engine(similarity_top_k=20)response = query_engine.query("Does the author like SQL? Give details.")print(response)

建立一个小的web服务

       使用脚本封装运行的索引不是太友好,我们可以创建一个API。需要两个新的依赖项:

pip install flask flask-cors

        像以前一样将我们的依赖项加载到一个新文件中:

from flask import Flask, request, jsonifyfrom flask_cors import CORS, cross_originimport qdrant_clientfrom llama_index.llms import Ollamafrom llama_index import (    VectorStoreIndex,    ServiceContext,)from llama_index.vector_stores.qdrant import QdrantVectorStore

         获取矢量存储、LLM和加载的索引:

# re-initialize the vector storeclient = qdrant_client.QdrantClient(    path="./qdrant_data")vector_store = QdrantVectorStore(client=client, collection_name="tweets")# get the LLM againllm = Ollama(model="mixtral")service_context = ServiceContext.from_defaults(llm=llm,embed_model="local")# load the index from the vector storeindex = VectorStoreIndex.from_vector_store(vector_store=vector_store,service_context=service_context)

       设置一个非常基本的Flask服务器:

app = Flask(__name__)cors = CORS(app)app.config['CORS_HEADERS'] = 'Content-Type'# This is just so you can easily tell the app is running@app.route('/')def hello_world():    return 'Hello, World!'

       并添加一个接受查询(作为表单数据)、查询LLM并返回响应的路由:

@app.route('/process_form', methods=['POST'])@cross_origin()def process_form():    query = request.form.get('query')    if query is not None:        query_engine = index.as_query_engine(similarity_top_k=20)        response = query_engine.query(query)        return jsonify({"response": str(response)})    else:        return jsonify({"error": "query field is missing"}), 400if __name__ == '__main__':    app.run()

PS:最后两行很重要!flask run与LlamaIndex加载依赖项的方式不兼容,因此需要像这样直接运行这个API(假设您的文件名为app.py

python app.py

         随着API的启动和运行,可以使用cURL发送请求并对其进行验证:

curl --location '<http://127.0.0.1:5000/process_form>' \\--form 'query="What does the author think about Star Trek?"'

总结:

  • 让Ollama在本地运行Mixtral
  • 使用LlamaIndex查询Mixtral 8x7b
  • 使用Qdrant矢量存储构建和查询数据索引
  • 将索引包装成一个非常简单的web API
  • 所有开源、免费且在本地运行!

参考文献:

[1] https://blog.llamaindex.ai/running-mixtral-8x7-locally-with-llamaindex-e6cebeabe0ab

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

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

相关文章

代码随想录算法训练营第十五天| 二叉树 513. 找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树

513. 找树左下角的值 层序遍历 本题用层序遍历可以直接秒了&#xff0c;直接提取每一层中最左边的元素&#xff08;i0&#xff09;&#xff0c;然后保存到最后一层即可。 class Solution { public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*> que;int…

【金猿人物展】东方金信董事长兼总经理王伟哲:价值化、智能化驱动下的大数据,治理仍需深化...

‍ 王伟哲 本文由东方金信董事长兼总经理王伟哲撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度趋势人物榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 2023年&#xff0c;数据要素、公共数据授权运营成为热点话题&#xff0c;也是激活数据…

Flume基础知识(二):Flume安装部署

1. Flume 安装部署 1.1 安装地址 &#xff08;1&#xff09;Flume 官网地址&#xff1a;Welcome to Apache Flume — Apache Flume &#xff08;2&#xff09;文档查看地址&#xff1a;Flume 1.11.0 User Guide — Apache Flume &#xff08;3&#xff09;下载地址&#xf…

Halcon计算封闭区域(孔洞)的面积area_holes

Halcon计算封闭区域&#xff08;孔洞&#xff09;的面积 除了可以用area_center 算子计算区域的面积以外&#xff0c;在Halcon中还可以使用area_holes算子计算图像中封闭区域&#xff08;孔洞&#xff09;的面积。该面积指的是区域中孔洞部分包含的像素数。一个区域中可能不只…

深入了解Swagger注解:@ApiModel和@ApiModelProperty实用指南

在现代软件开发中&#xff0c;提供清晰全面的 API 文档 至关重要。ApiModel 和 ApiModelProperty 这样的代码注解在此方面表现出色&#xff0c;通过增强模型及其属性的元数据来丰富文档内容。它们的主要功能是为这些元素命名和描述&#xff0c;使生成的 API 文档更加明确。 Api…

解读 $mash 通证 “Fair Launch” 规则(Staking 玩法解读篇)

Solmash 是 Solana 生态中由社区主导的铭文资产 LaunchPad 平台&#xff0c;该平台旨在为 Solana 原生铭文项目&#xff0c;以及通过其合作伙伴 SoBit 跨链桥桥接到 Solana 的 Bitcoin 生态铭文项目提供更广泛的启动机会。有了 Solmash&#xff0c;将会有更多的 Solana 生态的铭…

静态网页设计——电影推荐网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV1NK411x7oK/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

C语言编译器(C语言编程软件)完全攻略(第十二部分:VS2010下载地址和安装教程(图解))

介绍常用C语言编译器的安装、配置和使用。 十二、VS2010下载地址和安装教程&#xff08;图解&#xff09; 为了更好地支持 Win7 程序的开发&#xff0c;微软于2010年4月12日发布了 VS2010&#xff0c;它的界面被重新设计&#xff0c;变得更加简洁。需要注意的是&#xff0c;V…

crontab 创建定时任务

1、创建crontab任务 crontab -ecrontab内容 */59 * * * * sh /home/restartAllSlave.sh >> /home/my-restartAllSlave.log 2>&12、创建执行脚本&#xff08;restartAllSlave.sh&#xff09; docker重启如下&#xff1a; docker restart slave_zllrp_gb_1 slav…

开源分布式任务调度系统DolphinScheduler本地部署与远程访问

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

web服务器nginx和Apache有什么区别?

随着互联网的快速发展&#xff0c;Web服务器在互联网应用中扮演着越来越重要的角色。其中&#xff0c;Nginx和Apache是两种广泛使用的Web服务器软件。尽管它们都可以实现Web服务器的功能&#xff0c;但Nginx和Apache在许多方面存在一些重要的区别。本文将探讨Nginx和Apache之间…

STC进阶开发(四)SPI协议、矩阵键盘、EEPROM

前言 这一期我们简单介绍一下SPI协议&#xff0c;然后我们学习一下矩阵键盘&#xff0c;了解EEPROM是干什么用的&#xff0c;话不多说&#xff0c;开整&#xff01; SPI协议 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行通信协议&#xff0c;用于在…

【MLOps】使用Ray缩放AI

Ray正在人工智能工程领域崭露头角&#xff0c;对扩展LLM和RL至关重要 Spark在数据工程中几乎是必不可少的。Ray正在人工智能工程领域崭露头角。 雷是伦敦大学学院Spark的继任者。Spark和Ray有很多相似之处&#xff0c;例如用于计算的统一引擎。但Spark主要专注于大规模数据分析…

智能革命:揭秘AI如何重塑创新与效率的未来

1.AI技术的发展与应用 1.1 AI技术的发展 人工智能&#xff08;AI&#xff09;的概念最早可以追溯到20世纪40年代和50年代&#xff0c;当时的计算机科学家开始探索如何创建能模仿人类智能的机器。最初的AI研究集中在问题解决和符号逻辑上&#xff0c;但随着时间的推移&#xf…

mmdetection训练自己的数据集

mmdetection训练自己的数据集 这里写目录标题 mmdetection训练自己的数据集一&#xff1a; 环境搭建二&#xff1a;数据集格式转换(yolo转coco格式)yolo数据集格式coco数据集格式yolo转coco数据集格式yolo转coco数据集格式的代码 三&#xff1a; 训练dataset数据文件配置config…

解决问题:PPT中插入视频编辑模式可以播放,幻灯片放映后播放不了

目录 一、原因分析二、解决办法三、其它问题 一、原因分析 这可能是由于PowerPoint的硬件图形加速功能导致的。 二、解决办法 禁用硬件图形加速。 &#xff08;1&#xff09;点击《文件》选项卡 &#xff08;2&#xff09;点击《选项》 &#xff08;3&#xff09;在《高级》…

如何使用ArcGIS Pro转换单个点坐标

坐标转换作为基础的功能&#xff0c;一般的GIS软件都支持&#xff0c;大多数情况下&#xff0c;我们是转换整个图层&#xff0c;如果想要转换单个坐标点&#xff0c;在ArcGIS Pro内也是支持的&#xff0c;这里为大家介绍一下转换方法&#xff0c;希望能对你有所帮助。 拾取坐标…

IPv6路由协议---IPv6静态路由

IPv6路由协议 路由是数据通信网络中最基本的要素。路由信息就是知道报文发送的路径信息,路由的过程就是报文转发的过程。 根据路由目的地的不同,路由可划分: 1.网段路由:目的地为网段,IPv4地址子网掩码长度小于32位或IPv6地址前缀长度小于128位。 2.主机路由:目的地为主…

某大型电商APP sign头部签名逆向分析

APP版本 唯品会 7.45Java层抓包分析 打开抓包工具 charles进行分析&#xff0c;可以发现对于API采集需要突破当前这个参数&#xff0c;否则不返回信息 jadx静态分析 jadx静态分析&#xff0c;打开app搜索关键词api_sign&#xff0c;可以发现有参数位置 跟进去上边str赋值方…

HttpRunner辅助函数debugtalk.py

辅助函数debugtalk.py Httprunner框架中&#xff0c;使用yaml或json文件进行用例描述&#xff0c;无法做一些复杂操作&#xff0c;如保存一些数据跨文件调用&#xff0c;或者实现一些复杂逻辑判断等&#xff0c;为了解决这个问题&#xff0c;引入了debugtalk.py辅助函数来进行一…