7个提升PyTorch性能的技巧

大语言模型在建筑规范自动化合规审查中的微调策略与规模效应实践 大语言模型(LLM)通过在海量文本数据上预训练,具备了强大的语言理解和生成能力。其核心原理是基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。在工程实践中,为了将这种通用能力适配到建筑、法律、金融等高度专业化的垂直领域,通常需要采用领域微调技术。微调通过使用特定领域的高质量指令数据对模型参数进行更新,使其掌握专业术语、逻辑规则和任务范式,从而解决通用模型在专业场景下知识匮乏和“幻觉”问题。结合检索增强生成(RAG)技术,将动态外部知识库作为模型的“参考手册”,能进一步提升事实准确性并降低幻 阅读详情

作者:William Falcon,来源:AI公园

导读

一些小细节,确实可以提升速度。

306c77b004a777586a58dfdc7d800670.png

在过去的10个月里,在PyTorch Lightning工作期间,团队和我已经接触过许多结构PyTorch代码的风格,我们已经发现了一些人们无意中引入瓶颈的关键地方。

我们非常小心地确保PyTorch Lightning不会对我们为你自动编写的代码犯任何这些错误,我们甚至会在检测到这些错误时为用户纠正这些错误。然而,由于Lightning只是结构化的PyTorch,而你仍然控制所有的PyTorch,因此在许多情况下,我们不能为用户做太多事情。

此外,如果不使用Lightning,可能会在无意中将这些问题引入代码。

为了帮助你训练得更快,这里有8个技巧,你应该知道它们可能会减慢你的代码。

在DataLoaders中使用workers

0a4c75bd8d514799ba18bebdfb147698.png

第一个错误很容易纠正。PyTorch允许同时在多个进程上加载数据。

在这种情况下,PyTorch可以通过处理8个批次绕过GIL锁,每个批次在一个单独的进程上。你应该使用多少workers?一个好的经验法则是:

num_worker = 4 * num_GPU

https://discuss.pytorch.org/t/guidelines-for-assigning-num-workers-to-dataloader/813/7这里对此有一个很好的讨论。

警告:缺点是你的内存使用也会增加

Pin memory

4cdb50bc780d18abe8124e66f54727ba.png

你知道有时候你的GPU内存显示它是满的但你很确定你的模型没有使用那么多?这种开销称为pinned memory。这个内存被保留为一种“working allocation”类型。

当你在一个DataLoader中启用pinned_memory时,它“自动将获取的数据张量放在pinned memory中,并使数据更快地传输到CUDA-enabled的gpu”

b742e098123f50fff55d833e97979cd4.png

这意味着你不应该不必要的去调用:

torch.cuda.empty_cache()

避免CPU到GPU的传输,反之亦然

# bad.cpu()
.item()
.numpy()

我看到大量使用.item()或.cpu()或.numpy()调用。这对于性能来说是非常糟糕的,因为每个调用都将数据从GPU传输到CPU,从而极大地降低了性能。

如果你试图清除附加的计算图,请使用.detach()。

# good.detach()

这不会将内存转移到GPU,它会删除任何附加到该变量的计算图。

直接在GPUs上构建张量

大多数人都是这样在GPUs上创建张量的

t = tensor.rand(2,2).cuda()

然而,这首先创建CPU张量,然后将其转移到GPU……这真的很慢。相反,直接在想要的设备上创建张量。

t = tensor.rand(2,2, device=torch.device('cuda:0'))

如果你正在使用Lightning,我们会自动把你的模型和批处理放到正确的GPU上。但是,如果你在代码的某个地方创建了一个新的张量(例如:为一个VAE采样随机噪声,或类似的东西),那么你必须自己放置张量。

t = tensor.rand(2,2, device=self.device)

每个LightningModule都有一个方便的self.device调用,无论你是在CPU上,多 GPUs上,还是在TPUs上,lightning会为那个张量选择正确的设备。

使用DistributedDataParallel不要使用DataParallel

PyTorch有两个主要的模式用于在多 GPUs训练。第一种是DataParallel,它将一批数据分割到多个GPUs上。但这也意味着模型必须复制到每个GPU上,一旦在GPU 0上计算出梯度,它们必须同步到其他GPU。

这需要大量昂贵的GPU传输!相反,DistributedDataParallel在每个GPU(在它自己的进程中)上创建模型副本,并且只让数据的一部分对该GPU可用。这就像是让N个独立的模型进行训练,除了一旦每个模型都计算出梯度,它们就会在模型之间同步梯度……这意味着我们在每批处理中只在GPUs之间传输一次数据。

