网易首页 > 网易号 > 正文 申请入驻

Pytorch-Lightning的使用

0
分享至

Pytorch-Lightning介绍

github地址: https://github.com/Lightning-AI/lightning

API: https://pytorch-lightning.readthedocs.io/en/latest/index.html

PyTotrch具有简单好用的特点,但对于较复杂的任务可能会出现一些问题,且花费的时间也更长。

PyTorch Lightning可以将 研究代码和工程代码分离, 将PyTorch代码结构化,更加直观的展现数据操作过程,使得冗长的代码更加轻便,也可以称为轻量版的PyTorch。类似keras。

Lightning将以下结构强制应用于代码,从而使其可重用和共享:

  • 研究代码(LightningModule)。

  • 工程代码(Trainer)。

  • 非必要的研究代码(Callbacks)。

  • 数据(使用PyTorch DataLoader或将它们放入LightningDataModule中)。

完成此操作后,就可以在多个GPU,TPU,CPU上甚至在16位精度下进行训练,而无需更改代码!

Pytorch-Lightning安装

pip安装


pip install pytorch-lightning

conda安装


conda install pytorch-lightning -c conda-forge

Pytorch-Lightning优势

  • 不需要手写和维护额外的代码

  • 提供多种优化策略

  • early-stoppoing

  • 模型数据会自动上传到cuda(无需手动)

  • 日志的输出

  • 分布式的训练

  • Tensorboard的可视化

Pytorch-Lightning使用

PL的主要过程

# 从模型的定义开始,主要区别就是继承pl.LightningModuleclass LitAutoEncoder(pl.LightningModule):# 定义网络架构def __init__(self):super(LitAutoEncoder).__init__()self.encoder = nn.Sequential(nn.Linear(28*28, 64),nn.ReLU(),nn.Linear(64, 3)# 前向传播过程def forward(self, x):# 训练loopdef training_step(self, batch, batch_idx):self.log('train_loss', loss)return loss# 定义优化器def configure_optimizers(self):optimizer = torch.optim.Adam(self.parameters(), lr=1e-3)return optimizer# 使用pl.Trainer()完成训练autoencoder = LitAutoEncoder()trainer = pl.Trainer(gpus=0)trainer.fit(autoencoder, train_loader)

trainer是自动化的,包括:

  • Epoch and batch iteration

  • 自动调用 optimizer.step(), backward, zero_grad()

  • 自动调用 .eval(), enabling/disabling grads

  • 权重加载

  • 保存日志到tensorboard

  • 支持多-GPU、TPU、AMP

PL的训练验证测试过程

训练、验证和测试的过程是一样的,就是对三个函数进行重写。

training_step(self, batch, batch_idx)

validation_step(self, batch, batch_idx)

test_step(self, batch, batch_idx)

除以上三个主要函数外,还有training_step_end(self,batch_parts) 和 training_epoch_end(self, training_step_outputs)。

*_step_end-- 即每一个 * 步完成后调用。

*_epoch_end-- 即每一个 * 的epoch 完成之后会自动调用。

上面的 * 对train、valid、test都适用


def training_step(self, batch, batch_idx):x, y = batchy_hat = self.model(x)loss = F.cross_entropy(y_hat, y)pred = ...return {'loss': loss, 'pred': pred}
def training_step_end(self, batch_parts):当gpus=0 or 1时,这里的batch_parts即为traing_step的返回值(已验证)当gpus>1时,这里的batch_parts为list,list中每个为training_step返回值,list[i]为i号gpu的返回值(这里未验证)gpu_0_prediction = batch_parts[0]['pred']gpu_1_prediction = batch_parts[1]['pred']
# do something with both outputsreturn (batch_parts[0]['loss'] + batch_parts[1]['loss']) / 2
def training_epoch_end(self, training_step_outputs):for out in training_step_outputs:# do something with preds

上述代码中:batch 即为从 train_dataloader 采样的一个batch的数据,batch_idx即为目前batch的索引。

pl.Trainer的主要参数

1、默认为每1个epoch校验一次,即自动调用validation_step()函数,可以进行设置


trainer = pl.Trainer(check_val_every_n_epoch=1)

2、设置GPU


trainer = pl.Trainer(gpu=0)

3、单个epoch内校验


# 每训练单个epoch的 25% 调用校验函数一次,注意:要传入float型数trainer = Trainer(val_check_interval=0.25)# 当然也可以是单个epoch训练完多少个batch后调用一次校验函数,但是一定是传入int型trainer = Trainer(val_check_interval=100) # 每训练100个batch校验一次

4、测试

