lancopku / label-words-are-anchors

Repository for Label Words are Anchors: An Information Flow Perspective for Understanding In-Context Learning
MIT License
152 stars 13 forks source link

关于llama2-7b在3.1Anchor Re-weighting 相应代码的修改 #21

Closed Cooperx521 closed 8 months ago

Cooperx521 commented 8 months ago

作者您好,我目前正在尝试去对llama2-7b做一些attention map的重加权,也就是类似的直接乘上一个系数,但是关于具体实现遇到一些问题,我现在正在想要尝试两种方式:1. 直接重写modeling_llama.py中的attention block,稍微改写attention forward计算,再去载入预训练参数。2. 套用类似于您代码中GPT2AttentionerManager的方案,先载入参数,再加attention_adapter,但是这里遇到一个问题,就是

            attention_adapter = AttentionAdapter(n_demo=self.n_demo, device=self.device,
                                                 n_head=self.n_head)
            layer.attn._attn = partial(gpt2_attn, layer.attn,
                                       attention_adapter=attention_adapter

这里我找了一下llama的框架好像没有这个函数 layer.attn._attn,想问一下怎么解决。 因为是代码小白,所以想请教一下您上面两种哪种更好或者更可行,不知道有什么潜在的问题

leanwang326 commented 8 months ago

我觉得可以重写一下,重写一下也应该方便一些。我当时只是为了方便调试写成这样了(因为如果改modeling_llama的话,如果需要不同的重加权策略可能就得写出几个modeling_llama.py

Cooperx521 commented 8 months ago

嗯嗯,谢谢作者,是不是可以理解为你的代码复用性更强一些,很多模型都可以用,但是因为llama没有attn函数,所以重新写方便一些

Cooperx521 commented 8 months ago

@leanwang326 作者您好,我今天在修改代码的时候发现llama本身是有三种attention

LLAMA_ATTENTION_CLASSES = {
    "eager": LlamaAttention,
    "flash_attention_2": LlamaFlashAttention2,
    "sdpa": LlamaSdpaAttention,
}

模型原本用的是FlashAttention,但是我看到FlashAttention里面接口比较复杂不太好直接reweighting,我想改成sdpa,但是不知道性能是否会受影响,所以想要向您请教一下怎么解决,想知道这三种对于性能是不是影响不大

leanwang326 commented 8 months ago

用eager/sdpa大概不会有事,就是会慢一些吧(如果是说数值精度上的影响会不会导致一点性能差异的话,这个我没试过,不确定

Cooperx521 commented 8 months ago

嗯嗯,谢谢您的帮助!我仔细看了一下实现的功能应该是一样的,我直接用的eager,发现慢了一些,但是能跑起来了

zouyingcao commented 6 months ago

eager

hello, 想请教一下最后您是使用了方法二改写了信息流套用在llama框架中吗? 没太懂layer.attn._attn在llama框架中应该对应什么,不知道是否可以解疑一下,谢谢.

zouyingcao commented 6 months ago

eager

hello, 想请教一下最后您是使用了方法二改写了信息流套用在llama框架中吗? 没太懂layer.attn._attn在llama框架中应该对应什么,不知道是否可以解疑一下,谢谢.

最后是直接用register_hook解决了

Cooperx521 commented 6 months ago

eager

hello, 想请教一下最后您是使用了方法二改写了信息流套用在llama框架中吗? 没太懂layer.attn._attn在llama框架中应该对应什么,不知道是否可以解疑一下,谢谢.

最后是直接用register_hook解决了

hello~我是在modeling_llama里面直接修改的

zouyingcao commented 6 months ago

eager

hello, 想请教一下最后您是使用了方法二改写了信息流套用在llama框架中吗? 没太懂layer.attn._attn在llama框架中应该对应什么,不知道是否可以解疑一下,谢谢.

最后是直接用register_hook解决了

hello~我是在modeling_llama里面直接修改的

谢谢! 我发现我的写法中显著性得分算出来,最后一个token对于它前面token的分数都为0,后来发现是梯度<sent_num,head_num,token_len,token_len>的最后一维中last token对应的那一行都是0,一时不知道为啥?想请教您的写法得到的梯度最后一行都是0嘛,我目前还没有解决出问题在哪里.