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

网站挣钱网纯html5网站源码

网站挣钱网,纯html5网站源码,做视频网站的挣钱吗,chatgpt网址一、参考资料 浅谈深度学习:如何计算模型以及中间变量的显存占用大小 如何在Pytorch中精细化利用显存 二、相关介绍 0. 预备知识 为了方便计算#xff0c;本文按照以下标准进行单位换算#xff1a; 1 G 1000 MB1 M 1000 KB1 K 1000 Byte1 B 8 bit 1. 模型参数量的计…一、参考资料 浅谈深度学习:如何计算模型以及中间变量的显存占用大小 如何在Pytorch中精细化利用显存 二、相关介绍 0. 预备知识 为了方便计算本文按照以下标准进行单位换算 1 G 1000 MB1 M 1000 KB1 K 1000 Byte1 B 8 bit 1. 模型参数量的计算方法 参考博客CNN卷积神经网络模型的参数量、计算量计算方法概念版 2. 张量的数据类型 Data typedtypeCPU tensorGPU tensor32-bit floating pointtorch.float32 or torch.floattorch.FloatTensortorch.cuda.FloatTensor64-bit floating pointtorch.float64 or torch.doubletorch.DoubleTensortorch.cuda.DoubleTensor16-bit floating pointtorch.float16 or torch.halftorch.HalfTensortorch.cuda.HalfTensor8-bit integer (unsigned)torch.uint8torch.ByteTensortorch.cuda.ByteTensor8-bit integer (signed)torch.int8torch.CharTensortorch.cuda.CharTensor16-bit integer (signed)torch.int16 or torch.shorttorch.ShortTensortorch.cuda.ShartTensor32-bit integer (signed)torch.int32 or torch.inttorch.IntTensortorch.cuda.IntTensor64-bit integer (signed)torch.int64 or torch.longtorch.LongTensortorch.cuda.LongTensor 通常模型训练使用以下两种数据类型 float32 单精度浮点型int32 整型。 8bit的整型int所占的空间为 1B32bit的浮点型float所占空间为 4B。而double双精度浮点型和长整型long在平常的模型训练中一般不会使用。 消费级显卡对单精度计算有优化服务器级显卡对双精度计算有优化。 3. 关于inplaceFalse 我们都知道激活函数Relu()有一个默认参数inplace默认设置为False。当设置为True时我们在通过relu()计算得到的新值不会占用新的空间而是直接覆盖原来的值这也就是为什么当inplace参数设置为True时可以节省一部分内存的缘故。 三、显存占用相关介绍 0. 引言 torch.FatalError: cuda runtime error (2) : out of memory at /opt/conda/conda-bld/pytorch_1524590031827/work/aten/src/THC/generic/THCStorage.cu:58由于显存不足导致程序崩溃。学会计算模型以及中间变量所占显存大小是很有必要的。 1. 图片的显存占用 假设一张RGB三通道真彩色图片长宽分别为 500x500数据类型为单精度浮点型那么这张图片所占显存的大小为500x500x3x4B3MB。而一个 (256, 3, 100, 100)-(N, C, H, W) 的FloatTensor所占的空间为256x3x100x100x4B 31MB 2. 模型的显存占用 通常模型占用的显存来自两个部分 模型自身的参数params即有参数的网络层。模型在计算时产生的中间参数memory。 一般来说模型自身参数并不会占用很多的显存空间主要占用显存空间的是计算时产生的中间参数。 2.1 模型自身的参数params 有参数的网络层包括 卷积层Conv2d(Cin, Cout, K)参数量为 Cin × Cout × K × K全连接层Linear(M-N)参数量为 M×NBatchNorm层BatchNorm(N)参数量为 2NEmbedding层Embedding(N,W)参数量为 N × W 不带参数的网络层包括 激活层Relu等池化层Dropout层 2.2 模型的中间参数memory 模型在计算时产生的中间参数也就是输入图像在计算时每一层产生的输入和输出backward反向传播计算时产生的额外的中间参数优化器在优化时产生的额外的模型参数。 3. 实际显存与理论显存 为什么实际占用的显存空间比理论计算的大 大概原因是深度学习框架一些额外的开销。不过通过上面公式计算出来的显存理论值和实际值不会相差太多。 4. 计算显存占用大小 4.1 方法一推荐 使用 torchstat 工具计算模型的显存占用大小。参考博客CNN卷积神经网络模型的参数量计算方法经验版 4.2 方法二 当然也可以自定义函数计算显存占用大小代码如下所示 # 模型显存占用监测函数 # model输入的模型 # input实际中需要输入的Tensor变量 # type_size 默认为 4 默认类型为 float32 def modelsize(model, input, type_size4):para sum([np.prod(list(p.size())) for p in model.parameters()])print(Model {} : params: {:4f}M.format(model._get_name(), para * type_size / 1000 / 1000))input_ input.clone()input_.requires_grad_(requires_gradFalse)mods list(model.modules())out_sizes []for i in range(1, len(mods)):m mods[i]if isinstance(m, nn.ReLU):if m.inplace:continueout m(input_)out_sizes.append(np.array(out.size()))input_ outtotal_nums 0for i in range(len(out_sizes)):s out_sizes[i]nums np.prod(np.array(s))total_nums numsprint(Model {} : intermedite variables: {:3f} M (without backward).format(model._get_name(), total_nums * type_size / 1000 / 1000))print(Model {} : intermedite variables: {:3f} M (with backward).format(model._get_name(), total_nums * type_size*2 / 1000 / 1000))重要说明当然我们计算出来的显存占用理论值仅仅是做参考作用因为Pytorch在运行的时候需要额外的显存开销所以实际的显存会比我们计算的稍微大一些。 5. 显存优化方法 在Pytorch中优化显存是我们处理大量数据时必要的做法因为我们并不可能拥有无限的显存。显存是有限的而数据是无限的我们只有优化显存的使用量才能够最大化地利用我们的数据。 优化除了算法层的优化最基本的显存优化无非也就以下几点 减少输入图像的尺寸减少batch减少每次的输入图像数量多使用下采样池化层一些神经网络层可以进行小优化利用relu层中设置inplace购买显存更大的显卡从深度学习框架上面进行优化。 5.1 牺牲计算速度减少显存使用量 在PyTorch中如果一个模型占用的显存太大了可以将一个计算过程分成两半先计算前一半保存后一半需要的中间结果然后再计算后一半。 # 首先设置输入的inputrequires_gradTrue # 如果不设置可能会导致得到的gradient为0# 输入 input torch.rand(1, 10, requires_gradTrue)# 假设我们有一个非常深的网络 layers [nn.Linear(10, 10) for _ in range(1000)]# 定义要计算的层函数可以看到我们定义了两个 # 一个计算前500个层另一个计算后500个层def run_first_half(*args):x args[0]for layer in layers[:500]:x layer(x)return xdef run_second_half(*args):x args[0]for layer in layers[500:-1]:x layer(x)return x# 我们引入新加的checkpoint from torch.utils.checkpoint import checkpointx checkpoint(run_first_half, input) x checkpoint(run_second_half, x)# 最后一层单独调出来执行 x layers[-1](x) x.sum.backward() 对于Sequential-model来说因为Sequential()中可以包含很多的block所以官方提供了另一个功能包 input torch.rand(1, 10, requires_gradTrue) layers [nn.Linear(10, 10) for _ in range(1000)] model nn.Sequential(*layers)from torch.utils.checkpoint import checkpoint_sequential# 分成两个部分 num_segments 2 x checkpoint_sequential(model, num_segments, input) x.sum().backward() 6. 跟踪显存使用情况 再次浅谈Pytorch中的显存利用问题(附完善显存跟踪代码) 我们借用 Pytorch-Memory-Utils 这个工具来检测我们在训练过程中关于显存的变化情况分析出我们如何正确释放多余的显存。 通过Pytorch-Memory-Utils工具我们在使用显存的代码中间插入检测函数就可以输出类似于下面的信息At __main__ module: line 13 Total Used Memory:696.5 Mb表示在当前行代码时所占用的显存即在我们的代码中执行到13行的时候所占显存为695.5Mb。At __main__ module: line 15 Total Used Memory:1142.0 Mb表示程序执行到15行时所占的显存为1142.0Mb。两条数据之间表示所占显存的tensor变量。 # 12-Sep-18-21:48:45-gpu_mem_track.txtGPU Memory Track | 12-Sep-18-21:48:45 | Total Used Memory:696.5 MbAt __main__ module: line 13 Total Used Memory:696.5 Mb | 7 * Size:(512, 512, 3, 3) | Memory: 66.060 M | class torch.nn.parameter.Parameter| 1 * Size:(512, 256, 3, 3) | Memory: 4.7185 M | class torch.nn.parameter.Parameter| 1 * Size:(64, 64, 3, 3) | Memory: 0.1474 M | class torch.nn.parameter.Parameter| 1 * Size:(128, 64, 3, 3) | Memory: 0.2949 M | class torch.nn.parameter.Parameter| 1 * Size:(128, 128, 3, 3) | Memory: 0.5898 M | class torch.nn.parameter.Parameter| 8 * Size:(512,) | Memory: 0.0163 M | class torch.nn.parameter.Parameter| 3 * Size:(256, 256, 3, 3) | Memory: 7.0778 M | class torch.nn.parameter.Parameter| 1 * Size:(256, 128, 3, 3) | Memory: 1.1796 M | class torch.nn.parameter.Parameter| 2 * Size:(64,) | Memory: 0.0005 M | class torch.nn.parameter.Parameter| 4 * Size:(256,) | Memory: 0.0040 M | class torch.nn.parameter.Parameter| 2 * Size:(128,) | Memory: 0.0010 M | class torch.nn.parameter.Parameter| 1 * Size:(64, 3, 3, 3) | Memory: 0.0069 M | class torch.nn.parameter.ParameterAt __main__ module: line 15 Total Used Memory:1142.0 Mb | 1 * Size:(60, 3, 512, 512) | Memory: 188.74 M | class torch.Tensor| 1 * Size:(30, 3, 512, 512) | Memory: 94.371 M | class torch.Tensor| 1 * Size:(40, 3, 512, 512) | Memory: 125.82 M | class torch.TensorAt __main__ module: line 21 Total Used Memory:1550.9 Mb | 1 * Size:(120, 3, 512, 512) | Memory: 377.48 M | class torch.Tensor| 1 * Size:(80, 3, 512, 512) | Memory: 251.65 M | class torch.TensorAt __main__ module: line 26 Total Used Memory:2180.1 Mb- | 1 * Size:(120, 3, 512, 512) | Memory: 377.48 M | class torch.Tensor - | 1 * Size:(40, 3, 512, 512) | Memory: 125.82 M | class torch.Tensor At __main__ module: line 32 Total Used Memory:1676.8 Mb当然这个检测工具不仅适用于Pytorch其他的深度学习框架也同样适用不过需要注意下静态图和动态图在实际运行过程中的区别。
http://www.w-s-a.com/news/502763/

