ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PyTorch Lightning 15 分钟上手指南:从零构建自编码器训练全流程

PyTorch Lightning 15 分钟上手指南:从零构建自编码器训练全流程 人工智能深度学习机器学习预训练分布式训练微调【免费下载链接】pytorch-lightningPretrain, finetune ANY AI model of ANY size on 1 or 10,000 GPUs with zero code changes.项目地址https://gitcode.com/gh_mirrors/py/pytorch-lightning点击查看免费下载导读本文基于 docs/source-pytorch/starter/introduction.rst 官方入门文档带你用 15 分钟走完一个典型的 PyTorch Lightning 工作流安装、定义LightningModule、准备数据集、调用Trainer训练、加载 checkpoint 推理、TensorBoard 可视化以及通过几个 Trainer 参数直接开启多 GPU、混合精度、DeepSpeed/FSDP 等规模化能力。读完本文你将掌握 Lightning 的 7 个核心步骤并能理解其在当前仓库 src/lightning/pytorch 中的底层实现原理为后续深入研究做好准备。前置要求无。PyTorch Lightning 是一个内置电池batteries included的深度学习框架面向需要最大灵活度、同时希望在规模化训练中获得性能提升的专业 AI 研究者与机器学习工程师。它将 PyTorch 代码进行组织化整理去除样板代码boilerplate解锁可扩展能力。通过组织 PyTorch 代码Lightning 让你能够以纯 PyTorch 思路尝试任何想法而无需处理样板代码让研究与工程代码解耦提升可复现性与可读性在不修改代码的前提下使用多 GPU/TPU/HPU以及直接受益于框架内置的工程化测试保障。1. 安装 PyTorch LightningLightning 同时发布lightning与pytorch-lightning两个顶层包当前仓库的源码位于 src/lightning统一通过lightning包名安装。pip 用户pip install lightningconda 用户conda install lightning -c conda-forge安装后即可在代码中导入顶层 API 由 src/lightning/pytorch/init.py 导出包括Trainer、LightningModule、LightningDataModule、Callback与seed_everythingimport lightning as L更完整的安装方式虚拟环境、源码构建、自定义 PyTorch 版本、兼容性矩阵请参考 docs/source-pytorch/starter/installation.rst。2. 定义 LightningModuleLightningModule让你的 PyTorchnn.Module可以在training_step以及可选的validation_step、test_step中与框架以复杂方式协同工作。它的设计原则是你仍然拥有全部 PyTorch 代码Lightning 只负责编排训练循环的工程细节。下面是一个完整的 MNIST 自编码器示例也是官方文档的示例完整版可参考 examples/pytorch/basics/autoencoder.pyimport os from torch import optim, nn, utils, Tensor from torchvision.datasets import MNIST from torchvision.transforms import ToTensor import lightning as L # 定义任意数量的 nn.Module或复用你现有的模块 encoder nn.Sequential(nn.Linear(28 * 28, 64), nn.ReLU(), nn.Linear(64, 3)) decoder nn.Sequential(nn.Linear(3, 64), nn.ReLU(), nn.Linear(64, 28 * 28)) # 定义 LightningModule class LitAutoEncoder(L.LightningModule): def __init__(self, encoder, decoder): super().__init__() self.encoder encoder self.decoder decoder def training_step(self, batch, batch_idx): # training_step 定义了训练循环它独立于 forward x, _ batch x x.view(x.size(0), -1) z self.encoder(x) x_hat self.decoder(z) loss nn.functional.mse_loss(x_hat, x) # 默认记录到 TensorBoard如果已安装 self.log(train_loss, loss) return loss def configure_optimizers(self): optimizer optim.Adam(self.parameters(), lr1e-3) return optimizer # 初始化自编码器 autoencoder LitAutoEncoder(encoder, decoder)关键设计点training_step与forward独立forward仅用于推理/部署时的前向传播而training_step负责训练语义可以包含多个前向、损失组合等逻辑二者解耦让同一模型既可训练又可部署。configure_optimizers返回优化器框架会在训练循环内部自动调用optimizer.zero_grad()、loss.backward()、optimizer.step()。从源码 src/lightning/pytorch/core/module.py 可以看到configure_optimizers支持返回单个优化器、优化器列表、或(optimizers, lr_schedulers)二元组optimizers与lr_schedulers两个辅助方法分别用于在循环中访问它们。self.log记录指标其完整签名位于 src/lightning/pytorch/core/module.py 中支持prog_bar是否显示在进度条、logger是否写入 logger、on_step/on_epoch按 step 还是按 epoch 聚合、reduce_fx默认mean、sync_dist多卡时是否同步归约等参数供进阶使用。如果你想对训练循环拥有完全的控制权可以参考Own your loop相关文档见 docs/source-pytorch/model/own_your_loop.rst。3. 定义数据集Lightning 支持任意可迭代对象torch.utils.data.DataLoader、numpy 数组等作为 train/val/test/predict 四个阶段的数据源# 准备数据 dataset MNIST(os.getcwd(), downloadTrue, transformToTensor()) train_loader utils.data.DataLoader(dataset)Trainer.fit()的签名见 src/lightning/pytorch/trainer/trainer.py接受train_dataloaders、val_dataloaders以及更工程化的datamodule参数。对于更复杂的数据管线官方推荐使用LightningDataModule将下载、切分、DataLoader 构建等逻辑统一封装——仓库内置的 src/lightning/pytorch/demos/mnist_datamodule.py 就是一个典型实现它通过prepare_data()/setup()/train_dataloader()/val_dataloader()/test_dataloader()/predict_dataloader()六个钩子把数据流程标准化。在多卡训练时Lightning 会自动为你的 DataLoader 注入DistributedSampler见 src/lightning/pytorch/trainer/connectors/data_connector.py无需手工修改数据代码。4. 训练模型Trainer把任意LightningModule与任意数据集混合在一起抽象掉规模化所需的全部工程复杂性。仅需两行代码即可启动训练# 训练模型提示这里有一些帮助快速迭代想法的 Trainer 参数 trainer L.Trainer(limit_train_batches100, max_epochs1) trainer.fit(modelautoencoder, train_dataloaderstrain_loader)其中limit_train_batches100表示每个 epoch 只跑前 100 个 batchmax_epochs1表示只训练 1 个 epoch——这两者配合可以快速验证代码正确性。Trainer的完整参数签名见 src/lightning/pytorch/trainer/trainer.py其__init__接收 40 个关键字参数。Trainer自动完成了 40 项工程技巧包括但不限于epoch 与 batch 的迭代调度自动执行optimizer.step()、loss.backward()、optimizer.zero_grad()调用评估阶段自动调用model.eval()并开关梯度计算自动化的 checkpoint 保存与加载见 docs/source-pytorch/common/checkpointing.rstTensorBoard 等 logger 集成见 docs/source-pytorch/visualize/loggers.rst多 GPU 支持见 docs/source-pytorch/accelerators/gpu.rstTPU 支持见 docs/source-pytorch/accelerators/tpu.rst16 位精度 AMP自动混合精度支持。在底层Trainer通过accelerator、strategy、precision三个正交维度组合出具体的执行方案见 src/lightning/pytorch/trainer/connectors/accelerator_connector.py例如acceleratorgpustrategyddpprecision16-mixed就对应 DDP AMP 的训练方案。关于LightningModule的更多细节参见 docs/source-pytorch/common/lightning_module.rst。5. 使用模型加载 checkpoint 并推理训练完成后可以将模型导出为 ONNX、TorchScript 用于生产部署也可以直接加载权重进行预测。# 加载 checkpoint checkpoint ./lightning_logs/version_0/checkpoints/epoch0-step100.ckpt autoencoder LitAutoEncoder.load_from_checkpoint(checkpoint, encoderencoder, decoderdecoder) # 取出你训练好的 nn.Module encoder autoencoder.encoder encoder.eval() # 用 4 张随机图片做 embedding fake_image_batch torch.rand(4, 28 * 28, deviceautoencoder.device) embeddings encoder(fake_image_batch) print(⚡ * 20, \nPredictions (4 image embeddings):\n, embeddings, \n, ⚡ * 20)load_from_checkpoint是LightningModule的类方法实现于 src/lightning/pytorch/core/saving.py它会从 checkpoint 中恢复模型权重并通过**kwargs把encoder、decoder等构造参数传给__init__同时自动处理map_location、strict等加载细节。需要说明的是上面示例中的 checkpoint 路径格式由默认的ModelCheckpoint回调生成默认输出目录为lightning_logs/version_0/checkpoints/epoch0-step100是文件名中的占位符实际文件会以真实数值命名。若要在生产环境部署TorchScript、ONNX、TensorRT 等可参考 docs/source-pytorch/deploy/production.rst 以及仓库中的 examples/pytorch/servable_module/production.py。6. 可视化训练过程如果安装了 TensorBoard可以直接可视化实验。在命令行运行并打开浏览器访问http://localhost:6006/tensorboard --logdir .self.log(train_loss, loss)记录的指标会以折线图形式呈现在 TensorBoard 中。默认 logger 行为、CSV/MLflow/WandB 等其他 logger 的切换方式见 docs/source-pytorch/visualize/loggers.rst。7. 为训练提速用 Trainer 参数启用先进特性以下都是 SOTAstate-of-the-art级技术无需修改任何模型代码仅通过Trainer参数即可自动集成进训练循环# 在 4 张 GPU 上训练 trainer L.Trainer( devices4, acceleratorgpu, ) # 用 Deepspeed / FSDP 训练 1TB 参数规模的模型 trainer L.Trainer( devices4, acceleratorgpu, strategydeepspeed_stage_2, precision16, ) # 20 个有助于快速迭代想法的参数 trainer L.Trainer( max_epochs10, min_epochs5, overfit_batches1, ) # 使用最新的先进技术 trainer L.Trainer(callbacks[WeightAveraging(...)])对上述参数做进一步说明参数作用备注devices使用的设备数量或编号列表如4或[0, 1]auto表示自动探测accelerator硬件后端auto、gpu、cpu、tpu、mps等strategy分布式策略auto、ddp、deepspeed_stage_2、fsdp等precision训练精度如16AMP 混合精度、16-mixed、bf16-mixed等max_epochs/min_epochs训练轮数上下限max_epochsNone时与max_steps协同overfit_batches用少量 batch 过拟合验证代码正确性传整数表示 batch 数传小数表示比例其中strategy、accelerator、precision的实际选择与校验逻辑在 src/lightning/pytorch/trainer/connectors/accelerator_connector.py 中实现当传入字符串时框架会通过注册表将其解析为对应的Strategy/Accelerator/Precision实例。WeightAveraging回调的完整实现见 src/lightning/pytorch/callbacks/weight_averaging.py它基于torch.optim.swa_utils.AveragedModel在每步/每 epoch 后更新平均权重并支持自定义平均函数如 EMA与更新时机。最大化灵活性5 种自由度Lightning 的核心指导原则是始终提供最大的灵活性同时绝不隐藏任何 PyTorch 能力。根据项目复杂度Lightning 提供了 5 种递进的自由度。定制训练循环自定义钩子借助LightningModule中提供的 20 个钩子方法如on_train_batch_start、on_before_backward、on_before_optimizer_step、on_train_epoch_end等完整列表见 src/lightning/pytorch/core/hooks.py可以在训练循环的任意位置注入自定义代码class LitAutoEncoder(L.LightningModule): def backward(self, loss): loss.backward()重写backward后框架在训练循环中调用反向传播时会走你的实现这可用于自定义梯度处理如梯度惩罚。扩展 Trainer使用 Callback如果你的代码中有多行功能相似、需要整体开关的逻辑可以封装成 callback 统一管理trainer Trainer(callbacks[AWSCheckpoints()])Callback 基类定义于 src/lightning/pytorch/callbacks/callback.py仓库内置了 26 个回调见 src/lightning/pytorch/callbacks 目录包括ModelCheckpoint、EarlyStopping、LearningRateMonitor、WeightAveraging等。使用纯 PyTorch 循环手动优化对于研究前沿的某些工作Lightning 为专家用户提供了对优化或训练循环的完全控制——即手动优化Manual optimization训练循环仍由框架自动化驱动但优化步骤完全由你掌控。相关说明见 docs/source-pytorch/model/build_model_advanced.rst 中关于手动优化的章节以及 docs/source-pytorch/model/own_your_loop.rst。下一步学习路线根据你的使用场景官方推荐按以下路线继续深入Level 2添加验证集与测试集——通过validation_step和test_step避免欠拟合/过拟合见 docs/source-pytorch/levels/basic_level_2.rst查看更多示例——覆盖计算机视觉、NLP、强化学习等领域见 docs/source-pytorch/tutorials.rst 以及仓库 examples/pytorch 目录部署模型——学习如何预测或将模型投入生产见 docs/source-pytorch/deploy/production.rst。此外仓库中的 examples/pytorch/basics/autoencoder.py 给出了本文示例的完整工程化版本包含验证/测试/预测四阶段、LightningDataModule封装与 CLI 入口运行方式为python autoencoder.py --trainer.max_epochs50它基于LightningCLI见 src/lightning/pytorch/cli.py你可以直接从命令行覆盖 Trainer 参数是快速上手并验证本文内容的最佳实践起点。赞分享人工智能深度学习机器学习预训练分布式训练微调【免费下载链接】pytorch-lightningPretrain, finetune ANY AI model of ANY size on 1 or 10,000 GPUs with zero code changes.项目地址https://gitcode.com/gh_mirrors/py/pytorch-lightning点击查看免费下载相关推荐PowerToys文本提取器3步告别手动输入烦恼的智能OCR解决方案PowerToys文本提取器3步告别手动输入烦恼的智能OCR解决方案 还在为截图中的文字无法复制而烦恼吗PowerToys文本提取器通过先进的OCR光学字符桌面应用开发工具Flower PyTorch Lightning 快速入门在 MNIST 上联邦训练自编码器AutoEncoderFlower PyTorch Lightning 快速入门在 MNIST 上联邦训练自编码器AutoEncoder 本篇技术指南基于 Flower 框人工智能联邦学习机器学习深度学习30分钟上手Labelme从图像标注到PyTorch分割模型训练全流程30分钟上手Labelme从图像标注到PyTorch分割模型训练全流程 你是否还在为数据集标注工具复杂难用而烦恼是否想快速实现从图像标注到深度学习模型训练的数据标注计算机视觉桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表