书生大模型实战营闯关 - 8GB显存玩转书生大模型demo

创建开发机

创建一个使用10%GPU算力,cuda12.2系统的开发机,并启动。由于开发机的IO性能较差,开发机共享盘中已经创建好了本次实验所需要的conda环境

bash 复制代码
# 启动共享的conda环境
conda activate /root/share/pre_envs/icamp3_demo

部署cli模型

创建目录

创建一个目录用于存放代码

bash 复制代码
mkdir -p /root/demo
touch /root/demo/cli_demo.py

编写代码

代码的主要逻辑是使用transformers加载共享目录下的internlm2-chat-1_8b模型

python 复制代码
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# 模型地址
model_name_or_path = '/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b'

# 创建tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True, device_map='cuda:0') # 运行在第0块显卡上

# 创建大语言模型
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, 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("\User >>> ")
	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)

运行模型

接下来直接使用命令启动上面的模型

bash 复制代码
python /root/demo/cli_demo.py

部署streamlit web demo

使用streamlit web demo来部署模型,可以给模型一个简单的web ui,交互对人类更加友好。

拉取代码

bash 复制代码
cd /root/demo
git clone https://github.com/InternLM/Tutorial.git

启动streamlit服务

代码中有streamlit服务的启动脚本,我们直接运行

bash 复制代码
cd /root/demo
streamlit run /root/demo/Tutorial/tools/streamlit_demo.py --server.address 127.0.0.1 --server.port 6006

ssh连接远程开发机时,配置远程6006端口转发到本地

bash 复制代码
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p [你的ssh端口号]

访问streamlit服务

在本地机器上访问 http://localhost:6006 来访问demo。第一次访问后才会开始加载模型,需要等待一会。当出现以下画面时,服务已经启动成功了。

可以修改下左侧的推理参数,查看模型的输出效果。

我把最大生成长度修改为8,模型输出变化很大。

LMDeploy部署InternLM-Xcomposer2-VL-1.8B模型

InternLM-XComposer2是一款基于InternLM2的视觉大模型,擅长自由形式的文本图像合成和理解。主要特点如下:

  • 自由形式的交错文本图像合成:可以根据大纲、详细文本要求和参考图像等不同的输入,生成连贯且上下文相关,具有交错图像和文本的文章,从而实现高度可定制的内容创建。
  • 准确的视觉语言问题解决:基于自由形式的指令准确地处理多样化和具有挑战性的视觉语言问答任务,在识别、感知、详细标签,视觉推理等方面表现出色。
  • 令人惊叹的性能:基于InternLM2-7B的InternLM2-XComposer2在多个基准测试中位于开源多模态模型第一梯队,在部分基准测试中与GPT-4v和gemini Pro相当,甚至超过它们。

LMDeploy是一个用于压缩、部署和服务LLM的工具包,由MMRazor和MMDeploy团队开发。它具有以下核心功能

  • 高效的推理:LMDeploy通过引入 持久化批处理、块KV缓存、动态分割与融合、张量并行、高性能CUDA内核等关键技术,提供了比vLLM高1.8倍的推理性能。
  • 有效的量化:LMDeploy支持仅权重量化和k/v量化,4bit推理性能是FP16的2.4位。量化后的模型质量已经通过OpenCompass评估确认
  • 轻松的分发:利用请求分发服务,LMDeploy可以在多台机器和设置上轻松高效地部署多模型服务
  • 交互式推理模式:通过缓存多轮圣诞过程中注意力的k/v,推理引擎记住对话历史,从而避免重复处理历史会话
  • 优秀的兼容性:LMDeploy运行KV Cache Quant,AWQ和自动前缀缓存同时使用

LMDeploy已经支持了InternLM-XComposer2系列的部署,但要注意的是它仅支持InternLM-XComposer2系列模型的视觉对话功能。

启动gradio服务

bash 复制代码
conda activate /root/share/pre_envs/icamp3_demo
lmdeploy serve gradio /share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-1_8b --cache-max-entry-count 0.1

访问gradio服务

和上面一样,在ssh连接时创建端口映射,在本地打开即可。

使用lmdeploy启动的服务,不用等待模型的首次加载,在启动阶段模型就已经加载完毕了。

响应速度非常快。

LMDeploy 部署InternVL2-2B模型

InternVL2是上海人工智能实验室推出的新一代视觉-语言多模态大模型,是首个综合性能媲美美国闭源商业模型的开源多模态大语言模型。InternVL2系列从千亿参数到端侧小模型全覆盖,通专融合,支持多种模态。

LMDeploy也支持部署InternVL2系列模型的部署

启动gradio服务

bash 复制代码
conda activate /root/share/pre_envs/icamp3_demo
lmdeploy serve gradio /share/new_models/OpenGVLab/InternVL2-2B --cache-max-entry-count 0.1

访问gradio服务

和上面一样,在ssh连接时创建6006端口映射,在本地打开即可。

可以发现InternVL2模型的效果似乎比InternLM-XComposer2还要好

相关推荐
Q8137574604 分钟前
数据挖掘在金融交易中的应用:民锋科技的智能化布局
人工智能·科技·数据挖掘
qzhqbb7 分钟前
语言模型的采样方法
人工智能·语言模型·自然语言处理
qzhqbb10 分钟前
基于 Transformer 的语言模型
人工智能·语言模型·自然语言处理·transformer
___Dream11 分钟前
【CTFN】基于耦合翻译融合网络的多模态情感分析的层次学习
人工智能·深度学习·机器学习·transformer·人机交互
Open-AI15 分钟前
Python如何判断一个数是几位数
python
IT技术分享社区16 分钟前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
极客代码18 分钟前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow
义小深21 分钟前
TensorFlow|咖啡豆识别
人工智能·python·tensorflow
疯一样的码农25 分钟前
Python 正则表达式(RegEx)
开发语言·python·正则表达式
&岁月不待人&1 小时前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin