当前位置: 首页 > news >正文

杭州设计网站的公司哪家好做网站付款流程

杭州设计网站的公司哪家好,做网站付款流程,学校信息门户网站建设,店铺推广方法有哪些目录 1. 引言2. PyTorch 数据并行#xff08;Data Parallel, DP#xff09;2.1 DP 的优缺点2.2 DP 实现代码示例 3. PyTorch 分布式数据并行#xff08;Distributed Data Parallel, DDP#xff09;3.1 DDP 的优缺点3.2 分布式基本概念3.3 DDP 的应用流程3.5 DDP 实现代码示… 目录 1. 引言2. PyTorch 数据并行Data Parallel, DP2.1 DP 的优缺点2.2 DP 实现代码示例 3. PyTorch 分布式数据并行Distributed Data Parallel, DDP3.1 DDP 的优缺点3.2 分布式基本概念3.3 DDP 的应用流程3.5 DDP 实现代码示例 4. DP和DDP的对比 1. 引言 在现代深度学习中随着模型规模的不断增大以及数据量的快速增长模型训练所需的计算资源也变得愈加庞大。尤其是在大型深度学习模型的训练过程中单张 GPU 显存往往难以满足需求因此如何高效利用多 GPU 进行并行训练成为了加速模型训练的关键手段。PyTorch 作为目前最受欢迎的深度学习框架之一提供了多种并行训练的方式其中最常用的是 数据并行Data Parallel, DP 和 分布式数据并行Distributed Data Parallel, DDP。 ⚠️ 无论是DP还是DDP都只支持数据并行。 2. PyTorch 数据并行Data Parallel, DP 数据并行Data Parallel, DP 是 PyTorch 中一种简单的并行训练方式它的主要思想是将数据拆分为多个子集然后将这些子集分别分配给不同的 GPU 进行计算。DP 的工作原理如下 在前向传播时首先将模型的参数复制到每个 GPU 上。每个 GPU 独立计算一部分数据的前向传播和损失值并将计算结果返回到主 GPU。主 GPU 汇总每个 GPU 计算的损失并计算出梯度。通过反向传播将计算得到的梯度更新主 GPU 的模型参数然后再将更新后的参数广播到其他 GPU 上。 2.1 DP 的优缺点 优点 实现简单使用 PyTorch 提供的 torch.nn.DataParallel 接口即可轻松实现。对于小规模的模型和数据集DP 能够在单机多卡的场景下提供良好的加速效果。 缺点 DP 在每个 batch 中需要在 GPU 之间传递模型参数和数据参数更新时也需要将梯度传递回主 GPU这会造成大量的通信开销。由于梯度的计算和模型参数的更新都是在主 GPU 上完成的主 GPU 的负载会显著增加导致 GPU 资源无法得到充分利用。 2.2 DP 实现代码示例 使用 torch.nn.DataParallel 实现数据并行非常简单。我们只需要将模型封装到 DataParallel 中然后传入多个 GPU 即可。下面我们通过代码示例展示如何使用 DP 进行并行训练。 import torch import torch.nn as nn import torchvisionBATCH_SIZE 256 EPOCHS 5 NUM_CLASSES 10 INPUT_SHAPE (3, 224, 224) # ResNet-18 的输入尺寸# 1. 创建模型 net torchvision.models.resnet18(pretrainedFalse, num_classesNUM_CLASSES) net nn.DataParallel(net) net net.cuda()# 2. 生成随机数据 total_steps 100 # 假设每个 epoch 有 100 个步骤 inputs torch.randn(BATCH_SIZE, *INPUT_SHAPE).cuda() targets torch.randint(0, NUM_CLASSES, (BATCH_SIZE,)).cuda()# 3. 定义损失函数和优化器 criterion nn.CrossEntropyLoss() optimizer torch.optim.SGD(net.parameters(), lr0.02, momentum0.9, weight_decay0.0001, nesterovTrue )# 4. 开始训练 net.train() for ep in range(1, EPOCHS 1):train_loss correct total 0for idx in range(total_steps):outputs net(inputs)loss criterion(outputs, targets)optimizer.zero_grad()loss.backward()optimizer.step()train_loss loss.item()total targets.size(0)correct torch.eq(outputs.argmax(dim1), targets).sum().item()if (idx 1) % 25 0 or (idx 1) total_steps:print(fEpoch [{ep}/{EPOCHS}], Step [{idx 1}/{total_steps}], Loss: {train_loss / (idx 1):.3f}, Acc: {correct / total:.3%})在这个代码示例中我们使用了随机生成的输入和标签数据以简化代码并专注于并行训练的实现。通过将模型封装在 DataParallel 中我们可以在多个 GPU 上进行并行计算。然而由于 DP 存在较大的通信开销以及主 GPU 的计算瓶颈因此在更大规模的训练中我们更推荐使用分布式数据并行DDP来加速训练。 3. PyTorch 分布式数据并行Distributed Data Parallel, DDP 分布式数据并行Distributed Data Parallel, DDP 是 PyTorch 中推荐使用的多 GPU 并行训练方式特别适合大规模训练任务。与 DP 不同DDP 是一种多进程并行方式避免了 Python 全局解释器锁GIL的限制可以在单机或多机多卡环境中实现更高效的并行计算。DDP的工作原理如下 在每个 GPU 上运行一个独立的进程每个进程都有自己的一份模型副本和数据。各个进程独立执行前向传播、计算损失和反向传播得到各自的梯度。在反向传播阶段各个 GPU 的进程通过通信将梯度汇总平均后更新每个进程中的模型参数。每个进程的模型参数在整个训练过程中保持一致避免了 DP 中由于参数广播导致的通信开销。 3.1 DDP 的优缺点 优点 由于各个 GPU 上的进程独立计算梯度更新模型参数时只需要同步梯度而非整个模型通信开销较小性能大幅提升。DDP 可以在多机多卡环境下使用支持大规模的分布式训练适合深度学习模型的高效扩展。 缺点 代码实现相对 DP 较为复杂需要手动管理进程的初始化和同步。 3.2 分布式基本概念 在使用 DDP 进行分布式训练时我们需要理解以下几个基本概念 node节点物理节点一台机器即为一个节点。nnodes节点数量表示参与训练的物理节点数量。node rank节点序号节点的编号用于区分不同的物理节点。nproc per node每节点的进程数量表示每个物理节点上启动的进程数量通常等于 GPU 的数量。world size全局进程数量表示全局并行的进程总数等于 nnodes * nproc_per_node。rank进程序号表示每个进程的唯一编号用于进程间通信rank0 的进程为主进程。local rank本地进程序号在某个节点上的进程的序号local_rank0 表示该节点的主进程。 3.3 DDP 的应用流程 使用 DDP 进行分布式训练的步骤如下 初始化分布式训练环境通过 torch.distributed.init_process_group 初始化进程组指定通信后端和相关配置。创建分布式模型将模型封装到 torch.nn.parallel.DistributedDataParallel 中进行并行训练。生成或加载数据在每个进程中加载数据并确保数据在不同进程间的分布如使用 DistributedSampler。执行训练脚本在每个节点的每个进程上启动训练脚本进行模型训练。 3.5 DDP 实现代码示例 import os import torch import torch.distributed as dist import torch.nn as nn import torchvision from torch.nn.parallel import DistributedDataParallel as DDPBATCH_SIZE 256 EPOCHS 5 NUM_CLASSES 10 INPUT_SHAPE (3, 224, 224) # ResNet-18 的输入尺寸if __name__ __main__:# 1. 设置分布式变量初始化进程组rank int(os.environ[RANK])local_rank int(os.environ[LOCAL_RANK])torch.cuda.set_device(local_rank)dist.init_process_group(backendnccl)device torch.device(cuda, local_rank)print(f[init] local rank: {local_rank}, global rank: {rank} )# 2. 创建模型net torchvision.models.resnet18(pretrainedFalse, num_classesNUM_CLASSES)net net.to(device)net DDP(net, device_ids[local_rank], output_devicelocal_rank)# 3. 生成随机数据total_steps 100 # 假设每个 epoch 有 100 个步骤inputs torch.randn(BATCH_SIZE, *INPUT_SHAPE).to(device)targets torch.randint(0, NUM_CLASSES, (BATCH_SIZE,)).to(device)# 4. 定义损失函数和优化器criterion nn.CrossEntropyLoss()optimizer torch.optim.SGD(net.parameters(), lr0.02, momentum0.9, weight_decay0.0001, nesterovTrue)# 5. 开始训练net.train()for ep in range(1, EPOCHS 1):train_loss correct total 0for idx in range(total_steps):outputs net(inputs)loss criterion(outputs, targets)optimizer.zero_grad()loss.backward()optimizer.step()train_loss loss.item()total targets.size(0)correct torch.eq(outputs.argmax(dim1), targets).sum().item()if rank 0 and ((idx 1) % 25 0 or (idx 1) total_steps):print( step: [{:3}/{}] [{}/{}] | loss: {:.3f} | acc: {:6.3f}%.format(idx 1,total_steps,ep,EPOCHS,train_loss / (idx 1),100.0 * correct / total,))if rank 0:print(\n Training Finished \n)在以上代码中我们使用了随机生成的输入和标签数据以简化代码并专注于 DDP 的实现细节。通过在每个进程中初始化分布式环境并将模型封装在 DistributedDataParallel 中我们可以在多个 GPU 上高效地进行并行训练。 需要注意的是DDP 的实现需要在每个进程中正确设置设备和初始化过程这样才能确保模型和数据在对应的 GPU 上进行计算。 4. DP和DDP的对比 DP 是单进程多线程的分布式方法主要用于单机多卡的场景。它的工作方式是在每个批处理期间将模型参数分发到所有 GPU各 GPU 计算各自的梯度后将结果汇总到 GPU0再由 GPU0 完成参数更新然后将更新后的模型参数广播回其他 GPU。由于 DP 只广播模型的参数速度较慢尤其是在多个 GPU 协同工作时GPU 利用率低通常效率不如 DDP。 相比之下DDP 使用多进程架构既支持单机多卡也支持多机多卡并避免了 GIL全局解释器锁带来的性能损失。每个进程独立计算梯度计算完成后各进程汇总并平均梯度更新参数时各进程均独立完成。这种方式减少了通信开销只在初始化时广播一次模型参数并且在每次更新后只传递梯度。由于各进程独立更新参数且更新过程中模型参数保持一致DDP 在效率和速度上大大优于 DP。 数据并行DP分布式数据并行DDP实现复杂度使用 nn.DataParallel实现简单代码改动较少。需要设置分布式环境使用 torch.distributed代码实现相对复杂需要手动管理进程和同步。通信开销通信开销较大参数和梯度需要在主 GPU 和其他 GPU 之间频繁传递。通信开销较小只在反向传播时同步梯度各 GPU 之间直接通信无需通过主 GPU。扩展性扩展性有限适用于单机多卡不支持多机训练。扩展性强支持单机多卡和多机多卡适合大规模分布式训练。性能主 GPU 负载重可能成为瓶颈GPU 资源利用率较低。各 GPU 负载均衡资源利用率高训练速度更快。适用场景适合小规模模型和数据集的单机多卡训练。适合大规模模型和数据集的单机或多机多卡训练。梯度同步方式梯度在主 GPU 上汇总和更新需要从其他 GPU 收集梯度。梯度在各 GPU 间直接同步通常使用 All-Reduce 操作效率更高。模型参数广播每次前向传播都需要将模型参数从主 GPU 复制到其他 GPU。初始化时各进程各自持有一份模型副本参数更新后自动同步无需频繁复制。对 Python GIL 的影响受限于 Python 全局解释器锁GIL因为是单进程多线程无法充分利用多核 CPU。采用多进程方式不受 GIL 影响能够充分利用多核 CPU 和多 GPU 进行并行计算。容错性主 GPU 故障会导致整个训练中断容错性较差。各进程相对独立某个进程出错不会影响其他进程容错性较好。调试难度由于是单进程调试相对容易。多进程调试较为复杂需要注意进程间的通信和同步问题。代码修改量只需在模型外层加上 nn.DataParallel 封装代码改动少。需要在代码中添加进程初始化、模型封装、设备设置等步骤修改量较大。数据加载方式使用常规的数据加载方式无需特殊处理。需要使用 DistributedSampler 等工具确保各进程加载不同的数据子集避免数据重复。资源占用主 GPU 内存和计算资源占用较高其他 GPU 资源可能未被充分利用。各 GPU 资源均衡占用能够最大化利用多 GPU 的计算能力。训练结果一致性由于参数更新在主 GPU 上进行可能存在精度损失或不一致的情况。各进程的模型参数同步更新训练结果一致性更好。
http://www.hkea.cn/news/14552446/

