0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用OpenVINO加速LangChain中LLM任务

OpenCV学堂 来源:OpenCV学堂 2023-12-05 09:58 次阅读

LangChain简介

LangChain 是一个高层级的开源的框架,从字面意义理解,LangChain 可以被用来构建 “语言处理任务的链条”,它可以让AI开发人员把大型语言模型(LLM)的能力和外部数据结合起来,从而去完成一些更复杂的任务。简单来说,LangChain 可以让你的 LLM 在回答问题时参考自定义的知识库,实现更精确的答案输出。例如在以下这个Retrieval Augmented Generation (RAG)任务,LangChain 可以根据问题从已有的知识库中进行检索,并将原始的检索结果和问题一并包装为Prompt提示送入 LLM 中,以此获得更加贴近问题需求的答案。

LangChain 的核心能力主要由以下几个模型所构成。

提示(prompts): 包括提示管理、提示优化和提示序列化。

大语言模型(LLM): 提供调用大预言模型生成文本的接口

检索(Retrieval): 该模块用于构建自定义的知识仓库,从而基于LLM实现基于文档数据检测的文本生成任务(RAG),这也是LangChain最核心的能力之一。

代理(agents): LLM作为代理其他工具的代理,通过LLM来判断可以调用什么工具(tool)来解决用户提出的特殊需求。此处的工具需要被封装成API接口,供LangChain调用,比如一个返回文本长度的函数,就可以是一个工具。

记忆(memory): 记忆主要用来存储多轮对话中的历史数据,以便在后续的回答任务中可以对之前的交流记录进行参考。

基于以上这些模块,LangChain可以被应用于一些更复杂的任务中,例如:个人AI邮件助手,AI学习伙伴,AI数据分析,定制公司客服聊天机器人,社交媒体内容创作助手等,做为LangChain任务部署过程中的底座,LLM的推理任务势必是重点可以被优化的方向,那如何利用OpenVINO来加速LangChain的中LLM任务呢,这里为大家整理了以下两个方法:

方法一:利用 Huggingface pipeline

调用 Optimum 后端

鉴于langchain.llm对象已经支持了huggingface_pipeline来直接调用huggingface上的LLM

同时Huggingface的Optimum-intel组件可以将huggingface pipeline中的LLM推理任务通过OpenVINO进行加速。因此我们的第一种方案就是利用Optimum-intel的pipeline来替换原本的Transformers pipeline,如下代码所示:

from langchain.llms import HuggingFacePipeline
from transformers import pipeline
- from transformers import AutoModelForCausalLM
+ from optimum.intel.openvino import OVModelForCausalLM
- model = AutoModelForCausalLM.from_pretrained(model_id)
+ ov_model = OVModelForCausalLM.from_pretrained(model_id)
pipe = pipeline("text-generation", model=ov_model, tokenizer=tokenizer, max_new_tokens=128, pad_token_id=tokenizer.eos_token_id)
hf = HuggingFacePipeline(pipeline=pipe)
llm_chain = LLMChain(prompt=prompt, llm= hf)
output=llm_chain.run(question)

红色部分是标准Transformers (第3、5行)库在 huggingface_pipeline 中的调用方式,绿色部分为Optimum-intel(第4、6行)的调用方式,可以看到我们仅仅只需修改两行代码就可以把 LangChain 原生的 LLM 任务,通过 OpenVIN 进行加速,并且 Optimum-intel 提供的 API 也支持将 LLM 部署到不同的硬件平台,例如 Intel 的 CPUGPU 系列产品

方法二:构建新的 OpenVINO pipeline 类

第一种方法固然简单,但如果遇到 Optimum-intel 中还未适配的 LLM,那依然无法奏效,因此这里的第二种办法就是参考 HuggingFacePipeline 这个类对象,重新构建一个基于 OpenVINO 的类对象,以此来支持自定义的模型类别。

仓库中的ov_pipeline.py就是用来构建 OpenVINO pipeline 的代码,为了方便演示,示例中底层还是调取 Optimum-intel 进行推理,但不同与第一种方式,这里我们可以选择脱离 Optimum-intel 的束缚,自行定义pipeline中的关键方法。这里有两个关键方法:

