OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  LLaMA-Adapter — 轻量高效地微调大语言模型的方法实现

LLaMA-Adapter — 轻量高效地微调大语言模型的方法实现

 
  septillion ·  2026-08-24 11:00:23 · 5 次点击  · 0 条评论  

LLaMA-Adapter:高效的 LLaMA 微调 🚀

公告:我们发布了 LLaMA2-Accessory,一个用于预训练微调部署 LLM多模态 LLM 的开源工具包。🔥

这是论文 'LLaMA-Adapter: 使用零初始化注意力高效微调语言模型''LLaMA-Adapter V2: 参数高效视觉指令模型' 的官方实现。


本仓库提出了 LLaMA-Adapter (V2),一种用于微调指令跟随多模态 LLaMA 模型的轻量级适配方法 🔥。

试试 LLaMA-Adapter 的在线演示 🤗: Hugging Face SpacesLLaMA-Adapter V2ImageBind-LLM

加入我们的 微信

新闻

  • [2024.01.18] LLaMA-AdapterICLR 2024 接收!🎉
  • [2023.12.08] 我们发布了 OneLLM,它使用统一框架将八种模态与语言对齐。🔥🔥🔥
  • [2023.11.11] 我们发布了 SPHINX,这是一个新的多模态 LLM,相比 LLaMA-Adapter-V2 有了巨大的飞跃。🔥🔥🔥
  • [2023.10.11] 我们发布了 LLaMA-Adapter V2.1,这是 LLaMA-Adapter V2 的改进版本,具有更强的多模态推理性能。详情请查看 llama_adapter_v2_multimodal7b
  • [2023.08.28] 我们发布了量化 LLM 的工具 OmniQuant,这是一种高效、准确且全面的(甚至极低比特)量化算法。多模态版本即将推出。🔥🔥🔥
  • [2023.07.24] 我们发布了 LLaMA2-Accessory,一个用于大型语言模型 (LLM)多模态 LLM预训练微调部署的开源工具包。请访问 Alpha-VLLM/LLaMA2-Accessory 了解更多详情!🔥🔥🔥
  • [2023.07.05] 我们发布了 llama_adapter_v2_multimodal7b 的预训练/微调代码。
  • [2023.07.04] 我们发布了通过完整微调和 LLaMA-Adapter 复现 Gorilla 的代码,请参阅 gorilla/README.md
  • [2023.06.08] 我们发布了 ImageBind-LLM 的 演示
  • [2023.06.06] 我们发布了 Point-Bind,通过 3D 点云扩展 ImageBind,为 imagebind_LLM 实现了 3D 指令跟随能力。
  • [2023.06.05] 我们支持了 LLaMA-Adapter (V1 和 V2) 与 LangChain 的集成。查看 Notebook
  • [2023.05.29] 我们在 imagebind_LLM 发布了 ImageBind-LLM 的代码。
  • [2023.05.23] 我们发布了 LLaMA-Adapter V2 的 演示多模态代码
  • [2023.05.05] 我们发布了新工作 Personalize Segment Anything 的论文和代码,该工作仅需 10 秒 即可高效微调 Segment Anything,并改善了 DreamBooth 以进行更好的 文本到图像生成
  • [2023.04.30] 我们注意到 GPT-4 评估对第一个响应存在很强的位置偏差。我们很快将更新论文以揭示位置偏差。非常感谢 Canwen Xu
  • [2023.04.28] 我们发布了 LLaMA-Adapter V2,一个多模态指令模型。查看我们的 论文演示代码
  • [2023.03.28] 我们发布了 LLaMA-Adapter V1论文训练代码。 📌

发布模型

名称 方法 数据 模态 视觉编码器 文本模型
LLaMA-Adapter V1 prefix, gate Alpaca 文本 × LLaMA-7B
LLaMA-Adapter V2 对话 scale, bias, norm ShareGPT 文本 × LLaMA-65B
LLaMA-Adapter V2 多模态 [P] prefix, projection, gate
[F] bias, norm
[P] Image-Text-V1
[F] GPT4LLM, LLaVA
图像 & 文本 CLIP-ViT-L/14 LLaMA-7B
LLaMA-Adapter V2.1 多模态 [P] prefix, projection, gate
[F] bias, norm, lora
[P] Image-Text-V1
[F] GPT4LLM, LLaVA, VQAv2
图像 & 文本 CLIP-ViT-L/14 LLaMA-7B
ImageBind-LLM [P] prefix, projection, gate
[F] bias, norm, lora
[P] Image-Text-V1
[F] 指令跟随
ImageBind 模态 + 点云 imagebind_huge Open-Chinese-LLaMA-7B
ImageBind-dialog [P] prefix, projection, gate
[F] bias, norm, lora
[P] Image-Text-V1
[F] LLaVA, ShareGPT
ImageBind 模态 + 点云 imagebind_huge Open-Chinese-LLaMA-7B
  • [P] 表示 预训练,[F] 表示 微调
  • Image-Text-V1 是 LAION400M、COYO、MMC4、SBU、Conceptual Captions 和 COCO 的拼接
  • ImageBind 模态 包括图像、视频、文本、音频、深度、热成像、IMU
  • ImageBind-dialog 即将发布

