首页 > 其他分享 >07LangChain实战课 - LLM模块使用与自定义模型调用

07LangChain实战课 - LLM模块使用与自定义模型调用

时间:2024-11-06 09:20:31浏览次数:3  
标签:自定义 07LangChain 模型 HuggingFace LangChain LLM 使用 model

LangChain实战课 - LLM模块使用与自定义模型调用

1. 课程简介
  • 本节课聚焦于LangChain中的LLM(Large Language Model)模块,探讨如何使用不同的大语言模型,包括开源模型和自定义模型。
2. 大语言模型的发展
  • Transformer架构:Google在2018年提出的架构,是现代预训练模型的核心。
  • 基础模型:基于Transformer预训练的大规模语言模型,学习词汇、语法等语言知识。
  • BERT:早期代表性模型,通过学习文本的前后文信息,实现句子结构的深入理解。
3. 预训练与微调
  • 预训练:在大规模无标注数据上训练,学习通用语言知识。
  • 微调:在预训练模型基础上,针对特定任务进行调整,适应特定需求。
4. 使用开源模型
  • HuggingFace:提供多种开源模型和工具,简化模型调用和部署。
  • Llama2:Meta(Facebook)推出的模型,可通过HuggingFace下载和使用。
5. 调用Llama2模型
  • 安装HuggingFace库:使用pip install transformers安装。
  • 设置API Token:在命令行中运行huggingface-cli login
  • 代码示例
    from transformers import AutoTokenizer, AutoModelForCausalLM
    tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
    model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf", device_map='auto')
    inputs = tokenizer("请给我讲个玫瑰的爱情故事?", return_tensors="pt").to("cuda")
    outputs = model.generate(inputs["input_ids"], max_new_tokens=2000)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    print(response)
    
6. LangChain与HuggingFace集成
  • HuggingFace Hub:通过HuggingFace Hub集成模型,简化下载和使用流程。
  • HuggingFace Pipeline:简化NLP任务的使用流程,无需深入了解模型细节。
7. 调用自定义语言模型
  • 自定义LLM类:继承自LangChain的LLM基类,实现_call方法进行模型调用。
  • 代码示例
    from langchain.llms.base import LLM
    class CustomLLM(LLM):
        def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
            llm = Llama(model_path=MODEL_PATH+MODEL_NAME, n_threads=4)
            response = llm(f"Q: {prompt} A: ", max_tokens=256)
            output = response['choices'][0]['text'].replace('A: ', '').strip()
            return output[len(prompt)+5:]
    
8. 总结
  • 本节课介绍了大模型的训练、微调和量化,以及如何在LangChain中使用不同的模型。
  • 强调了PyTorch、HuggingFace和LangChain在AI模型开发中的重要性。
9. 思考题
  1. 何时使用OpenAI的API?何时使用开源模型或自定义模型?
  2. 使用HuggingFace的Transformers库下载新模型进行推理,比较性能。
  3. 在LangChain中使用HuggingFaceHub和HuggingFace Pipeline调用最流行的大语言模型。
思考题解答
1. 何时使用OpenAI的API?何时使用开源模型或自定义模型?

使用OpenAI的API、开源模型或自定义模型的选择取决于多个因素:

  • OpenAI的API

    • 便捷性:如果你需要快速部署模型并且不想自己管理基础设施,OpenAI的API是一个便捷的选择。
    • 性能和可靠性:OpenAI提供的模型通常经过了广泛的测试和优化,可以提供较高的性能和可靠性。
    • 安全性:对于需要高安全性和隐私保护的应用,OpenAI的API可以提供更好的数据保护。
    • 商业支持:如果你需要商业级别的支持和服务,OpenAI的API可能是更好的选择。
  • 开源模型

    • 成本效益:开源模型可以减少成本,因为它们通常是免费的或者成本较低。
    • 定制化:如果你需要对模型进行特定的定制化修改,开源模型提供了这种灵活性。
    • 社区支持:开源模型通常有活跃的社区,可以帮助解决使用过程中的问题。
  • 自定义模型

    • 特定需求:当你有非常特定的业务需求,而现有的模型无法满足时,自定义模型可以提供针对性的解决方案。
    • 数据隐私:如果你对数据隐私有严格要求,不希望数据离开你的服务器,自定义模型可以在本地部署。
    • 控制权:自定义模型允许你完全控制模型的训练和部署过程。
2. 使用HuggingFace的Transformers库下载新模型进行推理,比较性能。