1. from_model_id函数用于读取本地或者远端的LLM以及其对应的Tokenizer,并利用OpenVINO runtime 对其进行编译以及初始化。这里的函数名仅供参考,大家可以根据自己的习惯自行修改,此外在这个函数中,我们还可以对模型的配置进行调整,比如指定不同的硬件平台进行部署,修改硬件端性能配置,例如供推理任务线程数(tread),并行任务数(stream)等,该函数预期返回一个可以直接运行的模型对象。

from_model_id(
        cls,
        model_id: str,
        model_kwargs: Optional[dict] = None,
        **kwargs: Any,
)->LLM

2. _call函数继承自父类 LLM,用于根据提升生成本文,根据父类中的定义,他的输入为 prompt文本,输出同样也是一个文本,因此在这个函数中就要求我们实现三个功能,Tokenizer分词编码->LLM推理->tokenizer 解码,其实这也是LLM 问答任务中必须经历的三个步骤,所以这里的实现方式大家可以根据自己LLM模型对于输入输出的要求自行定义。

def _call(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        **kwargs: Any,
)->str:

3. 这个仓库中提供了一个简单的 LangChain 示例sample.py,用于展示自定义 OpenVINO pipeline 在 LangChain 中的调用方式,核心部分可以参考以下代码片段。

llm = OpenVINO_Pipeline.from_model_id(
    model_id=model_path,
    model_kwargs={"device":device, "temperature": 0, "trust_remote_code": True},
    max_new_tokens=64
    )
llm_chain=LLMChain(prompt=prompt,llm=llm)

总结

LangChain 做为当前最受欢迎的自然语言系统框架之一,可以帮助开发者快速构建起基于LLM的上层应用方案。而 OpenVINO 2023.2 新版本的发布又进一步提升了LLM的性能表现,同时降低了部署门槛,两者的结合可以帮助开发者更便捷地在英特尔平台上部署基于大语言模型的服务系统,丰富本地化 AI PC 应用场景的落地。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    3044

    浏览量

    41829
  • 语言模型
    +关注

    关注

    0

    文章

    466

    浏览量

    10171
  • OpenVINO
    +关注

    关注

    0

    文章

    65

    浏览量

    105