概述

效率对比:
| 模型 | 参数 | 存储空间 | 训练时间
| :-----: | :-----: |:-----:| :-----: |
| Alpaca | 7B |13G| 3 小时|
| LLaMA-Adapter | 1.2M |4.7M| 1 小时|

通过将适配器插入 LLaMA 的 Transformer 中,我们的方法仅引入 1.2M 可学习参数,并在 1 小时 内将 LLaMA 转变为指令跟随模型。为了在早期稳定训练,我们提出了一种新颖的 零初始化注意力 机制,带有零门控机制,以自适应地融合指令信号。微调后,LLaMA-Adapter 可以生成高质量的指令跟随句子,可与完全微调的 Stanford AlpacaAlpaca-Lora 相媲美。

我们的方法可以轻松扩展到多模态输入指令。用于 ScienceQA 的图像条件 LLaMA-Adapter 的推理框架如下,该框架也适用于其他模态,如音频和视频。

环境搭建

以下是 LLaMA-Adapter V1 的从零开始搭建脚本。

conda create -n llama_adapter -y python=3.8
conda activate llama_adapter

# 安装 pytorch
conda install pytorch cudatoolkit -c pytorch -y

# 安装依赖和 llama-adapter
pip install -r requirements.txt
pip install -e .

注意要搭建其他模型,请参阅 llama_adapter_v2_chat65bllama_adapter_v2_multimodal7bimagebind_LLM 了解更多详情。

推理

请通过 此表格(官方)申请访问预训练的 LLaMA,或从 Hugging Face(非官方)下载 LLaMA-7B。然后,从 这里 获取我们 LLaMA-Adapter 的权重。我们将 LLaMA 和适配器下载权重的路径分别表示为 TARGET_FOLDERADAPTER_PATH

以下是使用 7B LLaMA 模型和我们的 LLaMA-Adapter 生成指令跟随句子的示例:

torchrun --nproc_per_node 1 example.py \
         --ckpt_dir $TARGET_FOLDER/model_size\
         --tokenizer_path $TARGET_FOLDER/tokenizer.model \
         --adapter_path $ADAPTER_PATH

训练

我们在 此处 发布了 LLaMA-Adapter 在 LLaMA-7B 模型上的简单微调代码,以便用最少的依赖轻松复现。我们很快将发布 LLaMA-65B 和多模态 LLaMA-Adapter 的微调代码。

请从 Stanford Alpaca 下载 52K 指令跟随训练 数据,并将其放在 DATA_PATH 下。然后运行:

cd alpaca_finetuning_v1

torchrun --nproc_per_node 8 finetuning.py \
         --model Llama7B_adapter \
         --llama_model_path $TARGET_FOLDER/ \
         --data_path $DATA_PATH/alpaca_data.json \
         --adapter_layer 30 \
         --adapter_len 10 \
         --max_seq_len 512 \
         --batch_size 4 \
         --epochs 5 \
         --warmup_epochs 2 \
         --blr 9e-3 \
         --weight_decay 0.02 \
         --output_dir ./checkpoint/

与其他方法的对比

指令 1:

我该如何培养批判性思维技能?给我三个建议。

  • LLaMA-Adapter V2:
    1. 广泛阅读:阅读书籍、文章和其他信息来源可以帮助你培养批判性思维技能。通过接触不同的观点和想法,你可以学会更有效地分析和评估信息。
  1. 练习正念:正念是活在当下并关注你的想法和感受的练习。通过更加了解你的想法和情绪,你可以更好地理解和评估它们。这可以帮助你培养更客观、更理性的思维方式。

  2. 进行开放的讨论:加入一个讨论小组或辩论俱乐部,与他人进行开放的讨论。这可以通过挑战你的假设和鼓励你考虑不同的观点来帮助你培养批判性思维技能。

  • LLaMA-Adapter V1:
    1. 广泛而批判性地阅读。
    2. 与有不同观点的人进行讨论。
    3. 提问并寻求答案。

