这是论文 'LLaMA-Adapter: 使用零初始化注意力高效微调语言模型' 和 'LLaMA-Adapter V2: 参数高效视觉指令模型' 的官方实现。
本仓库提出了 LLaMA-Adapter (V2),一种用于微调指令跟随和多模态 LLaMA 模型的轻量级适配方法 🔥。
试试 LLaMA-Adapter 的在线演示 🤗: , LLaMA-Adapter V2 和 ImageBind-LLM。
加入我们的 微信!
| 名称 | 方法 | 数据 | 模态 | 视觉编码器 | 文本模型 |
|---|---|---|---|---|---|
| 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 |
效率对比:
| 模型 | 参数 | 存储空间 | 训练时间
| :-----: | :-----: |:-----:| :-----: |
| Alpaca | 7B |13G| 3 小时|
| LLaMA-Adapter | 1.2M |4.7M| 1 小时|
通过将适配器插入 LLaMA 的 Transformer 中,我们的方法仅引入 1.2M 可学习参数,并在 1 小时 内将 LLaMA 转变为指令跟随模型。为了在早期稳定训练,我们提出了一种新颖的 零初始化注意力 机制,带有零门控机制,以自适应地融合指令信号。微调后,LLaMA-Adapter 可以生成高质量的指令跟随句子,可与完全微调的 Stanford Alpaca 和 Alpaca-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_chat65b、 llama_adapter_v2_multimodal7b 和 imagebind_LLM 了解更多详情。
请通过 此表格(官方)申请访问预训练的 LLaMA,或从 Hugging Face(非官方)下载 LLaMA-7B。然后,从 这里 获取我们 LLaMA-Adapter 的权重。我们将 LLaMA 和适配器下载权重的路径分别表示为 TARGET_FOLDER 和 ADAPTER_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/
我该如何培养批判性思维技能?给我三个建议。
练习正念:正念是活在当下并关注你的想法和感受的练习。通过更加了解你的想法和情绪,你可以更好地理解和评估它们。这可以帮助你培养更客观、更理性的思维方式。
进行开放的讨论:加入一个讨论小组或辩论俱乐部,与他人进行开放的讨论。这可以通过挑战你的假设和鼓励你考虑不同的观点来帮助你培养批判性思维技能。
作为一名超级英雄,你会如何向好奇的孩子解释你的起源故事?
作为一名超级英雄,我有一个非常有趣和激动人心的起源故事要与你分享。从前,有个叫约翰的小男孩住在一个小镇上。约翰总是很好奇,想帮助别人,所以他每天都在探索周围的世界,了解不同的文化和人们。一天,当他在外面探险时,偶然发现了一个神秘的山洞。在山洞里,约翰发现了一个奇怪的装置,它能赋予他不可思议的能力。凭借这些能力,约翰可以飞行,从眼睛射出激光,甚至隐身。
约翰知道必须将这些力量用于正义,所以他决定成为一名超级英雄,用自己的能力保护他的城镇和那里的人们。他开始每天训练,学习如何使用他的力量以及如何与邪恶作斗争。最终,约翰成为了名为“隐形人”的超级英雄,他用自己的力量帮助他人,让世界变得更美好。
这就是我的起源故事,我相信你会喜欢的!
从前,有一个拥有特殊力量的年轻男孩。他用自己的力量帮助需要帮助的人,保护无辜者。他成为了众所周知的超级英雄,他用他的力量对抗邪恶,保护世界。
告诉我关于羊驼的事情。
告诉我 2019 年墨西哥总统的情况。
编写一个打印前 10 个斐波那契数的 Python 程序。
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()
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)
编写一个程序,打印从 1 到 100 的数字。但对于三的倍数,打印 'Fizz' 而不是数字;对于五的倍数,打印 'Buzz'。对于既是三的倍数又是五的倍数的数字,打印 'FizzBuzz'。
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)
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 Gao, Jiaming Han, Renrui Zhang, Aojun 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}
}
本仓库受益于 LLaMA、 Stanford Alpaca 和 Alpaca-Lora。感谢他们的杰出工作。