您是否正在使用大型語言模型(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中添加回調