指令 2:

作为一名超级英雄,你会如何向好奇的孩子解释你的起源故事?

  • LLaMA-Adapter V2:

作为一名超级英雄,我有一个非常有趣和激动人心的起源故事要与你分享。从前,有个叫约翰的小男孩住在一个小镇上。约翰总是很好奇,想帮助别人,所以他每天都在探索周围的世界,了解不同的文化和人们。一天,当他在外面探险时,偶然发现了一个神秘的山洞。在山洞里,约翰发现了一个奇怪的装置,它能赋予他不可思议的能力。凭借这些能力,约翰可以飞行,从眼睛射出激光,甚至隐身。

约翰知道必须将这些力量用于正义,所以他决定成为一名超级英雄,用自己的能力保护他的城镇和那里的人们。他开始每天训练,学习如何使用他的力量以及如何与邪恶作斗争。最终,约翰成为了名为“隐形人”的超级英雄,他用自己的力量帮助他人,让世界变得更美好。

这就是我的起源故事,我相信你会喜欢的!

  • LLaMA-Adapter V1:

从前,有一个拥有特殊力量的年轻男孩。他用自己的力量帮助需要帮助的人,保护无辜者。他成为了众所周知的超级英雄,他用他的力量对抗邪恶,保护世界。

指令 3:

告诉我关于羊驼的事情。

  • LLaMA-Adapter: 羊驼是骆驼科的成员,原产于南美洲的安第斯山脉。它们通常以 10-20 只为一群出现,以性情温顺和在恶劣气候中生存的能力而闻名。羊驼通常为白色或灰色,有长而柔滑的毛发。它们还以生产高质量羊毛而闻名,这些羊毛用于制造服装和其他产品。
其他方法 * **Alpaca-LoRA**: 羊驼是骆驼科的成员,原产于南美洲的安第斯山脉。它们以柔软、奢华的羊毛而闻名,这些羊毛用于制作衣服、毯子和其他物品。羊驼是食草动物,以草和其他植物为食。它们是群居动物,群体生活最多 20 只。 * **Stanford Alpaca**: 羊驼是骆驼和美洲驼的近亲,是小型毛茸茸的动物。它们原产于秘鲁和玻利维亚,大约在 5000 年前首次被驯化。它们主要用于其细软的羊毛,这些羊毛用于制作针织品和其他服装。羊驼是群居动物,生活在小的家庭群体中,由年长的雄性领导。它们是高度社会化的动物,可以与主人建立牢固的联系。 * **text-davinci-003**: 羊驼是南美骆驼科的一种家养物种,类似于美洲驼。它们原产于南美洲的安第斯山脉,因其柔软、奢华的羊毛而作为牲畜饲养。羊驼是群居动物,群体生活最多 20 只。它们通常以 2 到 5 只的小群饲养,并且相对容易照料。羊驼是食草动物,以草、干草和其他植物为食。它们也以其温顺友好的天性而闻名,因此很受欢迎作为宠物。

指令 4:

告诉我 2019 年墨西哥总统的情况。

  • LLaMA-Adapter: 2019 年墨西哥总统是安德烈斯·曼努埃尔·洛佩斯·奥夫拉多尔,他于 2018 年 12 月 1 日就职。他是左翼政党国家复兴运动的成员,以其民粹主义政策而闻名。他专注于解决腐败、减少贫困和改善国家基础设施。他也是美国移民政策的直言不讳的批评者。
其他方法 * **Alpaca-LoRA**: 2019 年墨西哥总统是安德烈斯·曼努埃尔·洛佩斯·奥夫拉多尔,他于 2018 年 12 月 1 日就职。他是国家复兴运动(MORENA)政党的成员,是墨西哥自 1946 年以来第一位左翼总统。他以反腐败和反新自由主义政策以及致力于改善墨西哥人民生活条件而闻名。 * **Stanford Alpaca**: 2019 年,安德烈斯·曼努埃尔·洛佩斯·奥夫拉多尔宣誓就任墨西哥总统。他是该国第 58 任总统,也是第一位来自左翼莫雷纳党的总统。他在 2018 年当选时承诺打击腐败和减少贫困,并因处理经济、犯罪以及国家与美国关系而受到批评。他还以其雄心勃勃的社会福利计划而闻名,并因提高最低工资和为低收入家庭提供援助而受到赞扬。他被视为墨西哥民主和人权的捍卫者。 * **text-davinci-003**: 2019 年墨西哥总统是安德烈斯·曼努埃尔·洛佩斯·奥夫拉多尔,通常称为 AMLO。他是一位墨西哥政治家,自 2018 年 12 月 1 日起担任墨西哥总统。他是国家复兴运动(MORENA)党的成员,此前曾于 2000 年至 2005 年担任墨西哥城市长。他是一位左翼民粹主义者,并承诺减少墨西哥的腐败和不平等。他还承诺增加社会项目和基础设施项目的公共支出。