test 在训练过程中是不调用的,也就是说是不相关,在训练过程中只进行training和validation。

这里假设已经训练完成,进行测试


# 获取恢复了权重和超参数等的模型model = MODEL.load_from_checkpoint(checkpoint_path='my_model_path/hei.ckpt')# 修改测试时需要的参数,例如预测的步数等model.pred_step = 1000# 定义trainer, 其中limit_test_batches表示取测试集中的0.05的数据来做测试trainer = pl.Trainer(gpus=1, precision=16, limit_test_batches=0.05)# 测试,自动调用test_step(), 其中dm为数据集,放在下面讲trainer.test(model=dck, datamodule=dm)

数据集的实现

class MyDataModule(pl.LightningDataModule):def __init__(self):super().__init__()...blablabla...def setup(self, stage):# 实现数据集的定义,每张GPU都会执行该函数, stage 用于标记是用于什么阶段if stage == 'fit' or stage is None:self.train_dataset = DCKDataset(self.train_file_path, self.train_file_num, transform=None)self.val_dataset = DCKDataset(self.val_file_path, self.val_file_num, transform=None)if stage == 'test' or stage is None:self.test_dataset = DCKDataset(self.test_file_path, self.test_file_num, transform=None)def prepare_data(self):# 在该函数里一般实现数据集的下载等,只有cuda:0 会执行该函数passdef train_dataloader(self):return DataLoader(self.train_dataset, batch_size=self.batch_size, shuffle=False, num_workers=0)
def val_dataloader(self):return DataLoader(self.val_dataset, batch_size=self.batch_size, shuffle=False)
def test_dataloader(self):return DataLoader(self.test_dataset, batch_size=1, shuffle=True)

训练与测试阶段

dm = MyDataModule(args)if not is_predict:# 训练# 定义保存模型的callback,仔细查看后文checkpoint_callback = ModelCheckpoint(monitor='val_loss')# 定义模型model = MyModel()# 定义loggerlogger = TensorBoardLogger('log_dir', name='test_PL')# 定义数据集为训练校验阶段dm.setup('fit')# 定义trainertrainer = pl.Trainer(gpus=gpu, logger=logger, callbacks=[checkpoint_callback]);# 开始训练trainer.fit(dck, datamodule=dm)else:# 测试阶段dm.setup('test')# 恢复模型model = MyModel.load_from_checkpoint(checkpoint_path='trained_model.ckpt')# 定义trainer并测试trainer = pl.Trainer(gpus=1, precision=16, limit_test_batches=0.05)trainer.test(model=model, datamodule=dm)

参考

github地址: https://github.com/Lightning-AI/lightning

API: https://pytorch-lightning.readthedocs.io/en/latest/index.html

新年福利

为回馈新老学员对七月在线的支持与肯定,新年之际,正价课开启秒杀模式,部分秒杀课如下图:

集训营、高级班,论文/申博留学等1V1辅导课也开启送福利活动,需要的小伙伴可找苏苏老师(VX:julyedukefu008)或七月在线其他老师了解

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
长沙男子每月砸6000给12岁女儿打生长激素,半年长了4厘米!爸爸:这是有价值的投资

长沙男子每月砸6000给12岁女儿打生长激素,半年长了4厘米!爸爸:这是有价值的投资

听心堂
2026-07-20 09:10:11
莫斯科遭重大袭击! 俄罗斯民用运油船被袭,中国电商应该损失不小

莫斯科遭重大袭击! 俄罗斯民用运油船被袭,中国电商应该损失不小

策前论
2026-07-20 16:10:11
世界杯刚夺冠,西班牙队就收获不利消息,27岁主力恐退出国家队

世界杯刚夺冠,西班牙队就收获不利消息,27岁主力恐退出国家队

篮球圈里的那些事
2026-07-20 15:06:43
追求遭拒泼硫酸捅刺对方的韦某某被执行死刑 受害人:他罪有应得,可我再也回不去了

追求遭拒泼硫酸捅刺对方的韦某某被执行死刑 受害人:他罪有应得,可我再也回不去了

红星新闻
2026-07-20 18:33:25
世界杯决赛变全球巨星盛宴,阵容豪华到不敢相信,看台碾压红毯

世界杯决赛变全球巨星盛宴,阵容豪华到不敢相信,看台碾压红毯

梦在深巷qw
2026-07-20 14:24:53
马云现身世界杯决赛看台 和联想杨元庆轻松闲谈

马云现身世界杯决赛看台 和联想杨元庆轻松闲谈

快科技
2026-07-20 19:14:16
2030世界杯赛制确认:西葡摩办101场,南美三国只踢揭幕战

