使用pytorch-lightning漂亮地进行深度学习研究

PyTorch Lightning工程化实践:解耦模型与训练的工业级范式 深度学习工程化核心在于分离‘模型逻辑’与‘训练基础设施’——这是保障可复现性、多卡扩展性与团队协作效率的基础原理。PyTorch Lightning 通过 LightningModule、LightningDataModule 和 Trainer 的三层抽象,将设备调度、梯度管理、日志聚合等工程细节封装为声明式配置,使研究人员专注模型设计,而无需重复编写易错的手动训练循环。其技术价值体现在显著降低分布式训练门槛、统一指标聚合语义、内置进程安全机制,并天然支持混合精度、早停、断点续训等工业必需能力。典型应用场 阅读详情

你好,我是云哥。最近研究了一下pytorch-lightning,写了两篇博客记录,这是其一,其二有更多的惊喜,敬请期待。????????

公众号后台回复关键字:源码,获取本文源代码!

pytorch-lightning 是建立在pytorch之上的高层次模型接口。

pytorch-lightning 之于 pytorch,就如同keras之于 tensorflow。

通过使用 pytorch-lightning,用户无需编写自定义训练循环就可以非常简洁地在CPU、单GPU、多GPU、乃至多TPU上训练模型。

无需考虑模型和数据在cpu,cuda之间的移动,并且可以通过回调函数实现CheckPoint参数保存,实现断点续训功能。

一般按照如下方式 安装和 引入 pytorch-lightning 库。

#安装
pip install pytorch-lightning
#引入
import pytorch_lightning as pl 

顾名思义,它可以帮助我们漂亮(pl)地进行深度学习研究。????????

一,pytorch-lightning的设计哲学

pytorch-lightning 的核心设计哲学是将 深度学习项目中的 研究代码(定义模型) 和 工程代码 (训练模型) 相互分离。

用户只需专注于研究代码(pl.LightningModule)的实现,而工程代码借助训练工具类(pl.Trainer)统一实现。

更详细地说,深度学习项目代码可以分成如下4部分:

  • 研究代码 (Research code),用户继承LightningModule实现。

  • 工程代码 (Engineering code),用户无需关注通过调用Trainer实现。

  • 非必要代码 (Non-essential research code,logging, etc...),用户通过调用Callbacks实现。

  • 数据 (Data),用户通过torch.utils.data.DataLoader实现。

二,pytorch-lightning使用范例

下面我们使用minist图片分类问题为例,演示pytorch-lightning的最佳实践。

1,准备数据

import torch 
from torch import nn 

import torchvision 
from torchvision import transforms

transform = transforms.Compose([transforms.ToTensor()])

ds_train = torchvision.datasets.MNIST(root="./minist/",train=True,download=True,transform=transform)
ds_valid = torchvision.datasets.MNIST(root="./minist/",train=False,download=True,transform=transform)

dl_train =  torch.utils.data.DataLoader(ds_train, batch_size=128, shuffle=True, num_workers=4)
dl_valid =  torch.utils.data.DataLoader(ds_valid, batch_size=128, shuffle=False, num_workers=4)

print(len(ds_train))
print(len(ds_valid))

Done!
60000
10000

2,定义模型

import pytorch_lightning as pl 
import datetime

class Model(pl.LightningModule):
    
    def __init__(self):
        super().__init__()
        self.layers = nn.ModuleList([
            nn.Conv2d(in_channels=1,out_channels=32,kernel_size = 3),
            nn.MaxPool2d(kernel_size = 2,stride = 2),
            nn.Conv2d(in_channels=32,out_channels=64,kernel_size = 5),
            nn.MaxPool2d(kernel_size = 2,stride = 2),
            nn.Dropout2d(p = 0.1),
            nn.AdaptiveMaxPool2d((1,1)),
            nn.Flatten(),
            nn.Linear(64,32),
            nn.ReLU(),
            nn.Linear(32,10)]
        )
        
    def forward(self,x):
        for layer in self.layers:
            x = layer(x)
        return x
    
    #定义loss,以及可选的各种metrics
    def training_step(self, batch, batch_idx):
        x, y = batch
        prediction = self(x)
        loss = nn.CrossEntropyLoss()(prediction,y)
        return loss
    
    #定义optimizer,以及可选的lr_scheduler
    def configure_optimizers(self):
        optimizer = torch.optim.Adam(self.parameters(), lr=1e-3)
        return {"optimizer":optimizer}
    
    def validation_step(self, batch, batch_idx):
        loss = self.training_step(batch,batch_idx)
        return {"val_loss":loss}
    
    def test_step(self, batch, batch_idx):
        loss = self.training_step(batch,batch_idx)
        return {"test_loss":loss}
    
  