相关文章:

  • 淘宝客怎么建立网站网站360优化
  • 安徽建海建设工程有限公司网站网站空间和域名价格
  • 农产品网站建设策划哪里有做枪网站的
  • 更改各网站企业信息怎么做张家港企业网站制作
  • 郑州网站建设咨询银川做网站哪家好
  • 微信网站 微信支付合肥seo排名收费
  • 织梦做的网站如何上线广东省广州市番禺区南村镇
  • 网站设计的导航栏怎么做太原有网站工程公司吗
  • 苏州虎丘区建设局网站如何在一个数据库做两个网站
  • 淘宝天猫优惠券网站建设费用腾讯邮箱企业邮箱登录
  • 深圳福田做网站公司海航科技网站建设
  • 网站降权查询wordpress更换文章背景色
  • 大型电商网站开发金融企业网站建设公司
  • 成都营销型网站建设价格化妆品品牌推广方案
  • 深圳公司手机网站制作苏州网站推广哪家好
  • 网站建设开发方式包括购买学校网站建设费计入什么科目
  • 做简单网站的框架图中小微企业查询平台
  • 哪些网站可以免费做产品推广建设建设部网站
  • 网站开发销售怎么做django做网站
  • 淘宝客网站做百度竞价万网域名怎么绑定网站
  • 建设网站找哪个公司北京知名大公司有哪些
  • 专业彩票网站开发网站流量在哪设置
  • 网站建设对应的岗位榆林做网站公司
  • 网站建设公司怎么算专业js网站分页怎么做
  • 网和网站的区别phpcms和帝国cms哪个好
  • wordpress改网站名字长沙网络营销外包
  • 宝塔怎么做第二个网站网站内容设计遵循的原则有
  • 网站违反了 google 质量指南免费ppt模版网站
  • 郑州网站建设郑州网站建设成都那家网站建设好
  • 温州网站排名优化公司如何招聘软件网站开发人员