高效流式语言模型与注意力汇聚器这个仓库已经实现了它:paperattention_sinksstreaming-llm
w3nuxt5m1#
我认为attention_sinks项目是一种非常有前途的技术,可以用于提高模型在长序列上的推理能力,而无需使用alibi等方法进行训练。
6za6bjd02#
Ya,有效地去除了max_new_tokens,因此生成可以继续进行,直到模型预测到EOS标记,而不是仅仅因为输入的令牌计数过大而截断。
aelbi1ox3#
你好@WoosukKwon和@zhuohan123,我将要处理这个功能,并想询问关于注入注意力汇聚逻辑的问题。我们需要能够指定它并设置注意力汇聚令牌的数量。LLM的API允许传递*kwargs https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/llm.py#L74 额外的配置,并在以后使用此配置支持的每个模型中。从你的Angular 来看,这是否可以接受?
*kwargs
dgtucam14#
请注意,https://github.com/tomaarsen/attention_sinks有一个第三方版本,非常干净,并且在比原始论文的github上更广泛的模型集合上运行。这就是h2oGPT使用的。仅供参考。
nkkqxpd95#
Hi @WoosukKwon 和 @zhuohan123,在开始我的更改之前,我想与您讨论一下关于Attention Sink的缓存块设计。从某种程度上说,它与Mistral's circular buffer对于无尽的修剪相似。但是我们有一个显著的不同之处——Attention Sink保留了尾部的4个令牌(左侧),并且我们根本不想移动KV缓存数据。因此,Mistral执行以下操作(假设我们只有4个块(每个块4个令牌)和点时间t_i仅表示为i以简洁起见),以及x——空槽位。| Blocks -> | Block 0 | Block 1 | Block 2 | Block 3 || ------------ | ------------ | ------------ | ------------ | ------------ || Initial state | 0, 1, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, x || Added token 15 | 0, 1, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, 15 || Added token 16 | 16, 1, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, 15 || Added token 17 | 16, 17, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, 15 |注意力可以通过旋转块计算出来,即:
t_i
i
x
16, **17**, **2**, **3** | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, **15** | 16, **17**
这样我们就可以像初始实现那样在连续的元素上计算注意力。请确认以上内容是否正确。Attention Sink保留了一些“尾部”令牌,根据来自#1304(评论)的图片。所以它应该是(假设我们只使用2个注意力sink令牌)| Blocks -> | Block 0 | Block 1 | Block 2 | Block 3 || ------------ | ------------ | ------------ | ------------ | ------------ || Initial state | 0, 1, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, x || Added token
fafcakar6#
嘿,@sh1ng,我在想你是否已经开始实施注意力汇聚功能了。如果你已经开始实施了,是否有可能开启一个PR?我对这个功能很感兴趣,想要贡献一份力量。
pdtvr36n7#
我倾向于使用第三种方法,并进行一些额外的修改:
\n
BlockSize
xlpyo6sf8#
我倾向于使用第3种方法,并进行一些额外的修改:
块 ->块 0块 1块 2块 3旋转链中的块注解初始状态0, 1, 2, 34, 5, 6, 78, 9, 10, 1112, 13, 14, xNA, NA,(1st),(2nd), 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14prepend [NA, NA,(1st),(2nd) ]添加了标记 150, 1, 2, 34, 5, 6, 78, 9, 10, 1112, 13, 14, 15
(2nd), NA, NA,(1st),(2nd), 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15prepend 并融合 [(2nd), NA, NA,(1st)]添加了标记 16
16, 1, 2, 3
4, 5, 6, 78, 9, 10, 1112, 13, 14, 15NA, NA,(1st),(2nd), 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1415prepend 并融合 [(1st),(2nd), NA
dfuffjeb9#
我认为注意力沉降器大致相当于softmax1,如此处所述:https://www.evanmiller.org/attention-is-off-by-one.html。不确定在推理时是否可以在不重新训练模型的情况下应用softmax1。
softmax1
9条答案
按热度按时间w3nuxt5m1#
我认为attention_sinks项目是一种非常有前途的技术,可以用于提高模型在长序列上的推理能力,而无需使用alibi等方法进行训练。
6za6bjd02#
Ya,有效地去除了max_new_tokens,因此生成可以继续进行,直到模型预测到EOS标记,而不是仅仅因为输入的令牌计数过大而截断。
aelbi1ox3#
你好@WoosukKwon和@zhuohan123,
我将要处理这个功能,并想询问关于注入注意力汇聚逻辑的问题。我们需要能够指定它并设置注意力汇聚令牌的数量。
LLM的API允许传递
*kwargs
https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/llm.py#L74 额外的配置,并在以后使用此配置支持的每个模型中。从你的Angular 来看,这是否可以接受?dgtucam14#
请注意,https://github.com/tomaarsen/attention_sinks有一个第三方版本,非常干净,并且在比原始论文的github上更广泛的模型集合上运行。这就是h2oGPT使用的。仅供参考。
nkkqxpd95#
Hi @WoosukKwon 和 @zhuohan123,
在开始我的更改之前,我想与您讨论一下关于Attention Sink的缓存块设计。
从某种程度上说,它与Mistral's circular buffer对于无尽的修剪相似。但是我们有一个显著的不同之处——Attention Sink保留了尾部的4个令牌(左侧),并且我们根本不想移动KV缓存数据。
因此,Mistral执行以下操作(假设我们只有4个块(每个块4个令牌)和点时间
t_i
仅表示为i
以简洁起见),以及x
——空槽位。| Blocks -> | Block 0 | Block 1 | Block 2 | Block 3 |
| ------------ | ------------ | ------------ | ------------ | ------------ |
| Initial state | 0, 1, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, x |
| Added token 15 | 0, 1, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, 15 |
| Added token 16 | 16, 1, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, 15 |
| Added token 17 | 16, 17, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, 15 |
注意力可以通过旋转块计算出来,即:
这样我们就可以像初始实现那样在连续的元素上计算注意力。请确认以上内容是否正确。
Attention Sink保留了一些“尾部”令牌,根据来自#1304(评论)的图片。所以它应该是(假设我们只使用2个注意力sink令牌)
| Blocks -> | Block 0 | Block 1 | Block 2 | Block 3 |
| ------------ | ------------ | ------------ | ------------ | ------------ |
| Initial state | 0, 1, 2, 3 | 4, 5, 6, 7 | 8, 9, 10, 11 | 12, 13, 14, x |
| Added token
fafcakar6#
嘿,@sh1ng,我在想你是否已经开始实施注意力汇聚功能了。如果你已经开始实施了,是否有可能开启一个PR?我对这个功能很感兴趣,想要贡献一份力量。
pdtvr36n7#
我倾向于使用第三种方法,并进行一些额外的修改:
\n
*4 偏移量的BlockSize
系统块。xlpyo6sf8#
我倾向于使用第3种方法,并进行一些额外的修改:
\n
*4 的所有可能旋转分配BlockSize
系统块。块 ->
块 0
块 1
块 2
块 3
旋转链中的块
注解
初始状态
0, 1, 2, 3
4, 5, 6, 7
8, 9, 10, 11
12, 13, 14, x
NA, NA,
(1st),
(2nd), 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
prepend [NA, NA,
(1st),
(2nd) ]
添加了标记 15
0, 1, 2, 3
4, 5, 6, 7
8, 9, 10, 11
12, 13, 14, 15
(2nd), NA, NA,
(1st),
(2nd), 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
prepend 并融合 [
(2nd), NA, NA,
(1st)]
添加了标记 16
16, 1, 2, 3
4, 5, 6, 7
8, 9, 10, 11
12, 13, 14, 15
NA, NA,
(1st),
(2nd), 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1415
prepend 并融合 [
(1st),
(2nd), NA
dfuffjeb9#
我认为注意力沉降器大致相当于
softmax1
,如此处所述:https://www.evanmiller.org/attention-is-off-by-one.html。不确定在推理时是否可以在不重新训练模型的情况下应用softmax1。