【RAG】使用Llamaindex框架部署InternLM2-1.8B

【RAG】使用Llamaindex框架部署InternLM2-1.8B

一、前置知识

  • 给模型注入新知识的方式
    • 内部方式:更新模型的权重,但训练代价较大。
    • 外部方式:给模型注入额外的上下文或外部信息,不改变其权重。
  • RAG 工作原理
    • 将问题编码成向量,在向量数据库中找到最相关的文档块(top-k chunks)。
    • 将知识源分割成小块,编码成向量并存储在向量数据库中。
    • 将检索到的文档块与原始问题一起作为提示输入到 LLM 中,生成最终的回答。
  • RAG 效果比对
    • 由于 xtuner 是较新的框架,InternLM2-Chat-1.8B 训练数据库中未收录相关信息,使用 RAG 前问答均未给出准确答案,使用后能获得想要的答案。

二、环境、模型准备

(一)配置基础环境

  • Intern Studio 服务器上部署 LlamaIndex

    • 打开 Intern Studio 界面,点击 创建开发机 配置开发机系统。
    • 填写 开发机名称 后,点击 选择镜像 使用 Cuda11.7-conda 镜像,在资源配置中选择 30% A100 * 1 的选项,立即创建开发机器。
    • 进入开发机后,创建新的 conda 环境,命名为 llamaindex,运行以下命令:
    1
    2
    3
    4
    5
    conda create -n llamaindex python=3.10
    conda env list
    conda activate llamaindex
    conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
    pip install einops==0.7.0 protobuf==5.26.1
    • 环境激活后,命令行左边会显示当前环境名称。

(二)安装 LlamaIndex

  • 安装 LlamaIndex 和相关的包:

    1
    2
    conda activate llamaindex
    pip install llama-index==0.10.38 llama-index-llms-huggingface==0.2.0 "transformers[torch]==4.41.1" "huggingface_hub[inference]==0.23.1" huggingface_hub==0.23.1 sentence-transformers==2.7.0 sentencepiece==0.2.0

(三)下载 Sentence Transformer 词嵌入模型

  • 新建一个 python 文件,贴入以下代码:

    1
    2
    3
    4
    5
    6
    7
    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 目录下执行该脚本自动开始下载。

(四)下载 NLTK 相关资源

阅读更多
【Prompt Engineering】LangGPT结构化提示词编写

【Prompt Engineering】LangGPT结构化提示词编写

前言

在日常使用大模型时,我发现它经常在数字比对这类基础问题上出错,并且输出结果很不严谨。为了解决这个问题,我尝试使用Prompt Engineering,并在网上找到了一个开源的「结构化提示词框架」-- LangGPT,以下是我的使用过程记录。


实现步骤

step0:前期准备

  1. 创建虚拟环境->激活虚拟环境->安装必要包文件

  2. 创建项目路径->进入项目

  3. 安装必要软件,如tmux

step1:模型部署模型下载->部署模型为OpenAI server->图形化界面调用
‬⁠⁠⁠
step3:langgpt结构化提示词⁠‬编写⁠‍‬⁠‬‬‬‌‌‌‍‌‌
偷懒大法:GPTS有LangGPT提示词专家,用大模型生成即可


tmux使用

tmux可以在终端中创建终端,将进程维持在后台。

阅读更多
8G显存玩转书生大模型Demo

8G显存玩转书生大模型Demo

环境配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建环境
conda create -n demo python=3.10 -y
# 激活环境
conda activate demo
# 安装 torch
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖
pip install transformers==4.38
pip install sentencepiece==0.1.99
pip install einops==0.8.0
pip install protobuf==5.27.2
pip install accelerate==0.33.0
pip install streamlit==1.37.0

InternLM2-Chat-1.8B 模型部署

一、用Cli Demo 部署

1.创建demo文件夹,用于存放代码。并创建 cli_demo.py文件

1
2
mkdir -p /root/demo
touch /root/demo/cli_demo.py

其中cli_demo.py 的代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM


model_name_or_path = "/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b"

tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True, device_map='cuda:0')
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='cuda:0')
model = model.eval()

system_prompt = """You are an AI assistant whose name is InternLM (书生·浦语).
- InternLM (书生·浦语) is a conversational language model that is developed by Shanghai AI Laboratory (上海人工智能实验室). It is designed to be helpful, honest, and harmless.
- InternLM (书生·浦语) can understand and communicate fluently in the language chosen by the user such as English and 中文.
"""

