“它如何確定哪些層應添加適配器(Adapter)?是否只有量化層符合條件?我能否也將適配器添加到常規(非量化)線性層上?”
這個問題提得很好,我會逐一為你解答。首先,先給出簡潔結論:
? 主流模型架構會預配置目標層列表,適配器將應用于這些列表中的層。
? 無論目標層是否經過量化,都會添加適配器;不過量化層是天然的適配對象,因為它們本身無法直接更新。
? 可以的,任何線性層(甚至一維卷積層/Conv1D層)都可以為其添加專屬適配器。
“你有一個適配器,你有一個適配器,每一層都有一個適配器!”
——奧普拉(注:此處引用奧普拉經典句式,用于形象說明“適配范圍廣”的特點)
“一維卷積層(Conv1D)?為什么能支持?”
其實,線性層與一維卷積層在功能上是等效的(此處不展開證明過程)。事實上,部分語言模型(如GPT-2)正是采用一維卷積層實現的,這是實際案例!
如果你選擇的模型使用了一維卷積層,且希望為其添加適配器,需額外添加一項配置:fan_in_fan_out: True
。
“講解結束了嗎?”
還沒有!
目標模塊(target_modules)
由于每周都有新的模型及架構發布,你當前安裝的PEFT(Parameter-Efficient Fine-Tuning,參數高效微調)庫版本中,很可能沒有針對該新模型的預配置目標層列表。這種情況下,你會遇到如下錯誤:
ValueError