深度学习
文章平均质量分 90
哦豁灬
这个作者很懒,什么都没留下…
展开
-
transformer上手(12)—— Prompting 情感分析
运用 Transformers 库来完成情感分析任务,并且使用当前流行的 Prompting 方法。Prompting 方法的核心思想就是借助模板将问题转换为与预训练任务类似的形式来处理。例如要判断标题“American Duo Wins Opening Beach Volleyball Match”的新闻类别,就可以应用模板“This is aNews: x” 将其转换为 “This is a。原创 2024-04-29 21:47:16 · 1068 阅读 · 0 评论 -
transformer上手(11)—— 抽取式问答
运用 Transformers 库来完成抽取式问答任务。自动问答 (Question Answering, QA) 是经典的 NLP 任务,需要模型基于给定的上下文回答问题。抽取式问答模型通常采用纯 Encoder 框架(例如 BERT),它更适用于处理事实性问题,例如“谁发明了 Transformer 架构?”,这些问题的答案通常就包含在上下文中;而生成式问答模型则通常采用 Encoder-Decoder 框架(例如 T5、BART),它更适用于处理开放式问题,例如“天空为什么是蓝色的?原创 2024-04-28 23:57:50 · 163 阅读 · 0 评论 -
transformer上手(10)—— 文本摘要任务
文本摘要是一个 Seq2Seq 任务,尽可能保留文本语义的情况下将长文本压缩为短文本。文本摘要可以看作是将长文本“翻译”为捕获关键信息的短文本,因此大部分文本摘要模型同样采用 Encoder-Decoder 框架。当然,也有一些非 Encoder-Decoder 框架的摘要模型,例如 GPT 家族也可以通过小样本学习 (few-shot) 进行文本摘要。T5 模型通过模板前缀 (prompt prefix) 将各种 NLP 任务都转换到 text-to-text 框架进行预训练,例如摘要任务的前缀就是。原创 2024-04-28 23:55:05 · 540 阅读 · 0 评论 -
transformer上手(9)—— 翻译任务
运用 Transformers 库来完成翻译任务。翻译是典型的序列到序列 (sequence-to-sequence, Seq2Seq) 任务,即对于每一个输入序列都会输出一个对应的序列。翻译任务通常需要大量的对照语料用于训练,如果我们有足够多的训练数据就可以从头训练一个翻译模型,但是微调预训练好的模型会更快,例如将 mT5、mBART 等多语言模型微调到特定的语言对。微调一个 Marian 翻译模型进行汉英翻译,该模型已经基于语料对汉英翻译任务进行了预训练,因此可以直接用于翻译。原创 2024-04-16 22:33:27 · 971 阅读 · 0 评论 -
transformer上手(8)—— 序列标注任务
序列标注 (Sequence Labeling/Tagging),其目标是为文本中的每一个 token 分配一个标签,因此 Transformers 库也将其称为 token 分类任务。常见的序列标注任务有命名实体识别 NER (Named Entity Recognition) 和词性标注 POS (Part-Of-Speech tagging)。命名实体识别 NER 旨在识别出文本中诸如人物、地点、组织等实体,即为所有的 token 都打上实体标签(包含“非实体”)。原创 2024-04-16 22:15:15 · 779 阅读 · 0 评论 -
transformer上手(7)—— 快速分词器
这里使用的是 IOB 标签格式,“B-XXX”表示某一种标签的开始,“I-XXX”表示某一种标签的中间,“O”表示非标签。从 pipeline 的输出结果可以看到,模型采用的是 IOB1 格式,因此“Sylvain”对应的 4 个 token “S”、“##yl”、“##va”和“##in”预测的标签都为“I-PER”。以前面介绍的 simple 合并策略为例,将连续的标签为“I-XXX”的多个 token 进行合并(或者以“B-XXX”开头,后面接多个“I-XXX”的 token 序列),直到遇到。原创 2024-04-15 22:06:09 · 630 阅读 · 0 评论 -
transformer上手(6)—— 微调预训练模型
与 Pytorch 类似,Transformers 库同样实现了很多的优化器,并且相比 Pytorch 固定学习率,Transformers 库的优化器会随着训练过程逐步减小学习率(通常会产生更好的效果)。函数来加载模型参数。最后,我们加载验证集上最优的模型权重,汇报其在测试集上的性能。注意:前面我们只保存了模型的权重,因此如果要单独调用上面的代码,需要首先实例化一个结构完全一样的模型,再通过。最终在测试集(这里用了验证集)上的准确率为 74.1%,与前面汇报的一致,也验证了模型参数的加载过程是正确的。原创 2024-04-15 22:03:55 · 1000 阅读 · 0 评论 -
transformer上手(5) —— 必要的 Pytorch 知识
Transformers 库建立在 Pytorch 框架之上(Tensorflow 的版本功能并不完善),虽然官方宣称使用 Transformers 库并不需要掌握 Pytorch 知识,但是实际上我们还是需要通过 Pytorch 的 DataLoader 类来加载数据、使用 Pytorch 的优化器对模型参数进行调整等等。这里将介绍 Pytorch 的一些基础概念以及后续可能会使用到的类。原创 2024-04-14 21:10:10 · 752 阅读 · 0 评论 -
transformer上手(4) —— 模型与分词器
换句话说,即使经过训练,它们的值事实上还是随机的。可以看到,这里成功地将 [ENT_START] 的 embedding 初始化为“start”、“of”、“entity”三个 token 的平均值,将 [ENT_END] 初始化为“end”、“of”、“entity”的平均值。向词表中添加新 token 后,必须重置模型 embedding 矩阵的大小,也就是向矩阵中添加新 token 对应的 embedding,这样模型才可以正常工作,将 token 映射到对应的 embedding。原创 2024-04-14 21:07:04 · 820 阅读 · 0 评论 -
transformer上手(3) —— 开箱即用的 pipelines
可以看到,pipeline 自动选择了预训练好的 distilbart-cnn-12-6 模型来完成任务。与文本生成类似,我们也可以通过 max_length 或 min_length 参数来控制返回摘要的长度。原创 2024-04-13 17:46:42 · 829 阅读 · 0 评论 -
transformer上手(2) —— 注意力机制
自从 2017 年 Google 发布之后,各种基于 Transformer 的模型和方法层出不穷。尤其是 2018 年,OpenAI 发布的和 Google 发布的模型在几乎所有 NLP 任务上都取得了远超先前最强基准的性能,将 Transformer 模型的热度推上了新的高峰。Transformer 模型之所以如此强大,是因为它抛弃了之前广泛采用的循环网络和卷积网络,而采用了一种特殊的结构来建模文本。原创 2024-04-08 23:06:29 · 1316 阅读 · 0 评论 -
transformer上手(1) —— transformer介绍
因此,大部分情况下,我们都不会从头训练模型,而是将别人预训练好的模型权重通过迁移学习应用到自己的模型中,即使用自己的任务语料对模型进行“二次训练”,通过微调参数使模型适用于新任务。其次所有模型层共享参数;实践证明,即使是对于自定义任务,除非你有大量的语料,否则相比训练一个专门的模型,基于预训练模型进行微调会是一个更好的选择。在每个阶段,对于给定的词语,注意力层只能访问句子中位于它之前的词语,即只能迭代地基于已经生成的词语来逐个预测后面的词语,因此也被称为自回归 (auto-regressive) 模型。原创 2024-04-08 22:59:25 · 967 阅读 · 0 评论 -
vLLM vs TGI 部署大模型以及注意点
LLM 高并发部署是个难题,具备高吞吐量的服务,能够让用户有更好的体验(比如模型生成文字速度提升,用户排队时间缩短)。原创 2024-04-05 23:03:08 · 1505 阅读 · 0 评论 -
vLLM 部署大模型
vLLM 是来自 UC Berkeley 的 LMSYS 在 LLM 推理方面的最新工作(没错就是搞出 Vicuna 的那个 group),最大亮点是采用 Paged Attention 技术,结合 Continuous Batching,极大地优化了 realtime 场景下的 LLM serving 的 throughput 与内存使用。原创 2024-04-04 19:40:42 · 2110 阅读 · 1 评论 -
vLLM介绍
vLLM是伯克利大学LMSYS组织开源的大语言模型高速推理框架,旨在极大地提升实时场景下的语言模型服务的吞吐与内存使用效率。vLLM是一个快速且易于使用的库,用于 LLM 推理和服务,可以和HuggingFace 无缝集成。vLLM利用了全新的注意力算法「PagedAttention」,有效地管理注意力键和值。原创 2024-04-04 19:13:03 · 1366 阅读 · 0 评论 -
LSTM 长短期记忆递归神经网络
人工神经网络(Aritificial Neural Networks, ANN)是一种仿生的网络结构,起源于对人类大脑的研究。人工神经网络(Aritificial Neural Networks)也常被简称为神经网络(Neural Networks, NN),基本思想是通过大量简单的神经元之间的相互连接来构造复杂的网络结构,信号(数据)可以在这些神经元之间传递,通过激活不同的神经元和对传递的信号进行加权来使得信号被放大或衰减,经过多次的传递来改变信号的强度和表现形式。原创 2024-03-04 01:43:36 · 1777 阅读 · 0 评论 -
用 tensor-parallel 多卡并发推理大模型
利用 tensor-parallel 把模型训练与推理的 workload 平均分布到多块 GPU,一方面可以提高推理速度,另一方面 vram 的负载平衡也让复杂的 prompt 能被轻松处理。tensor parallel 在主流的推理框架已经很好的支持了,在这里,我们把我们的推理逻辑平均分布到了两块 GPU 上。原创 2024-03-02 01:16:42 · 688 阅读 · 0 评论 -
BP 神经网络原理
BP (Back Propagation) 神经网络是1986年由 Rumelhart 和 McClelland 为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。原创 2024-03-02 01:14:21 · 1254 阅读 · 0 评论 -
关于all_reduce
假设每个worker的数据是一个长度为S的向量,那么个Ring AllReduce里,每个worker发送的数据量是O(S),和worker的数量N无关。一个略优的实现是利用主从式架构,将一个worker设为master,其余所有worker把数据发送给master之后,由master进行整合运算,完成之后再分发给其余worker。AllReduce具体实现的方法有很多种,最单纯的实现方式就是每个worker将自己的数据发给其他的所有worker,然而这种方式存在大量的浪费。原创 2024-03-01 00:56:03 · 572 阅读 · 0 评论 -
pytorch 多卡训练相关概念
如果GPU1和GPU2都分别得到两个特征层,那么两块GPU一共计算4个特征层的均值和方差,可以认为batch_size=4。注意:如果不用同步BN,而是每个设备计算自己的批次数据的均值方差,效果与单GPU一致,仅仅能提升训练速度;在混合精度训练上,Apex 的封装十分优雅。假设batch_size=2,每个GPU计算的均值和方差都针对这两个样本而言的。而BN的特性是:batch_size越大,均值和方差越接近与整个数据集的均值和方差,效果越好。Rank可以认为是这组能够互相通信的进程在World中的序号。原创 2024-02-29 00:24:57 · 491 阅读 · 0 评论 -
DDP(DistributedDataParallel) 分布式训练3——实践与技巧
1 在 DDP 中引入 syncBN1.1 syncBNSyncBN就是Batch Normalization(BN)。其跟一般所说的普通BN的不同在于工程实现方式:SyncBN能够完美支持多卡训练,而普通BN在多卡模式下实际上就是单卡模式。BN中有moving mean和moving variance这两个buffer,这两个buffer的更新依赖于当前训练轮次的batch数据的计算结果。但是在普通多卡DP模式下,各个模型只能拿到自己的那部分计算结果,所以在DP模式下的普通BN被设计为只利用主卡上的原创 2024-02-29 00:21:35 · 1242 阅读 · 0 评论 -
DDP(DistributedDataParallel) 分布式训练2——原理与实践
DistributedSampler的实现方式是,不同进程会使用一个相同的随机数种子,这样shuffle出来的东西就能确保一致。一个分布式系统,相对于单机系统,其最大的特征就是,其数据、处理是分布在不同地方的。与此相伴的是,各节点间有交换数据的需求,为此需要定义交换数据的规范、接口。在DDP中,如果我们要在不同进程中维持相同的状态,我们不光要传递parameter的梯度,也要传递buffer。从本质上讲,当一个模型的网络结构被定义后,其状态就是由parameter和buffer的迭代组合表示的。原创 2024-02-28 01:31:56 · 435 阅读 · 0 评论 -
DDP(DistributedDataParallel) 分布式训练1——入门上手
DistributedDataParallel(DDP)是一个支持多机多卡、分布式训练的深度学习工程方法。原创 2024-02-28 01:30:48 · 1510 阅读 · 0 评论 -
神经网络基本原理
下面是一个包含三个层次的神经网络。红色的是输入层,绿色的是输出层,紫色的是中间层(也叫隐藏层)。输入层有3个输入单元,隐藏层有4个单元,输出层有2个单元。设计一个神经网络时,输入层与输出层的节点数往往是固定的,中间层则可以自由指定;神经网络结构图中的拓扑与箭头代表着推理过程时数据的流向,跟训练时的数据流有一定的区别;结构图里的关键不是圆圈(代表“神经元”),而是连接线(代表“神经元”之间的连接)。每个连接线对应一个不同的权重(其值称为权值 tensor),这是需要训练得到的。原创 2024-02-05 01:59:22 · 2152 阅读 · 3 评论 -
深度学习预备知识2——数据预处理
Python中常用的数据分析工具中,通常使用pandas软件包。像庞大的Python生态系统中的许多其他扩展包一样,pandas可以与张量兼容。原创 2024-02-05 01:51:51 · 567 阅读 · 0 评论 -
深度学习预备知识1——数据操作
所有机器学习方法都涉及从数据中提取信息,因此需要一些关于数据的实用技能,包括存储、操作和预处理数据。机器学习通常需要处理大型数据集。线性代数和矩阵是计算大量数据的有力工具,需要一些矩阵运算相关的线性代数知识。深度学习是关于优化的学习。对于一个带有参数的模型,我们想要找到其中能拟合数据的最好模型。在算法的每个步骤中,决定以何种方式调整参数需要一点微积分知识。(autograd包会自动计算微分)机器学习还涉及如何做出预测:给定观察到的信息,某些未知属性可能的值是多少?因此需要一些统计与概率论相关的知识。原创 2024-02-04 23:20:51 · 536 阅读 · 0 评论 -
深度学习介绍
对于具备完善业务逻辑的任务,大多数情况下,正常的人都可以给出一个符合业务逻辑的应用程序。即使是顶级程序员也无难以提出完美的解决方案, 原因可能各不相同。有时任务可能遵循一种随着时间推移而变化的模式,我们需要程序来自动调整。有时任务内的关系可能太复杂(比如像素和抽象类别之间的关系),需要数千或数百万次的计算。即使人类的眼睛能毫不费力地完成这些难以提出完美解决方案的任务,这其中的计算也超出了人类意识理解范畴。机器学习(machine learning,ML)是一类强大的可以从经验中学习的技术。原创 2024-02-04 23:19:53 · 1676 阅读 · 0 评论