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

1.使用 Cli Demo 完成 InternLM2-Chat-1.8B 模型的部署,并生成 300 字小故事

1.1安装环境

# 创建环境
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.38
pip install sentencepiece==0.1.99
pip install einops==0.8.0
pip install protobuf==5.27.2
pip install accelerate==0.33.0
pip install streamlit==1.37.0

1.2下载 InternLM2-Chat-1.8B 模型

创建文件夹并写入下载代码

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')

运行download_mini.py:


                
### 使用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、付费专栏及课程。

余额充值