微信扫码
与创始人交个朋友
我要投稿
前面的几篇文章,只要涉及到模型训练,肯定少不了要写一段重复的代码,代码功能很简单,就是一段循环代码,在训练里加载数据,执行模型forward方法,计算梯度,更新参数。
每次都写一遍这个代码,效率挺低的,你可以自己封装train方法,或者,直接使用pytorch lighting,把这些繁杂的事情交给框架自己去完成,我们则专注于模型设计。
不使用 PyTorch Lightning 时,模型训练通常直接使用 PyTorch 的 API 来完成。这包括定义模型、损失函数、优化器,以及编写用于训练和验证模型的循环。
下面是一个基本的流程示例,展示了如何使用 PyTorch 来训练一个简单的模型,注意for循环那段代码,代码结构不够优雅:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
# 假设我们有一个自定义的数据集和模型
dataset = ...# 你的数据集
model = ...# 你的模型,继承自 nn.Module
loss_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_PORT
train.py
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-10
2024-04-12
2024-05-28
2024-05-14
2024-04-25
2024-07-18
2024-04-26
2024-05-06
2024-12-22
2024-12-21
2024-12-21
2024-12-21
2024-12-21
2024-12-20
2024-12-20
2024-12-19