with torch.no_grad()使用小提示

model.eval()与with torch.no_grad() requires_grad、volatile与no_gradrequires_gradvolatileno_gradmodel.eval()与with torch.no_grad() 总结: requires_grad=True 要求计算梯度 requires_grad=False 不要求计算梯度 with torch.no_grad()或者@torch.no_grad()中的数据不需要计算梯度,也不会进行反向传播。(torch.no_grad()是新版本pytorch中volatile的替代) requi 阅读详情

with torch.no_grad() 是 PyTorch 中的一个上下文管理器,用于禁用梯度计算。当你在模型推理(即生成或预测)时使用它,可以带来以下几个方面的影响和差异:

主要影响

  1. 性能提升:

    • 减少内存占用:禁用梯度计算后,PyTorch 不会保存中间变量以供反向传播使用,从而减少了内存的使用。
    • 加速推理速度:由于不需要计算和存储梯度,推理过程中的计算量减少,因此可以加快推理速度。
  2. 防止意外更新:

    • 保护模型参数:在推理过程中,通常不希望模型参数被更新。torch.no_grad() 确保了这一点,避免了任何可能的梯度更新操作。
  3. 资源优化:

    • 降低显存消耗:对于大型模型,推理时禁用梯度计算可以显著降低显存消耗,使得更多资源可用于其他任务或更大的批量处理。这里需要强调一点,model.generate本身的实现方法中,一般会有装饰器@torch.no_grad(),来表明在调用此方法时将不会计算梯度。如果没有,可以参考如下示例手动添加。

示例代码对比

前提假设: model.generate没有装饰器@torch.no_grad()

使用 torch.no_grad()
with torch.no_grad():
    outputs = model.generate(
        input_ids,
        attention_mask=attention_mask,
        max_new_tokens=4096,
        early_stopping=True,
    )
  • 优点:
    • 更快的推理速度。
    • 更低的内存占用。
    • 避免不必要的梯度计算和潜在的参数更新。
不使用 torch.no_grad()
outputs = model.generate(
    input_ids,
    attention_mask=attention_mask,
    max_new_tokens=4096,
    early_stopping=True,
)
  • 缺点:
    • 推理速度较慢,因为仍然在计算和存储梯度。
    • 内存占用较高,特别是对于大型模型。
    • 可能导致不必要的参数更新,尽管在推理时这通常是不需要的。

实际应用中的选择

  • 推理阶段:强烈建议在推理阶段使用 torch.no_grad(),以确保最佳性能和资源利用。
  • 训练阶段:在训练阶段,需要计算梯度以更新模型参数,因此不能使用 torch.no_grad()。但在评估(validation)或测试(test)数据集上进行推理时,可以使用 torch.no_grad() 来提高效率。
pytorch | with torch.no_grad() 阅读详情

相关推荐

测试torch.no_grad()的作用

torch.no_grad()两个作用:新增的tensor没有梯度,使带梯度的tensor能够进行原地运算。 1.使带有梯度的tensor能够原地运算(更新tensor) from torch.autograd import Variable x = Variable(torch.ones(1, 2),requires_grad=True) x += 1 #或者调用x.add_(1) #注意add_下划线 报错:RuntimeError: a leaf Variable that requires gra

weixin_47343182的博客 9204

detach()、data、with no_grad()、requires_grad之间关系

detach()、.data、with no_grad()、requires_grad之间关系 [@TOC](detach ()、.data、with no_grad()、requires_grad之间关系)

一扣解千愁的博客 5091

leaf variable & with torch.no_grad & -=

本文主要介绍了leaf variable & with torch.no_grad & -=,希望能对大家有所帮助。 文章目录 1. leaf variable 2. with torch.no_grad() 3. w-=n与w=w-n的区别 4. with torch.nn.no_grad 与 -= 搭配使用 5. 总结

weixin_43178406的博客 1万+

with torch.no_grad()在Pytorch中的应用

即使一个tensor(命名为x)的requires_grad = True,在with torch.no_grad计算,由x得到的新tensor(命名为w-标量)requires_grad也为False,且grad_fn也为None,即不会对w求导。在模型的评估模式下,对验证数据集进行前向传播并计算性能指标,而不计算或存储梯度信息。虽然在某些情况下忘记使用 torch.no_grad() 可能不会立即导致错误,但为了确保计算效率和正确性,建议在不需要梯度计算的情况下使用 torch.no_grad()。

weixin_44584198的博客 4875

三、STM32F103ZET6最小系统

stm32最小系统除去主控CPU外,需要包含,电源电路,复位电路,BOOT电路,时钟电路(因为stm32有内置时钟,对时钟要求不高的话,可以不要)。NRST引脚其实芯片已经用一个约40K的电阻上拉了,所以理论上来说是不需要再外接上拉电阻的,但我看大家都是有外接上拉的,心里没有底,不管这么多,先预留着。吃过亏,特意查看了芯片手册资料,下图是官方建议的供电方案,图片来自stm32f103zet6数据手册。首先明白目标,单纯的学习软件知识并不是我希望的,我还希望会硬件设计,这样后面才能摆脱开发板。

