<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ymk1998的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ymk1998</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ymk1998]]></copyright><item><title><![CDATA[周报8_YMK]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/134764153</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/134764153</guid><author>ymk1998</author><pubDate>Sun, 03 Dec 2023 13:56:02 +0800</pubDate><description><![CDATA[具体来讲，已知前向计算时会把所有权重 All-Gather 起来，之后便对权重进行切片，切成多少片可以根据集群配置进行调节，一般情况下会把权重切片尽量限制在单个节点内部，也就是一个节点有多少张卡，就切成多少片，因为每个节点都拥有完整的权重，在反向计算梯度时只需要在节点内部执行 All-Gather 通信，完全避免了跨节点的通信。为了减少量化和反量化的次数（Q+D），可如上图右所示，首先对全部梯度量化，然后所有 GPU 进行一次 All-to-All 通信，最后执行反量化操作。（用GPU显存换取通信效率）]]></description><category></category></item><item><title><![CDATA[周报6_YMK]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/134539015</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/134539015</guid><author>ymk1998</author><pubDate>Tue, 21 Nov 2023 19:18:40 +0800</pubDate><description><![CDATA[的思想来加快生成速度，因为扩散模型在生成过程中需要一个step一个step来去噪得到图片，所以或许也可以用几个小模型当做美杜莎头打草稿，经过几个step后用原模型校验一下，循环这个过程达到加快生成过程的目的。本周主要在看代码：看Medusa头的代码发现不是很了解base_model那部分，所以又去看了llama2的代码和一些相关博客。他的模型很小，是简单的CNN，700 万个参数（28.15 MB ）。重写了一部分佛山中医学院项目的代码，更规范一些。一下，循环这个过程达到加快生成过程的目的。]]></description><category></category></item><item><title><![CDATA[周报5_YMK]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/134397471</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/134397471</guid><author>ymk1998</author><pubDate>Tue, 14 Nov 2023 14:02:30 +0800</pubDate><description><![CDATA[回顾上周讲的 FlashDecoding，在 FlashAttention 的基础上引入了新的并行维度：keys/values的序列长度，然而，在每一个块的内部，计算过程还是同步的（主要是局部最大值）。由于 Tensor Core 的优化通常期望 M 和 N 的维度是 8 的倍数，所以在解码阶段，如果 M 维度较小，填充零以满足 Tensor Core 期望的维度可能导致计算利用率下降。于是作者进行了统计，如下图所示。的选择是很困难的，极易造成精度的下降，另一个是该优化未必能带来实际的加速。]]></description><category></category></item><item><title><![CDATA[周报4_YMK]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/134233381</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/134233381</guid><author>ymk1998</author><pubDate>Sun, 05 Nov 2023 19:22:52 +0800</pubDate><description><![CDATA[片上SRAM比HBM快得多，但比HBM小得多，在计算方面，使用Tensor Core的BFLOAT16 的理论峰值吞吐量为 312 TFLOPS。在 Flash-Decoding 中，它在两个级别上被使用：在分块内部（类似 FlashAttention），以及跨分块进行最终的归约计算。在 self-attention 中，计算速度比内存速度快得多，因此进程(操作)越来越多地受到内存(HBM)访问的瓶颈。，每次进行部分计算，确保这些计算结果能在SRAM内进行交互，待得到对应的结果后再进行输出。]]></description><category></category></item><item><title><![CDATA[YMK_周报2]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/133975946</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/133975946</guid><author>ymk1998</author><pubDate>Sun, 22 Oct 2023 18:50:05 +0800</pubDate><description><![CDATA[在另一个极端，当Temperature设置为远大于 1 的值时，采样将是混乱的，从均匀分布中抽取。因为Temperature越大，LLM改正的情况就会越多，草稿模型生成的token的可信长度就会减少。在文本生成期间，典型的迭代包括模型接收最新生成的 token 作为输入，加上所有其他先前输入的缓存内部计算，再返回下一个 token 得概率。在贪心解码的特殊情况下，如果你将生成的序列作为输入传递并将 argmax 运算符应用于生成的概率，你将获得生成的序列。这会带来额外的生成开销，尤其是在较高的采样温度下。]]></description><category></category></item><item><title><![CDATA[【论文阅读笔记】GNN入门（A Gentle Introduction to Graph Neural Networks）]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124698208</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124698208</guid><author>ymk1998</author><pubDate>Tue, 10 May 2022 21:48:15 +0800</pubDate><description><![CDATA[A Gentle Introduction to Graph Neural Networks
什么是图
实体之间的关系


V：顶点
E：边
U：全局信息

表示成向量

数据如何表示成图？
1.图片（244 * 244 * 3）
之前我们都是把图片表示成三个维度的tensor，现在我们可以把每个像素当作节点，相邻的节点用边连接（感觉这样GNN数据比CNN数据包含的信息多好多）

中间的是邻接矩阵，蓝色的点表示一条边（那么对于图片来说所有的邻接矩阵都长得一样呀）
2.文本
词表示成节点，上一个词和下一个词之]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】37.5 BERT微调]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124641889</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124641889</guid><author>ymk1998</author><pubDate>Sun, 08 May 2022 00:04:31 +0800</pubDate><description><![CDATA[BERT微调
import json
import multiprocessing
import os
import torch
from torch import nn
from d2l import torch as d2l

bert.base和bert.small地址
d2l.DATA_HUB['bert.base'] = (d2l.DATA_URL + 'bert.base.torch.zip',
                             '225d66f04cae318b841a]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】37.4 BERT微调数据集]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124637551</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124637551</guid><author>ymk1998</author><pubDate>Sat, 07 May 2022 19:11:02 +0800</pubDate><description><![CDATA[BERT微调数据集
自然语言推断任务：
主要研究 假设（hypothesis）是否可以从前提（premise）中推断出来， 其中两者都是文本序列。 换言之，自然语言推断决定了一对文本序列之间的逻辑关系。这类关系通常分为三种类型：

蕴涵（entailment）：假设可以从前提中推断出来。
矛盾（contradiction）：假设的否定可以从前提中推断出来。
中性（neutral）：所有其他情况。

斯坦福自然语言推断（SNLI）数据集
由500000多个带标签的英语句子对组成的集合
import os
im]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】37.3 BERT预训练]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124620235</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124620235</guid><author>ymk1998</author><pubDate>Fri, 06 May 2022 22:20:11 +0800</pubDate><description><![CDATA[BERT预训练
import torch
from torch import nn
from d2l import torch as d2l

以下都是很常规的
batch_size, max_len = 512, 64
train_iter, vocab = d2l.load_data_wiki(batch_size, max_len)

net = d2l.BERTModel(len(vocab), num_hiddens=128, norm_shape=[128],
                 ]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】37.2 BERT_Dataset]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124617066</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124617066</guid><author>ymk1998</author><pubDate>Fri, 06 May 2022 19:33:34 +0800</pubDate><description><![CDATA[BERT_Dataset
import os
import random
import torch
from d2l import torch as d2l

#@save
d2l.DATA_HUB['wikitext-2'] = (
    'https://s3.amazonaws.com/research.metamind.io/wikitext/'
    'wikitext-2-v1.zip', '3c914d17d80b1459be871a5039ac23e752a53cbe')

#@save]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】37.1 BERT_Model]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124579760</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124579760</guid><author>ymk1998</author><pubDate>Wed, 04 May 2022 23:05:43 +0800</pubDate><description><![CDATA[BERT模型
import torch
from torch import nn
from d2l import torch as d2l

模型输入
#@save

def get_tokens_and_segments(tokens_a, tokens_b=None):
    """获取输入序列的词元及其片段索引"""
    tokens = ['&lt;cls&gt;'] + tokens_a + ['&lt;sep&gt;']

    # 0和1分别标记片段A和B

    segments ]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】36.Transformer实现]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124418541</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124418541</guid><author>ymk1998</author><pubDate>Tue, 26 Apr 2022 01:09:43 +0800</pubDate><description><![CDATA[Transformer实现
把前面几节的内容拼起来，muti-head Attention、positional encoding…
import math
import pandas as pd
import torch
from torch import nn
from d2l import torch as d2l

基于位置的前馈网络

名字挺高大上，实际就是一个单隐藏层的MLP

#@save
class PositionWiseFFN(nn.Module):
    """基于位置的前馈网络""]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】35.2.多头注意力机制]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124276382</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124276382</guid><author>ymk1998</author><pubDate>Tue, 19 Apr 2022 16:07:53 +0800</pubDate><description><![CDATA[多头注意力机制
import math
import torch
from torch import nn
from d2l import torch as d2l

实现类
#@save
class MultiHeadAttention(nn.Module):
    """多头注意力"""
    def __init__(self, key_size, query_size, value_size, num_hiddens,
                 num_heads, dropout, b]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】35.自注意力和位置编码]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124263470</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124263470</guid><author>ymk1998</author><pubDate>Tue, 19 Apr 2022 00:56:27 +0800</pubDate><description><![CDATA[自注意力机制和位置编码
理论
自注意力的自不是自己和自己做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​))∈Rd
CNN,RNN,Attention比较

但和CNN，RNN不一样，Attention有一个问题是它并没有包含序列的位置信息，比如机器]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】34.带注意力机制的seq2seq]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124223784</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124223784</guid><author>ymk1998</author><pubDate>Sun, 17 Apr 2022 00:51:03 +0800</pubDate><description><![CDATA[带注意力机制的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_]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】33.Attention实现]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124207473</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124207473</guid><author>ymk1998</author><pubDate>Sat, 16 Apr 2022 02:12:43 +0800</pubDate><description><![CDATA[Attention实现
import math
import torch
from torch import nn
from d2l import torch as d2l

带掩码的softmax
有些query是不应该看到后面的key的
#@save
def masked_softmax(X, valid_lens):
    """通过在最后一个轴上掩蔽元素来执行softmax操作"""
    # X:3D张量，valid_lens:1D或2D张量
    if valid_lens is None]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】32.注意力机制基础]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124198529</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124198529</guid><author>ymk1998</author><pubDate>Fri, 15 Apr 2022 16:47:15 +0800</pubDate><description><![CDATA[注意力机制基础
理论
首先回忆一下卷积
一、卷积基于的两个原则
1、平移不变性
​	 一个分类器，比如说我想识别小丁，那这个分类器进行分类的时候，应该是对于位置信息不敏感的，也就是说无论小丁出现在图片上的哪个位置，我用训练好的分类器，参数不变都是可以识别出哪个是小丁的
2、局部性
​	就是我不需要看到全局的信息，只需要看到周围一部分信息就行了
二、从全连接层应用上面连个原则变成卷积层
先说结论：
​		从全连接层				hi,j=∑a,bvi,j,a,bxi+a,j+bh_{i,j}=\displaysty]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】31.束搜索]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124162145</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124162145</guid><author>ymk1998</author><pubDate>Thu, 14 Apr 2022 01:26:19 +0800</pubDate><description><![CDATA[束搜索
在seq2seq中我们使用贪心算法计算句子输出的概率，输出序列
但贪心可能并不是最好的，比如下面

那什么样最好呢，肯定是穷举，吧所有的顺序找出来，一定能找到最优解，，词表大小是n，时间步长T，那么时间复杂度是：O(nT)O(n^T)O(nT)          实际上是n1+n2+...+nTn^1+n^2+...+n^Tn1+n2+...+nT在第i个时间步需要在大小为nin^ini的一层中遍历一遍寻找最大的，穷举法最后一层比其他层多几个幂级，所以前面省略了。
穷举法开销太大，所以折中一下提出了]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】30.seq2seq]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124154756</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124154756</guid><author>ymk1998</author><pubDate>Wed, 13 Apr 2022 18:36:01 +0800</pubDate><description><![CDATA[seq2seq
理论

编码器是一个RNN，因为任务是机器翻译，所以是双向的
解码器用另外一个RNN输出
之前看过Transformer对这个很熟悉
需要注意的一点是，在做训练和做推理的时候是有区别的

在训练时，我们是有正确的翻译的，所以解码器的每次输入都是正确的翻译
而在推理时，智能用我们预测的词当作解码器RNN下一个时间步的输入
那么现在我实在预测一个句子序列，而不是和之前一样预测一个词了，那么怎么衡量一个句子序列的好坏呢


比如p2p_2p2​，预测序列一共有AB,BB,BC,CD四种，在标签序列]]></description><category></category></item><item><title><![CDATA[【动手学习pytorch笔记】29.编码器解码器架构（模板）]]></title><link>https://blog.youkuaiyun.com/ymk1998/article/details/124113024</link><guid>https://blog.youkuaiyun.com/ymk1998/article/details/124113024</guid><author>ymk1998</author><pubDate>Mon, 11 Apr 2022 23:57:22 +0800</pubDate><description><![CDATA[编码器解码器架构(模板)
简单来说就是：编码器负责特征抽取，解码器负责输出，解码器也有自己的输入

编码器
from torch import nn


#@save
class Encoder(nn.Module):
    """编码器-解码器架构的基本编码器接口"""
    def __init__(self, **kwargs):
        super(Encoder, self).__init__(**kwargs)

    def forward(self, X, *args):
  ]]></description><category></category></item></channel></rss>