指令 5:

编写一个打印前 10 个斐波那契数的 Python 程序。

  • LLaMA-Adapter:
def fibonacci():
    a = 0
    b = 1
    for i in range(10):
        a, b = b, a + b
        print(a, b)
    print("Fibonacci numbers: ", a, b)

fibonacci()
其他方法 * **Alpaca-LoRA**:
def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10))
* **Stanford Alpaca**:
numbers = [0, 1]

for i in range(2, 11):
    numbers.append(numbers[i-2] + numbers[i-1])

print(numbers)
# 输出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
* **text-davinci-003**:
# 斐波那契数是以下整数序列中的数字,称为斐波那契数列,其特征是前两个数之后的每个数都是前两个数之和。

# 斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

# 程序:

# 初始化斐波那契数列的前两个数字
a = 0
b = 1

# 打印斐波那契数列的前 10 个数字
print(a)
print(b)

for i in range(2,10):
    c = a + b
    a = b
    b = c
    print(c)

指令 6:

编写一个程序,打印从 1 到 100 的数字。但对于三的倍数,打印 'Fizz' 而不是数字;对于五的倍数,打印 'Buzz'。对于既是三的倍数又是五的倍数的数字,打印 'FizzBuzz'。

  • LLaMA-Adapter:
def print_numbers(n):
    for i in range(1, 101):
        if i % 3 == 0 and i % 5 == 0:
            print("FizzBuzz")
        elif i % 3 == 0:
            print("Fizz")
        elif i % 5 == 0:
            print("Buzz")
        else:
            print(i)
其他方法 * **Alpaca-LoRA**:
for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)
* **Stanford Alpaca**:
for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        print('FizzBuzz')
    elif i % 3 == 0:
        print('Fizz')
    elif i % 5 == 0:
        print('Buzz')
    else:
        print(i)
* **text-davinci-003**:
for (let i = 1; i <= 100; i++) {
  if (i % 3 === 0 && i % 5 === 0) {
    console.log("FizzBuzz");
  } else if (i % 3 === 0) {
    console.log("Fizz");
  } else if (i % 5 === 0) {
    console.log("Buzz");
  } else {
    console.log(i);
  }
}

贡献者

Peng GaoJiaming HanRenrui ZhangAojun Zhou

招聘公告

🔥 我们正在招聘 上海人工智能实验室通用视觉组的实习生、博士后和全职研究员,专注于多模态和视觉基础模型。如果您感兴趣,请联系 gaopengcuhk@gmail.com

引用

如果您觉得我们的 LLaMA-Adapter 代码和论文有用,请引用:

@article{zhang2023llamaadapter,
  title = {LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attention},
  author={Zhang, Renrui and Han, Jiaming and Liu, Chris and Gao, Peng and Zhou, Aojun and Hu, Xiangfei and Yan, Shilin and Lu, Pan and Li, Hongsheng and Qiao, Yu},
  journal={arXiv preprint arXiv:2303.16199},
  year={2023}
}

如果您觉得我们的 LLaMA-Adapter V2 代码和论文有用,请引用:

@article{gao2023llamaadapterv2,
  title = {LLaMA-Adapter V2: Parameter-Efficient Visual Instruction Model},
  author={Gao, Peng and Han, Jiaming and Zhang, Renrui and Lin, Ziyi and Geng, Shijie and Zhou, Aojun and Zhang, Wei and Lu, Pan and He, Conghui and Yue, Xiangyu and Li, Hongsheng and Qiao, Yu},
  journal={arXiv preprint arXiv:2304.15010},
  year={2023}
}

致谢

本仓库受益于 LLaMAStanford AlpacaAlpaca-Lora。感谢他们的杰出工作。

5 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 71 ms
Developed with Cursor