微信扫码
与创始人交个朋友
我要投稿
前面的几篇文章,只要涉及到模型训练,肯定少不了要写一段重复的代码,代码功能很简单,就是一段循环代码,在训练里加载数据,执行模型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-08-18
当产品经理谈到用LLM Agent构建新一代智能体的时候,他们在说什么?
2024-08-15
对话AI教育从业者们:AI如何解决因材施教的难题?
2024-08-03
工业应用中的向量数据库与知识向量化存储方案
2024-07-25
两大深度学习框架TensorFlow与PyTorch对比
2024-07-17
让生成式 AI 触手可及:NVIDIA NIM on VKE 部署实践
2024-07-16
中文大模型基准测评2024上半年报告
2024-07-16
一文看懂人工智能的起源、发展、三次浪潮与未来趋势
2024-07-14
"自拍" 秒变 "证件照" 看Coze如何实现
2024-05-14
2024-04-26
2024-05-22
2024-04-12
2024-07-18
2024-03-30
2024-05-10
2024-08-13
2024-04-25
2024-04-26