Chat-LoL 模型下载地址:https://www.modelscope.cn/models/kmno4zx/huanhuan-chat-internlm2/summary
此仓库主要用于将 LOL智能小助手项目部署到 ModelScope 。
LOL智能小助手基于InternLM-chat-7b基座模型,利用op.gg官网上的部分数据进行LoRA方法微调,以及B站中的视频攻略(转文本)作为RAG向量知识库文本,完成的LOL智能小助手问答demo。
lol智能小助手 数据集采用OPGG的胜率、出场率、弱势英雄、当前版本的level等组成200余条,将每条数据完成扩充后,共计【11400】余条,用扩充后的数据集完成LORA微调,数据集样例:
可以使用仓库中utils文件夹中的脚本【spider_opgg.py】完成opgg的爬取,并使用脚本【generate_data.py】完成数据集的扩充。
RAG就是通过检索获取相关的知识并将其融入Prompt,让大模型能够参考相应的知识从而给出合理回答。因此,可以将RAG的核心理解为“检索+生成”,前者主要是利用向量数据库的高效存储和检索能力,召回目标知识;后者则是利用大模型和Prompt工程,将召回的知识合理利用,生成目标答案。
完整的RAG应用流程主要包含两个阶段:
-
数据准备阶段:数据提取——>文本分割——>向量化(embedding)——>数据入库
-
应用阶段:用户提问——>数据检索(召回)——>注入Prompt——>LLM生成答案
LOL智能小助手使用的是从B站攻略视频中生成的攻略文字,字数逾10w+,完成知识库构建。使用到开源词向量模型 Sentence Transformer完成embedding,借助开源第三方库NLTK完成tokenize和tagger。使用 LangChain 提供的 FileLoader 对象来加载目标文件,得到由目标文件解析出的纯文本内容。
有两种方案,我更倾向于使用 XTuner 训练, XTuner 有各个模型的一键训练脚本,很方便。且对 InternLM2 的支持度最高。
使用 Transformers 的 Trainer 进行微调。
使用 XTuner 进行微调,具体脚本可参考internlm_chat_7b_qlora_opgg2024_e3.py),该脚本在train
文件夹下。脚本内有较为详细的注释。
- 首先安装LmDeploy
pip install -U lmdeploy
- 然后转换模型为
turbomind
格式
--dst-path: 可以指定转换后的模型存储位置。
lmdeploy convert internlm-chat-7b 要转化的模型地址 --dst-path 转换后的模型地址
- LmDeploy Chat 对话
lmdeploy chat turbomind 转换后的turbomind模型地址
- TurboMind推理 + API服务
通过下面命令启动服务。
# ApiServer+Turbomind api_server => AsyncEngine => TurboMind
lmdeploy serve api_server ./workspace \
--server_name 0.0.0.0 \
--server_port 23333 \
--instance_num 64 \
--tp 1
上面的参数中 server_name 和 server_port 分别表示服务地址和端口,tp 参数表示 Tensor 并行。instance_num 参数表示实例数,可以理解成 Batch 的大小。
- 安装 OpenCompass
git clone https://github.com/open-compass/opencompass
cd opencompass
pip install -e .
- 下载解压数据集
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
unzip OpenCompassData-core-20231110.zip
- 评测启动!
python run.py \
--datasets ceval_gen \
--hf-path /root/model/huanhuan/kmno4zx/huanhuan-chat-internlm \
--tokenizer-path /root/model/huanhuan/kmno4zx/huanhuan-chat-internlm \
--tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True \
--model-kwargs device_map='auto' trust_remote_code=True \
--max-seq-len 2048 \
--max-out-len 16 \
--batch-size 2 \
--num-gpus 1 \
--debug
W4
量化
lmdeploy lite auto_awq 要量化的模型地址 --work-dir 量化后的模型地址
- 转化为
TurbMind
lmdeploy convert internlm-chat-7b 量化后的模型地址 --model-format awq --group-size 128 --dst-path 转换后的模型地址
- 评测
config
编写
from mmengine.config import read_base
from opencompass.models.turbomind import TurboMindModel
with read_base():
# choose a list of datasets
from .datasets.ceval.ceval_gen import ceval_datasets
# and output the results in a choosen format
# from .summarizers.medium import summarizer
datasets = [*ceval_datasets]
internlm2_chat_7b = dict(
type=TurboMindModel,
abbr='internlm-chat-7b-turbomind',
path='转换后的模型地址',
engine_config=dict(session_len=512,
max_batch_size=2,
rope_scaling_factor=1.0),
gen_config=dict(top_k=1,
top_p=0.8,
temperature=1.0,
max_new_tokens=100),
max_out_len=100,
max_seq_len=512,
batch_size=2,
concurrency=1,
# meta_template=internlm_meta_template,
run_cfg=dict(num_gpus=1, num_procs=1),
)
models = [internlm_chat_7b]
- 评测启动!
python run.py configs/eval_turbomind.py -w 指定结果保存路径
- 转换为
TurbMind
lmdeploy convert internlm-chat-7b 模型路径 --dst-path 转换后模型路径
- 计算与获得量化参数
# 计算
lmdeploy lite calibrate 模型路径 --calib-dataset 'ptb' --calib-samples 128 --calib-seqlen 2048 --work-dir 参数保存路径
# 获取量化参数
lmdeploy lite kv_qparams 参数保存路径 转换后模型路径/triton_models/weights/ --num-tp 1
- 更改
quant_policy
改成4
,更改上述config
里面的路径 - 评测启动!
python run.py configs/eval_turbomind.py -w 结果保存路径
结果文件可在同目录文件results中获取
感谢上海人工智能实验室组织的 书生·浦语实战营 学习活动~
感谢 OpenXLab 对项目部署的算力支持~
感谢 浦语小助手 对项目的支持~