- 博客(52)
- 收藏
- 关注
原创 周报8_YMK
具体来讲,已知前向计算时会把所有权重 All-Gather 起来,之后便对权重进行切片,切成多少片可以根据集群配置进行调节,一般情况下会把权重切片尽量限制在单个节点内部,也就是一个节点有多少张卡,就切成多少片,因为每个节点都拥有完整的权重,在反向计算梯度时只需要在节点内部执行 All-Gather 通信,完全避免了跨节点的通信。为了减少量化和反量化的次数(Q+D),可如上图右所示,首先对全部梯度量化,然后所有 GPU 进行一次 All-to-All 通信,最后执行反量化操作。(用GPU显存换取通信效率)
2023-12-03 13:56:02
1065
原创 周报6_YMK
的思想来加快生成速度,因为扩散模型在生成过程中需要一个step一个step来去噪得到图片,所以或许也可以用几个小模型当做美杜莎头打草稿,经过几个step后用原模型校验一下,循环这个过程达到加快生成过程的目的。本周主要在看代码:看Medusa头的代码发现不是很了解base_model那部分,所以又去看了llama2的代码和一些相关博客。他的模型很小,是简单的CNN,700 万个参数(28.15 MB )。重写了一部分佛山中医学院项目的代码,更规范一些。一下,循环这个过程达到加快生成过程的目的。
2023-11-21 19:18:40
252
原创 周报5_YMK
回顾上周讲的 FlashDecoding,在 FlashAttention 的基础上引入了新的并行维度:keys/values的序列长度,然而,在每一个块的内部,计算过程还是同步的(主要是局部最大值)。由于 Tensor Core 的优化通常期望 M 和 N 的维度是 8 的倍数,所以在解码阶段,如果 M 维度较小,填充零以满足 Tensor Core 期望的维度可能导致计算利用率下降。于是作者进行了统计,如下图所示。的选择是很困难的,极易造成精度的下降,另一个是该优化未必能带来实际的加速。
2023-11-14 14:02:30
839
原创 周报4_YMK
片上SRAM比HBM快得多,但比HBM小得多,在计算方面,使用Tensor Core的BFLOAT16 的理论峰值吞吐量为 312 TFLOPS。在 Flash-Decoding 中,它在两个级别上被使用:在分块内部(类似 FlashAttention),以及跨分块进行最终的归约计算。在 self-attention 中,计算速度比内存速度快得多,因此进程(操作)越来越多地受到内存(HBM)访问的瓶颈。,每次进行部分计算,确保这些计算结果能在SRAM内进行交互,待得到对应的结果后再进行输出。
2023-11-05 19:22:52
398
原创 YMK_周报2
在另一个极端,当Temperature设置为远大于 1 的值时,采样将是混乱的,从均匀分布中抽取。因为Temperature越大,LLM改正的情况就会越多,草稿模型生成的token的可信长度就会减少。在文本生成期间,典型的迭代包括模型接收最新生成的 token 作为输入,加上所有其他先前输入的缓存内部计算,再返回下一个 token 得概率。在贪心解码的特殊情况下,如果你将生成的序列作为输入传递并将 argmax 运算符应用于生成的概率,你将获得生成的序列。这会带来额外的生成开销,尤其是在较高的采样温度下。
2023-10-22 18:50:05
285
原创 【论文阅读笔记】GNN入门(A Gentle Introduction to Graph Neural Networks)
A Gentle Introduction to Graph Neural Networks什么是图实体之间的关系V:顶点E:边U:全局信息表示成向量数据如何表示成图?1.图片(244 * 244 * 3)之前我们都是把图片表示成三个维度的tensor,现在我们可以把每个像素当作节点,相邻的节点用边连接(感觉这样GNN数据比CNN数据包含的信息多好多)中间的是邻接矩阵,蓝色的点表示一条边(那么对于图片来说所有的邻接矩阵都长得一样呀)2.文本词表示成节点,上一个词和下一个词之
2022-05-10 21:48:15
682
原创 【动手学习pytorch笔记】37.5 BERT微调
BERT微调import jsonimport multiprocessingimport osimport torchfrom torch import nnfrom d2l import torch as d2lbert.base和bert.small地址d2l.DATA_HUB['bert.base'] = (d2l.DATA_URL + 'bert.base.torch.zip', '225d66f04cae318b841a
2022-05-08 00:04:31
1700
3
原创 【动手学习pytorch笔记】37.4 BERT微调数据集
BERT微调数据集自然语言推断任务:主要研究 假设(hypothesis)是否可以从前提(premise)中推断出来, 其中两者都是文本序列。 换言之,自然语言推断决定了一对文本序列之间的逻辑关系。这类关系通常分为三种类型:蕴涵(entailment):假设可以从前提中推断出来。矛盾(contradiction):假设的否定可以从前提中推断出来。中性(neutral):所有其他情况。斯坦福自然语言推断(SNLI)数据集由500000多个带标签的英语句子对组成的集合import osim
2022-05-07 19:11:02
919
原创 【动手学习pytorch笔记】37.3 BERT预训练
BERT预训练import torchfrom torch import nnfrom d2l import torch as d2l以下都是很常规的batch_size, max_len = 512, 64train_iter, vocab = d2l.load_data_wiki(batch_size, max_len)net = d2l.BERTModel(len(vocab), num_hiddens=128, norm_shape=[128],
2022-05-06 22:20:11
755
原创 【动手学习pytorch笔记】37.2 BERT_Dataset
BERT_Datasetimport osimport randomimport torchfrom d2l import torch as d2l#@saved2l.DATA_HUB['wikitext-2'] = ( 'https://s3.amazonaws.com/research.metamind.io/wikitext/' 'wikitext-2-v1.zip', '3c914d17d80b1459be871a5039ac23e752a53cbe')#@save
2022-05-06 19:33:34
1276
5
原创 【动手学习pytorch笔记】37.1 BERT_Model
BERT模型import torchfrom torch import nnfrom d2l import torch as d2l模型输入#@savedef get_tokens_and_segments(tokens_a, tokens_b=None): """获取输入序列的词元及其片段索引""" tokens = ['<cls>'] + tokens_a + ['<sep>'] # 0和1分别标记片段A和B segments
2022-05-04 23:05:43
577
原创 【动手学习pytorch笔记】36.Transformer实现
Transformer实现把前面几节的内容拼起来,muti-head Attention、positional encoding…import mathimport pandas as pdimport torchfrom torch import nnfrom d2l import torch as d2l基于位置的前馈网络名字挺高大上,实际就是一个单隐藏层的MLP#@saveclass PositionWiseFFN(nn.Module): """基于位置的前馈网络""
2022-04-26 01:09:43
4733
原创 【动手学习pytorch笔记】35.2.多头注意力机制
多头注意力机制import mathimport torchfrom torch import nnfrom d2l import torch as d2l实现类#@saveclass MultiHeadAttention(nn.Module): """多头注意力""" def __init__(self, key_size, query_size, value_size, num_hiddens, num_heads, dropout, b
2022-04-19 16:07:53
1180
原创 【动手学习pytorch笔记】35.自注意力和位置编码
自注意力机制和位置编码理论自注意力的自不是自己和自己做Attention,之前理解的有问题,是query,key,value都是自己。yi=f(xi,(x1,x1),...,(xn,xn))∈Rdy_i=f(x_i,(x_1,x_1),...,(x_n,x_n))\in\mathbb{R}^dyi=f(xi,(x1,x1),...,(xn,xn))∈RdCNN,RNN,Attention比较但和CNN,RNN不一样,Attention有一个问题是它并没有包含序列的位置信息,比如机器
2022-04-19 00:56:27
1132
原创 【动手学习pytorch笔记】34.带注意力机制的seq2seq
带注意力机制的seq2seq理论回忆一下seq2seq,编码器的输出了一个state给解码器,context = state[-1].repeat(X.shape[0], 1, 1),解码器吧state作为上下文对象和解码器输入一起并入丢到RNN中。seq2seq解码器class Seq2SeqDecoder(d2l.Decoder): """用于序列到序列学习的循环神经网络解码器""" def __init__(self, vocab_size, embed_size, num_
2022-04-17 00:51:03
673
4
原创 【动手学习pytorch笔记】33.Attention实现
Attention实现import mathimport torchfrom torch import nnfrom d2l import torch as d2l带掩码的softmax有些query是不应该看到后面的key的#@savedef masked_softmax(X, valid_lens): """通过在最后一个轴上掩蔽元素来执行softmax操作""" # X:3D张量,valid_lens:1D或2D张量 if valid_lens is None
2022-04-16 02:12:43
4547
1
原创 【动手学习pytorch笔记】32.注意力机制基础
注意力机制基础理论首先回忆一下卷积一、卷积基于的两个原则1、平移不变性 一个分类器,比如说我想识别小丁,那这个分类器进行分类的时候,应该是对于位置信息不敏感的,也就是说无论小丁出现在图片上的哪个位置,我用训练好的分类器,参数不变都是可以识别出哪个是小丁的2、局部性 就是我不需要看到全局的信息,只需要看到周围一部分信息就行了二、从全连接层应用上面连个原则变成卷积层先说结论: 从全连接层 hi,j=∑a,bvi,j,a,bxi+a,j+bh_{i,j}=\displaysty
2022-04-15 16:47:15
342
原创 【动手学习pytorch笔记】31.束搜索
束搜索在seq2seq中我们使用贪心算法计算句子输出的概率,输出序列但贪心可能并不是最好的,比如下面那什么样最好呢,肯定是穷举,吧所有的顺序找出来,一定能找到最优解,,词表大小是n,时间步长T,那么时间复杂度是:O(nT)O(n^T)O(nT) 实际上是n1+n2+...+nTn^1+n^2+...+n^Tn1+n2+...+nT在第i个时间步需要在大小为nin^ini的一层中遍历一遍寻找最大的,穷举法最后一层比其他层多几个幂级,所以前面省略了。穷举法开销太大,所以折中一下提出了
2022-04-14 01:26:19
1049
1
原创 【动手学习pytorch笔记】30.seq2seq
seq2seq理论编码器是一个RNN,因为任务是机器翻译,所以是双向的解码器用另外一个RNN输出之前看过Transformer对这个很熟悉需要注意的一点是,在做训练和做推理的时候是有区别的在训练时,我们是有正确的翻译的,所以解码器的每次输入都是正确的翻译而在推理时,智能用我们预测的词当作解码器RNN下一个时间步的输入那么现在我实在预测一个句子序列,而不是和之前一样预测一个词了,那么怎么衡量一个句子序列的好坏呢比如p2p_2p2,预测序列一共有AB,BB,BC,CD四种,在标签序列
2022-04-13 18:36:01
1660
原创 【动手学习pytorch笔记】29.编码器解码器架构(模板)
编码器解码器架构(模板)简单来说就是:编码器负责特征抽取,解码器负责输出,解码器也有自己的输入编码器from torch import nn#@saveclass Encoder(nn.Module): """编码器-解码器架构的基本编码器接口""" def __init__(self, **kwargs): super(Encoder, self).__init__(**kwargs) def forward(self, X, *args):
2022-04-11 23:57:22
1269
原创 【动手学习pytorch笔记】28.机器翻译数据集
机器翻译数据集import osimport torchfrom d2l import torch as d2l下载和预处理数据集#@saved2l.DATA_HUB['fra-eng'] = (d2l.DATA_URL + 'fra-eng.zip', '94646ad1522d915e7b0f9296181140edcf86a4f5')#@savedef read_data_nmt(): """载入“英语-法语”数据集""
2022-04-11 20:42:18
1350
原创 【动手学习pytorch笔记】27.双向循环神经网络
双向循环神经网络两个隐藏状态,分别计算输出,然后concat起来最后丢到输出层虽然原理上是这样,但实际实现上:正常和RNN同样的操作得到H1我们把输入反过来在丢进网络就好了,得到的输出也反过来H2把H1和H2 concat起来,得到最后的输出。import torchfrom torch import nnfrom d2l import torch as d2l# 加载数据batch_size, num_steps, device = 32, 35, d2l.try_gpu(
2022-04-11 15:55:14
901
原创 【动手学习pytorch笔记】26.深度循环神经网络
深度循环神经网咯import torchfrom torch import nnfrom d2l import torch as d2lbatch_size, num_steps = 32, 35train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)直接用框架实现vocab_size, num_hiddens, num_layers = len(vocab), 256, 2num_inputs = vo
2022-04-11 01:56:48
724
原创 【动手学习pytorch笔记】25.长短期记忆LSTM
LSTM理论输入门(决定是否适用隐藏状态) It=σ(XtWxi+Ht−1Whi+bi)I_t = \sigma(X_tW_{xi}+H_{t-1}W_{hi}+b_i)It=σ(XtWxi+Ht−1Whi+bi)遗忘门(将值朝0减少) Ft=σ(XtWxf+Ht−1Whf+bf)F_t = \sigma(X_tW_{xf}+H_{t-1}W_{hf}+b_f)Ft=σ(XtWxf+Ht−1Whf+bf)输出门(决定是否适用隐藏状态)
2022-04-11 00:39:43
299
原创 【动手学习pytorch笔记】24.门控循环单元GRU
GRU序列中并不是所有信息都同等重要,为了记住重要的信息和遗忘不重要的信息,最早的方法是”长短期记忆”(long-short-term memory,LSTM),这节门控循环单元(gated recurrent unit,GRU)是一个稍微简化的变体,通常能够提供同等的效果, 并且计算的速度明显更快。理论两个门(和隐藏状态类似)重置门(虫豸们~) Rt=σ(XtWxr+Ht−1Whr+br)R_t = \sigma(X_tW_{xr}+H_{t-1}W_{hr}+b_r)Rt=σ(XtWxr
2022-04-10 18:45:03
1215
原创 【动手学习pytorch笔记】23.RNN简易实现
RNN简易实现import torchfrom torch import nnfrom torch.nn import functional as Ffrom d2l import torch as d2lbatch_size, num_steps = 32, 35train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)一样的加载 train_iter,vocabnum_hiddens = 256rn
2022-04-10 00:31:44
500
原创 【动手学习pytorch笔记】22.RNN从零实现
RNN从零实现%matplotlib inlineimport mathimport torchfrom torch import nnfrom torch.nn import functional as Ffrom d2l import torch as d2lbatch_size, num_steps = 32, 35train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)上一节的函数load_da
2022-04-09 20:29:28
2321
原创 【动手学习pytorch笔记】21.语言模型
语言模型理论基础给定文本序列x1,...,xTx_1,...,x_Tx1,...,xT,语言模型的目标是估计联合概率p(x1,...,xT)p(x_1,...,x_T)p(x1,...,xT)它的应用包括做预训练模型(BERT,GPT)生成文本,给定前面几个词,不断使用前面给的词预测下面的词,和前面预测sin函数一样给定多个序列,判断哪个序列更常见使用计数来建模 p(x,x′)=p(x)p(x′∣x)=n(x)nn(x,x′)n(x)p(x,x^{'}) = p(x)p(x
2022-04-07 21:36:44
899
原创 【动手学习pytorch笔记】20.文本预处理
文本预处理import collectionsimport refrom d2l import torch as d2l读取数据集#@saved2l.DATA_HUB['time_machine'] = (d2l.DATA_URL + 'timemachine.txt', '090b5e7e70c295757f55df93cb0a180b9691891a')def read_time_machine(): #@save
2022-04-07 00:03:58
2248
原创 【动手学习pytorch笔记】19.序列模型
序列模型%matplotlib inlineimport torchfrom torch import nnfrom d2l import torch as d2lT = 1000 # 总共产生1000个点time = torch.arange(1, T + 1, dtype=torch.float32)x = torch.sin(0.01 * time) + torch.normal(0, 0.2, (T,))d2l.plot(time, [x], 'time', 'x', xlim=
2022-04-06 14:19:30
1425
原创 【动手学习pytorch笔记】18.微调
微调在大样本数据集上进行预训练,再在子任务上进行微调,这样可以使我的可学习参数不用从头开始学习,微调也是CV领域中很重要的一个技术,NLP也在向这个方向发展,也是因为微调,深度学习才在工业上取得了比较好的效果。%matplotlib inlineimport osimport torchimport torchvisionfrom torch import nnfrom d2l import torch as d2ltrain_imgs = torchvision.datasets.Ima
2022-04-04 17:27:38
979
原创 【动手学习pytorch笔记】17.数据增广
图像增广%matplotlib inlineimport torchimport torchvisionfrom torch import nnfrom d2l import torch as d2l原图d2l.set_figsize()img = d2l.Image.open('../img/cat1.jpg')d2l.plt.imshow(img);大多数图像增广方法都具有一定的随机性。为了便于观察图像增广的效果,我们下面定义辅助函数apply。 此函数在输入图像img上多次运
2022-04-02 23:09:00
700
原创 【动手学习pytorch笔记】16.ResNet
ResNet残差块结构import torchfrom torch import nnfrom torch.nn import functional as Ffrom d2l import torch as d2lclass Residual(nn.Module): #@save def __init__(self, input_channels, num_channels,use_1x1conv=False, strides=1): super().__init
2022-04-01 01:11:50
428
原创 【动手学习pytorch笔记】15.批量归一化 BatchNorm(BN)
BatchNorm(BN)遇到了问题损失函数在最后,后面的层训练较快数据输入在最底部前面的层训练的慢前面的层一变,所有都得跟着变最后的层需要重新学习多次导致收敛变慢我们可以在学习底部层的时候避免变化顶部层吗?所以提出了批量归一化BatchNorm(BN)固定小批量里的均值和方差μB=1∣B∣∑i∈BxiσB2=1∣B∣∑i∈B(xi−μB)2+ϵ\mu_B = \frac{1}{|B|}\sum_{i\in{B}}x_i \\σ_B^2 = \
2022-03-29 23:21:03
1147
原创 【动手学习pytorch笔记】14.GoogLeNet
GoogLeNet前面我们看了那么多卷积神经网络构建的方式,有选3 * 3卷积核的,有5 * 5卷积核的,有7 * 7卷积核的;有maxpooling,有avgpooling,那么哪种比较好呢?GoogLeNet:我全都要Inception块盗梦空间Inception块只改变通道数,不改变图片大小蓝色的块用来抽取图片信息白色块用来改变通道数输入 192 * 28 * 28通道数在每层发生的变化情况回忆一下,一组卷积核处理一个输入:一个卷积核处理一个通道,最后结果相加得到一个通道,多
2022-03-29 16:50:11
2068
原创 【动手学习pytorch笔记】13.NiN
NiN因为全连接层的参数太多了,NiN块以一个普通卷积层开始,后面是两个1×1的卷积层,相当于参数首先的全连接层。这两个1×1卷积层充当带有ReLU激活函数的逐像素全连接层。 第一层的卷积窗口形状通常由用户设置。 随后的卷积窗口形状固定为1×1。模型结构import torchfrom torch import nnfrom d2l import torch as d2ldef nin_block(in_channels, out_channels, kernel_size, stride
2022-03-27 00:40:02
224
原创 【动手学习pytorch笔记】12.VGG
VGG和AlexNet差不多,但VGG提出了块的概念,一个块包含几个卷积层,激活函数和池化层,使模型结构更加规范模型结构import torchfrom torch import nnfrom d2l import torch as d2ldef vgg_block(num_convs, in_channels, out_channels): layers = [] for _ in range(num_convs): layers.append(nn.C
2022-03-27 00:11:55
198
原创 【动手学习pytorch笔记】11.AlexNet分类fashion_mnist
AlexNet模型结构左侧LeNet,右侧AlexNet。形式上是差不多的,但模型大小大了很多,量变产生了质变,花了人类20年的时间。import torchfrom torch import nnfrom d2l import torch as d2lnet = nn.Sequential( # 这里,我们使用一个11*11的更大窗口来捕捉对象。 # 同时,步幅为4,以减少输出的高度和宽度。 # 另外,输出通道的数目远大于LeNet nn.Conv2d
2022-03-26 03:49:12
1805
原创 【动手学习pytorch笔记】10.卷积神经网络LeNet分类fashion_mnist
LeNet模型结构模型构建import torchfrom torch import nnfrom d2l import torch as d2lnet = nn.Sequential( nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
2022-03-25 01:55:37
374
原创 【动手学习pytorch笔记】9.卷积神经网络基础(卷积层,填充和步长,多输入输出通道,池化层)
卷积层二维互相关运算import torchfrom torch import nnfrom d2l import torch as d2ldef corr2d(X, K): """计算二维互相关运算""" h, w = K.shape Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1)) for i in range(Y.shape[0]): for j in range(Y.shap
2022-03-24 00:15:21
2900
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人