3,训练模型

pl.seed_everything(1234)
model = Model() 


ckpt_callback = pl.callbacks.ModelCheckpoint(
    monitor='val_loss',
    save_top_k=1,
    mode='min'
)

# gpus=0 则使用cpu训练,gpus=1则使用1个gpu训练,gpus=2则使用2个gpu训练,gpus=-1则使用所有gpu训练,
# gpus=[0,1]则指定使用0号和1号gpu训练, gpus="0,1,2,3"则使用0,1,2,3号gpu训练
# tpus=1 则使用1个tpu训练

trainer = pl.Trainer(max_epochs=5,gpus=0,callbacks = [ckpt_callback]) 

#断点续训
#trainer = pl.Trainer(resume_from_checkpoint='./lightning_logs/version_31/checkpoints/epoch=02-val_loss=0.05.ckpt')

trainer.fit(model,dl_train,dl_valid)

Global seed set to 1234
GPU available: False, used: False
TPU available: None, using: 0 TPU cores

  | Name   | Type       | Params
--------------------------------------
0 | layers | ModuleList | 54.0 K
--------------------------------------
54.0 K    Trainable params
0         Non-trainable params
54.0 K    Total params
Epoch 4: 100% >>>>>>>>>>>>>>>>>>>>>>>>>>>> 158/158 [00:19<00:00, 8.08it/s, loss=0.138, v_num=34]

4,评估模型

result = trainer.test(model, test_dataloaders=dl_valid)
print(result)
--------------------------------------------------------------------------------
DATALOADER:0 TEST RESULTS
{'test_loss': tensor(0.0047)}
--------------------------------------------------------------------------------
[{'test_loss': 0.004680501762777567}]

5,使用模型

data,label = next(iter(dl_valid))
model.eval()
prediction = model(data)
print(prediction)

tensor([[ -5.1149,  -6.1142,   2.0591,  ...,   7.0609,  -5.4144,   0.5222],
        [ -2.2989,  -5.6076,   3.7343,  ...,  -1.8391,  -6.4941,  -3.4076],
        [  0.9215,   6.9357,  -1.9887,  ...,  -2.2996,  -0.8034,  -3.2993],
        ...,
        [ -4.5674,  -6.0223,  -0.9309,  ...,  -3.5468,   0.3367,   4.5473],
        [  4.3023,  -4.1629,  -1.2742,  ...,  -4.2527,  -2.3449,  -2.5585],
        [ -3.8913, -10.3790,  -1.7804,  ...,  -4.6757,  -0.7428,   1.0305]],
       grad_fn=<AddmmBackward>)

6,保存模型

最优模型默认保存在 trainer.checkpoint_callback.best_model_path 的目录下,可以直接加载。

print(trainer.checkpoint_callback.best_model_path)
print(trainer.checkpoint_callback.best_model_score)
/Users/liangyun/CodeFiles/PythonAiRoad/lightning_logs/version_34/checkpoints/epoch=04-val_loss=0.00.ckpt
tensor(0.0047)

model_clone = Model.load_from_checkpoint(trainer.checkpoint_callback.best_model_path)
trainer_clone = pl.Trainer(max_epochs=3) 
result = trainer_clone.test(model_clone,dl_valid)
print(result)

