书生浦语实战营第二节课:浦语大模型趣味 - robinlubin12/InternLM2-OpenCamp GitHub Wiki

1.1浦语大模型,新开环境配置

studio-conda -o internlm-base -t demo 使用InternStudio( InternStudio 大模型实训平台)开箱即用的conda环境: studio-conda -h 与 studio-conda 等效的配置方案 conda create -n demo python==3.10 -y conda activate demo conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia image

2.1 基础对话实验

conda activate demo //激活虚拟环境

pip install huggingface-hub==0.17.3 //使用huggingface 模型库 pip install transformers==4.34 pip install psutil==5.9.8 pip install accelerate==0.24.1 pip install streamlit==1.32.2 //纯python 语言框架,可以通过python编程的方式快速进行Web应用开发 pip install matplotlib==3.8.3 //画图的库 pip install modelscope==1.9.5 pip install sentencepiece==0.1.99 // SentencePiece是谷歌开源的针对NLP场景提取词汇表tokenizer的开源项目 由此可见大模型也不是一天就爆发了,也是无数各类研究,开源项目积累到一定程度后,叠加算力的发展,可以说是“大力出奇迹”。以上下载安装花了点时间,大概15分钟


准备工作目录/root/demo mkdir -p /root/demo

vim /root/demo/download_mini.py -- 通过modelscope下载1.8b模型 import os from _modelscope.hub.snapshot_download_ import snapshot_download

# 创建保存模型目录 os.system("mkdir /root/models")

# save_dir是模型保存到本地的目录 save_dir="/root/models"

snapshot_download("Shanghai_AI_Laboratory/internlm2-chat-1_8b", cache_dir=save_dir, revision='v1.1.0')

--执行脚本,下载python /root/demo/download_mini.py,4G不到,大约需要5分钟,检查 ls /root/models 或者通过左侧文件夹目录浏览查看/root/models/Shanghai_AI_Laboratory/internlm2-chat-1_8b image

vim /root/demo/cli_demo.py cd /root/demo python cli_demo.py,运行效果如下: image

2.2 运行微调过的模型实验

import os #模型下载 from modelscope.hub.snapshot_download import snapshot_download

# 创建保存模型目录 os.system("mkdir -p /root/models")

# save_dir是模型保存到本地的目录 save_dir="/root/models"

snapshot_download('JimmyMa99/BaJie-Chat-mini', cache_dir=save_dir)

下载完成,模型大小和1.8b的初始预训练模型大小类似,下载3分钟。这次我们是通过基于python的web框架streamlit 来运行web界面的chat交互 streamlit run /root/Tutorial/helloworld/bajie_chat.py --server.address 127.0.0.1 --server.port 6006【40350是当时测试机器开放的端口】 image

ssh访问---中找到开放的端口,然后做个channel,以下命令是针对开发机内40350 (端口) 的转发,并将它映射到了本地机器的 localhost:6006端口。 # 从本地使用 ssh 连接 studio 端口 # 将下方端口号 38374 替换成自己的端口号 ssh -CNg -L 6006:127.0.0.1:6006 [email protected] -p 40350 大概由于之前配置过SSH免密登录,所以没有提示输入密码 。。。。。。

实验过程中,猪猪chat,输出有点慢啊,关键还是GPU资源问题...


2.3 运行Lagent实验

image

合理利用平台资源,先停机,再升级配置(建议选择1个小时即可,需要排队等待“当前类型资源紧张,前方等待实例数:7”)再进行下一个试验: 正式进入“实战:使用 Lagent 运行 InternLM2-Chat-7B 模型” Lagent的特性: 流式输出,接口统一,设计全面升级,提升拓展性,包括: Model : 不论是 OpenAI API, Transformers 还是推理加速框架 LMDeploy 一网打尽,模型切换可以游刃有余; Action: 简单的继承和装饰,即可打造自己个人的工具集,不论 InternLM 还是 GPT 均可适配; Agent:与 Model 的输入接口保持一致,模型到智能体的蜕变只需一步,便捷各种 agent 的探索实现;

git clone https://gitee.com/internlm/lagent.git # git clone https://github.com/internlm/lagent.git cd /root/demo/lagent git checkout 581d9fb8987a5d9b72bb9ebd37a95efd47d479ac pip install -e . # 源码安装,安装依赖需要一定的时间,耐心等待

