深度学习
文章平均质量分 54
Reza.
宾州州立大学博士在读,主要做点NLP。
个人主页:https://renzelou.github.io/
展开
-
Encoder-decoder 与Decoder-only 模型之间的使用区别
总而言之,个人认为 huggingface目前的模型接口,对于decoder-only模型的使用并不是很友好。在使用过程中需要注意很多细节,不然会遇到许多问题,而这些问题,encoder-decoder模型是完全不会有的。原创 2024-02-21 11:47:30 · 2221 阅读 · 2 评论 -
有关于RLHF
huggingface 官方介绍RLHF的博客:https://huggingface.co/blog/rlhf转载 2024-01-04 05:58:48 · 191 阅读 · 0 评论 -
linux更换常用软件的默认缓存路径(.conda, .huggingface等)
在使用linux的过程中,我们往往会使用软件安装很多packages,其中的大多数软件(例如conda)会把当前安装的packages缓存起来,以加速之后的相同package的安装。而很多软件的默认缓存路径是user自己的home路径。下面罗列几个常见的软件的缓存路径更改方法。原创 2023-10-13 02:28:23 · 2067 阅读 · 0 评论 -
下载并处理【T0】指令微调数据集--手把手教程
手把手指导如何下载处理T0数据集原创 2023-07-05 14:56:50 · 1309 阅读 · 0 评论 -
Transformer warning: [encoder.embed_tokens.weight] is newly initialized
很多人在看到这个warning的时候会担心,embedding随机初始化,会不会影响到模型性能。参数,顾名思义,就是encoder的embedding weight。如果想要没有这个报错,就升级transformer到最新版本。经过笔者多方查证,这个。原创 2023-05-15 12:32:50 · 1081 阅读 · 1 评论 -
上传、下载huggingface仓库文件(模型、数据等)
想要上传文件,例如模型权重的话,首先得找到自己huggingface hub的。最后用如下命令,把相关文件(模型、tokenizer)上传就行原创 2023-04-24 07:50:15 · 7163 阅读 · 3 评论 -
LLaMA模型文件 (搬运工)
如果要使用huggingface transformer训练LLaMA,需要使用额外的转换脚本(具体详见huggingface官网。建议提前确认自己的huggingface版本。或者使用上述已经被转换好的。但是申请的审批时间一般都很长。才能获得官方模型权重。原创 2023-04-21 14:34:12 · 5400 阅读 · 2 评论 -
深度学习随机种子推荐
42, 3407, 114514别问为什么【🐶】转载 2023-04-12 03:44:23 · 2615 阅读 · 2 评论 -
OpenAI API总结
这里简单总结了一下OpenAI的一些热门文本模型的API名称,及其价格、输入长度限制等重要信息,以便于开发者快速参考。OpenAI 的api 名称,大多很抽象,很多时候我们想要调用模型,却又不知道具体的api的名字。注意:由于OpenAI的模型更新速度非常快,同一个模型的API的名称可能在不同时间段都会有所不同。因此,笔者建立了一个Github仓库,原创 2023-04-08 14:40:59 · 684 阅读 · 0 评论 -
单标签分类 vs.多标签分类
我们一般说的分类任务,多指单标签多分类。原创 2023-03-24 08:36:49 · 1077 阅读 · 1 评论 -
有关于Fisher Projection (LDA) in Python
推荐一篇很好的blog,代码和注释也非常清楚。转载 2023-01-29 17:15:00 · 251 阅读 · 0 评论 -
pytorch复制模型
很多时候,我们需要把模型copy一份,两份模型用于不同的用途(e.g., 分别训练、teacher / student model)。虽然torch并没有提供类似于。不仅可以把原先的模型的所有参数,原模原样复制一份,连device也照样能够复制。并且各自优化,互不干扰。这种接口,但是这个功能可以简单通过。原创 2023-01-07 07:30:26 · 3420 阅读 · 0 评论 -
有关于huggingface tokenizer的text_pair
由于常规的BERT预训练时使用NSP任务,所以,如果用BERT的tokenizer去做sentence pair classification,它会返回。这个list长度为batch_size,里面的每一个样本就是一个sentence pair,用list存储,而且只用传这一个参数,不用。的参数,这个参数在做NLI任务的时候很有用,因为输入不是一个single sentence,而是。但是这个参数的类型让人非常confused,而且同时还有一个。也就是说,如果只是单个sentence pair,直接传入。原创 2023-01-04 10:19:29 · 1521 阅读 · 4 评论 -
有关于Transformer 的max_seq_length (max_source_length)
Transformer 的最大输入长度,即/是一个非常值得注意的参数。Transformer的encoder大多是Auto-encoder的结构,不同于Auto-regressive encode,由于auto-encoder缺乏时序序列的位置信息,因此其需要对输入的每个token的position进行编码。而position的编码方式大致为两种:1).基于Embedding 2).非Embedding。原创 2023-01-03 13:43:24 · 6346 阅读 · 7 评论 -
有关于huggingface evaluate的使用
直接loadmetric,然后compute,就能获得一个字典。如果要同时计算多个metric,而且这些metric的接口一致,则利用combine;如果这些metrics的接口不一致(例如,f1相较于acc,会额外需要average参数),则只能分别load和compute。注意,以上结论只针对于这个版本,可能不同版本结论不一样。原创 2023-01-01 02:46:46 · 2220 阅读 · 0 评论 -
gumbel-softmax trick
VAE和GAN里面训练的时候常用的技巧,主要是为了解决那种预测是"hard",即输出是一个one-hot的决策时,没有办法直接计算后续损失的情况。而使用softmax强制其输出为概率分布的话,虽然可以计算后续损失,但是其本质上还是argmax的含义。为了能够在模型决策训练的过程中引入一定的随机性(个人理解为决策的soft程度,而不是单纯的hard),尤其是在Reinforce Learning里面,常用一个trick就是gumbel-softmax。其核心思想是利用gumbel分布进行采样,增加模型决策的随转载 2021-12-07 15:45:49 · 932 阅读 · 0 评论 -
huggingface examples
环境和官方要求一致,然后对应。原创 2022-12-26 04:14:59 · 335 阅读 · 0 评论 -
有关于decoder中的past_key_values参数
(因为需要auto-regressively生成tokens),这个时候encoding_output 和上述的 k、v在整个decoding过程中,数值都不会变化(输入没变,模型参数也没变),因此它们就可以直接重用。我们都知道,encoder-decoder模型在进行generate的时候,会重复地调用decoder (i.e., auto-regressive)。,我们就可以直接使用上一个step已经计算好的K、V,而不用再进行重复的encoder_output ==> k_v_states的计算。原创 2022-12-22 14:35:02 · 3905 阅读 · 1 评论 -
有关于pytorch 计算mutual information
torch并没有提供MI的计算接口,笔者大规模搜罗了网上现有的资料,只找到这些:总结就是没有那种直接能够计算torch两个dense tensor之间MI的开源实现,看来只能用两个向量之间的点积来代替互信息,具体参考:How to calculate mutual information in PyTorch原创 2022-12-17 14:16:17 · 1608 阅读 · 0 评论 -
有关于torch multinomial采样
这个概率分布,只有10和3两个样本能够被采样到。所以当采样数量设置为4的时候,就会报错。,从中采样两个样本。由于10最大,3其次,所以采样出来的结果是1,2。,可以看到第一个采样到的是3,随后采样到的一直都是10,因为10最大。多项式采样,核心思想就是从一个概率分布中,采样n个样本的index,,可以重复采样到同一个样本。如上述,对于一个概率分布。这个时候需要设置参数。原创 2022-12-08 14:24:28 · 1998 阅读 · 0 评论 -
有关于torch.autograd.grad
模块给用户提供了一个自定义求导的接口。可以手动地将loss对某部分参数进行梯度求导,特别适用于debug和观测。笔者经常使用这个接口用于观测模型优化出现问题时,梯度值是否出现异常;以及用于代替tensorboard等可视化工具,快速理解复杂的计算图。比方说下面这段代码:用于观测,最终的loss是否由self.dis(model)、self.gen(model)、target(tensor)计算,进而用于判断哪些模型参与这个loss的优化。这个功能就类似于使用tensorboard可视化loss的计算过程,原创 2022-12-07 09:28:36 · 2116 阅读 · 2 评论 -
Transformer Encoder-Decoer 结构回顾
本文基于对的理解,再重新回顾一下有关于auto-encoder、auto-regressive等常见概念,以及Transformer-based model的结构。原创 2022-12-02 12:12:12 · 6646 阅读 · 2 评论 -
torch 1.13.0 对应的torchvision版本
奈何官网也没有说对应的torchvision版本是啥,如果想要。由于torch版本肯定是会快速迭代更新的,比起记住特定版本,倒不如记住这个思路。torch最新的stable版本是。原创 2022-11-27 06:25:34 · 15739 阅读 · 0 评论 -
有关于联邦学习
一篇不错的博客:一篇文章读懂联邦学习原创 2022-11-10 12:03:24 · 645 阅读 · 0 评论 -
删除某个文件夹下所有指定文件
服务器被憨憨搞炸了,一晚上结果白跑,把模型文件都删掉呗。原创 2021-01-11 09:18:20 · 403 阅读 · 0 评论 -
在Jupyter Notebook终止代码块
转载自:在Jupyter Notebook终止cell(代码块)而非终止(重启)整个Jupyter转载 2022-10-16 08:02:46 · 2045 阅读 · 0 评论 -
有关于pytorch单精度bfloat16位
BF16是brain float的简称(来源于google brain)。不同于普通的单精度浮点数FP16(i.e., torch.float16),BF16是介于FP16和FP32之间的一种浮点数格式。BF16的指数位比FP16多,跟FP32一样,不过小数位比较少。即,BF16尝试采用牺牲精度的方法,来换取更大的数值空间。原创 2022-10-15 11:05:22 · 12321 阅读 · 1 评论 -
有关于learning rate和batch_size
在以往的机器学习、深度学习的时间中,这两个之间会有一些互相影响。例如,batch_size减小之后,模型优化更有可能局部最优(SGD随机梯度下降),这时候就需要适当减小lr;反之,batch_size若是能够比较大,最好增大lr来提升优化效果。而至于如何增大、减小,不同人会有不同看法 (比方说,lr随着batch_size线性缩放,或者根方)但是大多数情况下,尤其是现在机遇大模型的训练方法,用Adam,AdamW之类的optimizer,的变动而变动 (例如,transformer, 学习率一般都是。原创 2022-10-15 03:23:20 · 486 阅读 · 0 评论 -
DeepSpeed使用指南(简略版)
Zero Redundancy Optimizer (ZeRO)是DeepSpeed的workhorse. 用户可以提供不同的ZeRO config文件,来实现DeepSpeed的不同功能特性。来看一下官网教程对ZeRO的描述:一句话总结:,划分而不是复制。即,传统的深度学习,模型训练并行,是将模型参数复制多份到多张GPU上,只将数据拆分(如,torch的Dataparallel),这样就会有大量的显存冗余浪费。而ZeRO就是为了消除这种冗余,提高对memory的利用率。原创 2022-10-10 08:50:21 · 59693 阅读 · 23 评论 -
【torch报错】RuntimeError: CUDA error: no kernel image is available for execution on torch解决方案
在机器上直接用pip安装pytorch-gpu版本,很有可能出现torch的cuda toolkit和设备不兼容的问题。即,显示为trueQ: 如何知道自己安装的gpu版pytorch能否正常使用?原创 2022-09-07 09:48:15 · 2572 阅读 · 0 评论 -
SentencePiece使用指南
很方便,集成了包括BPE等各种常用的分词(subword)算法,主要针对于NMT系统。使用和安装详情,参见github:SentencePiece Python Wrapper转载 2022-04-15 23:01:24 · 1567 阅读 · 0 评论 -
Auto Speech Recognition (ASR) 计算metric
以下代码用于计算音译、语音识别的度量,代码使用了jiwer pipy包,可以直接通过pip安装。该第三方库提供了包括Character Error Rate (CER), Word Error Rate (WER), Match Error Rate (MER), Word Information Lost (WIL) and Word Information Preserved (WIP)在内的5种度量方法(实际上只有四种,因为WIL和WIP是互补的)。关于这几种metric的详细解释,参见paper原创 2022-04-12 21:00:26 · 1307 阅读 · 0 评论 -
有关于pytorch模型训练的可复现性
事实上pytorch并不担保模型训练的完全可复现,如果想要严格保证不收随机性影响的话,那就用cpu训练,而不是GPU。很多使用GPU的优化操作(包括上述提到的非决定性方法)都会造成随机性。硬件的差别,比方说cuda不同,浮点数优化产生细微差别,最后性能可能就会差的很多。的话就可以使用决定性算法,降低随机性干扰,但需要提前在你的代码文件开头设置。然后Dataloader里面的sampler也最好用。这个接口在一些旧版本的torch里面()是不支持的,请注释掉这一行。很遗憾,跨设备可复现性。原创 2022-01-25 18:03:35 · 3056 阅读 · 5 评论 -
同台设备配置多cuda环境
1. 前言首先driver版本、cuda版本、cudnn版本在绝大多数情况下(个人pc机上)都是一致的。但很多情况下,我们需要在一台设备上,使用多个版本的cuda, 比方说:多人使用的服务器需要跑一些其他cuda支持的代码(e.g., 设备安装的cuda为11,需要跑torch1.3代码,但是torch1.3最高只支持到cuda10.1)上述这种情况下就只能在一个版本的driver上,安装多个版本的cuda和cudnn。但是,这完全是可以做到的.2. 方法2.1 安装显卡驱动在进行接下来的原创 2021-12-24 03:16:14 · 4299 阅读 · 0 评论 -
检验torch_geometric各种图结构能否正常使用GPU
torch_geometric集成了各种各样图结构,但是因为不同的图结构会依赖于不同的后端计算(e.g., torch_cluster,torch_scatter),使得就算成功安装torch_geometric之后,有些图结构可以使用GPU进行推理,但是有些则不能。(比方说这种issue: github-issue)用下面这段代码尝试三种图结构的推理反传:import torchfrom torch import nnfrom torch_geometric.nn.conv.rgcn_conv i原创 2021-12-24 02:29:42 · 1305 阅读 · 0 评论 -
BERT使用过程中添加special tokens
原创 2021-12-23 00:39:00 · 8534 阅读 · 1 评论 -
常用激活函数
常用激活函数(激励函数)理解与总结转载 2021-12-21 21:44:05 · 87 阅读 · 0 评论 -
torch.autograd使用记录
经常用到,但是又经常把这个接口忘掉,torch文档里面又不是很直接,所以记录一下。大概两种用途吧:一些特定的算法,需要半路取出模型某个部分的梯度 (e.g., adversarial training)debug用,试试看loss反传是否异常 (某些特定部分的梯度大小是否异常等)比方说:torch.autograd.grad(loss,self.encoder.embeddings.speaker_embed.parameters(),retain_graph=True)查看模型enco原创 2021-12-21 21:00:13 · 272 阅读 · 0 评论 -
torch.gather 白中白理解
先看一眼官方文档:翻译过来就是:沿给定轴dim,将输入索引张量index指定位置的值进行聚合算了吧…看不懂是吧用一句话对于输入的input(一个tensor),在指定的某个维度上,按照index在同纬度上的下标顺序,将input在该维度上的值依次取出。举个例子:a = [[0, 1], [1, 0]] b = [[1],[0]]c = torch.gather(a,dim=1,b)print(c)c = [1,1]对于输入a,我们希望在dim=1这个方向上(也就是行),原创 2020-12-09 17:06:55 · 447 阅读 · 0 评论 -
torch_geometric使用指南 (作个人纪录)
建议用最新版本的torch_geometric,不用版本的API变动会比较大。这个包最关键的一个类是MessagePassing:aggr: 信息传递的方式,默认是add。也就是neighbor的信息聚合是加在center node上的(详见GCN原文)。flow: 信息传递的方向。这个要和后面的edge_index联合起来理解。默认为source_to_target。其他不做解释。MessagePassing的forward参数是:最重要的是这个edge_index,结合前面的flow原创 2021-12-18 20:25:50 · 2603 阅读 · 0 评论