messages = [(system_prompt, '')]

print("=============Welcome to InternLM chatbot, type 'exit' to exit.=============")

while True:
input_text = input("\nUser >>> ")
input_text = input_text.replace(' ', '')
if input_text == "exit":
break

length = 0
for response, _ in model.stream_chat(tokenizer, input_text, messages):
if response is not None:
print(response[length:], flush=True, end="")
length = len(response)
阅读更多
书生·浦语大模型全链路开源开放体系及其最新发展

书生·浦语大模型全链路开源开放体系及其最新发展

博客:书生·浦语大模型全链路开源开放体系及其最新发展

在现代人工智能技术的迅猛发展浪潮中,书生·浦语大模型全链路开源开放体系以其独特的优势和卓越的性能,在各个领域中不断取得突破性进展。本文将详细介绍该体系的发展历程、最新版本的特征、基于规则、模型和反馈的数据生成方法,以及mind search项目、开源数据提取工具和预训练框架、EXTINA的评测和部署、知识管理工具等各个方面的应用与优化策略。

书生·浦语大模型全链路开源开放体系的历程及最新版本的特征

书生·浦语大模型开源开放体系在多个方面表现出色,包括数据收集整理、模型训练、微调、评测和搜索引擎AI应用的部署等方面。最新版本书生·浦语大模型2.5在推理能力和短期记忆等方面有质的飞跃,并开放了label LLM项目,方便标注数据。此外,视频还介绍了模型的性能天梯和应用前景。

  • 书生浦语大模型开源开放体系

  • InputLM2.5性能飞跃

  • 迭代发展过程中的数据驱动模型性能

基于规则、模型和反馈的数据生成方法,以及如何使用开源项目进行标注和推理

反映模型的数据生成方法在模型优化和训练过程中至关重要,以下是一些关键方法的介绍:

  • 基于模型的反馈数据生成方法:包括相似度对齐和基于反馈的强化训练。

  • 大海捞针实验:介绍模型的推理能力和大海捞针实验,模型在处理稀长背景知识的表现。

  • 问题匹配分块:介绍问题匹配分块的方法,可以用于语言模型的索引和问题理解。

mind search项目

阅读更多
python-debug

python-debug

任务一

请用Python实现一个wordcount函数,统计英文字符串中每个单词出现的次数。返回一个字典,key为单词,value为对应单词出现的次数。

源程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"""  请用Python实现一个wordcount函数,统计英文字符串中每个单词出现的次数。返回一个字典,key为单词,value为对应单词出现的次数。

    TIPS:记得先去掉标点符号,然后把每个单词转换成小写。不需要考虑特别多的标点符号,只需要考虑实例输入中存在的就可以。"""

text = """
Got this panda plush toy for my daughter's birthday,
who loves it and takes it everywhere. It's soft and
super cute, and its face has a friendly look. It's
a bit small for what I paid though. I think there
might be other options that are bigger for the
same price. It arrived a day earlier than expected,
so I got to play with it myself before I gave it
to her.
"""

def wordcount(text):

    text=text.replace(",","")
    text=text.replace(".","")
    text=text.replace("\n","")

    text_list=text.split(" ")
    text_dict={}
    for i in text_list:
        if i not in text_dict:
            text_dict[i]=1
        else:
            text_dict[i]+=1
           
    return text_dict
   
print(wordcount(text))

任务二

请使用本地vscode连接远程开发机,将上面你写的wordcount函数在开发机上进行debug,体验debug的全流程,并完成一份debug笔记(需要截图)。

1.首先重命名debug命令

在bashrc配置文件中输入:
alias pyd='python -m debugpy --wait-for-client --listen 5678'

再输入保存命令:
source ~/.bashrc

阅读更多
🍉Book-6章-支持向量机

🍉Book-6章-支持向量机

章节介绍

统计学领域名声赫赫的SVM核方法是时至今日仍在高频使用的经典算法。

笔记介绍

对本章各节知识点进行汇总,主要分为引入原因,原理思想,和一些思考,对于数学推导内容介绍较少,有需要的可以先阅读西瓜书,再参考南瓜书的数学推导。

数学知识

大部分都是规划类、最优化的问题,最好先进行相关知识的学习。

这里推荐一本书:最优化:建模、算法与理论 (刘浩洋 户将 李勇锋 文再文)

SVM-支持向量机

引入原因:

线性可分的条件下,我们在训练集做分类任务时,最基本的想法就是在样本空间中找到一个超平面进行划分,
但是对于分类任务,我们可以画出很多个超平面,这时候就需要引入损失函数,对超平面进行选择,而使得两个异类支持向量距离最大化,就是我们所说的支持向量机的基本型

阅读更多
🍉Book-5章-神经网络

🍉Book-5章-神经网络

神经网络模型

1943年一直沿用至今的M-P神经网络模型

M-P神经网络模型

模型解释

将输入神经元的x乘上相应权重w并求和,将结果与阈值$\theta$做差,再经过激活函数f得到输出值y

名词解释

阈值(threshold / bias):
表示神经元电位超过阈值则被激活

激活函数(activation function):也称挤压函数响应函数,用于将输入值映射为0/1或(0,1)

训练目标

通过训练模型,得出合适的w和$\theta$,其中训练算法最常见的就是下面会说到的BP算法

阅读更多
🍉Book-4章-决策树

🍉Book-4章-决策树

递归终止条件

决策树使用递归实现,而递归终止条件有以下三种:

  1. 当前结点所有样本属于同类,无需划分

  2. 当前属性集为空,无法划分,选取此节点中数量更多的标记作为类别标记

  3. 当前样本集为空,不能划分,依据父节点中数量更多的标记作为类别标记

名词概念

1.纯度:同类聚集程度高、不同类越分散,则纯度越高
2.信息熵:纯度的量化指标,来源于信息论
3.剪枝:防止决策树过拟合,减去部分划分属性。分为预剪枝和后剪枝

信息熵

信息熵计算公式
$$ E n t ( D ) = - \sum _ { k = 1 } ^ { | y | } p _ { k } \log _ { 2 } p _ { k }$$
信息熵用于衡量信息的不确定性或信息的混乱程度,我们可以将其用于量化纯度
信息熵越大,数据分布越均匀、随机、杂乱无章,明显这不是我们想要的。我们想要的是相同类靠近,不同类远离的效果,即需要越小的信息熵

$p_k$表示选到k类别的概率,而 $-\log _ { 2 } p _ { k }$则表示信息量

1
我们可以理解对于某一事件,其发生的概率越小,那么其信息量越大;发生的概率越大,那么其信息量越小。所有对两者求期望即得到信息熵。

注意:此处计算公式里的Y的输出值种类,如二分类问题中Y=2

阅读更多
🍉Book-3章-线性模型

🍉Book-3章-线性模型

所需数学知识

  1. 求偏导
  2. 矩阵求导
  3. 求逆矩阵

名词解释

1.序关系

有序:属性之间可进行相对比较(如大、中、小)
无序:属性之间不可进行相对比较(如南瓜、西瓜、冬瓜)

2.符号arg与s.t.

arg:即argument(参数),用于表示求出指定函数时的**参数取值**
	例如:
	arg min 就是使后面这个式子达到最小值时的 变量的取值
	arg max 就是使后面这个式子达到最大值时的 变量的取值
	
s.t.:即subject to,意思是受限于...,后面紧跟约束条件

3.闭式解

也叫做 解析解,
闭式解就是一些严格的公式,给出任意的自变量就可以求出其因变量,也就是问题的解
南瓜书中说闭式解是指可以通过具体的表达式解出待解参数

模型介绍

阅读更多
🍉Book-2章-模型评估与选择

🍉Book-2章-模型评估与选择

术语名词

1.泛化误差与经验误差

泛化误差:在“未来”样本上的误差

经验误差:在训练集上的误差,亦称“训练误差”

训练集样本数越接近数据集数量,经验误差就越小。但是经验误差越小,模型效果就越好吗?

请注意,我们是为了得到泛化能力强的模型,而经验误差≠泛化误差

经验误差很小,会使模型学习到训练样本中的许多无用特征,导致泛化能力变弱
我们称其为过拟合(overfitting)

而与之相对的概念,我们称为欠拟合(underfitting),其表示的就是模型没有很好的学习到训练样本上的特征,从而也导致泛化能力变弱

2.过拟合与欠拟合

过拟合:模型在训练数据上表现得过于复杂,以至于在未见过的数据上表现不佳。欠拟合:模型在训练数据上表现得过于简单,无法捕捉到数据的内在结构和模式。

出现原因
1.出现欠拟合的情况,一般是由于样本特征少模型复杂度低

阅读更多