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

       欧洲人工智能巨头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.hqwc.cn/news/324000.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用quill富文本编辑器

学习目标&#xff1a; 学习目标 了解quill富文本编辑器 学习内容&#xff1a; 内容 安装 d2-quill npm install vue-quill-editor -S引入到 使用的项目中 &#xff08;1&#xff09;、全局引用 import Vue from vue import VueQuillEditor from vue-quill-editor// 引入样式…

如何利用SD-WAN优化企业访问Salesforce的体验?

在这个数字化时代&#xff0c;客户关系管理&#xff08;CRM&#xff09;应用如 Salesforce &#xff0c;已经成为企业运营的重要部分。然而&#xff0c;许多企业在使用 Salesforce 时常遇到页面加载缓慢、甚至完全无法访问等问题&#xff0c;严重影响了他们的工作效率和用户体验…

程序员真是越来越懒了,Api 文档都懒得写?程序员:Api工具惯的!

关于大多数程序员不爱写文档问题&#xff0c; 我觉得可以从两个方面去拆解&#xff1a;主观原因、客观原因。 1. 客观 - 时间紧任务重&#xff0c;需求变化快 需求方每次都是紧急需求&#xff0c;老板每次都要求敏捷开发&#xff0c;快速响应。按时交付的压力已经让大多数程序员…

Charles的基础使用教程【Mac】

目录 1.安装 2.抓取https请求的前置操作 2.1安装证书&#xff1a; 2.2、SSL代理设置 3.Charles初识 1.安装 官网Charles下载安装即可&#xff0c;没有什么需要注意的地方 2.抓取https请求的前置操作 2.1安装证书&#xff1a; 未安装证书是这样的&#xff1a; 上述我们可…

【fiddler】fiddler抓包工具的使用

前言&#xff1a;我们可以通过fiddler软件&#xff0c;捕获到http请求&#xff0c;并修改请求参数 修改返回内容 fiddler下载,官网如下图 启动fiddler软件,点击file 选择 Capture Traffic 修改入参 (我们以谷歌浏览器发起请求为例) 此时会出现一个向上的箭头&#xff0c;点击…

SSM图书管理系统完整版

1.系统开发环境 开发工具&#xff1a;eclipse &#xff0c;SQLyog Community 数据库&#xff1a;mysql 8.0开发环境&#xff1a;jdk1.8 , tomcat 8.5后端框架&#xff1a;ssm 前端技术&#xff1a;htmlcssjavascript , layui&#xff0c;jquery&#xff0c;ajax 2.系统功能介绍…

Capsolver:解决Web爬虫中CAPTCHA挑战的最优解决方案

Web爬虫已经成为从各种在线来源提取和分析数据的不可或缺的技术。然而&#xff0c;在Web爬取过程中&#xff0c;经常会遇到的一个共同挑战是CAPTCHA。CAPTCHA&#xff08;完全自动化的公共图灵测试&#xff0c;用于区分计算机和人类&#xff09;是一种安全措施&#xff0c;旨在…

设置进程优先级

#include <windows.h>int main() {// 获取当前进程的句柄HANDLE hProcess GetCurrentProcess();// 设置当前进程的优先级为高SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);// 执行其他代码return 0; }进程优先级 标志 idle &#xff08;低&#xff09; IDL…

深度学习分类问题中accuracy等评价指标的理解

在处理深度学习分类问题时&#xff0c;会用到一些评价指标&#xff0c;如accuracy&#xff08;准确率&#xff09;等。刚开始接触时会感觉有点多有点绕&#xff0c;不太好理解。本文写出我的理解&#xff0c;同时以语音唤醒&#xff08;唤醒词识别&#xff09;来举例&#xff0…

教学/直播/会议触摸一体机定制_基于展锐T820安卓核心板方案

触控一体机是一种集先进的触摸屏、工控和计算机技术于一体的设备。它取代了传统的键盘鼠标输入功能&#xff0c;广泛应用于教学、培训、工业、会议、直播、高新科技展示等领域。触摸一体机的应用提升了教学、会议和展示的互动性和信息交流。 触摸一体机方案基于国产6nm旗舰芯片…

[Vulnhub靶机] DriftingBlues: 3

[Vulnhub靶机] DriftingBlues: 3靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues3.ova 靶机地址&#xff1a;192.168.67.19 攻击机地址&#xff1a;192.168.67.3 一、信息收集 1.…

时代变了,Spring 官方抛弃了 Java 8!

先容许我吐槽一句&#xff1a;Spring 官方&#xff0c;窝草尼玛&#xff01; 原谅我很愤怒&#xff01;最近编程导航星球和群友们反复问一个问题&#xff1a;为啥用 IDEA 创建 Spring Boot 项目时&#xff0c;不能选择 Java 8 了&#xff1f; 我本来以为是 IDEA 版本更新导致的…