在Lightning中,你可以在两者之间轻松切换

Trainer(distributed_backend='ddp', gpus=8)
Trainer(distributed_backend='dp', gpus=8)

请注意,PyTorch和Lightning都不鼓励使用DP。

使用16-bit精度

这是另一种加快训练速度的方法,我们没有看到很多人使用这种方法。在你的模型进行16bit训练的部分,数据从32位变到到16位。这有几个优点:

  1. 你使用了一半的内存(这意味着你可以将batch大小翻倍,并将训练时间减半)。

  2. 某些GPU(V100, 2080Ti)可以自动加速(3 -8倍),因为它们针对16位计算进行了优化。

在Lightning中,这很简单:

Trainer(precision=16)

注意:在PyTorch 1.6之前,你还必须安装Nvidia Apex,现在16位是PyTorch的原生版本。但如果你使用的是Lightning,它同时支持这两种功能,并根据检测到的PyTorch版本自动切换。

对你的代码进行Profile

如果没有Lightning,最后一条建议可能很难实现,但你可以使用cprofiler这样的工具来实现。然而,在Lightning中,你可以通过两种方式获得所有在训练期间所做的调用的总结:

首先,内置的basic profiler

Trainer(profile=True)

可以给出这样的输出:

fd7a646358559338482dcf584bffce25.png

或者是高级的profiler:

profiler = AdvancedProfiler()
trainer = Trainer(profiler=profiler)

得到更小粒度的结果:

cf10084ba37bf21843dc7a4e765447f5.png

701e3a278f0a5372fc88522e9dceadf8.png

—END—

英文原文:https://towardsdatascience.com/7-tips-for-squeezing-maximum-performance-from-pytorch-ca4a40951259

点云从入门到精通技术详解100篇-基于 CBCT 与口内扫描数据的牙齿点云配准 口扫生成的三维牙模型只包含牙冠结构,容易受到唾液、食物残留等杂质的干扰。像精度,但其扫描成本较高,在公立医院的普及率较低。此外,口扫探入式的体。完整、精确的牙齿信息,有助于医生更好地进行数字化辅助诊疗,提高手术的预。可以表示上颌骨、下颌骨、牙冠以及牙根的位置和形状,但其扫描分辨率较低,精配准前实现粗略的预配准来确定点云间的初始位置,为精配准提供良好的配准。该算法通过计算点对间的距离确定源点云中的某一点在目标点云中的对应。算两点之间的欧氏距离,运算量较大,而且由于算法只考虑点集间的距离而忽略。 阅读详情

相关推荐

保姆级教程:用Intouch SMC连接S7-200 Smart PLC,Modbus TCP和S7协议一次搞定

本文详细介绍了如何使用Intouch SMC连接S7-200 Smart PLC,涵盖Modbus TCP和S7协议的双协议通信配置。通过环境准备、参数设置、常见问题排查及实战技巧,帮助工程师快速实现工业自动化系统中的稳定通信,提升设备监控效率。

weixin_30499315的博客 433

求助 pytorch_lightning.utilities.exceptions.MisconfigurationException: You passed `accelerator=‘gpu‘`,

在运行别人代码的时候出现的问题,一直显示我没有gpu,兼容性应该没问题,pytorch3.8和cuda11.2,虚拟机有两块GPU,但是无论是GPU0还是GPU1都无法调用,求教是什么原因导致的。运行命令:python GeoSeg/train_supervision.py -c GeoSeg/config/loveda/unetformer.py。...

xiaotong1314_520的博客 2938

告别繁琐同步:Zotero与Obsidian双向联动新方案(基于Better BibTeX与MarkDBConnect)

本文详细介绍了一套基于Better BibTeX、Bibnotes Formatter和MarkDBConnect插件的Zotero与Obsidian双向联动方案。该方案通过建立智能数据通道,实现文献信息的自动同步与笔记的增量更新,解决了手动同步的繁琐问题,并支持在两大工具间无缝跳转,极大提升了科研和知识管理的工作效率。

weixin_29213827的博客 643

7 个有用的 PyTorch 技巧

12.7 个有用的 PyTorch 技巧 原文:https://www.reddit.com/r/MachineLearning/comments/n9fti7/d_a_few_helpful_pytorch_tips_examples_included/ 原文标题:a_few_helpful_pytorch_tips_examples_included 译文作者:kbsc13 联系方式: Github:https://github.com/ccc013/AI_algorithm_notes 知乎专栏:机器