sevendecsdn的博客 6453

《矩阵论》学习笔记(四):4.2 矩阵的QR分解

《矩阵论》学习笔记(四):4.2 矩阵的QR分解 文章目录《矩阵论》学习笔记(四):4.2 矩阵的QR分解一. Givens矩阵与Givens变换1.1. 概念与理解1.2. Givens矩阵求解方法二. Householder矩阵与Householder变换2.1. 概念与理解2.2. Householder矩阵求解方法2.3. Givens变换与Householder变换的关系三. 矩阵的QR...

shine的博客 3680

pytorch中使用torch.no_grad()和torch.enable_grad()控制梯度计算的方法

pytorch中使用torch.no_grad()和torch.enable_grad()控制梯度计算的方法

weixin_69334636的博客 3559

【AAOS】【源码分析】用户管理(五)-- MUMD介绍

MUMD(多用户多屏显示)是Android Automotive OS为车载多乘员场景设计的功能,支持不同座位用户独立操作各自屏幕。

码农的历程 1511

pytorch中with torch.no_grad():

1.关于with with是python中上下文管理器,简单理解,当要进行固定的进入,返回操作时,可以将对应需要的操作,放在with所需要的语句中。比如文件的写入(需要打开关闭文件)等。 以下为一个文件写入使用with的例子。 with open (filename,'w') as sh: sh.write("#!/bin/bash\n") sh.write("#$ -N "+'IC'+altas+str(patientNumb

星之所望的博客 1万+

sift、surf、orb 特征提取——三维重建

参考文章:[sift、surf、orb 特征提取及最优特征点匹配] 最近刚刚入门三维重建,在SFM算法的代码中注意到了feature_type( feature extraction method)这个参数,想细致了解一下这几种特征提取算法,在这里做一下笔记。 SIFT 简介 SIFT(Scale-Invariant Feature Transform)——尺度不变特征变换,是一种计算机视觉的特征提取算法,用来侦测与描述图像中的局部特征。 实质上,它是在不同的尺度空间上查找关键点(特征点),并计算出关键点的

bb_sy_w的博客 4362

完整复盘【避雷jd文职某岗位】潍坊青州hhj(据说未来搬到天津),助理实验师岗位,三人进面,面试全部不及格,空头岗位!像这种情况,该单位很多 | 附个人完整备考背诵题目 | 世间一场梦,不会再考这个了

本文以博主本人报考jun dui文职,从报考、备考、考试、查成绩到资格审查、面试,全程亲身经历,给想要报考该内容的朋友们一些小的参考。祝你顺利上岸!完整复盘【避雷jd文职某岗位】潍坊青州hhj(据说未来搬到天津),助理实验师岗位,三人进面,面试全部不及格,空头岗位!像这种情况,该单位很多 | 附个人完整备考背诵题目 | 世间一场梦,不会再考这个了

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 247

Pytorch 中的 with torch.no_grad(): 详解

Pytorch 中的 with torch.no_grad(): 详解

Z2572862506的博客 3272

168、OIS光学防抖系统设计:陀螺仪标定、音圈马达驱动与滚珠式/悬丝式结构选型

本文总结了OIS光学防抖系统设计中的关键问题与解决方案。作者通过实际案例指出,陀螺仪标定需重视零偏、灵敏度和温度补偿问题,音圈马达驱动需采用电流环控制并优化相位补偿。在机械结构选型方面,滚珠式适合大角度补偿但存在回差问题,悬丝式精度高但受重力影响,需根据应用场景选择。系统联调建议从开环到闭环逐步验证,注意陀螺仪与驱动频率匹配。最后给出5条经验建议:关注陀螺仪信噪比而非分辨率、预留标定余量、重视机械结构公差、配备专业调试工具、协调OIS与电子防抖的分工配合。文章强调OIS调试需针对不同模组特性进行反复测试与标

zzfmlxs的博客 46

【pytorch】 with torch.no_grad():用法详解

在pytorch写的网络中,with torch.no_grad():非常常见。 首先,关于python中的with: with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭/线程中锁的自动获取和释放等。 例如: file = open("1.txt") data = file.read() file.close() 存在问题如下: (1)文件读取发生异常,但没有进行任何处理; (2)可能忘记关闭文件句柄; 改进: try:

sazass的博客 17万+

【图像去噪】论文精读:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image

论文题目:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image —— FM2S:单噪声图像自监督荧光显微镜去噪arXiv 2024!显微图像去噪!通过可视化详细的细胞结构和生物过程,荧光显微镜具有显着先进的生物学研究。然而,由于难以精确建模固有噪声和获取干净图像进行训练,这种图像去噪任务往往面临挑战,这限制了大多数现有方法。在本文中,我们提出了一种有效的。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 408

华为OD机试真题 新系统 2026-07-22 Java&Go&C 实现【最小代价完成论文评审】

某校有 n 篇论文需要分配给教师评审。 每篇论文 i 可由 files[i] 对应的教师列表中任一教师评审。 每篇论文至少需要一名教师评审。 每位教师 t 不论被分配多少篇论文,其评审费用固定为 cost[t]。 请给出参与评审教师数量最少时的总费用。 如果存在多种方案满足教师数量最少,则选择总费用最小的方案。

MISAYAONE的博客 148

with torch.no_grad() 详解

torch.no_grad() 是一个上下文管理器,被该语句 wrap 起来的部分将不会track 梯度。 例如: a = torch.tensor([1.1], requires_grad=True) b = a * 2 b Out[63]: tensor([2.2000], grad_fn=<MulBackward0>) b.add_(2) Out[64]: tensor([4....

岛的博客 15万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

with torch.no_grad()和backward()

在编程中遇到了with torch.no_grad()用法,想整明白,过程中有一些意料之外的东西,故此记录一下。 首先说明一下环境,以下的测试均在:python3.6, pytorch1.2.0 环境下给出: 官网的截图如下: 主要有几个重要的点: torch.no_grad上一个上下文管理器,在你确定不需要调用Tensor.backward()时可以用torch.no_grad来屏蔽梯度计算 在被torch.no_grad管控下计算得到的tensor,它的requires_grad就是False 下

laizi_laizi的博客 3503

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【PyTorch】with torch.no_grad() 详解

我们知道在 PyTorch 中,前向传播过程中构建计算图,而反向传播时销毁计算图以释放内存并计算叶子节点的梯度信息。尽管如此,由于在 torch.no_grad() 上下文中创建的张量(如 param)不依赖于计算图中的其他节点,它们仍然被视为叶子节点。因此,这些张量的梯度信息仍然可以被访问,但是梯度计算不会在该上下文中进行,因此在此上下文内产生的张量不会保存任何梯度信息。因为原地操作会覆盖当前内存的值,但叶子节点所指向的内存块进行无法进行修改操作,否则会导致其中梯度信息与节点的值不再有计算上的对应关系。

m0_73771268的博客 5710

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【pytorch】 grad、grad_fn、requires_grad()、with torch.no_grad() 、net.train()、net.eval():记录一次奇怪的debug经历

刚开始接触pytorch框架时,最让我觉得神奇的就是它居然可以--**自 动 求 导 !** 于是我开始尝试理解内部的运行机制,但很快放弃了,直接当成黑盒使用…… 最近又遇到一个奇怪的bug,让我不得不去学一下相关知识,预防忘记,故记录下来,共勉之。

优快云_Shaw的博客 6558

torch.no_grad和验证模式

1.requires_grad requires_gradVariable变量的requires_grad的属性默认为False,若一个节点requires_grad被设置为True,那么所有依赖它的节点的requires_grad都为True。 volatile=True是Variable的另一个重要的标识,它能够将所有依赖它的节点全部设为volatile=True,其优先级比requires_......

得克特 9724

关于Pytorch中的train()和eval()(以及no_grad())

这三个函数实际上很常见,先来简单看下使用方法train()是nn.Module的方法,也就是你定义了一个网络model,那么表示将该model设置为训练模式,一般在开始新epoch训练时,我们会首先执行该命令: 同train()一样,其用法和含义也一样,eval()是nn.Module的方法,也就是你定义了一个网络model,那么表示将该model设置为验证模式,一般在开始验证当前model效果时,我......

xu.hyj 6624

什么时候该用with torch.no_grad()?什么时候该用.requires_grad ==False?

一个torch基础问题,闲来无事想写写。 无论是否使用with torch.no_grad()还是.requires_grad == False,一般来说是不会影响算法本身的,但是会影响代码性能。 with torch.no_grad() 在这个下面进行运算得到的tensor没有grad_fn,也就是它不带梯度(因为没有上一级的函数),因此loss无法从这些tensor向上传递,产生这些tensor的网络的参数将不会更新。下面这种情况一般使用with torch.no_grad(): 这里我们只是使用了n

ZYunfei的博客 1万+

【Pytorch】一文向您详尽解析 with torch.no_grad(): 的高效用法

🔬深入探究`with torch.no_grad()`,解锁PyTorch性能优化秘籍!👩‍🏫从基础用法到进阶技巧,全面解析其与`.eval()`及`torch.set_grad_enabled(False)`的联动效果。🛠️通过具体案例,展示在实际应用中的性能提升技巧。🎓拓展至数据预处理与特征提取,让你的应用更加得心应手。🎉读完这篇指南,轻松掌握`with torch.no_grad()`的高效用法,提升模型性能!🚀 #PyTorch #torchnograd #深度学习 #性能优化 #代码

创作高质量博文,分享知识,共同进步! 8276
上一篇: tokenizer和tokenizer.tokenize的区别
下一篇: 正则表达式:re.match和re.search的区别
赫连达
博客等级 码龄12年 153粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值