Pytorch基础
文章平均质量分 64
cv_lhp
纸上得来终觉浅,绝知此事要躬行
展开
-
DeepSpeed的hostfile文件
但是,如果你通过 SSH 连接到多个不同的系统,记住所有主机名或 IP 地址,还有用户名是困难的,除非你将它们写在纸上或者将其保存在文本文件中。DeepSpeed多机多卡训练时,需要配置hostfile文件, hostfile文件是一个主机名(或 SSH 别名)列表,这些机器可以通过无密码 SSH 访问,并且还包括 slot counts,用于指定系统上可用的 GPU 数量。如果没有指定或找到 hostfile,则 DeepSpeed 查询本地计算机上的 GPU 数量,以发现可用的本地 slot 数量。原创 2023-08-31 03:29:40 · 2913 阅读 · 0 评论 -
pytorch指定多块GPU运行代码
使用了gpu0,1,2,3 共4块同时跑。原创 2023-05-26 01:44:13 · 1713 阅读 · 0 评论 -
Pytorch中FLOPs和Params计算
【代码】Pytorch中FLOPs和Params计算。原创 2023-02-27 20:32:34 · 1719 阅读 · 2 评论 -
Pytorch查看tensor是否有梯度(值)以及开启梯度
函数:requires_grad_(requires_grad=True)原创 2023-02-24 01:09:30 · 6998 阅读 · 0 评论 -
Pytorch高效降低内存 torch.utils.checkpoint()的使用
该技术的核心是一种使用时间换空间的策略。在训练的前向传播中不保留中间激活值,从而节省下内存,并在反向传播中重新计算相关值,以此来执行一个高效的内存管理。主要用于节省训练模型过程中使用的内存,将模型或其部分的激活值的计算方法保存为一个checkpoint,在前向传播中不保留激活值,而在反向传播中根据checkpoint重新计算一次获得激活值用于反向传播。checkpoint操作是通过将计算交换为内存而起作用的。不同于常规地将整个计算图的所有中间激活值保存下来用于计算反向传播,作为检查点的部分不再保存中间激活值原创 2023-02-23 23:51:37 · 4947 阅读 · 0 评论 -
Pytorch DDP分布式数据合并通信 torch.distributed.all_gather()
torch.distributed.all_gather() 官网链接tensor_list每个元素代表每个rank的数据,tensor代表每个进程中的tensor数据,其中tensor_list每个分量的维度要与对应的tensor参数中每个rank的维度相同。原创 2023-02-21 00:57:05 · 6562 阅读 · 1 评论 -
pytorch 根据bool矩阵取出tensor中对应位置元素
此方法中mask是一个bool矩阵,在input中取出mask中True对应的值。第一个例子:结果为一维向量(target是一维的)第二个例子:结果为一个二维的向量(x是二维的)原创 2023-02-13 02:36:12 · 2292 阅读 · 0 评论 -
Pytorch 所有随机数种子固定
为了方便复现和debug,固定随机种子非常重要,这里记录 PyTorch 中固定各种随机种子的方法。原创 2023-01-10 19:31:08 · 745 阅读 · 0 评论 -
Pytorch中torch.nn.functional.pad()函数
参考链接:Pytorch之torch.nn.functional.pad函数详解原创 2023-01-10 19:17:34 · 452 阅读 · 0 评论 -
torch.where用法
参考链接:torch.where()用法原创 2023-01-10 17:53:45 · 194 阅读 · 0 评论 -
pytorch 进行分布式调试debug torch.distributed.launch 三种方式
当进入pdb调试后,跟原先使用pdb调试命令一样,可以在线打断点(再使用pdb命令添加多个断点),也可以逐行执行代码,也能查看变量。唯一缺点是分布式调试需要在代码前手动加上pdb.set_trace()这一行代码,手动打第一个断点。命令行添加pdb后,进入调试的代码在launch.py中,打断点到主程序后,无法进入到住程序里面,------?原创 2023-01-10 12:53:38 · 5938 阅读 · 1 评论 -
pytorch 保存、读取 tensor 和 numpy数据
【代码】pytorch 保存、读取 tensor 和 numpy数据。原创 2022-12-27 00:10:00 · 3717 阅读 · 0 评论 -
pytorch如何查看tensor和model在哪个GPU上以及指定GPU设备
【代码】pytorch如何查看tensor和model在哪个GPU上以及指定GPU设备。原创 2022-12-24 20:21:32 · 9864 阅读 · 0 评论 -
pytorch:RuntimeError: CUDA out of memory. . Tried to allocate 1.25 GiB (GPU 0; 23.70 GiB total...)
【代码】pytorch:RuntimeError: CUDA out of memory. . Tried to allocate 1.25 GiB (GPU 0;原创 2022-12-22 11:17:26 · 387 阅读 · 0 评论 -
Linux添加root权限:is not in the sudoers file解决方法
使用:wq保存/etc/sudoers文件报错(不能保存只读文件):Linux:readonly option is set (add!to override)有些文件设置了只读,一般不是修改文件的,但是如果你是文件的owner或者root的话,通过:wq!如果文件设置为只读了的话,用 :wq命令是不能保存并退出的,但是最高权限者可通过wq!来进行文件的保存并退出文件。碰上只读文件,会给提示会是只读文件,带了!当前的用户没有加入到sudo的配置文件里。文件所有者通过 wq!原创 2022-12-01 18:11:24 · 4121 阅读 · 0 评论 -
pytorch训练加速技巧
空间换时间:能预处理的数据,尽量预处理之后保存,训练过程中直接使用预处理的数据。矩阵放在gpu上:对于矩阵运算,尽可能放到gpu上,无论该矩阵是否需要梯度更新。同时能用矩阵表示变换尽可能用矩阵变换表示;避免使用append操作:对于列表list,使用list.append(**)也是较为耗时的,若已知列表长度,尽可能用numpy数组替换列表。减少使用concat操作:解释同上。原创 2022-11-29 20:20:00 · 2065 阅读 · 0 评论 -
Python:输出整个tensor、numpy、pandas的方法
pytorch之tensor矩阵输出省略问题Pytorch:输出整个tensor的方法python-长数据完整打印方法原创 2022-11-29 19:57:15 · 1698 阅读 · 0 评论 -
Pytorch自动混合精度(AMP)介绍与使用模板--GradScaler()、autocast
【代码】Pytorch自动混合精度(AMP)介绍与使用模板--GradScaler()、autocast。原创 2022-11-29 13:06:00 · 633 阅读 · 0 评论 -
pytorch原生支持的amp混合精度和nvidia apex混合精度AMP技术
从英伟达网页Apex (A PyTorch Extension) — Apex 0.1.0 documentation可以得到apex的全称——A PyTorch Extension(Apex)——其实就是一种pytorch的拓展插件。它的目的就是为了是用户能够快速实现amp——自动混合精度技术在它们的N卡系列上训练模型也构建的一个库。简简单单的在你自定义的模型训练代码中添加少量代码(4行代码)就能够使用自动混合精度的技术来提高模型的训练速度,提高生产力。原创 2022-11-29 13:03:36 · 1780 阅读 · 0 评论 -
PyTorch中torch.gather()函数
输入index的shape等于输出value的shape输入index的索引值仅替换该index中对应dim的index值最终输出为替换index后在原tensor中的值。原创 2022-11-27 02:40:49 · 2329 阅读 · 1 评论 -
Pytorch 中Label Smoothing CrossEntropyLoss实现
一般情况下我们都是直接调用Pytorch自带的交叉熵损失函数计算loss,但涉及到魔改以及优化时,我们需要自己动手实现loss function,在这个过程中如果能对交叉熵损失的代码实现有一定的了解会帮助我们写出更优美的代码。其次是标签平滑这个trick通常简单有效,只需要改改损失函数既可带来性能上的提升,通常与交叉熵配合食用。因此,本文基于这两个出发点,介绍基于Pytorch框架下的交叉熵损失实现以及标签平滑的实现。原创 2022-11-27 02:10:04 · 1533 阅读 · 0 评论 -
Pytorch中CrossEntropyLoss()详解
交叉熵主要是用来判定实际的输出与期望的输出的接近程度。举个例子:在做分类训练的时候,如果一个样本属于第 K 类,那么这个类别所对应的输出节点的输出值应该为1,而其他节点的输出都为0,即 [0,0,1,0,….0,0] ,这个数组也就是样本的 Label,是神经网络最期望的输出结果。我们用交叉熵损失函数来衡量网络的实际输出与正确标签的差异,利用这种差异经过反向传播去更新网络参数。交叉熵:它主要刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。原创 2022-11-27 01:46:19 · 2242 阅读 · 0 评论 -
Pytorch中KL loss
第三个参数reduction有三种取值,为 none 时,各点的损失单独计算,输出损失与输入(x)形状相同;为 mean 时,输出为所有损失的平均值;为 sum 时,输出为所有损失的总和。原创 2022-11-26 20:53:03 · 3651 阅读 · 0 评论 -
图像分类训练技巧之数据增强
图像分类训练技巧之数据增强原创 2022-11-26 02:15:24 · 389 阅读 · 0 评论 -
python numpy中np.random.choice()用法详解
python,numpy中np.random.choice()的用法详解及其参考代码原创 2022-11-24 03:18:02 · 654 阅读 · 0 评论 -
Pytorch关于图片数据增强Data Augmentation方法
关于数据增广的笔记原创 2022-11-24 03:16:29 · 442 阅读 · 0 评论 -
Pytorch DDP原理(第二篇)
SyncBN就是Batch Normalization(BN)。其跟一般所说的普通BN的不同在于工程实现方式:SyncBN能够完美支持多卡训练,而普通BN在多卡模式下实际上就是单卡模式。BN中有moving mean和moving variance这两个buffer,这两个buffer的更新依赖于当前训练轮次的batch数据的计算结果。转载 2022-11-18 02:11:04 · 2622 阅读 · 0 评论 -
Pytorch DDP原理(第一篇)
一个分布式系统,相对于单机系统,其最大的特征就是,其数据、处理是分布在不同地方的。与此相伴的是,各节点间有交换数据的需求,为此需要定义交换数据的规范、接口。在此基础上,才能构建起分布式计算的大框架。比如很有名的google大数据三驾马车之一的map-reduce概念,简要地描述,就是将数据分开成N份map到N个地方,并行进行处理;处理完成后,再将结果reduce到一起。为了满足分布式编程的需求,PyTorch在torch.distributed中提供了一些分布式基本接口,如下图所示。DDP利用all_re转载 2022-11-17 20:59:23 · 2076 阅读 · 0 评论 -
Pytorch中的DDP
举个例子:我有两台机子,每台8张显卡,那就是2x8=16个进程,并行数是16。但是,我们也是可以给每个进程分配多张卡的。原创 2022-11-17 13:06:50 · 4633 阅读 · 4 评论 -
Pytorch 多机多卡报错:Some NCCL operations have failed or timed out. Due to the asynchronous nature of CUDA
Some NCCL operations have failed or timed out. Due to the asynchronous nature of CUDA kernels, subsequent GPU operations might run on corrupted/incomplete data. To avoid this inconsistency, we are taking the entire process down.多台机器上面的CUDA和Pytorch版本号不一致,必须原创 2022-11-17 13:06:00 · 2798 阅读 · 0 评论 -
Pytorch中torch.tensor、list、numpy之间的相互转换
【代码】Pytorch中torch.tensor、list、numpy之间的相互转换。原创 2022-11-16 01:27:37 · 1412 阅读 · 0 评论 -
torch.einsum()
torch.einsum()原创 2022-10-22 18:57:20 · 408 阅读 · 0 评论 -
李沐动手学深度学习V2-seq2seq和代码实现
机器翻译输入序列和输出序列都是长度可变的。 为了解决这类问题,我们将使用两个循环神经网络的编码器和解码器Auto-Encoder架构, 并将其应用于序列到序列(sequence to sequence,seq2seq)类的学习任务 .遵循编码器-解码器架构的设计原则, 循环神经网络编码器使用长度可变的序列作为输入, 将其转换为固定形状的隐状态。 换言之输入序列的信息被编码到循环神经网络编码器的隐状态中。 为了连续生成输出序列的词元, 独立的循环神经网络解码器是基于输入序列的编码信息和label序列已经看见原创 2022-07-07 17:41:51 · 1459 阅读 · 1 评论 -
李沐动手学深度学习v2-目标检测中的锚框和代码实现
本节锚框代码实现,使用了很多Pytorch内置函数,如果有对应函数看不懂的地方,可以查看前面博客对相应函数的具体解释,如下链接所示:目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。 不同的模型使用的区域采样方法可能不同。 这里介绍其中的一种方法:以每个像素为中心,生成多个缩放比和宽高比(aspect ratio)不同的边界框,这些边界框被称为锚框(anchor bo原创 2022-06-04 04:36:13 · 1153 阅读 · 6 评论 -
Pytorch中的广播机制(Broadcast)
如果一个PyTorch操作支持广播,则其Tensor参数可以自动扩展为相等大小(不需要复制数据)。通常情况下,小一点的数组会被 broadcast 到大一点的,这样才能保持大小一致。2.1 如果遵守以下规则,则两个tensor是“可广播的”:2.2 如果两个tensor是“可广播的”,则计算过程遵循下列规则:3.1 相同维度,一定可以 broadcasting。3.2 x和y不能被广播,因为x没有符合“至少有一个维度”,所以不可以broadcasting。3.3 x 和 y 可以广播。3.原创 2022-06-03 01:10:09 · 1695 阅读 · 0 评论 -
Pytorch中的广播机制(Broadcast)
如果一个Pytorch运算支持广播的话,那么就意味着传给这个运算的参数会被自动扩张成相同的size,在不复制数据的情况下就能进行运算,整个过程可以做到避免无用的复制,达到更高效的运算。广播机制实际上是在运算过程中,去处理两个形状不同向量的一种手段。pytorch中的广播机制和numpy中的广播机制一样, 因为都是数组的广播机制。以数组A和数组B的相加为例, 其余数学运算同理核心:如果相加的两个数组的shape不同, 就会触发广播机制: 1)程序会自动执行操作使得A.shape==B.sha原创 2022-06-03 00:43:30 · 9505 阅读 · 4 评论 -
Pytorch中torch.numel(),torch.shape,torch.size()和torch.reshape()函数解析
torch.numel(),如下图所示:返回输入张量中元素的总数。二. torch.shape解析1. torch.shape解析返回输入tensor张量的维度大小三. torch.size()函数解析1.torch.size()函数解析跟torch.shape效果相同,也是返回输入tensor张量的维度大小。四.torch.reshape()函数解析1. 官网链接torch.reshape(),如下图所示:返回将输入的形状转变为shape指定的形状大小,元素总数不变。原创 2022-06-02 17:45:09 · 7942 阅读 · 0 评论 -
Pytorch中torch.full(),torch.ones()和torch.zeros()函数解析
torch.full(),如下图所示:返回创建size大小的维度,里面元素全部填充为fill_value输出形状为(2,3)的二维张量,里面元素全部填充为5二. torch.ones()函数解析1. 官网链接torch.ones(),如下图所示:返回创建size大小的维度,里面元素全部填充为1三. torch.zeros()函数解析1.官网链接torch.zeros(),如下图所示:返回创建size大小的维度,里面元素全部填充为0原创 2022-06-02 17:17:53 · 10881 阅读 · 3 评论 -
Pytorch中torch.nonzero()函数解析
torch.nonzero(),如下图所示:2.1. 输入是一维张量,返回一个包含输入 input 中非零元素索引的张量,输出张量中的每行包含 input 中非零元素的索引,输出是二维张量torch.size(z,1), z 是输入张量 input 中所有非零元素的个数。2.2. 输入是n维张量,如果输入 input 有 n 维,则输出的索引张量的size为torch.size(z,n) , 这里 z 是输入张量 input 中所有非零元素的个数。无论输入是几维,输出张量都是两维,每行代表输入张量中原创 2022-06-02 16:29:28 · 3872 阅读 · 0 评论 -
Pytorch中torch.argmax()函数解析
torch.argmax(),如下图所示:将输入input张量,无论有几维,首先将其reshape排列成一个一维向量,然后找出这个一维向量里面最大值的索引。4. torch.argmax(input,dim) 函数解析函数返回其他所有维在这个维度上面张量最大值的索引。torch.argmax()函数中dim表示该维度会消失,可以理解为最终结果该维度大小是1,表示将该维度压缩成维度大小为1。举例理解:对于一个维度为(d0,d1) 的矩阵来说,dim=1表示求每一行中最大数的在该行中的列号,最原创 2022-06-02 14:45:42 · 10228 阅读 · 3 评论