AI 算法笔记 606

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载问题

qq_45176349的博客 4965

Python 包安装报错:ERROR: No matching distribution found for xxx 的全面排查指南

本文全面解析Python包安装时常见的`ERROR: No matching distribution found for xxx`报错。从检查包名拼写、网络与镜像源配置,到深入分析Python版本、操作系统等环境兼容性问题,提供了从简到繁的排查步骤。文章还介绍了使用`pip debug`、`-v`参数等高级诊断工具,并给出了更换包管理器、使用Docker等终极解决方案,帮助开发者高效解决依赖安装难题。

p8q9r0的博客 897

PyTorch性能优化10个技巧:效率翻倍的实战雕虫!

通过 TorchLens,我们可以完整记录这一过程中的所有中间结果,并自由访问任意层的输出,比如第一次线性运算后的张量,或是第二次处理后的激活值,从而更直观地理解模型是如何一步步完成计算任务的。这样一来,虽然每次迭代只处理了小批量数据,但从整体上看,模型相当于在一个更大的“虚拟批量”下进行训练,从而在不增加显存占用的前提下,提升了训练的效率与稳定性。通过这一接口,用户可以像搭积木一样,将数据创建、转换与过滤等操作模块化,并以清晰、可读的方式串联起来,例如先对数据进行映射处理,再执行过滤操作。

我相信...... 925

基于ESP32和OV5640的目标检测系统

本文详细介绍了基于ESP32-S3和OV5640摄像头构建目标检测系统的完整方案。系统采用YOLOv8-Nano轻量级模型,通过INT8量化实现边缘部署,在UXGA分辨率下达到25fps帧率。文章从硬件选型、图像采集优化、模型量化部署、实时推理流水线构建等维度展开,重点解决了内存管理、电源稳定性和异常处理等嵌入式系统关键问题。该方案在资源受限条件下实现了150ms以内的端到端延迟,为物联网视觉应用提供了低成本、低功耗的解决方案,适用于智能家居、工业检测等多个场景。

reset2021的博客 329

pytorch有关GPU的CUDA测试命令

import torch #返回当前设备索引 # torch.cuda.current_device() #返回GPU的数量 # torch.cuda.device_count() #返回gpu名字,设备索引默认从0开始 # torch.cuda.get_device_name(0) #cuda是否可用 # torch.cuda.is_available() # pytorch 查看cuda 版本 # 由于pytorch的whl 安装包名字都一样,所以我们很难区分到底是基于cuda 的哪个版本。 # p

沧笙踏歌的博客 6678

Lumerical 教程目录,说明及个人感悟(共计138篇,持续更新中)

Lumerical---教程说明及个人感悟

u011699626的博客 1万+

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

Edward的博客 864

7个提升Torch性能的技巧

在过去的10个月里,在PyTorch Lightning工作期间,团队和我已经接触过许多结构PyTorch代码的风格,我们已经发现了一些人们无意中引入瓶颈的关键地方。 我们非常小心地确保PyTorch Lightning不会对我们为你自动编写的代码犯任何这些错误,我们甚至会在检测到这些错误时为用户纠正这些错误。然而,由于Lightning只是结构化的PyTorch,而你仍然控制所有的PyTorch,因此在许多情况下,我们不能为用户做太多事情。 此外,如果不使用Lightning,可能会在...

爱CV 1296

【数字IC/FPGA】低功耗设计

低功耗设计方法功耗的类型低功耗设计方法静态低功耗技术多阈值工艺方法电源门控方法体偏置动态低功耗技术多电压域(Multi-Voltage Domain)预计算门控时钟门级优化技术毛刺的消除逻辑级优化物理级优化控制输入向量低功耗Soc系统的动态管理动态电压及频率调节技术低功耗操作系统存储器功耗控制总结 功耗的类型 CMOS电路中的功耗由两部分构成,第一部分为负载电容充放电时引起的功耗,称为动态功耗,另一部分为漏电流引起的功耗,称为静态功耗。其中动态功耗包括翻转功耗和短路功耗。翻转功耗是数字电路中信号翻转时电容充

qq_40268672的博客 3072

TimeSformer-pytorch性能优化:7个技巧提升视频分类准确率

