<SOURCE_TEXT>
构建、修改和控制您自己的个性化LLM
xTuring
提供快速、高效且简单的开源LLM微调功能,如Mistral、LLaMA、GPT-J等。
通过提供易于使用的界面将LLM微调到您自己的数据和应用,xTuring使得构建、修改和控制LLM变得简单。
整个过程可以在您的计算机或私有云中完成,确保数据隐私和安全。
使用 xTuring
您可以,
- 从不同来源摄取数据并将其预处理为LLM可理解的格式
- 从单GPU扩展到多GPU以加快微调速度
- 利用内存高效的方法(如INT4、LoRA微调)将硬件成本降低多达90%
- 探索不同的微调方法并进行基准测试,以找到性能最佳的模型
- 在定义良好的指标上评估微调后的模型,以进行深入分析
⚙️ 安装
pip install xturing
🚀 快速开始
from xturing.datasets import InstructionDataset
from xturing.models import BaseModel
# 加载数据集
instruction_dataset = InstructionDataset("./examples/models/llama/alpaca_data")
# 初始化模型
model = BaseModel.create("llama_lora")
# 微调模型
model.finetune(dataset=instruction_dataset)
# 执行推理
output = model.generate(texts=["为什么LLM模型变得如此重要?"])
print("模型生成的输出: {}".format(output))
您可以在此处找到数据文件夹 here.
🌟 有什么新功能?
我们很高兴地宣布 xTuring
库的最新增强功能:
LLaMA 2
集成 - 您可以在不同配置中使用和微调LLaMA 2
模型: 现成的、现成的INT8精度、LoRA微调、LoRA微调INT8精度 和 LoRA微调INT4精度,使用GenericModel
包装器和/或您可以使用xturing.models
中的Llama2
类来测试和微调模型。
from xturing.models import Llama2
model = Llama2()
## 或者
from xturing.models import BaseModel
model = BaseModel.create('llama2')
评估
- 现在您可以在任何数据集上评估任何因果语言模型
。目前支持的指标是困惑度
。
# 进行必要的导入
from xturing.datasets import InstructionDataset
from xturing.models import BaseModel
# 加载所需的数据集
dataset = InstructionDataset('../llama/alpaca_data')
# 加载所需的模型
model = BaseModel.create('gpt2')
# 在数据集上运行模型评估
result = model.evaluate(dataset)
# 打印结果
print(f"评估的困惑度: {result}")
INT4
精度 - 您现在可以使用GenericLoraKbitModel
以INT4 精度
使用和微调任何LLM。
# 进行必要的导入
from xturing.datasets import InstructionDataset
from xturing.models import GenericLoraKbitModel
# 加载所需的数据集
dataset = InstructionDataset('../llama/alpaca_data')
# 加载用于INT4位微调的所需模型
model = GenericLoraKbitModel('tiiuae/falcon-7b')
# 运行微调
model.finetune(dataset)
- CPU 推理 - 现在包括笔记本CPU在内的CPU已完全能够处理LLM推理。我们集成了 Intel® Transformer 扩展 通过使用 仅权重量化算法 压缩模型并利用其在Intel平台上高度优化的内核来加速推理,从而节省内存。
# 进行必要的导入
from xturing.models import BaseModel
# 初始化模型:使用仅权重算法量化模型
# 并用Itrex的qbits_linear内核替换线性层
model = BaseModel.create("llama2_int8")
# 一旦模型被量化,直接进行推理
output = model.generate(texts=["为什么LLM模型变得如此重要?"])
print(output)
- 批处理集成 - 通过调整 .generate() 和 .evaluate() 函数中的 'batch_size',您可以加快结果输出。通常使用大于1的 'batch_size' 可以提高处理效率。
# 进行必要的导入
from xturing.datasets import InstructionDataset
from xturing.models import GenericLoraKbitModel
# 加载所需的数据集
dataset = InstructionDataset('../llama/alpaca_data')
# 加载用于INT4位微调的所需模型
model = GenericLoraKbitModel('tiiuae/falcon-7b')
# 生成所需提示的输出
outputs = model.generate(dataset = dataset, batch_size=10)
建议探索 Llama LoRA INT4 工作示例 以了解其应用。
如需深入了解,请考虑查看仓库中可用的 GenericModel 工作示例。
CLI 操作台
$ xturing chat -m "<path-to-model-folder>"
UI 操作台
from xturing.datasets import InstructionDataset
from xturing.models import BaseModel
from xturing.ui import Playground
dataset = InstructionDataset("./alpaca_data")
model = BaseModel.create("<model_name>")
model.finetune(dataset=dataset)
model.save("llama_lora_finetuned")
Playground().launch() ## 启动本地主机UI
## 📚 教程 - [准备你的数据集](examples/datasets/preparing_your_dataset.py) - [使用LoRA和INT8进行Cerebras-GPT微调](examples/models/cerebras/cerebras_lora_int8.ipynb) [![Open in Colab](https://yellow-cdn.veclightyear.com/2b54e442/8aec4be1-8c6f-4329-a318-0b49d469542f.svg)](https://colab.research.google.com/drive/1eKq3oF7dnK8KuIfsTE70Gvvniwr1O9D0?usp=sharing) - [使用LoRA进行Cerebras-GPT微调](examples/models/cerebras/cerebras_lora.ipynb) [![Open in Colab](https://yellow-cdn.veclightyear.com/2b54e442/8aec4be1-8c6f-4329-a318-0b49d469542f.svg)](https://colab.research.google.com/drive/1VjqQhstm5pT4EjPjx4Je7b3W2X1V3vDo?usp=sharing) - [使用LoRA和INT8进行LLaMA微调](examples/models/llama/llama_lora_int8.py) [![Open in Colab](https://yellow-cdn.veclightyear.com/2b54e442/8aec4be1-8c6f-4329-a318-0b49d469542f.svg)](https://colab.research.google.com/drive/1SQUXq1AMZPSLD4mk3A3swUIc6Y2dclme?usp=sharing) - [使用LoRA进行LLaMA微调](examples/models/llama/llama_lora.py) - [LLaMA微调](examples/models/llama/llama.py) - [使用LoRA和INT8进行GPT-J微调](examples/models/gptj/gptj_lora_int8.py) [![Open in Colab](https://yellow-cdn.veclightyear.com/2b54e442/8aec4be1-8c6f-4329-a318-0b49d469542f.svg)](https://colab.research.google.com/drive/1hB_8s1V9K4IzifmlmN2AovGEJzTB1c7e?usp=sharing) - [使用LoRA进行GPT-J微调](examples/models/gptj/gptj_lora.py) - [使用LoRA进行GPT-2微调](examples/models/gpt2/gpt2_lora.py) [![Open in Colab](https://yellow-cdn.veclightyear.com/2b54e442/8aec4be1-8c6f-4329-a318-0b49d469542f.svg)](https://drive.google.com/file/d/1Sh-ocNpKn9pS7jv6oBb_Q8DitFyj1avL/view?usp=sharing)
📊 性能
以下是不同微调技术在LLaMA 7B模型上的性能对比。我们使用Alpaca数据集进行微调。该数据集包含52K条指令。
硬件配置:
4xA100 40GB GPU, 335GB CPU RAM
微调参数:
{
'最大序列长度': 512,
'批量大小': 1,
}
LLaMA-7B | DeepSpeed + CPU Offloading | LoRA + DeepSpeed | LoRA + DeepSpeed + CPU Offloading |
---|---|---|---|
GPU | 33.5 GB | 23.7 GB | 21.9 GB |
CPU | 190 GB | 10.2 GB | 14.9 GB |
时间/每轮 | 21 小时 | 20 分钟 | 20 分钟 |
通过创建一个包含您的硬件规格、内存消耗和每轮时间的issue来贡献您在其他GPU上的性能结果。
📎 微调后的模型检查点
我们已经微调了一些模型,您可以将其作为基础或直接使用。 以下是加载它们的方法:
from xturing.models import BaseModel
model = BaseModel.load("x/distilgpt2_lora_finetuned_alpaca")
模型 | 数据集 | 路径 |
---|---|---|
DistilGPT-2 LoRA | alpaca | x/distilgpt2_lora_finetuned_alpaca |
LLaMA LoRA | alpaca | x/llama_lora_finetuned_alpaca |
支持的模型
以下是通过xTuring
的BaseModel
类支持的所有模型及其对应的加载键。
模型 | 键 |
---|---|
Bloom | bloom |
Cerebras | cerebras |
DistilGPT-2 | distilgpt2 |
Falcon-7B | falcon |
Galactica | galactica |
GPT-J | gptj |
GPT-2 | gpt2 |
LlaMA | llama |
LlaMA2 | llama2 |
OPT-1.3B | opt |
以上提到的是LLM的基础版本。以下是获取其LoRA
、INT8
、INT8 + LoRA
和INT4 + LoRA
版本的模板。
版本 | 模板 |
---|---|
LoRA | <model_key>_lora |
INT8 | <model_key>_int8 |
INT8 + LoRA | <model_key>_lora_int8 |
** 要加载任何模型的__INT4+LoRA
__版本,您需要使用xturing.models
中的GenericLoraKbitModel
类。以下是使用方法:
model = GenericLoraKbitModel('<model_path>')
model_path
可以替换为您的本地目录或任何HuggingFace库中的模型,如facebook/opt-1.3b
。
📈 路线图
- 支持
LLaMA
、GPT-J
、GPT-2
、OPT
、Cerebras-GPT
、Galactica
和Bloom
模型 - 使用自指令生成数据集
- 低精度LoRA微调和无监督微调
- 支持INT8低精度微调
- 用于数据集生成的OpenAI、Cohere和AI21 Studio模型API
- 向hub中添加了一些微调后的检查点
- INT4 LLaMA LoRA微调演示
- INT4 LLaMA LoRA微调和INT4生成
- 支持
Generic model
包装器 - 支持
Falcon-7B
模型 - 支持INT4低精度微调
- 评估LLM模型
- 支持INT3、INT2、INT1低精度微调
- 支持Stable Diffusion
🤝 帮助与支持
如果您有任何问题,可以在此仓库中创建一个issue。
您也可以加入我们的Discord服务器,并在#xturing
频道中开始讨论。
📝 许可证
本项目基于Apache License 2.0许可 - 详情见LICENSE文件。
🌎 贡献
作为一个在快速发展的领域中的开源项目,我们欢迎各种形式的贡献,包括新功能和更好的文档。请阅读我们的贡献指南以了解如何参与其中。