当前位置: 首页 > news >正文

开源模型应用落地-LangChain试炼-CPU调用QWen1.5(一)

 一、前言

    尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。

    通过langchain框架调用本地模型,使得用户可以直接提出问题或发送指令,而无需担心具体的步骤或流程。langchain会自动将任务分解为多个子任务,并将它们传递给适合的语言模型进行处理。


二、术语

2.1.LangChain

    是一个全方位的、基于大语言模型这种预测能力的应用开发工具。LangChain的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。

    LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。

    LangChain的主要特性:
        1.可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等
        2.允许语言模型与其环境交互
        3.封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件
        4.可以使用链的方式组装这些组件,以便最好地完成特定用例。
        5.围绕以上设计原则,LangChain解决了现在开发人工智能应用的一些切实痛点。

2.2.Hugging Face

    是一个知名的开源社区和平台,专注于自然语言处理(NLP)技术和人工智能模型的开发和共享。该社区致力于提供易于使用的工具和资源,帮助研究人员、开发者和数据科学家在NLP领域进行创新和应用。

    Hugging Face最著名的贡献是其开源软件库,其中包括了许多流行的NLP模型的实现和预训练模型的集合,如BERT、GPT、RoBERTa等。这些模型在各种NLP任务,如文本分类、命名实体识别、情感分析等方面取得了很好的表现,并被广泛应用于学术界和工业界。

2.3.Transformers

    Hugging Face的Transformer是一个流行的开源Python库,用于自然语言处理(NLP)任务和模型开发。它提供了一系列易于使用的API和工具,用于加载、训练和部署各种预训练的NLP模型,如BERT、GPT、RoBERTa等。


三、前提条件

3.1.安装虚拟环境

conda create --name langchain python=3.10
conda activate langchain
conda install pytorch
pip install langchain accelerate

3.2.下载QWen1.5模型

huggingface:

https://huggingface.co/Qwen/Qwen1.5-7B-Chat/tree/main

ModelScope:

git clone https://www.modelscope.cn/qwen/Qwen1.5-7B-Chat.git

PS:

1. 根据实际情况选择不同规格的模型


四、技术实现

4.1.方式一

# -*-  coding = utf-8 -*-
import warningsfrom langchain import PromptTemplate
from langchain.chains.llm import LLMChain
from langchain.llms import HuggingFacePipelinewarnings.filterwarnings("ignore")model_path ="/data/model/qwen1.5-7b-chat"local_llm = HuggingFacePipeline.from_model_id(model_id=model_path,task="text-generation",model_kwargs={"trust_remote_code": True},pipeline_kwargs={"max_new_tokens": 8192,"top_p":0.9, "temperature":0.45,"repetition_penalty":1.1, "do_sample":True},
)template = """Question: {question}Answer: Let's think step by step."""prompt = PromptTemplate.from_template(template)chain = LLMChain(prompt=prompt, llm=local_llm)
question = "我家在广州,很好玩哦,你能介绍一些我家的特色景点吗?"
print(chain.run(question))

调用结果:

4.2.方式二

# -*-  coding = utf-8 -*-
import warningsfrom langchain import PromptTemplate
from langchain.llms import HuggingFacePipelinewarnings.filterwarnings("ignore")model_path ="/data/model/qwen1.5-7b-chat"local_llm = HuggingFacePipeline.from_model_id(model_id=model_path,task="text-generation",model_kwargs={"trust_remote_code": True},pipeline_kwargs={"max_new_tokens": 8192,"top_p":0.9, "temperature":0.45,"repetition_penalty":1.1, "do_sample":True},
)template = """Question: {question}Answer: Let's think step by step."""prompt = PromptTemplate.from_template(template)chain = prompt | local_llm
question = "我家在广州,很好玩哦,你能介绍一些我家的特色景点吗?"
print(chain.invoke({"question": question}))

调用结果:


五、附带说明

5.1. ValueError: Input length of input_ids is 20, but `max_length` is set to 20. This can lead to unexpected behavior. You should consider increasing `max_length` or, better yet, setting `max_new_tokens`.

配置max_new_tokens

5.2. 使用pipline模型的加载方式

参见huggingface_pipeline.py文件,跟往常的模型加载方式一致

5.3. 模型加载很慢

原因:当前示例使用CPU加载模型及推理

http://www.lryc.cn/news/340647.html

相关文章:

  • STM32-模数转化器
  • 算法刷题记录2
  • 中国代工巨头旗下芯片公司遭网络攻击,千兆字节数据被泄露
  • 【ARM 裸机】汇编 led 驱动之基本语法
  • scala---基础核心知识(变量定义,数据类型,流程控制,方法定义,函数定义)
  • OSPF星型拓扑和MGRE全连
  • 智能时代中的工业应用中前所未有的灵活桥接和I/O扩展功能解决方案MachXO2系列LCMXO2-1200HC-4TG100I FPGA可编程逻辑IC
  • php:实现压缩文件上传、解压、文件更名、压缩包删除功能
  • 【机器学习】科学库使用第5篇:Matplotlib,学习目标【附代码文档】
  • Java面试八股文(JVM篇)(❤❤)
  • 「51媒体」如何有效进行媒体邀约,提升宣传传播效果?
  • docker初始化进程
  • 基于快照行情的股票/基金 1分钟 K 线合成指南
  • 新质生产力崛起:精益化能力助力企业转型升级
  • 开发了一个在线客服系统
  • cowa新的数据筛选代码
  • 项目篇 | 图书管理系统 | 管理员模块 | 图书管理 | 删除
  • 自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
  • 【Sql Server】锁表如何解锁,模拟会话事务方式锁定一个表然后进行解锁
  • 【大语言模型】轻松本地部署Stable Diffusion
  • 【github主页】优化简历
  • dnspy逆向和de4dot脱壳
  • python之flask安装以及使用
  • 汽车笔记-保险
  • 人工智能时代的图像识别:机遇与挑战并存
  • 工作 9 年后,回老家当计算机老师的真实感受
  • 二叉树的镜像【c++】
  • 记录Python的pandas库详解
  • 阻碍团队使用工具的原因竟然是……
  • 【并发】第九篇 Atomic原子操作类 - 字段更新器类详解