想要在视频分类任务中获得更高的准确率吗?TimeSformer-pytorch作为Facebook AI提出的纯注意力机制视频理解架构,已经在多个基准测试中达到了SOTA水平。本文将为您揭秘7个实用技巧,帮助您充分发挥TimeSformer-pytorch的潜力,显著提升视频分类的准确率和训练效率。无论您是深度学习初学者还是经验丰富的研究者,这些优化策略都能让您的模型表现更上一层楼! ## 🔍

gitblog_01174的博客 606

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

PyTorch-CIFAR训练技巧:7个关键步骤提升模型性能

想要在CIFAR10数据集上实现95%以上的准确率吗?这份完整的PyTorch-CIFAR训练指南将为你揭示提升模型性能的7个关键步骤!无论你是深度学习初学者还是经验丰富的研究者,这些实用的训练技巧都能帮助你显著改善模型表现。🎯 ## 1️⃣ 数据预处理优化 正确的数据预处理是PyTorch-CIFAR训练成功的第一步。在[main.py](https://link.gitcode.com/

gitblog_00029的博客 799

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

CRAFT-pytorch性能优化:7个技巧提升检测速度和精度

CRAFT-pytorch是字符区域感知文本检测的官方PyTorch实现,通过探索每个字符区域和字符间的亲和力来有效检测文本区域。在本文中,我们将分享7个实用的性能优化技巧,帮助您显著提升CRAFT文本检测的速度和精度。🚀 ## 🔍 CRAFT-pytorch核心优化策略 ### 1. 图像预处理优化技巧 在CRAFT-pytorch中,图像预处理是性能瓶颈之一。通过优化`imgproc

gitblog_01128的博客 1055

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

7个PyTorch性能优化技巧:让你的神经网络训练速度提升300%

PyTorch-examples是学习深度学习框架PyTorch的绝佳资源,包含了从基础张量操作到复杂神经网络构建的各类示例。本文将从这些实例中提炼出7个实用的性能优化技巧,帮助你显著提升模型训练速度和效率,让PyTorch代码运行更快。 ## 1. 利用自动混合精度加速训练 PyTorch提供了自动混合精度训练功能,通过使用半精度浮点数(FP16)减少内存占用并提高计算速度。在nn模块的示例

gitblog_00312的博客 659

Alphafold2 PyTorch高级技巧:提升模型性能的7个实用配置参数

Alphafold2 PyTorch作为蛋白质结构预测的强大工具,其性能优化离不开对关键配置参数的合理调整。本文将详细介绍7个实用的配置参数,帮助新手用户快速掌握模型调优技巧,提升预测精度和训练效率。 ## 1. 学习率(LEARNING_RATE):模型训练的节奏控制器 学习率是影响模型收敛速度和预测精度的核心参数。在Alphafold2 PyTorch实现中,学习率通过`LEARNING_

gitblog_00257的博客 379

PyTorch-CUDA-v2.7镜像中使用Profiler分析性能瓶颈

通过PyTorch-CUDA容器镜像快速搭建环境,结合内置Profiler工具精准识别训练中的性能瓶颈,如数据加载阻塞、内存传输延迟等。借助Trace View可视化分析CPU与GPU的执行流,优化数据管道后GPU利用率从25%提升至78%,实现吞吐量翻倍。无需改动模型即可显著提速。

weixin_35752645的博客 981

PyTorch-CUDA-v2.7镜像对RTX 40系显卡的支持情况

PyTorch-CUDA-v2.7镜像深度优化支持RTX 40系列显卡,通过容器化实现开箱即用的AI开发环境。集成CUDA 12、Tensor Core加速与分布式训练工具,显著提升模型训练效率,降低配置成本,让个人开发者也能轻松驾驭高性能GPU算力。

weixin_35995661的博客 932

CNN模型在PyTorch-CUDA-v2.7镜像中的训练优化技巧

利用PyTorch-CUDA-v2.7镜像可实现开箱即用的GPU训练环境,结合多进程数据加载、混合精度训练、梯度累积和DDP多卡并行等技术,显著提升CNN模型训练效率与显存利用率,解决环境不一致、低GPU使用率和OOM等常见问题。

weixin_42466723的博客 1033
上一篇: 2022年我国博士研究生招生将突破13万人!
下一篇: 谷歌夺回AI画语权,机器的想象力达到全新高度,网友:DALL·E 2诞生一个月就过时了?...
Wang_AI
博客等级 码龄12年 991粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值