相关文章:

  • 开发网站合同主题网站策划设计书
  • 青岛专业餐饮网站制作池州网站建设电话
  • 东莞网站制作十年乐云seo建设网站的结束语
  • 建立网站建设软件开发标准
  • 网站制作怎么做框架建设用地规划许可证去哪个网站查
  • 网站开发绩效指标西安旅游攻略ppt
  • 青岛免费网站建站模板网站新款模板
  • 科技 杭州 网站建设网站建设商品的分类
  • 域名查询站长之家建设公司营业执照
  • 新市网站建设is_category+wordpress
  • 电子商务网站业务流程app软件开发开发公司
  • 台州网站建站服务哪家奿网页游戏魔域
  • 站长工具是什么意思综合网站设计
  • 俄罗斯免费网站推广高端t恤定制网站
  • 网站板块策划wordpress 字段点击数
  • 遵义县住房和城乡建设局网站建设银行网站用户名
  • wordpress做淘宝客可以加入apiseo免费工具
  • 网站识别手机电脑代码网页设计与网站建设 设计题
  • wordpress全站启用ssl张戈哪个网站做推广比较好
  • 企业网站建设报价表120平方装修预算表
  • 电商网站 建社区上海外贸展
  • 福州专业网站建设怎么做wordpress怎么换中文字体
  • 网络公司做机场网站紫金论坛最新新闻事件
  • 怎么用电脑做网站虚拟空间wordpress 淘宝客 采集
  • 西安千叶网站建设做环球资源网站有没有效果
  • 手机版网站建设合同范本企业展示型网站php
  • 建设专门网站 强化信息宣传wordpress 改网站介绍
  • 购物网站开发思路贸易公司网站建
  • 环保业网站建设的策划怎么做网站文章优化
  • 公司网站开发多少钱网站 运营