该系列是上海AI Lab举行的书生 浦语大模型训练营的相关笔记部分。
该笔记是第二节课,完成对话、多模态等demo,形成对InternLM的初步了解
1. 部署InternLM2-Chat-1.8B
InternLM2-Chat-1.8B是一个对话小模型,只有1.8B参数,因此运行只需要10%的A100即可。
首先在官方提供的开发机页面(https://studio.intern-ai.org.cn/console/dashboard)配置环境,选择10% * A100。
随后,进行初步的环境配置:
studio-conda -o internlm-base -t demo
正在配置环境是这样子的:
完成后,我们需要安装一下其他的包:
## 进入环境
conda activate demo## 安装依赖
pip install huggingface-hub==0.17.3
pip install transformers==4.34
pip install psutil==5.9.8
pip install accelerate==0.24.1
pip install streamlit==1.32.2
pip install matplotlib==3.8.3
pip install modelscope==1.9.5
pip install sentencepiece==0.1.99
安装完成后,我们需要创建文件夹,然后把模型下载下来
mkdir -p /root/demo
touch /root/demo/cli_demo.py # 创建文件 一会填充代码
touch /root/demo/download_mini.py # 创建文件 一会填充代码
cd /root/demo
之后填充代码,在download_mini.py
中,复制:
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')
上面代码的作用就是从模型库中下载代码
然后打开另一个cli_demo.py
,复制以下代码:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLMmodel_name_or_path = "/root/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":breaklength = 0for response, _ in model.stream_chat(tokenizer, input_text, messages):if response is not None:print(response[length:], flush=True, end="")length = len(response)
上面这段代码的作用是加载模型,并给定prompt以让模型扮演某个角色。对于每次对话,都必须传一遍prompt。
之后,我们依次运行上面两个文件。
首先,我们下载模型:
python /root/demo/download_mini.py
耐心等待即可
下载完成后,我们运行cli_demo.py
,就可以开始对话
python /root/demo/cli_demo.py
我输入了提示词:请写一个300字左右的温情小故事
结果:
可以看到效果还是不错的,确实比较温情。按照程序的设计,可以输入exit退出。
2. 尝试训练营第一期优秀作品~Chat-嬛嬛
官方文档上讲了八戒的chat,所以在此就不赘述,我来尝试一下嬛嬛的模型。
首先,安装包(在刚刚的demo/
文件夹下操作即可):
pip install modelscope
然后下载模型权重:
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('kmno4zx/huanhuan-chat-internlm2', cache_dir='./')
下载好的权重如下:
随后,git clone代码库:
git clone https://github.com/KMnO4-zx/xlab-huanhuan.git
随后,我们打开工程内的start.py
,并修改为以下内容:(按照原本的端口和ip 不work)
import osos.system('streamlit run app.py --server.address=127.0.0.1 --server.port 6006')
之后,在本地配置ssh,在windows powershell中输入
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 41104
其中p换成开发机的端口号
运行start.py
, 然后在浏览器进入http://127.0.0.1:6006/
即可:
3. 使用 Lagent 运行 InternLM2-Chat-7B 模型
Lagent是一个工具,其可以快速将LLM变成用户需要的智能体,整体框图如下:
调整开发机环境为30% * A100,然后在前文构建的虚拟环境下执行以下命令:
cd /root/demogit 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 . # 源码安装
Intern Studio 在 share 文件中预留了一些我们可以用到的模型,因此我们先用一个软链接,将本地模型链接到share里:
cd /root/demo/lagent
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b
打开 lagent 路径下 examples/internlm2_agent_web_demo_hf.py 文件,并修改对应位置 (71行左右) 代码,将路径指向/root/models/internlm2-chat-7b
剩余的事情和部署前面的嬛嬛一样,需要先在服务器上运行,然后本地与服务器用ssh链接:
streamlit run /root/demo/lagent/examples/internlm2_agent_web_demo_hf.py --server.address 127.0.0.1 --server.port 6006
结果如下图:
然后我指定它用matlab写,但是它还是用python,可能创建智能体的时候没有这个约束。。
进阶作业:熟悉hugging_face的下载功能
在lagent
文件夹下新建download_config.py
,填入以下代码:
## huggingface_hub包使用示例
from huggingface_hub import hf_hub_download
hf_hub_download(repo_id='internlm/internlm2-chat-7b',filename="config.json",local_dir='/root/demo/lagent')
运行即可,得到的config.json
:
4. 体验多模态浦语·灵笔2模型
按照以下命令,分别安装依赖的package和创建模型软链接等操作:
pip install timm==0.4.12 sentencepiece==0.1.99 markdown2==2.4.10 xlsxwriter==3.1.2 gradio==4.13.0 modelscope==1.9.5cd /root/demo
git clone https://gitee.com/internlm/InternLM-XComposer.git
cd /root/demo/InternLM-XComposer
git checkout f31220eddca2cf6246ee2ddf8e375a40457ff626ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-7b /root/models/internlm-xcomposer2-7b
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-7b /root/models/internlm-xcomposer2-vl-7bcd /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
然后根据前面的ssh连接教程,即可打开demo界面。
由于算力有限,这部分还没更新。