您是否正在使用大型语言模型(LLM)进行工作,并想通过高级方法更有效地训练它们?希望专注于数据和改进,而不是重复且耗时的LLM培训编码?
X- LLM是您的解决方案。这是一个用户友好的库,可以简化培训优化,因此您可以专注于增强模型和数据。配备了尖端的培训技术,X-LLM由了解您的需求的工程师设计了效率。
X - LLM都是理想的选择,无论您是为生产准备还是需要快速原型制作工具。
W&B
跟踪培训进度Yi-34B
, Mistal AI
, Llama 2
, Zephyr
, OpenChat
, Falcon
, Phi
,Phi, Qwen
, MPT
等变形金刚模型X—LLM
在Python 3.8+,Pytorch 2.0.1+和CUDA 11.8上进行了测试。
pip install xllm
版本包括deepspeed
, flash-attn
和auto-gptq
:
pip install " xllm[train] "
默认xllm
版本建议用于本地开发, xllm[train]
建议进行培训。
CUDA版本: 11.8
Docker: huggingface/transformers-pytorch-gpu:latest
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . experiments import Experiment
# Init Config which controls the internal logic of xllm
# QLoRA example
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
load_in_4bit = True ,
)
# Prepare the data
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
# Build Experiment from Config: init tokenizer and model, apply LoRA and so on
experiment = Experiment ( config = config , train_dataset = train_dataset )
experiment . build ()
# Run Experiment (training)
experiment . run ()
# # [Optional] Fuse LoRA layers
# experiment.fuse_lora()
# [Optional] Or push LoRA weights to HuggingFace Hub
experiment . push_to_hub ( repo_id = "YOUR_NAME/MODEL_NAME" )
Config
如何控制xllm
有关配置的更多信息
config = Config (
model_name_or_path = "openchat/openchat_3.5" ,
apply_lora = True ,
)
config = Config (
model_name_or_path = "openchat/openchat_3.5" ,
apply_lora = True ,
lora_rank = 8 ,
lora_alpha = 32 ,
lora_dropout = 0.05 ,
raw_lora_target_modules = "all" ,
# Names of modules to apply LoRA. A comma-separated string, for example: "k,q,v" or "all".
)
要训练QLoRA
模型,我们需要使用bitsandbytes
库和INT4(或INT8)权重加载骨干模型。
config = Config (
model_name_or_path = "01-ai/Yi-34B" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
)
config = Config (
model_name_or_path = "01-ai/Yi-34B" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
llm_int8_threshold = 6.0 ,
llm_int8_has_fp16_weight = True ,
bnb_4bit_use_double_quant = True ,
bnb_4bit_quant_type = "nf4" ,
)
在此之前,您必须在环境变量中登录到Huggingface Hub
或在环境变量中添加API Token
。
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
push_to_hub = True ,
hub_private_repo = True ,
hub_model_id = "BobaZooba/AntModel-7B-XLLM-Demo-LoRA" ,
save_steps = 25 ,
)
save_steps
中保存LoRA
训练模型,那么只会保存LoRA
在此之前,您必须登录到W&B
或在环境变量中添加API Token
。
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
report_to_wandb = True ,
logging_steps = 5 ,
wandb_project = "xllm-demo" ,
)
这将有助于在培训期间使用less GPU memory
,也就是说,您将能够比没有这种技术更多地学习。这项技术的缺点正在减慢前进步骤,即slowing down training
。
您将培训更大的模型(例如Colab中的7B),但以培训速度为代价。
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
use_gradient_checkpointing = True ,
)
这加快了训练和GPU内存消耗,但并不能与所有型号和GPU一起使用。您还需要为此安装flash-attn
。这可以使用:
pip install "xllm[train]"
config = Config (
model_name_or_path = "meta-llama/Llama-2-7b-hf" ,
use_flash_attention_2 = True ,
)
apply_lora
)。它允许培训成本大大降低,此外,有助于非常有效地打击灾难性的遗忘。load_in_4bit
和prepare_model_for_kbit_training
一起使用。这也大大减少了内存消耗。use_gradient_checkpointing
。这种方法还大大降低了记忆消耗,但以减慢训练的为代价。push_to_hub
和hub_private_repo
,也可以在hub_model_id
和save_steps
中指定模型名称。示例:“ bobazooba/supadupallama-7b-lora”。在培训期间,您的模型的每个检查站都将保存在HuggingFace Hub中。如果指定了apply_lora
,则只能保存Lora权重,例如,您可以使用xllm
轻松地与主型号融合。use_flash_attention_2
report_to_wandb
,还指定wandb_project
(W&B中的项目名称)和wandb_entity
(W&B中的用户或组织名称)。push_to_hub
,您需要事先登录到.ENV文件中的令牌( HUGGING_FACE_HUB_TOKEN
)。同样,使用report_to_wandb
时,您需要登录到W&B。您可以在.env文件中指定令牌( WANDB_API_KEY
),也可以提示您在命令行上输入令牌。 Qlora
梯度检查点
闪光注意力2
稳定训练
将检查站推到拥抱面枢纽
W&B报告
config = Config (
model_name_or_path = "meta-llama/Llama-2-7b-hf" ,
tokenizer_padding_side = "right" , # good for llama2
warmup_steps = 1000 ,
max_steps = 10000 ,
logging_steps = 1 ,
save_steps = 1000 ,
per_device_train_batch_size = 2 ,
gradient_accumulation_steps = 2 ,
max_length = 2048 ,
stabilize = True ,
use_flash_attention_2 = True ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
use_gradient_checkpointing = True ,
push_to_hub = False ,
hub_private_repo = True ,
hub_model_id = "BobaZooba/SupaDupaLlama-7B-LoRA" ,
report_to_wandb = False ,
wandb_project = "xllm-demo" ,
wandb_entity = "bobazooba" ,
)
此操作仅适用于具有LORA适配器的型号。
您可以在训练后明确指定融合模型。
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
fuse_after_training = True ,
)
即使您使用Qlora
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
fuse_after_training = True ,
)
或者,您可以在训练后自己融合模型。
experiment . fuse_lora ()
在multiple GPUs
上训练模型需要DeepSpeed
。 DeepSpeed
使您可以efficiently manage the resources of several GPUs during training
。例如,您可以distribute the gradients and the state of the optimizer to several GPUs
,而不是在每个GPU上存储一组完整的梯度和优化器的状态。使用DeepSpeed
开始训练只能command line
发生。
train.py
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . cli import cli_run_train
if __name__ == '__main__' :
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
cli_run_train ( config_cls = Config , train_dataset = train_dataset )
运行火车(在num_gpus
参数中,指定尽可能多的GPU)
deepspeed --num_gpus=8 train.py --deepspeed_stage 2
您也可以传递其他参数
deepspeed --num_gpus=8 train.py
--deepspeed_stage 2
--apply_lora True
--stabilize True
--use_gradient_checkpointing True
姓名 | 评论 | 关联 |
---|---|---|
X -LLM原型制作 | 在本笔记本中,您将学习图书馆的基础知识 | |
Llama2和Mistral AI有效微调 | 使用QLORA,BNB INT4,梯度检查点和X – LLM在COLAB中进行7B模型培训 |
X—LLM
不仅可以通过内置功能和自定义来促进生产就绪解决方案的开发。
使用X—LLM
训练模型很容易,并且涉及以下几个步骤:
Prepare
- 通过下载和准备数据来获取数据和模型。 config.train_local_path_to_data
config.eval_local_path_to_data
使用的是使用eart datatetTrain
- 使用上一步中准备的数据训练模型Fuse
- 如果您在训练期间使用洛拉,则福音Quantize
- 通过量化模型的内存使用量请记住, X—LLM
中的这些任务是从命令行开始的。因此,当您准备去时,启动完整的项目将看起来像这样:
python3 MY_PROJECT/cli/prepare.py
--dataset_key MY_DATASET
--model_name_or_path mistralai/Mistral-7B-v0.1
--path_to_env_file ./.env
deepspeed --num_gpus=8 MY_PROJECT/cli/train.py
--use_gradient_checkpointing True
--deepspeed_stage 2
--stabilize True
--model_name_or_path mistralai/Mistral-7B-v0.1
--use_flash_attention_2 False
--load_in_4bit True
--apply_lora True
--raw_lora_target_modules all
--per_device_train_batch_size 8
--warmup_steps 1000
--save_total_limit 0
--push_to_hub True
--hub_model_id MY_HF_HUB_NAME/LORA_MODEL_NAME
--hub_private_repo True
--report_to_wandb True
--path_to_env_file ./.env
python3 MY_PROJECT/cli/fuse.py
--model_name_or_path mistralai/Mistral-7B-v0.1
--lora_hub_model_id MY_HF_HUB_NAME/LORA_MODEL_NAME
--hub_model_id MY_HF_HUB_NAME/MODEL_NAME
--hub_private_repo True
--force_fp16 True
--fused_model_local_path ./fused_model/
--path_to_env_file ./.env
python3 MY_PROJECT/cli/quantize.py
--model_name_or_path ./fused_model/
--apply_lora False
--stabilize False
--quantization_max_samples 128
--quantized_model_path ./quantized_model/
--prepare_model_for_kbit_training False
--quantized_hub_model_id MY_HF_HUB_NAME/MODEL_NAME_GPTQ
--quantized_hub_private_repo True
--path_to_env_file ./.env
现在, X—LLM
库可让您仅使用汽水数据集。我们已经为了演示目的设置了这种方式,但是我们计划尽快添加更多数据集。您需要弄清楚如何下载和处理数据集。简而言之,您会照顾数据, X—LLM
处理其余的。我们是故意这样做的,可以为您提供足够的空间来获得创造力并自定义您的内心内容。
您可以详细自定义数据集,并添加其他字段。所有这些都将使您能够在Supervised Learning
和Offline Reinforcement Learning
领域实施几乎任何任务。
同时,您始终有一种提交语言建模数据的简便方法。
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . cli import cli_run_train
if __name__ == '__main__' :
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
cli_run_train ( config_cls = Config , train_dataset = train_dataset )
要使用X—LLM
设置自己的项目,您需要做两件事:
X—LLM
的命令行工具添加到您的项目中完成此操作后,您的项目将很好地进行,您可以开始运行所需的步骤(例如准备,训练等)。
要使用X—LLM
构建项目的处理,请查看下面的材料。
X—LLM
并将其适合您自己的项目的分步示例 X—LLM
库对所有步骤进行单个配置设置,例如准备,培训和其他步骤。它的设计方式使您可以轻松了解可用功能以及可以调整的功能。 Config
在每个步骤的每个部分几乎都具有控制权。多亏了配置,您可以选择数据集,设置碰撞器,管理培训期间的量化类型,决定是否要使用LORA,如果您需要将检查站推到HuggingFace Hub
上,等等。
配置路径: src.xllm.core.config.Config
或者
from xllm import Config
您可以灵活地调整模型培训的许多方面:数据,数据的处理方式,培训师,配置,模型的加载方式,在培训之前和之后发生的事情等等。
xllm
管道的每个部分都有现成的组件。您可以完全切换一些组件,例如数据集,碰撞器,教练和实验。对于某些组件,例如实验和配置,您可以选择仅在已经存在的内容上。
用X构建酷的东西-llm?请通过[email protected]与我联系。我很想听听你的来信。
写信给我们,以便我们可以添加您的项目。
考虑在模型卡中添加徽章。
对于GitHub项目:
[ < img src = " https://github.com/BobaZooba/xllm/blob/main/static/images/xllm-badge.png " alt = " Powered by X—LLM " width = " 175 " height = " 32 " / > ](https://github.com/BobaZooba/xllm)
用于拥抱脸部集线器型号:
[ < img src = " https://cdn-uploads.huggingface.co/production/uploads/6074d5f1134c000d1ae10d42/JudU3rrPP5i87CfwINANO.png " alt = " Powered by X—LLM " width = " 175 " height = " 32 " / > ](https://github.com/BobaZooba/xllm)
看起来像这样:
目前,我们没有使用GPU的连续集成测试。但是,我们将来可能会开发这类测试。不过,重要的是要注意,这将需要花费时间来开发以及用于机器维护的资金。
Experiment
中添加回调