书生实战营(第三期)- 基础关卡

书生实战营 - L1



书生大模型使用Demo

对话模型部署 - 1.8B

部署过程

  • 创建环境
# 创建环境
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
  • 书生大模型文件
    书生1.8b对话模型文件

测试效果

  • 执行脚本
# 代码引自 书生实战营官方GitHub仓库:https://github.com/InternLM/Tutorial/blob/camp3/docs/L1/Demo/readme.md 

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)
  • 对话时GPU使用情况:
    对话中GPU使用情况

  • 对话实例:对话实例

  • 生成300字的小故事300字小故事

  • 使用 Streamlit Web Demo 部署聊天模型

    • git clone https://github.com/InternLM/Tutorial.git
    • streamlit run /path/to/Tutorial/tools/streamlit_demo.py --server.address 127.0.0.1 --server.port 6006
    • 使用vscode进行端口映射,即可在本地打开Web Demo
    • Temperature 是指在预测下一个字符时,不一定选择概率最大的那个字,温度越低选择概率最大的字的概率越大,温度越高,选择概率较小的字的概率越大,即温度高时输出的文本更有创造力一些
      streamlit web demo

视觉-语言多模态模型部署 - 1.8B

  • LMDeploy

    • 是一款 LLM 的部署工具包
    • 可以实现高效推理、有效量化
    • 可以启动 Gradio 的Web服务
    • pip install lmdeploy[all]==0.5.1
    • pip install timm==1.0.7
  • InternLM-XComposer2-VL-1.8B

    • 是一款基于 InternLM2 的视觉语言大模型
    • 擅长于文本图像合成与理解
    • lmdeploy serve gradio /share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-1_8b --cache-max-entry-count 0.1
    • Gradio 测试1.8b测试效果
  • InternVL2-2B

    • InternVL2 是上海人工智能实验室推出的新一代视觉-语言多模态大模型,是首个综合性能媲美国际闭源商业模型的开源多模态大模型。
    • lmdeploy serve gradio /share/new_models/OpenGVLab/InternVL2-2B --cache-max-entry-count 0.1
    • Gradio 测试2B模型测试效果

提示词工程实践

任务描述

背景问题:近期相关研究发现,LLM在对比浮点数字时表现不佳,经验证,internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题,例如认为13.8<13.11。
任务要求:利用LangGPT优化提示词,使LLM输出正确结果。完成一次并提交截图即可

使用 1.8b 模型尝试

构建 LangGPT 提示词

# Role: expert in math

## Profile
- author: 
- version: 0.1
- language: {English}

## Skills
- expert in decimal calculations
- understand Latex

## Commands
1. User input: "A=[]; B=[]"
2. calculate: $C = (A \times 100)$
3. calculate: $D = (B \times 100)$
4. print value of variable: C and D
5. print which value is bigger? C or D?
  • 用中文写一直不能很好的进行小数的数值比较,只好用蹩脚的英语来写,发现效果好很多

效果

1.8b模型测试

使用 7b 模型尝试

构建 LangGPT 提示词

# Role: expert in math

## Profile
- author: 
- version: 0.1
- language: {English}

## Skills
- expert in decimal calculations
- understand Latex

## Commands
1. User input: "A=[]; B=[]"
2. calculate: $C = (A \times 100)$
3. calculate: $D = (B \times 100)$
4. calculate: $C - D$
5. if $C-D<0$ then print $A<B$; else if $C-D>0$ then print $A>B$

效果

7b模型测试

  • 不得不说,7b模型要比1.8b 能力强很多,不需要制定很多规则,只需要描述清晰一些就能准确判断小数的大小;
  • 7b模型对显存的占用也非常高,将近23G;

Llamaindex RAG实践

使用到的工具

- `sentence-transformer` 将句子转换为向量
- `SimpleDirectoryReader` 加载指定的文件,可以加载一个路径下的所有文件,可以加载指定的几个文件,支持的文件格式有:txt, pdf, docx, epub, md 等
- `VectorStoreIndex`  基于加载的文件建立向量索引

算法流程:

1. 基于指定的文件建立向量库(`Vector-DB`);
2. 将用户的输入编码为向量(`Query`);
3. 使用用户输入向量在向量库中检索相关的文档块(`Top-K Chunks`);
4. 将检索到的文档块与原始问题一起作为`Prompt`输入到`LLM`中,生成最终的回答。

打卡任务

任务要求:
基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前InternLM2-Chat-1.8B模型不会回答,借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力,截图保存。

  • 选用的素材

    • 论文:《CatVTON: Concatenation Is All You Need for Virtual Try-On with Diffusion Models》
    • 2024/07/21 发表的论文
    • 上传PDF格式的论文即可
  • 未使用RAG的效果

    • Non-use RAG
    • 没有RAG时,直接回复无法回答;
  • 使用RAG的效果

    • Use RAG
    • 使用RAG后,可以回答出 ‘CatVTON’ 主要用于虚拟试穿场景,可以将要试穿的衣服叠加在目标人物身上,实现虚拟试穿的效果。

