微信扫码
添加专属顾问
我要投稿
前面的几篇文章,只要涉及到模型训练,肯定少不了要写一段重复的代码,代码功能很简单,就是一段循环代码,在训练里加载数据,执行模型forward方法,计算梯度,更新参数。
每次都写一遍这个代码,效率挺低的,你可以自己封装train方法,或者,直接使用pytorch lighting,把这些繁杂的事情交给框架自己去完成,我们则专注于模型设计。
不使用 PyTorch Lightning 时,模型训练通常直接使用 PyTorch 的 API 来完成。这包括定义模型、损失函数、优化器,以及编写用于训练和验证模型的循环。
下面是一个基本的流程示例,展示了如何使用 PyTorch 来训练一个简单的模型,注意for循环那段代码,代码结构不够优雅:
import torchimport torch.nn as nnimport torch.optim as optimfrom torch.utils.data import DataLoader# 假设我们有一个自定义的数据集和模型dataset = ...# 你的数据集model = ...# 你的模型,继承自 nn.Moduleloss_function = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=0.001)# 数据加载dataloader = DataLoader(dataset, batch_size=64, shuffle=True)# 训练循环for epoch in range(num_epochs):for inputs, targets in dataloader:optimizer.zero_grad() # 清零梯度outputs = model(inputs)# 前向传播loss = loss_function(outputs, targets)# 计算损失loss.backward() # 反向传播optimizer.step() # 更新模型参数print(f"Epoch {epoch}, Loss: {loss.item()}")
PyTorch Lightning通过引入一些新的抽象概念和模块化设计,来简化PyTorch模型的开发和训练过程,主要包括:
下面将根据之前提到的
PyTorch 实现示例,展示如何使用 PyTorch Lightning 来实现相同的功能,整体代码结构优雅很多,结构清晰:
pytorch_lightning pl
如果你有多张GPU卡,或者是多节点分布式训练,只需在Trainer对象中指定GPU设备id或设置分布式环境变量即可,无需在模型代码中进行任何特殊处理:
# 单节点多GPU训练trainer = Trainer(gpus=4)# 多节点分布式训练trainer = Trainer(accelerator="ddp")# 执行训练前,需要配置训练节点,设置主节点,专用端口# 启动训练,需要指定主节点,如下:python -m torch.distributed.launch --nproc_per_node=NUM_GPUS_PER_NODE--nnodes=NUM_NODES--node_rank=NODE_RANK--master_addr=MASTER_ADDR--master_port=MASTER_PORTtrain.py
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-08-21
2025-08-20
2025-09-07
2025-08-21
2025-08-19
2025-08-05
2025-09-16
2025-08-20
2025-10-02
2025-09-08
2025-10-29
2025-10-29
2025-10-29
2025-10-28
2025-10-28
2025-10-28
2025-10-27
2025-10-27