天津seo公司网站,长沙做网站改版哪里好,flash中国官网,网页布局的基本概念LlamaIndex本地部署InternLM实践
XTuner是一个调整模型参数的小工具,通过对于给定的大模型输入有限的参数来调整同类型问题的结果输出
LlamaIndex是一个将大语言模型#xff08;LLMs#xff09;和外部数据连接在一起的工具#xff0c;主要用于增强大模型的知识获取能力…LlamaIndex本地部署InternLM实践
XTuner是一个调整模型参数的小工具,通过对于给定的大模型输入有限的参数来调整同类型问题的结果输出
LlamaIndex是一个将大语言模型LLMs和外部数据连接在一起的工具主要用于增强大模型的知识获取能力。LlamaIndex通过查询和检索的方式将外部数据与大模型的输入相结合从而在有限的输入长度限制下提供更多的信息。
以在 Intern Studio 服务器上部署 LlamaIndex 为例。 首先打开 Intern Studio 界面点击 创建开发机 配置开发机系统。 填写 开发机名称 后点击 选择镜像 使用 Cuda11.7-conda 镜像然后在资源配置中使用 30% A100 * 1 的选项然后立即创建开发机器。 点击 进入开发机 选项。 进入开发机后创建新的 conda 环境命名为 llamaindex在命令行模式下运行
conda create -n llamaindex python3.10复制完成后在本地查看环境。
conda env list结果如下所示。
conda activate llamaindex然后安装 python 相关基础依赖包
pip install einops0.7.0 protobuf5.26.1安装 Llamaindex 与 Pytorch
安装 Llamaindex 和相关的包
conda activate llamaindex
pip install llama-index0.10.38 llama-index-llms-huggingface0.2.0 transformers[torch]4.41.1 huggingface_hub[inference]0.23.1 huggingface_hub0.23.1 sentence-transformers2.7.0 sentencepiece0.2.0安装 LlamaIndex 词嵌入向量依赖
conda activate llamaindex
pip install llama-index-embeddings-huggingface0.2.0 llama-index-embeddings-instructor0.1.3在这一步请确定llama-index-embeddings-huggingface安装成功 如果存在not found错误请重新安装
pip install llama-index-embeddings-huggingface0.2.0
确保 huggingface_hub0.23.1
最后再安装 Pytorch
conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.7 -c pytorch -c nvidia安装完成后验证 Pytorch 是否正确安装并使用了指定的 CUDA 版本
import torch
print(torch.__version__) # 应输出类似 2.0.1
print(torch.version.cuda) # 应输出 11.7
print(torch.cuda.is_available())# 应输出 True关于 LlamaIndex 与 Pytorch 安装顺序的说明
关于本次实验的运行环境我们建议的是如上 先安装 Llamaindex 再安装 Pytorch。 “先安装 Pytorch 再安装 Llamaindex”存在的问题是匹配CUDA 11.7的torch安装在前但是其后安装 LLamaIndex 相关的指令会稳定触发torch的升级到最新版本而新版本的PyTorch (2.5.1) 默认使用CUDA 12.4导致 Pytorch 版本与 CUDA版本不匹配。 这样当进行到模型推理的步骤时就会报错 RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling cublasCreate(handle)
这时候就需要再次重新安装正确的torch
conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.7 -c pytorch -c nvidia下载 Sentence Transformer 模型
源词向量模型 Sentence Transformer:我们也可以选用别的开源词向量模型来进行 Embedding目前选用这个模型是相对轻量、支持中文且效果较好的同学们可以自由尝试别的开源词向量模型 运行以下指令新建一个 python 文件
cd ~
mkdir llamaindex_demo
mkdir model
cd ~/llamaindex_demo
touch download_hf.py打开download_hf.py 贴入以下代码
import os# 设置环境变量
os.environ[HF_ENDPOINT] https://hf-mirror.com# 下载模型
os.system(huggingface-cli download --resume-download sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 --local-dir /root/model/sentence-transformer)然后在 /root/llamaindex_demo 目录下执行该脚本即可自动开始下载
cd /root/llamaindex_demo
conda activate llamaindex
python download_hf.py下载 NLTK 相关资源
我们在使用开源词向量模型构建开源词向量的时候需要用到第三方库 nltk 的一些资源。正常情况下其会自动从互联网上下载但可能由于网络原因会导致下载中断此处我们可以从国内仓库镜像地址下载相关资源保存到服务器上。 我们用以下命令下载 nltk 资源并解压到服务器上
cd /root
git clone https://gitee.com/yzy0612/nltk_data.git --branch gh-pages
cd nltk_data
mv packages/* ./
cd tokenizers
unzip punkt.zip
cd ../taggers
unzip averaged_perceptron_tagger.zip之后使用时服务器即会自动使用已有资源无需再次下载 LlamaIndex HuggingFaceLLM 运行以下指令把 InternLM2 1.8B 软连接出来
cd ~/model
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b/ ./执行这条指令后在/model目录下会创建一个名为internlm2-chat-1_8b的软链接这个软链接指向/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b/目录。这样当你进入/model/internlm2-chat-1_8b时实际上会访问到/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b/目录的内容。这样做可以方便地访问或管理模型文件而不必每次都使用完整的路径。
运行以下指令新建一个 python 文件
cd ~/llamaindex_demo
touch llamaindex_internlm.py打开 llamaindex_internlm.py 贴入以下代码
from llama_index.llms.huggingface import HuggingFaceLLM
from llama_index.core.llms import ChatMessage
llm HuggingFaceLLM(model_name/root/model/internlm2-chat-1_8b,tokenizer_name/root/model/internlm2-chat-1_8b,model_kwargs{trust_remote_code:True},tokenizer_kwargs{trust_remote_code:True}
)rsp llm.chat(messages[ChatMessage(contentxtuner是什么)])
print(rsp)之后运行
conda activate llamaindex
cd ~/llamaindex_demo/
python llamaindex_internlm.py结果为
LlamaIndex RAG 运行以下命令获取知识库
cd ~/llamaindex_demo
mkdir data
cd data
git clone https://github.com/InternLM/xtuner.git
mv xtuner/README_zh-CN.md ./运行以下指令新建一个 python 文件
cd ~/llamaindex_demo
touch llamaindex_RAG.py打开llamaindex_RAG.py贴入以下代码
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settingsfrom llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLM#初始化一个HuggingFaceEmbedding对象用于将文本转换为向量表示
embed_model HuggingFaceEmbedding(
#指定了一个预训练的sentence-transformer模型的路径model_name/root/model/sentence-transformer
)
#将创建的嵌入模型赋值给全局设置的embed_model属性
#这样在后续的索引构建过程中就会使用这个模型。
Settings.embed_model embed_modelllm HuggingFaceLLM(model_name/root/model/internlm2-chat-1_8b,tokenizer_name/root/model/internlm2-chat-1_8b,model_kwargs{trust_remote_code:True},tokenizer_kwargs{trust_remote_code:True}
)
#设置全局的llm属性这样在索引查询时会使用这个模型。
Settings.llm llm#从指定目录读取所有文档并加载数据到内存中
documents SimpleDirectoryReader(/root/llamaindex_demo/data).load_data()
#创建一个VectorStoreIndex并使用之前加载的文档来构建索引。
# 此索引将文档转换为向量并存储这些向量以便于快速检索。
index VectorStoreIndex.from_documents(documents)
# 创建一个查询引擎这个引擎可以接收查询并返回相关文档的响应。
query_engine index.as_query_engine()
response query_engine.query(xtuner是什么?)print(response)之后运行
conda activate llamaindexcd ~/llamaindex_demo/
python llamaindex_RAG.py借助 RAG 技术后就能获得我们想要的答案了。
LlamaIndex web 运行之前首先安装依赖
pip install streamlit1.36.0运行以下指令新建一个 python 文件cd ~/llamaindex_demo
touch app.py打开app.py贴入以下代码
import streamlit as st
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLMst.set_page_config(page_titlellama_index_demo, page_icon)
st.title(llama_index_demo)# 初始化模型
st.cache_resource
def init_models():embed_model HuggingFaceEmbedding(model_name/root/model/sentence-transformer)Settings.embed_model embed_modelllm HuggingFaceLLM(model_name/root/model/internlm2-chat-1_8b,tokenizer_name/root/model/internlm2-chat-1_8b,model_kwargs{trust_remote_code: True},tokenizer_kwargs{trust_remote_code: True})Settings.llm llmdocuments SimpleDirectoryReader(/root/llamaindex_demo/data).load_data()index VectorStoreIndex.from_documents(documents)query_engine index.as_query_engine()return query_engine# 检查是否需要初始化模型
if query_engine not in st.session_state:st.session_state[query_engine] init_models()def greet2(question):response st.session_state[query_engine].query(question)return response# Store LLM generated responses
if messages not in st.session_state.keys():st.session_state.messages [{role: assistant, content: 你好我是你的助手有什么我可以帮助你的吗}]# Display or clear chat messages
for message in st.session_state.messages:with st.chat_message(message[role]):st.write(message[content])def clear_chat_history():st.session_state.messages [{role: assistant, content: 你好我是你的助手有什么我可以帮助你的吗}]st.sidebar.button(Clear Chat History, on_clickclear_chat_history)# Function for generating LLaMA2 response
def generate_llama_index_response(prompt_input):return greet2(prompt_input)# User-provided prompt
if prompt : st.chat_input():st.session_state.messages.append({role: user, content: prompt})with st.chat_message(user):st.write(prompt)# Gegenerate_llama_index_response last message is not from assistant
if st.session_state.messages[-1][role] ! assistant:with st.chat_message(assistant):with st.spinner(Thinking...):response generate_llama_index_response(prompt)placeholder st.empty()placeholder.markdown(response)message {role: assistant, content: response}st.session_state.messages.append(message)之后运行
streamlit run app.py注意下面是在本地电脑里的powershell里运行不是在上述的 Intern Studio 中运行了
ssh -p {ssh端口从InternStudio获取} rootssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:8501 -o StrictHostKeyCheckingno
ssh -p 36356 rootssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:8501 -o StrictHostKeyCheckingno可以访问http://localhost:7860/进入下面的界面然后就可以开始尝试问问题了。