XTuner大模型微调实践

环境搭建

  • Python虚拟环境
Package                       Version        Editable project location
----------------------------- -------------- --------------------------
accelerate                    0.33.0
addict                        2.4.0
aiofiles                      23.2.1
aiohappyeyeballs              2.3.2
aiohttp                       3.10.0
aiosignal                     1.3.1
altair                        5.3.0
annotated-types               0.7.0
anyio                         4.4.0
argon2-cffi                   23.1.0
argon2-cffi-bindings          21.2.0
arrow                         1.3.0
arxiv                         2.1.3
asttokens                     2.4.1
async-lru                     2.0.4
async-timeout                 4.0.3
attrs                         23.2.0
Babel                         2.15.0
backports.strenum             1.3.1
beautifulsoup4                4.12.3
bitsandbytes                  0.43.3
bleach                        6.1.0
blinker                       1.8.2
Brotli                        1.0.9
cachetools                    5.4.0
certifi                       2024.7.4
cffi                          1.16.0
charset-normalizer            3.3.2
click                         8.1.7
colorama                      0.4.6
comm                          0.2.2
contourpy                     1.2.1
cycler                        0.12.1
datasets                      2.20.0
debugpy                       1.8.3
decorator                     5.1.1
deepspeed                     0.14.4
defusedxml                    0.7.1
dill                          0.3.8
distro                        1.9.0
dnspython                     2.6.1
duckduckgo_search             5.3.1b1
einops                        0.8.0
email_validator               2.2.0
et-xmlfile                    1.1.0
exceptiongroup                1.2.2
executing                     2.0.1
fastapi                       0.111.1
fastapi-cli                   0.0.4
fastjsonschema                2.20.0
feedparser                    6.0.11
ffmpy                         0.4.0
filelock                      3.13.1
fire                          0.6.0
fonttools                     4.53.1
fqdn                          1.5.1
frozenlist                    1.4.1
fsspec                        2024.5.0
func_timeout                  4.3.5
gitdb                         4.0.11
GitPython                     3.1.43
gmpy2                         2.1.2
gradio                        4.39.0
gradio_client                 1.1.1
griffe                        0.48.0
grpcio                        1.65.1
h11                           0.14.0
h2                            4.1.0
hjson                         3.1.0
hpack                         4.0.0
httpcore                      1.0.5
httptools                     0.6.1
httpx                         0.27.0
huggingface-hub               0.24.3
hyperframe                    6.0.1
idna                          3.7
imageio                       2.34.2
importlib_metadata            8.2.0
importlib_resources           6.4.0
ipykernel                     6.29.5
ipython                       8.26.0
ipywidgets                    8.1.3
isoduration                   20.11.0
jedi                          0.19.1
Jinja2                        3.1.4
json5                         0.9.25
jsonpointer                   3.0.0
jsonschema                    4.23.0
jsonschema-specifications     2023.12.1
jupyter                       1.0.0
jupyter_client                8.6.2
jupyter-console               6.6.3
jupyter_core                  5.7.2
jupyter-events                0.10.0
jupyter-lsp                   2.2.5
jupyter_server                2.14.2
jupyter_server_terminals      0.5.3
jupyterlab                    4.2.4
jupyterlab_pygments           0.3.0
jupyterlab_server             2.27.3
jupyterlab_widgets            3.0.11
kiwisolver                    1.4.5
lagent                        0.2.3
lazy_loader                   0.4
lmdeploy                      0.5.1
markdown-it-py                3.0.0
MarkupSafe                    2.1.3
matplotlib                    3.9.1
matplotlib-inline             0.1.7
mdurl                         0.1.2
mistune                       3.0.2
mkl-fft                       1.3.8
mkl-random                    1.2.4
mkl-service                   2.4.0
mmengine                      0.10.4
mmengine-lite                 0.10.4
mpi4py_mpich                  3.1.5
mpmath                        1.3.0
multidict                     6.0.5
multiprocess                  0.70.16
nbclient                      0.10.0
nbconvert                     7.16.4
nbformat                      5.10.4
nest-asyncio                  1.6.0
networkx                      3.3
ninja                         1.11.1.1
notebook                      7.2.1
notebook_shim                 0.2.4
numpy                         1.26.4
nvidia-cublas-cu12            12.5.3.2
nvidia-cuda-runtime-cu12      12.5.82
nvidia-curand-cu12            10.3.6.82
nvidia-ml-py                  12.555.43
nvidia-nccl-cu12              2.22.3
openai                        1.37.1
opencv-python                 4.10.0.84
openpyxl                      3.1.5
orjson                        3.10.6
overrides                     7.7.0
packaging                     24.1
pandas                        2.2.2
pandocfilters                 1.5.1
parso                         0.8.4
peft                          0.11.1
pexpect                       4.9.0
phx-class-registry            4.1.0
pillow                        10.4.0
pip                           24.0
platformdirs                  4.2.2
prometheus_client             0.20.0
prompt_toolkit                3.0.47
protobuf                      4.25.4
psutil                        6.0.0
ptyprocess                    0.7.0
pure_eval                     0.2.3
py-cpuinfo                    9.0.0
pyarrow                       17.0.0
pyarrow-hotfix                0.6
pybind11                      2.13.1
pycparser                     2.22
pydantic                      2.8.2
pydantic_core                 2.20.1
pydeck                        0.9.1
pydub                         0.25.1
Pygments                      2.18.0
pynvml                        11.5.3
pyparsing                     3.1.2
PySocks                       1.7.1
python-dateutil               2.9.0.post0
python-dotenv                 1.0.1
python-json-logger            2.0.7
python-multipart              0.0.9
python-rapidjson              1.19
pytz                          2024.1
PyYAML                        6.0.1
pyzmq                         26.0.3
qtconsole                     5.5.2
QtPy                          2.4.1
referencing                   0.35.1
regex                         2024.7.24
requests                      2.32.3
rfc3339-validator             0.1.4
rfc3986-validator             0.1.1
rich                          13.7.1
rpds-py                       0.19.1
ruff                          0.5.5
safetensors                   0.4.3
scikit-image                  0.24.0
scipy                         1.14.0
semantic-version              2.10.0
Send2Trash                    1.8.3
sentencepiece                 0.1.99
setuptools                    69.5.1
sgmllib3k                     1.0.0
shellingham                   1.5.4
shortuuid                     1.0.13
six                           1.16.0
smmap                         5.0.1
sniffio                       1.3.1
socksio                       1.0.0
soupsieve                     2.5
stack-data                    0.6.3
starlette                     0.37.2
streamlit                     1.37.0
sympy                         1.12
tenacity                      8.5.0
termcolor                     2.4.0
terminado                     0.18.1
tifffile                      2024.7.24
tiktoken                      0.7.0
timeout-decorator             0.5.0
timm                          1.0.7
tinycss2                      1.3.0
tokenizers                    0.15.2
toml                          0.10.2
tomli                         2.0.1
tomlkit                       0.12.0
toolz                         0.12.1
torch                         2.1.2
torchaudio                    2.1.2
torchvision                   0.16.2
tornado                       6.4.1
tqdm                          4.66.4
traitlets                     5.14.3
transformers                  4.39.3
transformers-stream-generator 0.0.5
triton                        2.1.0
tritonclient                  2.48.0
typer                         0.12.3
types-python-dateutil         2.9.0.20240316
typing_extensions             4.11.0
tzdata                        2024.1
uri-template                  1.3.0
urllib3                       2.2.2
uvicorn                       0.30.3
uvloop                        0.19.0
watchdog                      4.0.1
watchfiles                    0.22.0
wcwidth                       0.2.13
webcolors                     24.6.0
webencodings                  0.5.1
websocket-client              1.8.0
websockets                    11.0.3
wheel                         0.43.0
widgetsnbextension            4.0.11
xtuner                        0.1.23         /root/tasks/task_L1/xtuner
xxhash                        3.4.1
yapf                          0.40.2
yarl                          1.9.4
zipp                          3.19.2

