您是否正在使用大型语言模型(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_2report_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 ./.envdeepspeed --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 ./.envpython3 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 ./.envpython3 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中添加回调