建设银行网站注册企业,公司企业网络维护外包,国有平台公司是什么意思,大美工网站Question-answering Chatbot with LangChain on an AMD GPU — ROCm Blogs 作者#xff1a;Phillip Dang 2024年3月11日
LangChain是一个旨在利用语言模型强大功能来构建前沿应用程序的框架。通过将语言模型连接到各种上下文资源并基于给定的上下文提供推理能力#xff0c;L…Question-answering Chatbot with LangChain on an AMD GPU — ROCm Blogs 作者Phillip Dang 2024年3月11日
LangChain是一个旨在利用语言模型强大功能来构建前沿应用程序的框架。通过将语言模型连接到各种上下文资源并基于给定的上下文提供推理能力LangChain创建了能够智能推理和响应的上下文感知应用程序。在这篇博客中我们演示了如何使用LangChain和Hugging Face来创建一个简单的问答聊天机器人。我们还展示了如何使用检索增强生成RAG技术来增强我们的大型语言模型LLM知识然后允许我们的机器人根据指定文档中的信息来回答查询。
前提条件
要运行本文中的内容你需要以下条件 AMD GPUs: AMD Instinct GPU. Linux: see the supported Linux distributions. ROCm 6.0 PyTorch 或者你可以启动一个包含以上设置的 Docker 容器将 /YOUR/FOLDER 替换成你选择的目录它将挂载到 Docker 根目录。下面是一个使用 ROCm 6.2 和 PyTorch 2.3 的示例 docker run -it --group-addvideo --ipchost --cap-addSYS_PTRACE --security-opt seccompunconfined --device /dev/kfd --device/dev/dri -v /YOUR/FOLDER:/root rocm/pytorch:rocm6.2_ubuntu22.04_py3.10_pytorch_release_2.3.0为了检查你的硬件并确保系统识别你的 GPU请运行
! rocm-smi --showproductname你的输出应该如下所示 ROCm System Management Interface Product Info
GPU[0] : Card series: Instinct MI210
GPU[0] : Card model: 0x0c34
GPU[0] : Card vendor: Advanced Micro Devices, Inc. [AMD/ATI]
GPU[0] : Card SKU: D67301End of ROCm SMI Log 接下来确保 PyTorch 检测到你的 GPU
import torch
print(fnumber of GPUs: {torch.cuda.device_count()})
print([torch.cuda.get_device_name(i) for i in range(torch.cuda.device_count())])你的输出应该如下所示
number of GPUs: 1
[AMD Radeon Graphics]库
要构建一个能够与文档聊天的聊天机器人你将需要以下三个工具 LangChain 一个语言模型 使用 Facebook AI 相似性搜索 (FAISS) 的 RAG
LangChain
LangChain 作为一个框架用于创建由语言模型驱动的应用程序。它允许应用程序 通过将语言模型与上下文资源如提示、示例或相关内容链接来*拥抱上下文性*以丰富其响应。 依靠语言模型根据给定的上下文逻辑地推导答案并决定采取适当的行动来*进行推理*。
要安装 LangChain请运行 pip install langchain langchain-community。
语言模型
在本博客中我们使用Google Flan-T5-large作为我们的底层语言模型。 要安装我们的语言模型并与文档聊天请运行以下代码pip install transformers sentence-transformers。
带有 FAISS 的 RAG 尽管大规模语言模型LLM在各种领域都很智能但它们的知识仅限于在训练完成时可供其使用的公共信息。如果我们希望模型考虑私有信息或训练后的数据我们必须自己添加这些额外的信息。这个添加过程叫做RAG而用于高效检索相关信息的工具是FAISS。
FAISS是一个用于高效相似性搜索和密集向量聚类的库。它广泛用于近邻搜索、相似性匹配以及在大型数据集中的其他相关操作。它帮助我们高效存储新的信息并根据我们的查询检索最相关的信息块。
要安装FAISS请运行pip install faiss-cpu。
QA 聊天机器人
首先设置您的语言模型。您需要拥有一个Hugging Face API Token。
import os
from langchain import HuggingFaceHub, LLMChain
from langchain.prompts import PromptTemplateos.environ[HUGGINGFACEHUB_API_TOKEN] your Huggingface API Token herellm HuggingFaceHub(repo_idgoogle/flan-t5-large,model_kwargs{temperature:0.5,max_length: 512})一旦您有了您的模型您可以通过 LangChain 的 LLMChain 来将各组件组合在一起。LLMChain 使用 PromptTemplate 来结构化用户输入然后将这些输入发送给您的语言模型进行处理。这使得 LLMChain 成为生成连贯语言的有价值工具。
template Question: {question}
Answer: Lets think step by step.prompt PromptTemplate(templatetemplate, input_variables[question])
llm_chain LLMChain(promptprompt, llmllm)现在是有趣的部分——让我们向聊天机器人问几个问题
输入:
question What is the capital of Ecuador?
llm_chain.run(question)输出:
Quito is the capital city of Ecuador. Quito is located in the north of the country. The answer: Quito.输入:
question What is GTA?
llm_chain.run(question)输出:
GTA is an abbreviation for Grand Theft Auto. GTA is a video game series. The answer: video game series.输入:
question What are some key advantages of LoRA for LLM?
llm_chain.run(question)输出:
LoRA is a centralized repository for all LLM degree work. The LLM degree program at the University of
Michigan was the first to use LoRA for their degree program. The University of Michigan School of Law
is the first law school in the United States to use LoRA for their degree program.最后一个问题的答案是错误的。这可能是因为模型的训练数据中没有包含关于 LoRA 的信息。在下一部分中我们将通过应用 RAG 技术来解决这个问题。
QA 聊天机器人使用 RAG 技术 根据前一节的内容模型错误地回答了我们关于LoRA技术的问题——这可能是因为在模型训练时没有包含该信息。要解决这个问题你可以使用RAG技术将信息包含到你的模型中。 RAG工作分为两个阶段 检索阶段给定一个查询例如一个临床问题模型在大型数据库中搜索相关文档或片段。 生成阶段模型使用检索到的信息生成响应确保输出基于输入数据在我们的例子中将是一个PDF。
要看到这点的实际效果你需要创建两个函数一个用于处理我们的输入数据关于LoRA的PDF论文另一个用于构建我们的知识数据库。
from langchain.vectorstores import FAISS
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddingsdef process_text(text):# 使用LangChain的CharacterTextSplitter将文本分割成片段text_splitter CharacterTextSplitter(separator\n, chunk_size256, chunk_overlap64, length_functionlen)chunks text_splitter.split_text(text)# 将文本片段转换为嵌入以形成知识库embeddings HuggingFaceEmbeddings(model_namesentence-transformers/all-mpnet-base-v2)knowledgeBase FAISS.from_texts(chunks, embeddings)return knowledgeBaseimport PyPDF2
import requests
from io import BytesIO# 阅读PDF论文
pdf_url https://arxiv.org/pdf/2106.09685.pdf
response requests.get(pdf_url)
pdf_file BytesIO(response.content)
pdf_reader PyPDF2.PdfReader(pdf_file)def get_vectorstore():# 从pdf_reader构建向量存储text # 变量text将存储pdf文本for page in pdf_reader.pages:text page.extract_text()# 创建知识库对象db process_text(text)return dbdb get_vectorstore()现在通过加载LangChain的QA链搜索知识数据库中最相关的信息并查看聊天机器人是否能提供更准确的答案来将所有内容结合在一起
from langchain.chains.question_answering import load_qa_chain
# 加载QA链
chain load_qa_chain(llm, chain_typestuff, prompt)query what are some key advantages of LoRA for LLM?
# 搜索数据库中相关的信息
docs db.similarity_search(queryquery)# 运行我们的链
chain.run(input_documentsdocs, questionquery)输出:
LORA makes training more efficient and lowers the hardware barrier to entry by up to 3 times when
using adaptive optimizers since we do not need to calculate the gradients or cantly fewer GPUs and
avoid I/O bottlenecks. Another benefit is that we can switch between tasks while deployed at a much
lower cost by only swapping the LoRA weights as opposed to all the在为我们的模型提供了额外的信息后更新的答案显然更加相关通过input_documentsdocs参数可以实现这一点。 我们建议测试不同的LLM作为基础模型并尝试用于不同用例的各种LLMChain。我们还鼓励实验不同的处理方法并细分输入文档以提高相似性搜索的相关性。