随着开源大型语言模型(LLMs)的不断发布,对于特定于聊天机器人(ChatBot)的用例需求也在增长。HuggingFace作为开源LLMs的主要提供者,其模型参数对公众开放,任何人都可以用于推理。另一方面,LangChain结合HuggingFace是一个强大的大型语言模型框架,它帮助将AI无缝集成到应用中。通过结合HuggingFace和LangChain,可以轻松整合特定领域的ChatBots。
LangChain与Hugging Face的集成通过结合Hugging Face的预训练模型和LangChain的语言工具包增强了自然语言处理能力。这种伙伴关系简化了工作流程,使得模型部署和高级文本分析更加高效。
学习目标包括理解开源大型语言模型的需求,以及HuggingFace是如何成为最重要的提供者之一。探索三种方法来实现大型语言模型,借助Langchain框架和HuggingFace开源模型。学习如何使用T4 GPU免费实现HuggingFace任务管道与Langchain。学习如何在不下载模型参数的情况下,使用HuggingFace Hub的Inference API在CPU上实现模型。
本文作为数据科学博客马拉松的一部分发布。
- HuggingFace与开源大型语言模型
- 什么是Langchain?
- 安装
- 方法1:HuggingFace管道
- 方法2:使用Inference API的HuggingFace Hub
- 方法3:LlamaCPP
- 参考
- 常见问题
HuggingFace是开发AI和深度学习模型的基石。HuggingFace的Transformers库中丰富的开源模型使其成为许多实践者的首选。开源大型语言模型,如LLaMA、Falcon、Mistral等,其特点是公开可访问的学习参数,与此相反的是封闭源大型语言模型,它们拥有私有的学习参数。使用这些模型可能需要与API端点交互,例如GPT-4和GPT-3.5。
Hugging Face是一个顶级平台,提供预训练模型和库以理解自然语言。它以其Transformers库而闻名,该库包括各种预训练模型,可以调整用于不同的NLP任务。
这就是HuggingFace的便利之处。HuggingFace提供了HuggingFace Hub,一个拥有超过120k模型、20k数据集和50k空间(演示AI应用)的平台。
随着AI中大型语言模型的进步,对信息丰富的ChatBots的需求也在增加。假设创立了一家新的游戏公司,拥有许多用户手册和快捷文档。需要为这家公司的数据集成一个像ChatGPT这样的ChatBot。如何实现这一点?
这就是Langchain的用武之地。Langchain是一个强大的大型语言模型框架,它整合了各种组件,如嵌入、向量数据库、LLMs等。使用这些组件,可以向大型语言模型提供外部文档,并无缝构建AI应用。
要开始使用HuggingFace和Langchain的不同方法,需要安装所需的库。要使用Langchain组件,可以直接安装Langchain和Huggingface,如下命令:
!pip install langchain
要使用HuggingFace模型和嵌入,需要安装transformers和sentence-transformers。在Google Colab的最新更新中,不需要安装transformers。
!pip install transformers
!pip install sentence-transformers
!pip install bitsandbytes accelerate
要在边缘运行GenAI应用,Georgi Gerganov开发了LLamaCPP。LLamaCPP在高效的C/C++中实现了Meta的LLaMa架构。
!pip install llama-cpp-python
管道是使用模型进行推理的绝佳且简单的方式。HuggingFace提供了一个管道包装类,可以轻松集成文本生成和摘要等任务,仅需一行代码。这行代码包含通过实例化模型、分词器和任务名称来调用管道属性。
必须加载大型语言模型和相关的分词器来实现这一点。由于不是每个人都可以访问A100或V100 GPU,必须继续使用免费的T4 GPU。要使用管道运行大型语言模型进行推理,将使用orca-mini 3 billion参数LLM与量化配置以减小模型大小。
from langchain.llms.huggingface_pipeline import HuggingFacePipeline
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline,
from transformers import BitsAndBytesConfig
nf4_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.bfloat16
)
model_id = "pankajmathur/orca_mini_3b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=nf4_config
)
pipe = pipeline("text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=512
)
成功运行管道后,HuggingFacePipeline包装类有助于集成Transformers模型和Huggingface与Langchain。下面的代码片段定义了orca模型的提示模板。
hf = HuggingFacePipeline(pipeline=pipe)
query = "谁是沙鲁克·汗?"
prompt = f"""
### 系统:
是一个非常听话的AI助手。
尽所能提供帮助。请务必真实并给出直接的答案
### 用户:
{query}
### 响应:
"""
response = hf.predict(prompt)
print(response)
在方法一中,可能已经注意到,在使用管道时,模型和标记化下载并加载权重。如果模型的长度非常大,这种方法可能会耗时。因此,HuggingFace Hub Inference API就派上用场了。要将HuggingFace Hub与Langchain集成,需要一个HuggingFace访问令牌。
获取HuggingFace访问令牌的步骤:
- 登录HuggingFace.co。
- 点击右上角的头像,然后选择“设置”。
- 在左侧边栏中,导航到“访问令牌”。
- 生成一个新的访问令牌,并分配“写入”角色。
from langchain.llms import HuggingFaceHub
import os
from getpass import getpass
os.environ["HUGGINGFACEHUB_API_TOKEN"] = getpass("HF Token:")
一旦获得了访问令牌,使用HuggingFaceHub将Transformers模型与Langchain集成。在这种情况下,使用Zephyr,一个在Mistral 7B上微调的模型。
llm = HuggingFaceHub(
repo_id="huggingfaceh4/zephyr-7b-alpha",
model_kwargs={"temperature": 0.5, "max_length": 64,"max_new_tokens":512}
)
query = "印度和阿联酋的首都是哪里?"
prompt = f"""
<|system|>
是一个非常听话的AI助手。
请务必真实并给出直接的答案
<|user|>
{query}
<|assistant|>
"""
response = llm.predict(prompt)
print(response)
由于使用的是免费的Inference API,使用13B、34B和70B的大型语言模型有一些限制。
LLamaCPP允许使用以.gguf文件格式打包的模型,在仅CPU和混合CPU/GPU环境中高效运行。要使用LlamaCPP,特别需要模型路径以.gguf结尾的模型。可以从这里下载模型:
zephyr-7b-beta.Q4.gguf
from langchain.llms import LlamaCpp
from google.colab import drive
drive.mount('/content/drive')
llm_cpp = LlamaCpp(
streaming = True,
model_path="/content/drive/MyDrive/LLM_Model/zephyr-7b-beta.Q4_K_M.gguf",
n_gpu_layers=2,
n_batch=512,
temperature=0.75,
top_p=1,
verbose=True,
n_ctx=4096
)
query = "埃隆·马斯克是谁?"
prompt = f"""
<|system|>
是一个非常听话的AI助手。
请务必真实并给出直接的答案
<|user|>
{query}
<|assistant|>
"""
response = llm_cpp.predict(prompt)
print(response)
- 使用HuggingFace的Transformers管道,可以轻松选择任何顶级的大型语言模型,如Llama2 70B、Falcon 180B或Mistral 7B。推理脚本不到五行代码。
- 并非所有人都能负担得起使用A100或V100 GPU,HuggingFace提供免费的Inference API(访问令牌)来实现HuggingFace Hub中的一些模型。在这种情况下,最受欢迎的模型是7B模型。
- 当需要在CPU上运行大型语言模型时,使用LLamaCPP。目前,LLamaCPP仅支持.gguf模型文件。
- 建议遵循提示模板,在用户查询上运行predict()方法。
- Q1. LangChain和Hugging Face之间有什么区别?
- LangChain专注于基于区块链的去中心化AI模型,强调透明度和数据所有权。相比之下,Hugging Face提供了一个分享和使用预训练AI模型的平台,专注于NLP应用。
- Q2. LangChain是否比Hugging Face更好?
- Hugging Face用于寻找预训练模型。LangChain用于使用这些模型构建应用。它们经常一起工作。将Hugging Face视为模型商店,LangChain视为构建器。
- Q3. LangChain用于什么?
- LangChain用于在区块链上部署去中心化AI模型,确保透明度和用户对数据及算法的控制。
- Q4. Hugging Face到底做什么?
- Hugging Face提供了一个分享、发现和使用预训练AI模型的平台,主要关注自然语言处理(NLP)任务,如文本生成、翻译和情感分析。