--------------------------------------------------------------------------------
DATALOADER:0 TEST RESULTS
{'test_loss': tensor(0.0047)}
--------------------------------------------------------------------------------
[{'test_loss': 0.004680501762777567}]

如果对本文内容理解上有需要进一步和作者交流的地方,欢迎在公众号"算法美食屋"下留言。作者时间和精力有限,会酌情予以回复。

也可以在公众号后台回复关键字:加群,加入读者交流群和大家讨论。

2020年最强10款Python工具包,个个都是精品! ​2020已经过去,在过去的一年里,又有非常多优秀的Python库涌现出来。 相对于numpy、TensorFlow、pandas这些已经经过多年维护、迭代,对于大多数Python开发者耳熟能详的库不同。 今天要给大家介绍的是诞生于2020年的新鲜Python库,而且,本文介绍的这10个Python库一直都受到非常好的维护。 废话不多说,下面开始本文的正式内容! 1. Typer 或许,你并非经常编写 CLI 应用程序,但是当你编写时,有可能会遇到很多障碍。 继FastAPI的巨大成功之后, 阅读详情

相关推荐

pytorch-lightning:用于高性能AI研究的轻量级PyTorch包装器。 缩放模型而不是样板

轻巧的PyTorch包装器,用于高性能AI研究。 缩放模型,而不是样板。 •••••• • * Codecov大于90%+,但构建延迟可能会减少 新闻 PyTorch Lightning只是有组织的PyTorch 闪电解开了PyTorch代码,使科学与工程脱钩。 闪电哲学 设计闪电时要牢记以下原则: 原则1:启用最大的灵活性。 原则2:提取不必要的样板,但在需要时使其可访问。 原则3:系统应该是独立的(即:优化器,计算代码等)。 原则4:深度学习代码应分为4个不同的类别。 研究代码(LightningModule)。 工程代码(您删除并由培训师处理)。 不必要的研究代码(日志等)在回调中。 数据(使用PyTorch数据加载器或将它们组织成LightningDataModule)。 完成此操作后,您就可以在多个GPU,TPU,CPU甚至16位精度上进行训练,而无需更改代码! 开始使用我们的 推理 Lightning也是为快速推理而设计的,AI研究人员和生产团队需要扩大诸如BERT和自我监督学习之类的东西。 在这种情况下,Lightning可以自动导出到ONNX或Torc

神经网络时间序列预测PyTorch-Forecastin!

来源:数据STUDIO 深度学习初学者 本文约5200字,建议阅读8分钟 本文为你介绍了神经网络时间序列预测PyTorch-Forecastin。PyTorch-Forecasting[1]使用神经网络的时间序列预测对数据科学工作者和研究人员来说都很简单。为什么准确的预测如此重要?预测时间序列在很多情况下都很重要,与机器学习从业者高度相关。以需求预测为例,许多用例都源于此。几乎每个制造商都会从更好...

数据派THU 1988

DRAM自测试模块

1 背景技术DDR3/4 SDRAM属于高速外设,最高时钟频率可达到1600MHz,最高速率可达3200MT/s。在存储控制器与DDR34 SDRAM设备之间有一层专为高速接口设计的模拟电路,此电路对于前端设计人员来说,不管在模拟验证阶段和回片测试阶段,都是一个黑盒子。而对于后端测试人员来说若此部分为外购IP,则内部结构也是无法清楚了解的。所以在测试阶段,对于DDR34 SDRAM的测试就具有一定的

Hierro的DDR世界 7014

pytorch lightning 按照频率/epoch/step保存模型或checkpoint

利用 **every_n_train_steps 、train_time_interval 、every_n_epochs **设置保存 checkpoint 的按照步数、时间、epoch数来保存 checkpoints 或模型,注意三者互斥,如果要同时实现对应的功能需要创建多个 MODELCHECKPOINT。在训练深度神经网络时,如果训练时间较长,我们通常希望在训练过程中定期保存模型的参数,以便稍后从该点恢复训练或进行推理。只能设置为 -1,0,1,分别表示保存所有的模型,不保存模型和保存最后一个模型。

