利用device_map实现多卡训练:model = AutoModelForCausalLM.from_pretrained(model_name, device_map=‘auto‘)【取代DP】

本文介绍了如何在深度学习项目中利用device_map参数进行多GPU训练,特别是通过AutoModelForCausalLM的from_pretrained方法,替代原有的DataParallel(DP)方式,提升训练效率。
摘要由CSDN通过智能技术生成
config = AutoConfig.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map='auto', trust_remote_code=
AutoModelForCausalLM.from_pretrained方法可以实现多卡并行传输。具体实现步骤如下: 1. 首先,通过调用from_pretrained方法加载预训练模型,并传入相关参数,如模型路径、配置、数据类型、内存使用等。 2. 如果检测到有多个GPU可用(通过torch.cuda.device_count()判断),则进入多卡加载的分支。 3. 在多卡加载分支中,首先使用accelerate库的infer_auto_device_map函数根据模型和内存限制自动分配设备映射。 4. 然后,使用accelerate库的dispatch_model函数将模型分发到各个设备上,实现多卡并行传输。 5. 最后,打印设备映射信息,表示多GPU预测已启用。 6. 如果只有一个GPU可用,则进入单卡加载分支,将模型移动到GPU上。 下面是一个示例代码: ```python from transformers import AutoModelForCausalLM import torch ori_model_path = "path/to/pretrained_model" config = "path/to/config" bc_model = AutoModelForCausalLM.from_pretrained( ori_model_path, config=config, torch_dtype=torch.float16, low_cpu_mem_usage=True, trust_remote_code=True, revision='main', device_map='auto' ) if torch.cuda.device_count() > 1: from accelerate import dispatch_model from accelerate.utils import infer_auto_device_map, get_balanced_memory device_map = infer_auto_device_map(bc_model, max_memory=get_balanced_memory(bc_model)) bc_model = dispatch_model(bc_model, device_map) print('multi GPU predict => {}'.format(device_map)) else: bc_model = bc_model.cuda() print("single GPU predict") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值