单机多GPU训练模型入门指南(torch.nn.DataParallel)
创始人
2024-02-29 16:13:51
0

目录

模型部分

1. 指定使用的GPU

2. 使用Torch的数据并行库(将模型搬到GPU上)

3. 保存模型

数据部分

1. 选择GPU

2. 将数据搬到GPU上

3. loss的反向传播修改

查看效果


本文将介绍模型和数据两部分的处理。

模型部分

1. 指定使用的GPU

1.1 导入os库

import os

 1.2 给服务器上的GPU编号

最好一次性都编上,从0~n-1,n是服务器上的显卡的数量,一般为4or8张卡。

选择一:写在python代码中

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = '0,1,2,3'

选择二:在命令行设置

CUDA_VISIBLE_DEVICES=0,1,2,3

查看有没有设置好,使用命令行命令

echo $CUDA_VISIBLE_DEVICES

1.3 指定自己要使用哪几张卡

device_ids = [0, 1, 2, 3]

注 这个device_ids的列表要在后面作为参数传入

2. 使用Torch的数据并行库(将模型搬到GPU上)

这里要有两行代码

model = torch.nn.DataParallel(model, device_ids=device_ids)
model = model.cuda()

当然,也可以写在一起

model = torch.nn.DataParallel(model, device_ids=device_ids).cuda()

3. 保存模型

原来

model.save_pretrained(path.my_checkpoint)

现在

model.module.save_pretrained(path.my_checkpoint)

注:这里使用了huggingface的transformers库,使用torch.save应该是类似的。

数据部分

注:这里的数据都是训练函数里面的,测试函数里面的应该类似。

1. 选择GPU

device = torch.device("cuda:0")

2. 将数据搬到GPU上

data = data.to(device)

上面那句和下面这句好像是等价的

data = data.cuda()

3. loss的反向传播修改

这个地方也是我遇到的报错最多的地方。

原来

loss.backward()

改法1

loss.sum().backward()

改法2

loss.backward(torch.ones(loss.shape).to(device))

查看效果

使用命令(每0.1秒刷新一次)

watch -n 0.1 nvidia-smi

蓝色箭头所指是我的进程。

以上。

相关内容

热门资讯

董明珠硬刚空调“铝代铜”!海尔... 买空调时,你会特意问一句“是铜管还是铝管”吗?近日,海尔、美的、小米等主流家电品牌宣布,将联合推动空...
兄弟科技:诉讼仍处审理阶段无实... 证券之星消息,兄弟科技(002562)12月22日在投资者关系平台上答复投资者关心的问题。 投资者提...
免费停车延至30分钟!《烟台市... 大众网记者 崔荔媛 烟台报道 12月22日,烟台市人民政府新闻办公室召开新闻发布会,宣布《烟台市停车...
国网吉林经研院完成能源电力主要... 12月15日,国网吉林经研院顺利完成能源电力领域主要政策的系统性梳理与汇编工作。该项工作旨在全面整合...
赖清德弹劾案最新进展:台立法机... 中国台湾网12月22日讯 据台媒报道,因民进党当局“不副署、不执行”台立法机构三读修正通过的“财划法...
再现“拉车门”盗窃案,库伦警方... 12月18日 库伦旗公安局 成功破获一起“拉车门”盗窃案 抓获2名犯罪嫌疑人 12月17日 库伦镇...
诉前调解化干戈跨省纠纷当庭了 近日,紫云苗族布依族自治县人民法院板当人民法庭高效化解一起跨省恋爱期间财物返还纠纷,从组织调解到履行...
一中国女子在欧洲邮轮旅行失联超... 12月21日,据媒体报道:一名中国女性乘客在爱达月光号(AIDAluna)邮轮上失踪,引发多国关注。...
原创 高... 当今复杂的国际政治舞台上,日本军国主义复苏的论调日益凸显,引发国际社会广泛警惕。高市早苗就任日本首相...