qcwlmqy的博客 9906

Centos7配置阿里云镜像源的教程

查看你的Centos版本,版本过低会导致安装失败,验证网络是否可以连接阿里云镜像,使用阿里云是需要网络的。# wget命令下载: wget [options] [url]# curl命令下载: curl [options] [url]我上面这个图片由于电脑问题是还没有加载完的。删除原来或者之前的yun源。

lyhshs的博客 2261

SAP PP模块MRP控制参数实战指南:从NETCH到NEUPL的深度解析

本文深入解析SAP PP模块中MRP控制参数的配置与应用,涵盖NETCH、NETPL和NEUPL三种运行模式的优化策略。通过实战案例和参数对比,帮助用户提升物料需求计划的效率和准确性,优化库存周转率和生产交付能力。

weixin_28419039的博客 245

Pytorch Lightning框架:使用笔记【LightningModule、LightningDataModule、Trainer、ModelCheckpoint】

pytorch是有缺陷的,例如要用半精度训练、BatchNorm参数同步、单机多卡训练,则要安排一下Apex,Apex安装也是很烦啊,我个人经历是各种报错,安装好了程序还是各种报错,而pl则不同,这些全部都安排,而且只要设置一下参数就可以了。另外,根据我训练的模型,4张卡的训练速度大概提升3倍,训练效果(图像生成)好很多,真香。另外,还有一个特色,就是你的超参数全部保存到模型中,如果你要调巨多参数,那就不需要再对每个训练的模型进行参数标记了,而且恢复模型时可以直接恢复超参数,可以大大减小代码量和工作量,这.

u013250861的博客 2万+

Windows下高效部署llama.cpp:从环境配置到模型量化的完整指南

本文提供了一份详尽的Windows系统下部署llama.cpp的完整指南。内容涵盖从Python环境配置、使用CMake与MinGW编译工具链的搭建,到编译llama.cpp项目、获取并转换模型为GGUF格式,以及执行模型量化和基础推理测试的全过程。指南旨在帮助开发者在普通Windows电脑上,无需高端显卡,仅凭CPU即可高效运行大语言模型,并重点解决了部署过程中常见的环境与编译错误。

weixin_28841265的博客 882

【Pytorch Lighting】第 10 章:扩展和管理培训

领域,我们仍有许多未解决的问题需要开发新的算法,还有许多未解决的问题需要设计新的架构。但是,启动笔记本的机器的当前工作目录不是在云笔记本中保存检查点的好选择,因为它们的底层基础设施具有瞬态性,如上一节所述。)、半监督学习和自监督学习,它们扩展了 ML 领域的可能性,而这些不仅仅是先进的模型,但创造艺术的超酷方式和很多乐趣。虽然这本书的目的是让那些正在开始他们的 DL 之旅的人开始并运行,但我们希望那些来自其他框架的人也发现这是一种快速而简单地过渡到 PyTorch Lightning 的方法。

sikh_0529的博客 2377

【UE5】VoskPlugin实战:离线语音识别与实时文本转换全流程解析

本文详细解析了如何在UE5中利用VoskPlugin实现离线实时语音转文字功能。从环境搭建、插件配置、核心代码编写到蓝图测试,提供了完整的实战教程。重点阐述了离线方案零延迟、数据私密的优势,并分享了模型选择、性能优化及常见问题的解决方案,帮助开发者快速构建稳定可靠的语音交互系统。

weixin_29001655的博客 622

Ansys Zemax|无焦系统设计中的角度单位优化技巧

本文详细介绍了在Ansys Zemax OpticStudio中进行无焦系统设计的核心技巧。重点阐述了从聚焦思维到角度思维的转换,并演示了如何通过开启‘无焦像空间’模式、构建以波前和光束尺寸为目标的评价函数来优化激光扩束镜等系统。文章还分享了使用IMSF操作数处理混合系统以及常见误区避坑的实用指南,旨在帮助光学设计者高效完成无焦系统的设计与分析。

weixin_29231027的博客 362

像 Keras 一样优雅地使用 pytorch-lightning