要使用HuggingFace的Transformers库下载新模型并进行推理比较性能,可以按照以下步骤操作:

  • 安装Transformers库

    pip install transformers
    
  • 选择模型:根据需求选择一个或多个模型进行比较。

  • 加载模型并进行推理

    from transformers import AutoModel, AutoTokenizer
    
    # 以bert-base-uncased和distilbert-base-uncased为例
    model_names = ["bert-base-uncased", "distilbert-base-uncased"]
    
    for model_name in model_names:
        tokenizer = AutoTokenizer.from_pretrained(model_name)
        model = AutoModel.from_pretrained(model_name)
        
        # 假设输入文本
        input_text = "The quick brown fox jumps over the lazy dog"
        inputs = tokenizer(input_text, return_tensors="pt")
        outputs = model(**inputs)
        
        # 打印模型名称和推理结果的某些指标
        print(f"Model: {model_name}")
        print(f"Outputs: {outputs}")
    
  • 性能比较:可以通过比较模型的推理时间、资源消耗(如GPU/CPU使用率)和结果的准确性来进行性能比较。

3. 在LangChain中使用HuggingFaceHub和HuggingFace Pipeline调用最流行的大语言模型。

在LangChain中使用HuggingFaceHub和HuggingFace Pipeline调用模型的步骤如下:

  • 安装LangChain

    pip install langchain
    
  • 使用HuggingFaceHub

    from langchain.chains import HuggingFaceHubChain
    from langchain.llms import HuggingFaceHub
    
    # 初始化HuggingFaceHub
    hfh = HuggingFaceHub(repo_id="bigscience/bloom-3b")
    
    # 创建链
    hfh_chain = HuggingFaceHubChain(llm=hfh)
    
    # 调用链
    result = hfh_chain.run("Tell me a joke")
    print(result)
    
  • 使用HuggingFace Pipeline

    from langchain.chains import HuggingFacePipelineChain
    from transformers import pipeline
    
    # 创建pipeline
    pipeline_model = pipeline("text-generation", model="bigscience/bloom-3b")
    
    # 创建链
    pipeline_chain = HuggingFacePipelineChain(pipeline=pipeline_model)
    
    # 调用链
    result = pipeline_chain.run("Tell me a joke")
    print(result)
    
  • 比较两种方法:可以通过比较两种方法的易用性、灵活性和性能来决定在不同场景下使用哪种方法。

10. 延伸阅读
  • Llama2、HuggingFace Transformer文档、PyTorch官方教程、AutoGPTQ、Llama CPP。

这节课内容丰富,涵盖了大模型的多个方面,从理论到实践,为深入理解大模型提供了全面的视角。通过实际操作和代码示例,学员可以更好地掌握如何在实际项目中应用这些知识。

标签:自定义,07LangChain,模型,HuggingFace,LangChain,LLM,使用,model
From: https://blog.csdn.net/Y2483490891/article/details/143558398

相关文章

  • 自定义注解实现权限校验
    自定义注解实现权限校验引入所需的依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>版本号</version><relativePath/></parent><depen......
  • 全网最详细大语言模型(LLM)入门学习路线图
    Github项目上有一个大语言模型学习路线笔记,它全面涵盖了大语言模型的所需的基础知识学习,LLM前沿算法和架构,以及如何将大语言模型进行工程化实践。这份资料是初学者或有一定基础的开发/算法人员入门活深入大型语言模型学习的优秀参考。这份资料重点介绍了我们应该掌握哪些核......
  • 手把手教你编写自定义Categraf插件
    本文分享自天翼云开发者社区《手把手教你编写自定义Categraf插件》,作者:任****佳Categraf是一个监控采集Agent,类似Telegraf、Grafana-Agent、Datadog-Agent,希望对所有常见监控对象提供监控数据采集能力,采用All-in-one的设计,不但支持指标采集,也希望支持日志和调用链路的数据采......
  • HarmonyOS 开发实践——基于自定义注解和代码生成实现路由框架
    ......
  • 软件架构演变:从单体架构到LLM链式调用
    0前言软件架构——我们数字世界的蓝图——自20世纪中叶计算机时代诞生以来,已经发生了巨大演变。20世纪60年代和70年代早期,以大型主机和单体软件为主导。而今天,数字领域已完全不同,运行在由云计算、API连接、AI算法、微服务和编排平台组成的分布式网络上。软件架构是如何随着岁......
  • 「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
    自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。关键词自定义组件复用组件属性传递组件通信组件......
  • 外网爆火的LLM应用手册来了!内行人都在学的大模型黑书,评分高达9.9!!!
    Transformer模型介绍朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】Transformer是工业化、同质化的后深度学习模型,其设计目标是能够在高性能计算机(超级计算机)上以并行方式进行计算。通过同质化,一个Transformer模型可以执行各种任务,而不......