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. 思考题
- 何时使用OpenAI的API?何时使用开源模型或自定义模型?
- 使用HuggingFace的Transformers库下载新模型进行推理,比较性能。
- 在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