你好,我是云哥。本篇文章为大家介绍一个可以帮助大家优雅地进行深度学习研究的工具:pytorch-lightning。公众号后台回复关键字:源码,获取本文源代码!pytorch-light...

Python_Ai_Road的博客 2190

Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

专注于系统快稳省领域 4146

pytorch_lightning模型训练加速技巧与涨点技巧

pytorch-lightning 是建立在pytorch之上的高层次模型接口。pytorch-lightning 之于 pytorch,就如同keras之于 tensorflow.pytorch-lightning 有以下一些引人注目的功能:可以不必编写自定义循环,只要指定loss计算方法即可。可以通过callbacks非常方便地添加CheckPoint参数保存、early_stopping 等...

Python_Ai_Road的博客 4741

2026年Java 开发工程师常见面试简答题

本文整理了Java开发工程师面试常见简答题及详细解析,涵盖Java基础、集合框架、并发编程、JVM等核心考点。主要内容包括:1. Java基础概念:JDK/JRE/JVM区别、面向对象特性、重载与重写、接口与抽象类、String特性等 2. 集合框架:ArrayList/LinkedList区别、HashMap实现原理、线程安全方案、集合类型对比 3. 并发编程:synchronized原理、volatile作用、线程创建方式、线程池参数与策略、死锁处理 4. JVM相关:内存区域划分、垃圾回收算法、类加载

不务正业的猿 374

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

pytorch_lightning模型训练加速

return x#定义loss#定义各种metrics#定义optimizer,以及可选的lr_scheduler#查看模型大小|?|?|?

whaosoft143ai的博客 2213

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

PyTorch、TensorFlow与JAX实战选型指南:研究落地与生产部署的工程权衡

AI框架不仅是代码工具,更是连接算法构想与硬件执行的‘思维翻译器’。从自动微分原理到计算图编译机制,不同框架在动态性、确定性与函数式表达上存在根本差异。PyTorch以eager模式支撑快速迭代与调试友好性,TensorFlow依托SavedModel与XLA保障云上部署一致性与边缘量化能力,JAX则通过jit/grad/vmap提供高阶可微分编程范式。技术价值体现在研究复现效率、生产SLA达标率与跨平台可维护性;典型场景覆盖金融风控模型迭代、医疗影像辅助诊断部署及工业预测性维护系统构建。本文基于12个跨行

weixin_30423977的博客 376

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PyTorch深度学习实验可视化:TensorBoard核心API详解与工程实践

在深度学习模型开发中,实验监控与可视化是理解模型行为、加速调试迭代的关键环节。其核心原理在于将训练过程中的多维数据(如损失、准确率、参数分布、特征图等)进行实时记录与结构化存储,再通过交互式界面进行动态呈现。这一技术价值在于将模型从“黑箱”转变为可观测系统,使开发者能直观诊断梯度问题、对比超参数效果、理解特征学习过程,从而显著提升研发效率。在PyTorch生态中,TensorBoard作为主流的可视化工具,通过SummaryWriter等API与训练流程深度集成,广泛应用于模型训练监控、性能分析和实验对比等

weixin_34197488的博客 353

深度学习项目毕设实战:从零构建一个可复现的图像分类系统

通过这套组合拳——模块化项目结构、PyTorch Lightning 框架、配置化管理、严格的随机种子控制以及完善的日志记录——你应该能搭建出一个健壮、可复现的图像分类项目基底。这不仅能让你高效地进行实验对比(比如轻松切换 ResNet 和 EfficientNet),更能让你毕业设计的成果经得起推敲。建议你立刻动手,用这个框架重构你当前的毕设代码。模型泛化能力:你的模型在验证集上表现好,在完全陌生的测试集上呢?尝试寻找与训练集分布略有差异的数据进行测试。评估指标的选择:你的任务真的只看准确率就够了吗。

2600_94959951的博客 160

深度学习本科毕设效率提升指南:从环境配置到模型训练的全流程优化

