首页 > 其他分享 >CUDA_LAUNCH_BLOCKING=1的作用

CUDA_LAUNCH_BLOCKING=1的作用

时间:2023-07-06 14:37:56浏览次数:39  
标签:语句 LAUNCH host CUDA device BLOCKING

  参考资料:

  [CUDA开发文档]

  今天在调试Pytorch代码的时候遇到了下面的报错,

  RuntimeError: CUDA error: XXX [此处为各种cuda error]

  CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.

  For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

  理解一下这些话意思,就是在GPU上跑程序的时候抛出了报错:RuntimeError:CUDA error。但是由于代码运行时host和device的异步性,device抛出报错的时候host可能正在协助device干一些别的事情,这会导致打印的堆栈错误。

  你可能觉得上面这个表述太难以理解,那我换一种更形式化的说法。

  CPU是host,GPU是device。host通过Pytorch的一条语句(可能是模型的forward语句)调用了device。此时我们设身处地为host着想,模型前向在device上计算是需要时间的,如果host没有其他的活干,它自然就停在原地摸鱼,等待device返回结果,调用栈就停留在调用device的这一条语句上。此时CUDA那边发现不对啊,你CPU给我的数据没法正常计算,我只好抛出Runtime CUDA error异常,此时python程序就会打印正确的调用栈,最后通过定位能够发现是哪一条语句出现了错误(多半是device上的模型前向语句)。那么如果host有其他活干呢?此时device正在马不停蹄的计算矩阵乘法呢,host在这段时间里显然可以替device干一些其他力所能及的事情,这会大大提高host和device协同工作的效率。但如果此时device抛出异常,host又没有那么聪明,就只能打印自己正在干的其他事情的调用堆栈。

  CUDA是这样运作的吗?我翻看了CUDA的官方文档,找到了这样一段话,证明了我的猜想:

  理解一下,host和device是并发执行的,所谓并发执行就是在同一时间上各自完成不同的任务。该并发执行具有异步性,许多操作在device和host之间异步完成,比如kernel launches, memory copies within a single device's memory ... 如果把CUDA_LAUNCH_BLOCKING这个环境变量设置为1,1表示True,则会强制消除这种异步性。如果你想在jupyter notebook中使用,可以用下面的语句:

import os
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'

  注意这里1是要变成字符串的,不然会报错。以上均为我个人的理解,如果有错误,还望指出。

标签:语句,LAUNCH,host,CUDA,device,BLOCKING
From: https://www.cnblogs.com/chester-cs/p/17529445.html

相关文章

  • 一种基于DeltaE(CIE 1976)的找色算法Cuda实现
    书接上文一种基于DeltaE(CIE1976)的找色算法DeltaE是评估色彩准确度的重要测量指标。摄影师、影片编辑和平面设计师等创意专业人士都应重视这项标准,因其是选择专业级显示器的重要考虑因素。常见的找色算法都是基于颜色RGB上的数值差,这种方法虽然快捷,但是和人眼视觉上的色......
  • Android Launcher apk 授信安装
    对安装的apk进行校验,除了系统应用市场中下载的,其它渠道的apk都进行安装拦截,并且弹框提示。首先需要把验证的证书保存在数据库本地,后面需要用到然后注册系统广播,用于接收apk安装时的监听,这个广播由系统发出新装时的action‘android.intent.action.PACKAGE_ADDED替换时的......
  • cuda开发环境
    windows使用visualstudio开发cuda-downloads安装cuda工具集。其中额外包含:独立程序有:nsightsystem是分析cpu+gpu系统性能的工具。nsightcompute是分析gpucudakernel的工具。nsightgraphics是分析gpu图形性能的工具。cuda工具集中也不包含该工具插件有:nsightint......
  • 机器学习之pytorch环境配置以及cuda安装
     关于conda环境下安装cuda配置和pytorch安装cuda查看显卡型号 (进入cmd环境下) nvidia-smi 下载对应的cudaCUDA Toolkit Archive | NVIDIA Developer)选择与cuda相匹配的版本(版本尽量靠近些电脑的)建议使用迅雷下载,网站下载会限速正式安装安装路径的选择,......
  • CUDA学习详细教程之指针篇
    近期,我在写深度学习相关的C++部署时候,往往想更好的提速,将更多类似矩阵相关的运算交给CUDA处理,以此提高推理速度。然,cuda编程入门较为复杂,想简单对图像预处理,通过指针指向减少host到device时间,或模型预测后device上处理完后,数据在device到host输出结果等,这些将会涉及很多知识。......
  • launchctl :MAC 下的定时任务
    launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。launchctl是通过配置文件来指定执行周期和任务的。当然mac也可以像linux系统一样,使用crontab命令来添加定时任务,这里就不赘述,具体可参见:OSX添加定时任务下面将手把手教你在mac......
  • launch原理解析
    前言本章就从Continuation入手来探究一下launch启动协程的原理。正文这里我们又回到了Continuation.kt这个文件,因为这是协程框架的基础元素,上一篇文章我们介绍了创建挂起函数的俩个高阶函数就是这个类中的基础层API。除此之外,在这个类,还有启动协程的基础API。协程启动的基础API在前......
  • 浅析GPU架构与异构计算CUDA
      下图有几个重点的元素,也是我们下文重点要阐述的概念,绿色代表的是computationalunits(可计算单元)或者称之为cores(核心),橙色代表memories(内存),黄色代表的是controlunits(控制单元)。  因此想要理解GPU的底层核心构成,就必须明确这几个元素的作用,下文会逐一讲解每个元素的......
  • 安装NVIDIA cuda-toolkit
     NVIDIA®CUDA®工具包为创建高性能GPU加速应用提供了发展环境。使用CUDA工具包,您可以在GPU加速嵌入式系统、桌面工作站、企业数据中心、基于云的平台和HPC超级计算机上开发、优化和部署您的应用程序。工具包包括GPU加速库、调试和优化工具、C/C++编译器以及一个运行......
  • Nvidia 3060显卡 CUDA环境搭建(Ubuntu22.04+Nvidia 510+Cuda11.6+cudnn8.8)
    写在前面工作中遇到,简单整理理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧——赫尔曼·黑塞《德米安》当前系统环境系统环境┌......