原文标题:如何在 LangChain 中调用 OpenVINO™ 加速大语言模型

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    对比解码在LLM上的应用

    为了改进LLM的推理能力,University of California联合Meta AI实验室提出将Contrastive Decoding应用于多种任务LLM方法。实验表明,所提方法能有效改进
    发表于 09-21 11:37 437次阅读
    对比解码在<b class='flag-5'>LLM</b>上的应用

    低比特量化技术如何帮助LLM提升性能

    针对大语言模型 (LLM) 在部署过程中的性能需求,低比特量化技术一直是优化效果最佳的方案之一,本文将探讨低比特量化技术如何帮助 LLM 提升性能,以及新版 OpenVINO 对于低比特量化技术的支持。
    的头像 发表于 12-08 15:26 778次阅读
    低比特量化技术如何帮助<b class='flag-5'>LLM</b>提升性能

    基于OpenVINOLangChain构建RAG问答系统

    随着生成式 AI 的兴起,和大语言模型对话聊天的应用变得非常热门,但这类应用往往只能简单地和你“聊聊家常”,并不能针对某些特定的行业,给出非常专业和精准的答案。这也是由于大语言模型(以下简称 LLM
    的头像 发表于 12-25 11:10 640次阅读
    基于<b class='flag-5'>OpenVINO</b>和<b class='flag-5'>LangChain</b>构建RAG问答系统

    LangChain:为你定制一个专属的GPT

    LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。其组件包括了模型(各类LLM),提示模板(Prompts),索引,代理(Agent),记忆等等。
    的头像 发表于 04-24 11:27 1154次阅读
    <b class='flag-5'>LangChain</b>:为你定制一个专属的GPT

    如何利用LLM做多模态任务

    大型语言模型LLM(Large Language Model)具有很强的通用知识理解以及较强的逻辑推理能力,但其只能处理文本数据。虽然已经发布的GPT4具备图片理解能力,但目前还未开放多模态输入接口并且不会透露任何模型上技术细节。因此,现阶段,如何利用
    的头像 发表于 05-11 17:09 744次阅读
    如何<b class='flag-5'>利用</b><b class='flag-5'>LLM</b>做多模态<b class='flag-5'>任务</b>?

    在AI爱克斯开发板上用OpenVINO加速YOLOv8目标检测模型

    《在 AI 爱克斯开发板上用 OpenVINO 加速 YOLOv8 分类模型》介绍了在 AI 爱克斯开发板上使用 OpenVINO 开发套件部署并测评 YOLOv8 的分类模型,本文将介绍在 AI 爱克斯开发板上使用
    的头像 发表于 05-12 09:08 983次阅读
    在AI爱克斯开发板上用<b class='flag-5'>OpenVINO</b>™<b class='flag-5'>加速</b>YOLOv8目标检测模型

    如何利用LLM做一些多模态任务

    本文整理了近两年来基于LLM做vision-lanuage任务的一些工作,并将其划分为4个类别:
    的头像 发表于 05-17 15:02 673次阅读
    如何<b class='flag-5'>利用</b><b class='flag-5'>LLM</b>做一些多模态<b class='flag-5'>任务</b>

    AI爱克斯开发板上使用OpenVINO加速YOLOv8目标检测模型

    《在AI爱克斯开发板上用OpenVINO加速YOLOv8分类模型》介绍了在AI爱克斯开发板上使用OpenVINO 开发套件部署并测评YOLOv8的分类模型,本文将介绍在AI爱克斯开发板上使用O
    的头像 发表于 05-26 11:03 870次阅读
    AI爱克斯开发板上使用<b class='flag-5'>OpenVINO</b><b class='flag-5'>加速</b>YOLOv8目标检测模型

    LLM在各种情感分析任务中的表现如何

      最近几年,GPT-3、PaLM和GPT-4等LLM刷爆了各种NLP任务,特别是在zero-shot和few-shot方面表现出它们强大的性能。因此,情感分析(SA)领域也必然少不了LLM的影子
    的头像 发表于 05-29 17:24 1740次阅读
    <b class='flag-5'>LLM</b>在各种情感分析<b class='flag-5'>任务</b>中的表现如何

    在AI爱克斯开发板上用OpenVINO加速YOLOv8-seg实例分割模型

    《在 AI 爱克斯开发板上用 OpenVINO 加速 YOLOv8 目标检测模型》介绍了在 AI 爱克斯开发板上使用 OpenVINO 开发套件部署并测评 YOLOv8 的目标检测模型,本文将介绍在 AI 爱克斯开发板上使用
    的头像 发表于 06-05 11:52 697次阅读
    在AI爱克斯开发板上用<b class='flag-5'>OpenVINO</b>™<b class='flag-5'>加速</b>YOLOv8-seg实例分割模型

    在AI爱克斯开发板上用OpenVINO加速YOLOv8-seg实例分割模型

    《在 AI 爱克斯开发板上用 OpenVINO 加速 YOLOv8 目标检测模型》介绍了在 AI 爱克斯开发板上使用 OpenVINO 开发套件部署并测评 YOLOv8 的目标检测模型,本文将介绍在 AI 爱克斯开发板上使用
    的头像 发表于 06-30 10:43 526次阅读
    在AI爱克斯开发板上用<b class='flag-5'>OpenVINO</b>™<b class='flag-5'>加速</b>YOLOv8-seg实例分割模型

    LangChain跑起来的3个方法

    使用 LangChain 开发 LLM 应用时,需要机器进行 GLM 部署,好多同学第一步就被劝退了,
    的头像 发表于 07-05 09:59 1040次阅读
    把<b class='flag-5'>LangChain</b>跑起来的3个方法

    LangChain 0.1版本正式发布

    LangChain 由 Harrison Chase 于 2022 年 10 月推出,是一个开源编排框架,用于使用 LLM 开发应用程序,推出后迅速脱颖而出,截至 2023 年 6 月,它是 GitHub 上增长最快的开源项目。
    的头像 发表于 01-10 10:28 632次阅读

    探索LangChain:构建专属LLM应用的基石

    LangChain通过Loader加载外部的文档,转化为标准的Document类型。Document类型主要包含两个属性:page_content 包含该文档的内容。meta_data 为文档相关的描述性数据,类似文档所在的路径等。
    发表于 01-30 10:33 383次阅读
    探索<b class='flag-5'>LangChain</b>:构建专属<b class='flag-5'>LLM</b>应用的基石

    解锁LLM新高度—OpenVINO™ 2024.1赋能生成式AI高效运行

    LLM 的发展仍保持着惊人的速度。尽管现有的 LLM 已经具备强大的功能,但通过 OpenVINO™ 的优化和推理加速,可以对这些复杂模型的执行进行精炼,实现更快、更高效的处理,减少计
    的头像 发表于 05-10 10:36 269次阅读