用Docker固化环境,用Lightning抽象样板代码,用Hydra管理配置,用W&B跟踪实验,用Git控制版本。这套组合拳打下来,你会发现之前那些令人头疼的“杂事”大部分都自动化了。你的工作流会变得清晰、可靠、可复现。你可以快速地进行大量的对比实验,并自信地分析结果,因为你知道每个结果是如何产生的。我强烈建议你,不要等到项目中期被混乱折磨时再行动。现在就动手,参照上面的模板,重构你毕设项目的代码结构。哪怕只花一天时间,带来的效率提升也绝对是值得的。试着思考一下:除了算法创新,

2600_94959863的博客 227

早停、Dropout、数据增强:深度学习抗过拟合三大实操基石

过拟合是模型泛化能力失效的核心症结,本质源于模型对训练噪声的过度拟合而非对数据规律的真正学习。其技术原理在于训练误差持续下降而验证误差开始上升的失衡状态,导致模型失去对未知样本的鲁棒判别能力。解决过拟合的关键不在于堆砌复杂正则项,而在于引入低成本、高确定性的基础防御机制:早停通过验证集动态截断训练过程,防止参数在噪声上过优化;Dropout以随机失活与补偿缩放重构神经元协同关系,提升特征表达的独立性与稳定性;数据增强则通过对几何、色彩、噪声等维度的语义合理扰动,迫使模型聚焦于任务不变量。这三者共同构成工业级

cunbei2644的博客 404

PyTorch、TensorFlow与JAX:从设计哲学到生产部署的深度对比

在深度学习领域,计算图是模型训练与推理的核心抽象,其执行模式直接决定了开发体验与系统性能。动态图(Eager Execution)与静态图(Graph Mode)是两种根本性的设计哲学,前者支持即时执行与灵活调试,便于研究实验;后者允许编译期全局优化,利于生产部署。理解这一原理,有助于把握不同框架的技术价值:PyTorch以动态图起家,为研究提供了直观的交互环境;TensorFlow凭借成熟的静态图生态,构建了强大的生产化工具链;而JAX则基于函数式编程,通过可组合的变换追求极致的性能与并行效率。这些差异最

weixin_34067102的博客 399

AI Python框架选型实战指南:从训练到部署的工程化决策

AI Python编程框架是机器学习工程化落地的核心载体,其本质是模型训练、导出、服务化与运维能力的系统集成。理解框架底层原理,关键在于把握模型服务部署的稳定性、GPU资源调度效率及跨平台兼容性等工程约束。技术价值不仅体现在开发速度,更在于降低线上故障率、缩短迭代周期、保障服务SLA。典型应用场景包括电商图像分类、NLP情感分析、设备故障预测及轻量API服务等,需结合团队能力、基础设施与业务指标综合权衡。本文聚焦2022年生产环境验证的五套主流方案,覆盖PyTorch生态与TensorFlow生产适配两大技

weixin_30800807的博客 449

零代码AI病理诊断:从数据标注到模型训练的全流程实践指南

深度学习作为人工智能的核心技术,通过模拟人脑神经网络结构实现对复杂数据的特征提取与模式识别。其原理基于多层非线性变换,能够自动学习数据中的层次化特征表示。在医疗影像分析领域,这项技术的价值在于辅助医生提升诊断效率与一致性,尤其在病理切片分析中具有广阔应用前景。数字病理图像分类是AI落地的典型场景,涉及肿瘤组织识别、良恶性判别等任务。本文聚焦于通过图形化工具与高级框架实现零代码AI开发,其中PyTorch Lightning框架简化了训练流程,QuPath工具则提供了专业的数据标注环境,让病理专家无需编程即可

weixin_34043301的博客 574

2020年年度最强Python库排行!

????????关注后回复“进群”,拉你进程序员交流群????????开源最前线(ID:OpenSourceTop) 猿妹整编https://tryolabs.com/blog/202...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 327
上一篇: 初识Structured Streaming
下一篇: 像 Keras 一样优雅地使用 pytorch-lightning
算法美食屋
博客等级 码龄9年 2万+粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值