书生大模型实战营闯关 - 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还要好

相关推荐
神经美学_茂森几秒前
【自由能系列(初级),论文解读】神经网络中,熵代表系统的不确定性,自由能则引导系统向更低能量的状态演化,而动力学则描述了系统状态随时间的变化。
人工智能·神经网络·php
lly20240613 分钟前
Ruby 数据库访问 - DBI 教程
开发语言
m0_7482540922 分钟前
100天精通Python(爬虫篇)——第113天:爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python
cnbestec23 分钟前
Kinova在开源家庭服务机器人TidyBot++研究里大展身手
人工智能·科技·机器人
小爬虫程序猿28 分钟前
深入理解Jsoup与Selenium:Java爬虫的双剑合璧
爬虫·python·selenium
随便写写31 分钟前
Pyside6 基础框架以及三种基础控件
python
deflag34 分钟前
第T4周:TensorFlow实现猴痘识别(Tensorboard的使用)
人工智能·tensorflow·neo4j
谢道韫66641 分钟前
今日总结 2024-12-27
开发语言·前端·javascript
夏娃同学44 分钟前
基于Flask后端框架的均值填充
python·flask
lili-felicity44 分钟前
指针与数组:深入C语言的内存操作艺术
c语言·开发语言·数据结构·算法·青少年编程·c#