基础岛第2关:8G 显存玩转书生大模型

任务

https://kkgithub.com/InternLM/Tutorial/blob/camp3/docs/L1/Demo/task.md

文档

https://github.com/InternLM/Tutorial/blob/camp3/docs/L1/Demo/readme.md

基础岛第2关:8G 显存玩转书生大模型 torch2_py310

机器配置

8G显存。

InternLM2-Chat-1.8B 模型的部署(基础任务) 操作流程

创建环境

conda create -n torch2_py310 python=3.10 -y

激活环境

conda activate torch2_py310

在这里插入图片描述

安装 torch–指定镜像源速度更快。conda安装指定镜像源用-c

conda install pytorch2.1.2 torchvision0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

在这里插入图片描述

这个命令是用来在conda环境中安装PyTorch及相关库的,下面是命令中各个部分的解释:
- `conda install`: 这是conda用来安装软件包的基本命令。

- `pytorch==2.1.2`: 指定要安装的PyTorch版本是2.1.2。`==`后面跟的是版本号。

- `torchvision==0.16.2`: 指定要安装的torchvision版本是0.16.2。torchvision是PyTorch的一个扩展包,用于处理图像和视频。

- `torchaudio==2.1.2`: 指定要安装的torchaudio版本是2.1.2。torchaudio是PyTorch的一个扩展包,用于处理音频。

- `pytorch-cuda=12.1`: 指定要安装的PyTorch版本是为CUDA 12.1编译的。`cuda`是NVIDIA的并行计算平台和编程模型,`12.1`是CUDA的版本号。

- `-c pytorch`: 指定从`pytorch`这个conda频道(channel)安装PyTorch。频道是conda用来存放软件包的地方。

- `-c nvidia`: 指定从`nvidia`这个conda频道安装CUDA相关的包。NVIDIA提供了一些与CUDA相关的conda包。

- `-y`: 这个参数表示在安装过程中自动接受所有的提示,不需要手动确认。

安装其他依赖 pip安装指定镜像源用-i

pip install transformers4.38 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install sentencepiece
0.1.99 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install einops0.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install protobuf
5.27.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install accelerate0.33.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install streamlit
1.37.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/

在这里插入图片描述

创建文件,启动

mkdir -p /root/demo
touch /root/demo/cli_demo.py

cli_demo.py

python /root/demo/cli_demo.py 来启动我们的 Demo。

# 打开对话框的命令。

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)

在这里插入图片描述

Streamlit Web Demo 部署 InternLM2-Chat-1.8B 模型

启动一个 Streamlit 服务。

cd /root/demo
git clone https://github.com/InternLM/Tutorial.git

cd /root/demo
streamlit run /root/demo/Tutorial/tools/streamlit_demo.py --server.address 127.0.0.1 --server.port 6006

在这里插入图片描述

streamlit 介绍:

Streamlit是一个开源的Python库,用于快速创建和分享数据驱动的Web应用程序。它特别适合于数据科学家和机器学习工程师,因为它允许他们利用Python代码快速生成交互式的Web界面,而无需具备深厚的前端开发技能。

以下是Streamlit应用程序的一些关键特点:

快速开发:Streamlit允许用户通过编写Python脚本来创建Web应用程序,从而避免了复杂的前端代码编写。

交互性:Streamlit应用程序可以包含各种交互元素,例如滑块、下拉菜单、图表和地图,允许用户与应用程序进行交互。

数据可视化:Streamlit集成了多种数据可视化库,如Matplotlib、Plotly、Bokeh等,可以轻松地将数据可视化集成到应用程序中。

易于分享:一旦应用程序开发完成,可以通过Streamlit的共享功能或部署到服务器上,与他人分享应用程序。

社区支持: Streamlit拥有一个活跃的社区,提供了大量的教程、示例和第三方扩展,可以扩展应用程序的功能。

部署简单:Streamlit应用程序可以通过多种方式部署,包括本地运行、使用Streamlit共享、或部署到云平台如Heroku、AWS等。

实时更新:Streamlit应用程序可以实时更新,这意味着用户界面会随着后端数据的变化而自动更新。

多平台支持:Streamlit应用程序可以在任何支持现代Web浏览器的设备上运行,包括桌面、平板和智能手机。

Streamlit是一个强大的工具,尤其适合需要快速迭代和原型开发的场合。它让数据科学家能够专注于数据分析和机器学习模型的开发,而不必担心Web开发的复杂性。

本地端口映射

ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 47425

在这里插入图片描述

在这里插入图片描述


这条SSH命令用于创建一个安全的隧道,将本地计算机上的一个端口转发到远程服务器上的相同端口。下面是命令中各个部分的解释:

- `ssh`: 这是启动SSH客户端的命令。

- `-C`: 启用压缩,这有助于加快传输速度,特别是在网络条件不佳的情况下。

- `-N`: 告诉SSH不执行远程命令,仅建立隧道。

- `-g`: 允许远程主机连接到本地转发的端口。默认情况下,SSH只允许本地机器上的客户端连接到转发端口。

- `-L 6006:127.0.0.1:6006`: 这是本地端口转发的参数。
  - `-L`: 指定本地端口转发。
  - `6006`: 本地机器上监听的端口号。
  - `127.0.0.1:6006`: 远程机器上的目标地址和端口号。这里的意思是将本地的6006端口转发到远程机器的127.0.0.1地址上的6006端口。

- `root@ssh.intern-ai.org.cn`: 这是要连接的远程服务器的用户名和主机名或IP地址。在这个例子中,用户名是`root`,主机名是`ssh.intern-ai.org.cn`。

- `-p`: 指定远程服务器上的SSH端口号。你需要将其替换为实际的端口号,例如`-p 22`。

- `47425`: 这是要连接的远程服务器上SSH服务监听的端口号,通常默认为22 

这条命令的完整形式可能是这样的:

ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 22


当你运行这个命令时,它会在你的本地计算机上打开6006端口,并将其转发到远程服务器上的6006端口。这意味着,如果你在本地计算机上访问`localhost:6006`,实际上流量会被转发到远程服务器上的6006端口。

这种类型的隧道通常用于以下情况:

- 当你想要安全地访问远程服务器上的Web应用程序或服务时。
- 当远程服务器上的服务没有直接暴露在互联网上,而是通过SSH隧道来访问时。

请注意,这个命令需要你有权限访问远程服务器,并且远程服务器上的SSH服务需要允许端口转发。此外,本地计算机上的6006端口在运行命令之前应该是空闲的,没有被其他应用程序占用。

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

conda activate torch2_py310
pip install lmdeploy[all]0.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install timm
1.0.7 -i https://pypi.tuna.tsinghua.edu.cn/simple/

LMDeploy 启动一个与 InternLM-XComposer2-VL-1.8B 模型交互的 Gradio 服务。

lmdeploy serve gradio /share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-1_8b --cache-max-entry-count 0.1

在这里插入图片描述

LMDeploy 部署 InternVL2-2B 模型

conda activate torch2_py310
lmdeploy serve gradio /share/new_models/OpenGVLab/InternVL2-2B --cache-max-entry-count 0.1

其他知识点总结

interLM-Xcomposer2: 文本-图像模型

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

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

lmdeploy

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 系列的部署,但值得注意的是 LMDeploy 仅支持了 InternLM-XComposer2 系列模型的视觉对话功能。

InternVL2 视觉-语言多模态大模型

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

conda 和pip 安装方式的镜像源指定方式的不同

conda安装指定镜像源用-c
conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
pip安装指定镜像源用-i
pip install transformers
4.38 -i https://pypi.tuna.tsinghua.edu.cn/simple/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值