Coder Social home page Coder Social logo

internlm_lol_assistant's Introduction

LOL智能小助手

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微调,数据集样例:

数据集样例.png

​ 可以使用仓库中utils文件夹中的脚本【spider_opgg.py】完成opgg的爬取,并使用脚本【generate_data.py】完成数据集的扩充。

测试样例

网页demo样例.png

RAG

  RAG就是通过检索获取相关的知识并将其融入Prompt,让大模型能够参考相应的知识从而给出合理回答。因此,可以将RAG的核心理解为“检索+生成”,前者主要是利用向量数据库的高效存储和检索能力,召回目标知识;后者则是利用大模型和Prompt工程,将召回的知识合理利用,生成目标答案。

完整的RAG应用流程主要包含两个阶段:

  • 数据准备阶段:数据提取——>文本分割——>向量化(embedding)——>数据入库

  • 应用阶段:用户提问——>数据检索(召回)——>注入Prompt——>LLM生成答案

  LOL智能小助手使用的是从B站攻略视频中生成的攻略文字,字数逾10w+,完成知识库构建。使用到开源词向量模型 Sentence Transformer完成embedding,借助开源第三方库NLTK完成tokenize和tagger。使用 LangChain 提供的 FileLoader 对象来加载目标文件,得到由目标文件解析出的纯文本内容。

微调

  有两种方案,我更倾向于使用 XTuner 训练, XTuner 有各个模型的一键训练脚本,很方便。且对 InternLM2 的支持度最高。

方案一:Transformers

  使用 Transformers 的 Trainer 进行微调。

方案二:XTuner

  使用 XTuner 进行微调,具体脚本可参考internlm_chat_7b_qlora_opgg2024_e3.py),该脚本在train文件夹下。脚本内有较为详细的注释。

LmDeploy部署

  • 首先安装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 评测

  • 安装 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

Lmdeploy&opencompass 量化以及量化评测

W4量化评测

  • 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 指定结果保存路径

KV Cache量化评测

  • 转换为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 对项目部署的算力支持~

感谢 浦语小助手 对项目的支持~

internlm_lol_assistant's People

Contributors

2001wjh avatar

Stargazers

 avatar KUN avatar  avatar

Watchers

 avatar

Forkers

zmcc18

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.