2030世界杯赛制确认:西葡摩办101场,南美三国只踢揭幕战

晚星归航2
2026-07-20 11:08:49
14岁少年双腿文成“大花腿”,家长索赔20万元

14岁少年双腿文成“大花腿”,家长索赔20万元

新民周刊
2026-07-20 20:10:39
特朗普喊话国际足联主席因凡蒂诺:美国必须再次举办世界杯,而且要在我在任期间实现,你听到了吗

特朗普喊话国际足联主席因凡蒂诺:美国必须再次举办世界杯,而且要在我在任期间实现,你听到了吗

鲁中晨报
2026-07-20 15:28:09
张柏芝悼念谢贤,把社交账号头像设置成了黑色!四哥没有看错人!

张柏芝悼念谢贤,把社交账号头像设置成了黑色!四哥没有看错人!

娱乐团长
2026-07-20 18:41:46
谢贤离世引热议!网友:告诉所有人一个道理,结不结婚,生不生孩子不重要,因为你走的时候可能还是孤苦一个人

谢贤离世引热议!网友:告诉所有人一个道理,结不结婚,生不生孩子不重要,因为你走的时候可能还是孤苦一个人

火山詩话
2026-07-20 20:33:05
“阿根廷 脏”热搜爆了!决赛犯规25次,本届世界杯犯规超100次创纪录;西班牙领奖时,阿根廷球员集体背过身,遭痛批“毫无体育精神”

“阿根廷 脏”热搜爆了!决赛犯规25次,本届世界杯犯规超100次创纪录;西班牙领奖时,阿根廷球员集体背过身,遭痛批“毫无体育精神”

极目新闻
2026-07-20 11:23:58
谢贤去世,享年89岁,谢霆锋发讣告,生前最后露面照曝光

谢贤去世,享年89岁,谢霆锋发讣告,生前最后露面照曝光

素素娱乐
2026-07-20 16:17:56
不知好歹,中国刚支持完阿根廷马岛主权,阿根廷就出现反华言论

不知好歹,中国刚支持完阿根廷马岛主权,阿根廷就出现反华言论

阿龙聊军事
2026-07-20 21:17:57
相比败光邹市明的2亿家底,冉莹颖更可恨是,不配为人母

相比败光邹市明的2亿家底,冉莹颖更可恨是,不配为人母

翰飞观事
2026-07-20 16:52:58
谢贤九成遗产留给张柏芝谢霆锋两个儿子,朋友林青霞保留部分财产

谢贤九成遗产留给张柏芝谢霆锋两个儿子,朋友林青霞保留部分财产

韩小娱
2026-07-20 17:32:27
重大胜利!伊朗逮住美军“大鱼”!

重大胜利!伊朗逮住美军“大鱼”!

故事终将光明磊落
2026-07-20 11:59:13
史上第11人!30岁名将同年夺欧冠+世界杯冠军 他出战50场西班牙0败

史上第11人!30岁名将同年夺欧冠+世界杯冠军 他出战50场西班牙0败

我爱英超
2026-07-20 06:15:10
黄健翔:西班牙对法国、阿根廷都是碾压,梅西只是输给了时间

黄健翔:西班牙对法国、阿根廷都是碾压,梅西只是输给了时间

懂球帝
2026-07-20 19:16:19
2550元  ,iPhone16Pro突然降价,真的有点香啊!

2550元 ,iPhone16Pro突然降价,真的有点香啊!

科技堡垒
2026-07-20 12:24:16
2026-07-20 23:56:49
七月在线
七月在线
AI与智能网联汽车职教平台
837文章数 37关注度
往期回顾 全部

科技要闻

网易科技"未来大奖2026上半年AI榜单"揭晓

头条要闻

媒体:驱逐所有以色列人 马来西亚对以强硬几乎零成本

头条要闻

媒体:驱逐所有以色列人 马来西亚对以强硬几乎零成本

体育要闻

65岁肌肉男,世界杯最年长冠军主帅

娱乐要闻

谢霆锋发文确认父亲谢贤去世 享年89岁

财经要闻

AI开始挤泡沫

汽车要闻

综合续航超1600km 2027款星途ES上市置换价16.99万起

态度原创

健康
亲子
房产
旅游
公开课

“斑块”患者要小心中风?

亲子要闻

宝蓝和爸爸玩过家家,扮演美食摊主,比赛看谁的生意好~

房产要闻

北师附、人大附、西侨、丘海…招生、划片最新变化来了!

旅游要闻

来自17国的108名中学生相聚上海,在City Walk中读懂这座城

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版