pytorch
文章平均质量分 54
凝眸伏笔
纵然伤心也不要愁眉不展,因为你不知道谁会爱上你的笑容。
展开
-
pytorch模型训练单机多卡(二):数据并行DataParallel
1.并行处理机制DataParallel系统通过将整个小型批处理加载到主线程上,然后将子小型批处理分散到整个GPU网络中来工作。具体是将输入一个 batch 的数据均分成多份,分别送到对应的 GPU 进行计算。与 Module 相关的所有数据也都会以浅复制的方式复制多份。每个 GPU 在单独的线程上将针对各自的输入数据独立并行地进行 forward 计算。然后在主GPU上收集网络输出,并通过将网络输出与批次中每个元素的真实数据标签进行比较来计算损失函数值。接下来,损失值分散给各个GPU,每个GPU进原创 2021-07-10 21:16:16 · 2472 阅读 · 3 评论 -
pytorch模型训练单机多卡(一):基础知识(模型并行 vs 数据并行
参考:1.总结的非常好:https://www.cnblogs.com/yh-blog/p/12877922.html2.官方文档模型并行:https://pytorch.apachecn.org/docs/1.2/intermediate/model_parallel_tutorial.html3.数据并行的一个Gitdemo:https://github.com/fnangle/text_classfication-with-bert-pytorch-4.P...原创 2021-07-10 20:51:20 · 1781 阅读 · 0 评论 -
解决asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze an
报错详情:使用bert训练二分类模型UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.....runtimeErrror: expected long but get float解决:这是输入的类别个数不对,导致计算loss的时候这个错误。下面的config.num_c原创 2021-05-22 13:16:02 · 5275 阅读 · 0 评论 -
PyTorch模型训练的几个加速技巧
这里尝试一下网上找到pyorch模型训练加速技巧,尝试一下,看看加速的效果,然后尽可能分析一下加速在哪个地方。1.有时我们会发现,使用Pytorch的模型,训着训着,越来慢了或者outofmemory,这时我们该怎么解决呢? 主要是因为,模型可能在不断的产生临时变量,这个时候,我们可以设置程序每隔多少次进行一次清除操作:torch.cuda.empty_cache()2.在数据读取速度不变的情况下,怎样进一步提高模型的训练速度呢? PyTorch 会默认使用 cuDNN 加速,并且c原创 2021-03-08 22:00:52 · 2536 阅读 · 0 评论 -
打印Pytorch模型结构和基本参数信息
背景:想看看模型结构和参数情况,用来判断输入输出之间的对应关系。1.打印模型结构demo:from transformers import AutoTokenizer, AutoModelForMaskedLM,BertTokenizer, BertModel, BertForMaskedLMimport torchtokenizer = BertTokenizer.from_pretrained("uer/chinese_roberta_L-2_H-128")model = Ber原创 2021-01-26 23:00:36 · 9834 阅读 · 0 评论 -
NVIDIA Tesla GPU系列P40参数性能——不支持半精度(FP16)模型训练
Tesla GPU系列P40不支持半精度(FP16)模型训练。因为它没有Tensor core。训练bert非常慢,想要加速,了解到半精度混合训练,能提速一倍,研究了下混合精度,以及其对设备的要求。发现当前设备不能使用半精度混合训练。NVIDIA Tesla系列GPU适用于高性能计算(HPC)、深度学习等超大规模数据计算,Tesla系列GPU能够处理解析PB级的数据,速度比使用传统CPU快几个数量级,NVIDIA Tesla GPU系列P4、T4、P40以及V100是Tesla GPU系列的明.原创 2021-01-21 22:14:57 · 31637 阅读 · 8 评论 -
size()查看tensor的维度信息、numel()函数查看张量元素个数
1.tensor.size(), 查看张量的维度信息import torcha = torch.tensor([[ 0.0349, 0.0670, -0.0612, 0.0280, -0.0222, 0.0422], [-1.6719, 0.1242, -0.6488, 0.3313, -1.3965, -0.0682], [-1.3419, 0.4485, -0.6589, 0.1420, -0.3260, -0.4795], [-0.原创 2021-01-09 15:35:16 · 9194 阅读 · 3 评论 -
torch/transformers版本查看,transformers不同版本执行时,带来不同的bug
1.版本查看# -*- encoding:utf-8 -*-import torchimport numpy as npimport transformersprint(torch.__version__) # 1.7.1print(transformers.__version__) # 2.1.12.目前使用广泛的transformers版本bert/gpt2调用完全OK,配上Python3.6+安装固定版本的transformer:pip install trans原创 2021-01-04 22:26:57 · 41742 阅读 · 34 评论 -
pytorch torch.sort()的用法以及例子
1.作用对tensor中元素排序2.用法dim = -1,按照行排序,dim= 1按照列排序,descending=True,则递减排序,否则递增3.例子按照行排序logits = torch.tensor([[[-0.5816, -0.3873, -1.0215, -1.0145, 0.4053], [ 0.7265, 1.4164, 1.3443, 1.2035, 1.8823], [-0.4451, 0.1673, 1.2590,原创 2021-01-04 22:24:27 · 7436 阅读 · 4 评论 -
torch.topk()使用方法及其示例
1.作用取一个tensor的topk元素2.使用方法dim=0表示按照列求topn,dim=1表示按照行求topn,None情况下,dim=1.任务一:取top1:pred = torch.tensor([[-0.5816, -0.3873, -1.0215, -1.0145, 0.4053], [ 0.7265, 1.4164, 1.3443, 1.2035, 1.8823], [-0.4451, 0.1673, 1.2590, -2原创 2021-01-04 22:23:35 · 13673 阅读 · 3 评论 -
pytorch官方文档的save()和load()理解
一个很好的翻译:https://blog.csdn.net/weixin_40522801/article/details/106563354?utm_medium=distribute.pc_relevant.none-task-blog-title-7&spm=1001.2101.3001.4242原创 2020-11-19 22:59:48 · 538 阅读 · 0 评论 -
pytorch 加载模型后测试的同一条数据得到的结果不一样
问题现场:背景:Python3.6,pytorch1.+,使用huggingface.co工具去finetuning bert模型,在多gpu上训练保存模型,在cpu上加载去做预测。加载模型,对同一条数据测试结果不一样。当时检查了:11.模型的状态是否是model.eval()?————不是这个问题2.是否使用torch.no_grad(),这句代码的意思是使得本次过的样本不会更新梯度。————不是这个问题model.eval()with torch.no_grad(): .原创 2020-11-12 23:13:46 · 13768 阅读 · 14 评论 -
pytorch使用多GPU训练常见问题、解决办法以及多卡保存模型时,模型预测得分不稳定的解决办法
一句话:多GPU训练模型,一句代码不能解决模型训练、eval、保存、加载的。单GPU跟多GPU的使用方式不太一样。(前提:使用huggingface.co去训练语言模型)在pytorch上使用多个GPU(在同一台设备上,并非分布式)进行训练是件非常容易的事情,只要在源代码中添加(修改)两行代码即可。下面贴上官方教程给的示例代码。并在文末总结一些自己在使用多GPU实验时发现的问题。官方tutorial——单GPU把模型放在GPU上:device = torch.device("cuda:0"原创 2020-11-09 22:53:35 · 17687 阅读 · 7 评论 -
pytorch(3)Pytorch数据读取(Dataset, DataLoader, DataLoaderIter)以及数据在cpu和gpu之间的流转
Pytorch的数据读取主要包含三个类:Dataset DataLoader DataLoaderIter这三者大致是一个依次封装的关系: 1.被装进2., 2.被装进3.参考:1.概念:https://zhuanlan.zhihu.com/p/309342362.dataloader类型从cpu到gpu:https://github.com/NVIDIA/sentiment-discovery/issues/63、https://discuss.pytorch.org/t..原创 2020-11-09 00:23:40 · 2249 阅读 · 0 评论 -
pytorch模型在GPU上训练遇见错误 ‘tuple‘ object has no attribute ‘cuda‘
问题现场:在训练语言模型时,将经过dataloader转换后的数据,进行模型训练,将整个batch转换到gpu上时,报错,意思是tuple数据结构,没有cuda属性,就是不能直接往gpu上传送。'tuple' object has no attribute 'cuda'解决:1.理解batch的数据结构:tuple。元组中的每一个元素代表什么。我这里代表了(训练数据,训练标签)2.拆分元组后,分别送往gpu。 for step, batch in enumerate(train.原创 2020-11-09 00:18:28 · 9078 阅读 · 2 评论 -
pytorch(4)Pytorch模型训练时从CPU与GPU之间的转换
1.如何进行迁移使用Pytorch写的模型:对模型和相应的数据使用.cuda()处理。通过这种方式,我们就可以将内存中的数据复制到GPU的显存中去。从而可以通过GPU来进行运算了。 另外一种方式,使用.to(device)的方式,将cpu的数据切换到gpu,如下:#配置参数:config.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')data = data.to(config.device)2.对原创 2020-11-09 00:05:51 · 16147 阅读 · 20 评论 -
pytorch(3)tensor的操作:joining、clicing、Indexing、Mutation、加减乘除运算
Joining ops:torch.cat(seq,dim=0,out=None) # 沿着dim连接seq中的tensor, 所有的tensor必须有相同的size或为empty, 其相反的操作为 torch.split() 和torch.chunk()torch.stack(seq, dim=0, out=None) #同上#注: .cat 和 .stack的区别在于 cat会增加现有维度的值,可以理解为续接,stack会新加增加一个维度,可以理解为叠加>>> a=to原创 2020-11-08 23:14:53 · 318 阅读 · 0 评论 -
pytorch(2)Tensor创建和获取tensor的size信息、torch.dtype、torch.device、torch.layout
创建tensor直接创建torch.tensor(data, dtype=None, device=None,requires_grad=False)data - 可以是list, tuple, numpy array, scalar或其他类型dtype - 可以返回想要的tensor类型device - 可以指定返回的设备requires_grad - 可以指定是否进行记录图的操作,默认为False需要注意的是,torch.tensor 总是会复制 data, 如果你想避免复制,原创 2020-11-08 23:07:38 · 6261 阅读 · 0 评论 -
pytorch(一)模型加载函数torch.load()
1.作用:用来加载torch.save()保存的模型文件。torch.load()先在CPU上加载,不会依赖于保存模型的设备。如果加载失败,可能是因为没有包含某些设备,比如你在gpu上训练保存的模型,而在cpu上加载,可能会报错,此时,需要使用map_location来将存储动态重新映射到可选设备上,比如map_location=torch.device('cpu'),意思是映射到cpu上,在cpu上加载模型,无论你这个模型从哪里训练保存的。一句话:map_location适用于修改模型能在gpu.原创 2020-11-08 22:55:12 · 101590 阅读 · 0 评论 -
tensorflow使用TensorBoard可视化遇到问题ValueError: GetLogdirSubdirectories: path exists and is not a director
Scalars显示损失和指标在每个时期如何变化。 您还可以使用它来跟踪训练速度,学习率和其他标量值。Graphs可帮助您可视化模型。 在这种情况下,将显示层的Keras图,这可以帮助您确保正确构建。Distributions和Histograms显示张量随时间的分布。 这对于可视化权重和偏差并验证它们是否以预期的方式变化很有用。原创 2020-11-08 22:55:25 · 1003 阅读 · 0 评论 -
PytorchRuntimeError:CUDA out of memory.Tried to allocate 120.00 MiB (GPU 0; 22.38 GiB total capacity
问题现场环境:pytorch=1.+,python=3.6,1个GPU当对预训练的bert模型进行fine-tuning,模型训练的batchsize设置为256时,报错。大概意思是GPU内存超了,总共22g(模型结构、参数等会占用5g内存)内存,16g的内存以及被分配出去了,剩下的78M,不够分配给120M了。RuntimeError: CUDA out of memory. Tried to allocate 120.00 MiB (GPU 0; 22.38 GiB total capac原创 2020-11-06 22:50:58 · 3612 阅读 · 2 评论 -
pytorch中查看gpu信息、选择使用gpu
前提:安装好Python3.6+,torch(GPU),登录一台开发机,。1.查看cuda是否可用:torch.cuda.is_available()原创 2020-11-05 22:18:04 · 27904 阅读 · 0 评论 -
torch.max()语法、用法以及例子
torch.max()用法torch.max(input, dim, keepdim=False, out=None) -> (Tensor, LongTensor)按维度dim 返回最大值以及最大值的索引。1.torch..max(input)此时返回一个input的最大值。例子:import torchlogist = torch.tensor([[-0.1661, -0.3044]])a = torch.max(logist) print('------a val原创 2020-10-28 09:26:50 · 10723 阅读 · 0 评论