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

1、基础环境配置

studio-conda -o internlm-base -t demo
# 与 studio-conda 等效的配置方案
# conda create -n demo python==3.10 -y
# conda activate demo
# conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia

1.1 下载依赖包

pip install huggingface-hub==0.17.3
pip install transformers==4.34 
pip install psutil==5.9.8
pip install accelerate==0.24.1
pip install streamlit==1.32.2 
pip install matplotlib==3.8.3 
pip install modelscope==1.9.5
pip install sentencepiece==0.1.99

2、下载 InternLM2-Chat-1.8B 模型

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

3、将如下代码复制进/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')

4、执行命令,下载模型参数文件:

python /root/demo/download_mini.py

5、运行 cli_demo,双击打开 /root/demo/cli_demo.py 文件,复制以下代码:

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM


model_name_or_path = "/root/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)

5.1 、输入命令,执行 Demo 程序:

python /root/demo/cli_demo.py

等待模型加载完成,并输入示例:

6.1、生成一则300字左右的故事

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

余额充值