微调过程

  • 微调的过程大概可以分为:
    1. 数据文件准备
    2. 配置文件准备
    3. 启动训练
    4. 模型文件转换
    5. 模型文件整合

数据文件准备

  • 这里是以指令跟随的方式进行微调,准备的数据是,用户输入与预期的输出;
  • json文件存储数据
  • 一条数据的组织形式:{"conversation":[{"input":"user_input_query...", "output":"expect_output_answer..."}]}
  • json文件中,是有多个上述数据组成的列表

配置文件准备

  • xtuner config 文件是一个python文件
  • xtuner list-cfg 列出所有的config文件
    • xtuner list-cfg -p internlm 只列出满足 -p 所指的模式的配置文件
  • xtuner copy-cfg target_cfg_name path/to/save 将指定的config文件复制到指定路径下
  • 编辑修改其中的信息
    1. 修改预训练模型路径
    2. 修改训练集的路径
    3. 修改最多长度和批次大小来充分使用硬件资源

启动训练

  • xtuner train path/to/config.py
  • 训练完成的文件夹 workdirs

模型文件转换

  • 将训练好的 *.pth 转换为Hugging Face格式文件
  • xtuner convert pth_to_hf path/to/config.py path/to/pth_model.pth /path/to/hf 自动创建文件夹,存放转换后的模型文件
  • Hugging Face 模型文件是 .bin 文件
  • Hugging Face Coverted Files

模型文件整合

  • 微调完的模型,只是一个Adapter,需要把原始模型文件与Adapter进行合并
  • xtuner convert merge dir/to/org_LLM_model dir/to/Adapter_model dir/to/save_merge 将原模型与Adapter合并到一个目录下
  • Merged 1.8B model

效果

微调后的模型效果展示

  • 微调后,模型可以回答特定的问题,可以表现的更个性化一些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值