8G 显存玩转书生大模型 Demo

选择 10% 的开发机,镜像选择为 Cuda-12.2。在输入开发机名称后,点击创建开发机。

在创建完成后,我们便可以进入开发机了!

环境配置

我们首先来为 Demo 创建一个可用的环境。

# 创建环境
conda create -n demo python=3.10 -y
# 激活环境
conda activate demo
# 安装 torch
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖
pip install transformers==4.34 
pip install sentencepiece==0.1.99
pip install einops==0.8.0

Cli Demo 部署 InternLM2-Chat-1.8B 模型

首先,我们创建一个目录,用于存放我们的代码。并创建一个 cli_demo.py

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

然后,我们将代码复制到 cli_demo.py 中。

 

接下来,我们便可以通过 python /root/demo/cli_demo.py 来启动我们的 Demo。

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

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

  • 自由形式的交错文本图像合成:InternLM-XComposer2 可以根据大纲、详细文本要求和参考图像等不同输入,生成连贯且上下文相关,具有交错图像和文本的文章,从而实现高度可定制的内容创建。
  • 准确的视觉语言问题解决:InternLM-XComposer2 基于自由形式的指令准确地处理多样化和具有挑战性的视觉语言问答任务,在识别,感知,详细标签,视觉推理等方面表现出色。
  • 令人惊叹的性能:基于 InternLM2-7B 的InternLM-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 系列的部署,但值得注意的是 LMDeploy 仅支持了 InternLM-XComposer2 系列模型的视觉对话功能。

接下来,我们将演示如何使用 LMDeploy 部署 InternLM-XComposer2-VL-1.8B 模型。

首先,我们激活环境并安装 LMDeploy 以及其他依赖。

conda activate demo
pip install lmdeploy[all]==0.5.1
pip install timm==1.0.7

接下来,我们使用 LMDeploy 启动一个与 InternLM-XComposer2-VL-1.8B 模型交互的 Gradio 服务。

lmdeploy serve gradio /share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-1_8b

接下来,我们在本地的 PowerShell 中输入以下命令,将端口映射到本地。

ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 你的 ssh 端口号

然后将 SSH 密码复制并粘贴到 PowerShell 中,回车,即可完成端口映射。正常情况下,我们会看到如下输出:

在完成端口映射后,我们便可以通过浏览器访问 http://localhost:6006 来启动我们的 Demo。

在使用 Upload Image 上传图片后,我们输入 Instruction 后按下回车,便可以看到模型的输出。

LMDeploy 部署 InternVL2-2B 模型

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

LMDeploy 也已经支持了 InternVL2 系列模型的部署,让我们一起来使用 LMDeploy 部署 InternVL2-2B 模型。

我们可以通过下面的命令来启动 InternVL2-2B 模型的 Gradio 服务。

conda activate demo
lmdeploy serve gradio /share/new_models/OpenGVLab/InternVL2-2B

在完成端口映射后,我们便可以通过浏览器访问 http://localhost:6006 来启动我们的 Demo。

在使用 Upload Image 上传图片后,我们输入 Instruction 后按下回车,便可以看到模型的输出。

### 使用SPU库在8GB显存的GPU上高效训练大规模机器学习模型 对于拥有较大规模的神经网络,在单张8GB显存的GPU上进行训练确实面临挑战。为了克服这一难题,采用模型并行的方式是一种有效的策略[^1]。 #### 模型分割与分布 通过将整个模型划分为多个子模块,并分配到不同的计算设备上来实现模型并行化处理。具体而言: - **评估模型结构**:分析待训练模型架构特点,识别可分离组件。 - **划分逻辑单元**:依据前向传播路径上的依赖关系合理切分网络层,形成若干相对独立的功能区块。 - **跨设备映射**:按照各硬件资源特性安排上述功能区块驻留位置;例如,某些卷积操作可能更适合部署于具备更强算力的核心节点之上。 ```python import torch.distributed as dist from spu import ModelParallelTrainer, DeviceManager device_manager = DeviceManager() devices = device_manager.get_devices() # 获取可用设备列表 trainer = ModelParallelTrainer(devices=devices) model_parts = [ model_part_1.to('cuda:0'), model_part_2.to('cuda:1') ] for part in model_parts: trainer.add_module(part) ``` #### 数据流管理 当实施模型并行方案时,还需关注数据传输效率问题。由于不同阶段间存在输入输出交互需求,因此要优化这些环节的数据交换机制以减少延迟开销。 - **流水线设计**:构建高效的Pipeline模式来组织前后端之间的协作流程,使得每一轮迭代过程中能够充分利用多台设备的同时工作能力而不至于造成瓶颈现象。 - **异步通信**:利用非阻塞式的API接口完成必要的参数同步动作,从而提高整体吞吐量表现。 ```python def forward_backward_pass(input_data): outputs = [] for i, module in enumerate(trainer.modules()): if i != 0: input_data = prev_output.detach().requires_grad_(True).to(module.device) output = module(input_data) outputs.append(output) prev_output = output loss = criterion(outputs[-1], target) loss.backward() return loss.item(), outputs ``` #### 资源配置调整 考虑到目标平台仅配备了一枚具有有限容量(即8GB)内存空间的图形处理器件,故而有必要针对此环境特征做出适当妥协或改进措施。 - **降低精度运算**:启用混合浮点数格式(Mixed Precision),允许部分权重更新过程采用较低位宽表达形式,以此节省存储占用率并加速矩阵乘法速度。 - **梯度累积技术**:每当遇到难以一次性加载全部样本集的情况之下,则可通过累加多次小批量反向传播所产生的梯度值再统一应用至参数修正之中去达成相同效果的目的。 ```python scaler = torch.cuda.amp.GradScaler() with torch.cuda.amp.autocast(): predictions = model(inputs) loss = loss_fn(predictions, labels) scaler.scale(loss).backward() if (batch_idx + 1) % accumulation_steps == 0: scaler.step(optimizer) scaler.update() optimizer.zero_grad() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值