2023年8月14日星期一

Megatron-LM实战

 

docker run --gpus all -dit  --name luosi-me --network host  -v /mnt/storage01/users/luosi/megatron:/workspace/megatron -v /mnt/storage01/users/luosi/dataset:/workspace/dataset -v  /mnt/storage01/users/luosi/checkpoints:/workspace/checkpoints hub.bilibili.co/aphrodite/nvidia-pytorch:22.12u-py3 /bin/bash --login

https://github.com/NVIDIA/Megatron-LM


HuggingFace

https://huggingface.co/blog/megatron-training

https://huggingface.co/blog/bloom-megatron-deepspeed


NLP课程:

https://huggingface.co/learn/nlp-course/chapter0/1?fw=pt



2023年8月13日星期日

Transformer入门

 

https://www.youtube.com/watch?v=aJRsr39F4dI&t=1s

Transformer

transformer也是一种Seq2Seq模型,它有一个encoder和decoder,它不是RNN。其组成部分包含attention和self-attention。

左边是encoder,右边是decoder,这是Seq2Seq模型的典型实现,encoder的输出作为decoder每一个block的输入。

Encoder

encoder由6个block组成:
encoder的每一个block包含一个self-attention层和全连接层:
self-attention层之间由于输入和输出维度相同,所以可以stack起来,其中计算每一个输出向量u时使用相同的WU参数矩阵:

注意,与self-attention不同,这里使用多头自注意力模型multi-head self-atttention。self-attention其实是单头的,多头与它的区别在于使用多组参数矩阵Query、Key、Value(多个头之间不共享这些参数矩阵,从而增加了参数数量),其输出是把多个头的输出concat起来,如果单个头的输出是d*m维的,则多头的输出是(ld)*m维的:

多头注意力模型也类似,把多个单头注意力模型的输出concat起来


Decoder

如开头所述,decoder包含6个block,输入是encoder的输出和X',每一个block的输入是encoder的输出和(X'或者上一个decoder block的输出),其组成部分为一个self-attention层、一个attention层和一个全连接层:


self-attention层是多头的,attention层也是多头的,如前面所述:
其中全连接层使用参数矩阵Ws:












2023年8月10日星期四

Attention和Self-Attention入门

 

wangshusen的课件:

https://github.com/wangshusen/DeepLearning

本文只介绍注意力和自注意力机制,这是transformer模型的核心组成部分。

注意力机制Attention

Attention机制,对于Seq2Seq模型进行优化,解决遗忘问题:

https://www.youtube.com/watch?v=XhWdv7ghmQQ&list=PLvOO0btloRnuTUGN4XqO85eKPeFSZsEqK&index=9


Seq2Seq模型中,Encoder到Decoder之间只有S0,导致无法进行长期记忆:



Attention机制的办法就是记住Encoder中从h1到hm之间的所有hidden state,代价是更多的计算量。
具体来说,就是增加一个context向量,对h1到hm进行加权平均:
其中权重αi通过hi与s0计算得到(具体计算方式后面介绍):
具体计算αi和c0的过程为:

有了c0之后,计算s1就比较简单了,相比RNN来说,就是加上了c0作为额外的输入:

计算完s1之后,再计算s2时,不能复用之前计算的αi,而是要根据s1重新计算αi,根据αi计算c1,然后以c1作为额外输入,计算s2:



以此类推,直到计算出所有Decoder。

计算hi与si的权重

以hi和s0作为输入为例,现在典型的实现方式是为hi和s0分别构造两个矩阵Wk和WQ,先把hi和s0做转换,然后把转换的两个向量做内积得到数值,最后使用softmax做归一:

小结

上面计算context向量时直接使用了α乘以hi,主流的做法其实是乘以Value向量:
  • 根据sj计算Query,根据hi计算Key
  • 计算α向量
  • 根据sj计算Value,并使用α向量加权计算出





自注意力机制Self-Attention

Attention机制不止应用于Seq2Seq,也可以应用于RNN模型,这就是self-attention(如果只有1个RNN网络)。
开始的时候,把contxt向量c0和状态h0都初始化为0:
由于RNN里面只有hi,区别于前面attention计算时使用si,计算αi时只使用已经计算的hi与当前的状态h。
只是由于c0和h0都是0,计算h1就比较简单:


计算出h1后,计算c1为h1:
使用c1和x2为输入,计算h2:
这个时候开始,计算context向量就需要先计算α了(之前是因为c0=0):
计算出α,就可以计算出c2:
计算出c2后,以c2和x3为输入,可以计算出h3,此时有了h1、h2、h3就可以计算出α向量,并且计算出c3,以此类推。

Transformer模型

Attention层

把Attention机制从RNN中剥离,是不是也可以实现seq2seq呢,答案是的。
通过研究RNN+Attention机制发现,其核心逻辑是把encoder转换为Key和Value,把decoder转换为Query:



基于Key、Value和Query,计算α和context vector:
最终计算出所有context向量,组合起来作为输出:

小结

attention层的输入包括Encoder和Decoder两个向量,输出是C,包含三个参数矩阵Q、K和V。

Self-Attention

不同于注意力模型,self-attention不用于seq2seq,并且输入的encoder和decoder都是相同的,每个输入转换为Query、Key和Value:

除此之外,计算过程类似attention,即先计算α,然后计算context向量:

把所有context向量组合为C,每个c与所有输入都相关:

我的理解

自注意力机制,通过三个参数矩阵,捕捉输入序列之间的关联信息,是一种压缩和萃取机制。
是否还有其他方式捕捉这种信息呢?

























2022年3月19日星期六

MLOps平台简介

 


Zomato

这家公司应该算是印度的美团。

https://www.youtube.com/watch?v=0-3ES1vzW14

这个材料详细介绍了各个模块的技术选型,虽然口音有点重。

整体架构

包括如下几个主要部分:
  • 应用调用Predict接口,请求到Feature Enricher模块。
  • Feature Enricher模块查询Feature Store获取特征,并请求Inference平台获取预测结果。
  • data scientists通过model manager管理模型,并同步到Inference平台。
  • Feature store存储特征,包括实时和静态两种,实时特征经过实时计算产出。

使用Flink计算实时特征

对比了Spark Streaming、Kafka Streams和Flink,最终选择Flink,理由是社区支持度高、方便设置以及job粒度隔离性好。

使用基于Redis集群的ElastiCache存储实时特征

要求高的读写吞吐、低延迟,支持分库和扩副本,以及failover。


使用Cassandra存储静态特征

要求支持最终一致性和高的读吞吐,从redis、cassandra和dynamoDB中选择了Cassandra,因为它性价比高,该团队对它也有使用经验。

ML Gateway作为feature enricher


选择MLFlow管理模型

对比MLFlow和Kubeflow,选择MLFlow,因为Kubeflow完全基于k8s而该团队没有相关经验,而MLFlow与AWS Sagemaker无缝结合。


AWS Sagemaker作为inference平台




最终技术选型


Etsy


这篇文章更有意思的一点,是其公司对MLOps的技术选型从自研到拥抱开源的过程和思考。之所以自研,是因为当时业界的能力还不足,而当业界的能力成熟之后,一个突出的问题是新加入的成员(包括用户)需要使用自研的工具,尤其是对于业务发展比较快的公司,这就面临一个选择的问题,是继续沿用自研的思路,还是拥抱开源。
答案是开源。
那么开源的技术选型是什么呢,跟Zotamo这家公司相反,etsy这家公司采用的是GCP体系,包括Dataflow、Vertex AI、Kubeflow、tensorflow、tfx等。

























参考资料