此实验采用7b模型,在share目录下已经下载,软链接放到/root/models中。 ln -s **/root/**share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b 此处帮助文件先把/share/ 软链接到/root/share, ln -s /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b 要运行的web脚本文件lagent/examples/internlm2_agent_web_demo_hf.py,首先修改71行的模型文件位置,修改为本地的/root/models/internlm2-chat-7b。然后启动,配置ssh channel。 streamlit run /root/demo/lagent/examples/internlm2_agent_web_demo_hf.py --server.address 127.0.0.1 --server.port 6006 ~很快,网页即显示“Lagent Web Demo” image

~报错,HFValidationError: Repo id must be in the form 'repo_name' or 'namespace/repo_name': '/root/models/internlm2-chat-20b'. Use repo_type argument if needed. ~原因是修改模型路径时候只修改了/root/models/ 20b默认没有改为7b.

“OSError: [Errno 28] inotify watch limit reached”,在共享机器上只能等。一般而言报错的解决方案 如果在streamlit run 的时候遇到OSError: [Errno 28] inotify watch limit reached的报错,这个报错信息表明你遇到了 inotify watch limit reached 的错误。这通常发生在 Linux 系统中,当 inotify 实例的数量超过了系统限制时就会出现这个问题。inotify 是 Linux 内核的一个特性,用于监控文件系统的变化,而 Streamlit 使用它来监控文件的变化以自动刷新应用。

运行起来,CUDA out of memory 直接崩溃了。。。。

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 112.00 MiB. GPU 0 has a total capacity of 23.99 GiB of which 42.00 MiB is free. Process 2487295 has 23.95 GiB memory in use. Of the allocated memory 23.42 GiB is allocated by PyTorch, and 129.17 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables) OOM: UUID: GPU-aaa933a0-80fd-daf6-31ca-7f8672f44b01MB; Current used: 24600MB; Assigned Limit: 24576MB 0000:48:00.0 24566 24566 image 使用50%的A100 配置,跑起来了! image 示例代码,一旦报错,web就停止响应了! image

2.4 实践部署 浦语·灵笔2 模型

抓紧资源时间,体验下超牛产品!浦语·灵笔2 是基于 书生·浦语2 大语言模型研发的突破性的图文多模态大模型,具有非凡的图文写作和图像理解能力,在多种应用场景表现出色,总结起来其具有:

  • 自由指令输入的图文写作能力: 浦语·灵笔2 可以理解自由形式的图文指令输入,包括大纲、文章细节要求、参考图片等,为用户打造图文并貌的专属文章。生成的文章文采斐然,图文相得益彰,提供沉浸式的阅读体验。
  • 准确的图文问题解答能力:浦语·灵笔2 具有海量图文知识,可以准确的回复各种图文问答难题,在识别、感知、细节描述、视觉推理等能力上表现惊人。
  • 杰出的综合能力: 浦语·灵笔2-7B 基于 书生·浦语2-7B 模型,在13项多模态评测中大幅领先同量级多模态模型,在其中6项评测中超过 GPT-4V 和 Gemini Pro。 下载 InternLM-XComposer 仓库 相关的代码资源: cd /root/demo git clone https://gitee.com/internlm/InternLM-XComposer.git cd /root/demo/InternLM-XComposer git checkout f31220eddca2cf6246ee2ddf8e375a40457ff626 在 terminal 中输入指令,构造软链接快捷访问方式:[internlm-xcomposer2-vl-7b 模型文件]

ln -s /share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-7b /root/models/internlm-xcomposer2-7b ln -s /share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-7b /root/models/internlm-xcomposer2-vl-7b image 继续输入指令,用于启动 InternLM-XComposer:

cd /root/demo/InternLM-XComposer python /root/demo/InternLM-XComposer/examples/gradio_demo_composition.py
--code_path /root/models/internlm-xcomposer2-7b
--private
--num_gpus 1
--port 6006 ===>这个启动过程有些缓慢,等启动完成(看到类如如下输出)后, /root/.conda/envs/demo/lib/python3.10/site-packages/torch/nn/modules/module.py:2025: UserWarning: for vision_model.post_layernorm.bias: copying from a non-meta parameter in the checkpoint to a meta parameter in the current model, which is a no-op. (Did you mean to pass assign=True to assign items in the state dictionary to their corresponding key in the module instead of copying them in place?) warnings.warn(f'for {key}: copying from a non-meta parameter in the checkpoint to a meta ' Position interpolate from 24x24 to 16x16 Running on local URL: http://127.0.0.1:6006

To create a public link, set share=Trueinlaunch(). 运行端口映射命令,然后本地访问127.0.0.1:6006,注意到显存快速上升,基本就可以显示出界面 image 生成的内容和视频教程一模一样,这让我觉得不太懂其中的原理,生成式内容的影响因子是啥? image

理解图形实验: 关闭(由于上述gradio脚本并没有很好的停止方式,强制关闭所有terminal或者kill 进程就可以,关注到显存使用降为0即可)并重新启动一个新的 terminal,继续输入指令,启动 InternLM-XComposer2-vl:

conda activate demo

cd /root/demo/InternLM-XComposer python /root/demo/InternLM-XComposer/examples/gradio_demo_chat.py \ --code_path /root/models/internlm-xcomposer2-vl-7b \ --private \ --num_gpus 1 \ image 同样,需要经过漫长的等待,5~8分钟...等待出现“Running on local URL: http://127.0.0.1:11111” image

2.5 Hugging face下载

huggingface_hub Python库安装之后,确保网络问题解决,可以通过此脚本方式下载 from huggingface_hub import snapshot_download save_dir="/home/lenovo/models" snapshot_download(repo_id="internlm/internlm2-chat-7b",cache_dir=save_dir)

image