Этот проект направлен на обучение тонкой настройки многоклассовых базовых моделей, чтобы реализовать LORA + DeepSpeed + Одно карта/многокартальная тонкая настройка. Тестируемые в настоящее время модели показаны в таблице ниже:
| Проверьте модель | язык | Тестовые веса |
|---|---|---|
| Китайско-лама-альпака | китайский | Китайско-альпака-плюс-лора-13b |
| Open-Llama | Английский | OPEN_LLAMA_13B |
| OPEN_LLAMA_7B | ||
| Белль | китайский | Belle-Llama-Ext-13b |
| Belle-Llama-Ext-7b | ||
| ЦВЕСТИ | Английский | Bloomz-1b7 |
| Bloomz-7b1 | ||
| Чатглм-6B | китайский | Чатглм-6B |
| Chatglm2-6b | ||
| Бачуань | китайский | Baichuan-7b |
| китайский | Baichuan-13b-чат | |
| Тигробот | китайский | Tigerbot-7b-Sft |
| Tigerbot-7b-баз | ||
| Питон | Английский | Pythia-1b-Dedup |
| Pythia-12b-Deduped |
Тодо:
Здесь мы используем CCKS2023-PROMPTCBLUE Medical Big Model, чтобы оценить набор данных в конкурсе Benchmark в качестве примера. Этот набор данных преобразует набор данных «Китайская медицинская задача по обработке информации», превращая все 16 различных медицинских сценариев NLP-задач в задачи на основе быстрого генерации языка, формируя первый эталон оценки LLM для китайских медицинских сценариев.
Rackcblue использует 94 инструкции с тонкой настройкой для выполнения различных задач в тесте CBLUE. После преобразования все наборы данных NLP Medical Text будут преобразованы в следующий формат. Строка поля ввода является входом в модель LLM, а целевое поле также является строкой, которая представляет собой текстовую последовательность, которая должна генерировать модель LLM.
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
} Чтобы облегчить быструю проверку, мы извлекли поддатазит CHIP-CTC , включая 6000 учебных наборов, 1100 наборов проверки и 1060 тестовых наборов. Скачать адрес
Модель может быть загружена локально. Во время обучения параметр model_name_or_path передается на путь модели, или вы можете передать имя модели только на лице объятия, например THUDM/chatglm-6b , и код автоматически загрузит модель.
Некоторые модели класса LLAMA требуют преобразования модели, и вовлеченные модели включают в себя: китайский альпака-плюс-лора-13b, см. Метод преобразования здесь.
conda create -n llms_train python=3.9
conda activate llms_train
pip install -r requirements.txt В файле config.py есть файлы конфигурации LORA для различных моделей, которые могут быть настроены и изменены. Содержание файла конфигурации следующим образом:
' glm ' : {
" lora_r " : 8,
" lora_alpha " : 32,
" lora_dropout " : 0.05,
" lora_target_modules " : " query_key_value,dense,dense_h_to_4h,dense_4h_to_h " ,
" modules_to_save " : " null "
},Описание поля:
lora_r : звание Лоры lora_alpha : lora_dropout : вероятность отсева слоя LORA;lora_target_modules : какие модули держат Lora;modules_to_save : в дополнение к слою LORA, который модули настроены на обучение и будут сохранены в последней контрольной точке. Здесь используется конфигурация Zero2:
{
" fp16 " : {
" enabled " : " auto " ,
" loss_scale " : 0,
" loss_scale_window " : 100,
" initial_scale_power " : 16,
" hysteresis " : 2,
" min_loss_scale " : 1e-10
},
" bf16 " : {
" enabled " : " auto "
},
" zero_optimization " : {
" stage " : 2,
" allgather_partitions " : true,
" allgather_bucket_size " : 5e8,
" overlap_comm " : true,
" reduce_scatter " : true,
" reduce_bucket_size " : 5e8,
" contiguous_gradients " : true
},
" gradient_accumulation_steps " : " auto " ,
" gradient_clipping " : " auto " ,
" steps_per_print " : 2000,
" train_batch_size " : " auto " ,
" train_micro_batch_size_per_gpu " : " auto " ,
" wall_clock_breakdown " : false
}Для стратегий для многокартового параллельного обучения, пожалуйста, обратитесь к здесь.
config.py имеет несколько других конфигураций: MODEL_MAP , TOKENIZER_MAP , SPECIAL_IDS , выберите различные модели CALSS и класс токенизатора в соответствии с параметрами model_type и выберите Special Token ID в соответствии с model_name_or_path . Значение model_type и соответствующая модель следующие:
llama : Вы можете назвать модели типа лама, такие как китайская-альпака-плюс-лора-13b, open_llama_13b, open_llama_7b, belle-hlama-ext-13b, belle-llama-ext-7b, tigerbot-7b-sft, tigerbot-7b-base и т. Д.glm : CHATGLM-6B и CHATGLM2-6B можно назвать.bloom : можно назвать модели типа цветов, такие как Bloomz-1B7, Bloomz-7b1 и т. Д.pythia : вы можете позвонить в Python-1b-Deduped, Pythia-12B-Dedupe и другие модели Python. Запустить scripts/train.sh . Содержимое файла следующее:
LR=2e-4
model_name_or_path= " ../models/pythia-12b-deduped " # LLM底座模型路径,或者是huggingface hub上的模型名称
model_type= ' pythia '
your_data_path= " ./datasets/PromptCBLUE " # 填入数据集所在的文件夹路径
your_checkpopint_path= " ./experiments/outputs " # 填入用来存储模型的路径
max_steps=100
max_source_length=256
max_target_length=16
peft_path= " " # 如果之前训练过,且存储了peft权重,则设置为peft权重的文件夹路径
CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 train.py
--deepspeed configs/ds_zero2_no_offload.json
--do_train
--do_eval
--model_name_or_path $model_name_or_path
--model_type $model_type
--use_lora True
--fp16
--train_file $your_data_path /train_CHIP-CTC.json
--validation_file $your_data_path /dev_CHIP-CTC.json
--preprocessing_num_workers 8
--cache_dir $your_data_path
--prompt_column input
--response_column target
--output_dir $your_checkpopint_path /test-pythia-12b-deduped-lora- $LR
--overwrite_output_dir
--max_source_length $max_source_length
--max_target_length $max_target_length
--per_device_train_batch_size 4
--per_device_eval_batch_size 4
--gradient_accumulation_steps 16
--max_steps $max_steps
--logging_steps 10
--save_strategy steps
--save_steps 50
--save_total_limit 3
--evaluation_strategy steps
--eval_steps 50
--learning_rate $LR Параметры следующие:
deepspeed : путь файла конфигурации DeepSpeeddo_train : bool, будь то обучениеdo_eval : bool, будь то проверка на наборе проверки, если evaluation_strategy не равна «Нет», он будет установлен на Truemodel_name_or_path : имя модели на лице объятия или путь, который уже существует локальноmodel_type : тип модели, дополнительные варианты включают llama , glm , bloom , pythia , baichuan , otheruse_lora : используйте тонкую настройку Lora, по умолчанию True , иначе это полная точная настройкаfp16 : использовать ли FP16 (смешанный) точность для обученияtrain_file : файл данных обучения набор данныхvalidation_file : проверка установлена файл данныхpreprocessing_num_workers : количество работников, когда данные причастием партииcache_dir : путь кеша к модели HFprompt_column : имя поля введено в образецresponse_column : имя поля выводится в образцеoutput_dir : путь к сохранению результата обученияoverwrite_output_dir : если установлено в True , перезаписывайте выходную папкуmax_source_length : максимальная длина входного текстаmax_target_length : максимальная длина выходного текстаpre_device_train_batch_size : размер партии на каждой карте во время обученияpre_device_eval_batch_size : размер партии на каждой карте во время проверки/тестаgradient_accumulation_steps : раунды накопления градиентаmax_steps : количество учебных раундов, один раунд содержит количество образцов: GPU数量* pre_device_train_batch_size * gradient_accumulation_stepslogging_steps : сколько раундов журнала печатиsave_strategy : во время учебного процесса промежуточные результаты сохраняются в соответствии с количеством шагов или чисел эпохи. Необязательные значения - no , steps и epochsave_steps : сохранить контрольную точку каждый шагevaluation_strategy : запустите набор проверки в соответствии с количеством шагов или номеров эпохи. Необязательные значения - no , steps и epocheval_steps : проверить каждое количество шаговlearning_rate : скорость обучения Если это многократное обучение, пожалуйста, измените соответствующий в SH: CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 . Например, обучение с 4 картами может быть изменено на: CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node 4 .
Уведомление:
model_name_or_path должен правильно соответствовать model_type .bos_id , eos_id и pad_id некоторых моделей не являются полностью последовательными. SPECIAL_IDS in config.py Определяет специальный идентификатор токена каждой модели. В дополнение к тестируемым моделям, его необходимо добавить вручную самостоятельно.Запустите сценарий вывода:
CUDA_VISIBLE_DEVICES=0 python inference.py
--model_name_or_path experiments/outputs/PromptCBLUE-chatglm-6b-lora-2e-4
--ckpt_path experiments/outputs/PromptCBLUE-chatglm-6b-lora-2e-4/checkpoint-9690
--model_type glm
--data_file ./datasets/PromptCBLUE/test.json
--cache_dir ./datasets/PromptCBLUE
--use_loraЗапись проблемы:
/work не имеет разрешения, добавьте переменные среды: export HF_MODULES_CACHE=~/.cache/huggingfacechmod u+x xxx.sh Непрерывное обновление ...
Спасибо сообществу за отличные модели с открытым исходным кодом: Chatglm-6b (Chatglm2), китайская лама-альпака, Openllama, Bloom, Belle, Python, Gptneox, Baichuan.
Этот проект также относится к следующим превосходным проектам с открытым исходным кодом:
Rackclue
Sealtenceiece_chinese_bpe
Chatglm_lora_multi-gpu
Чатглм-эффективная настройка
Zero_nlp
Этот проект предназначен только для изучения и исследований . На результаты обучения модели влияют такие факторы, как собственная структура модели, случайность, параметры обучения, наборы данных и т. Д. Этот проект не несет ответственности за результаты обучения модели, а также не несет ответственности за содержание генерации модели и не несет ответственности за какие -либо потери, вызванные использованием этого проекта. Этот проект разрабатывается и поддерживается людьми в свободное время. В связи с ограниченным временем и ограниченным уровнем автора своевременность ответа на связанные вопросы не может быть гарантировано. Тем не менее, коммуникационная группа будет создана в будущем. Все могут учиться и помогать друг другу.
Если этот проект полезен для вас, пожалуйста, обратитесь к нему в следующем формате:
@software{LLMs_train,
title = {{LLMs_train: A Set of Code to Fine-Tune Large Language Models}},
author = {Xudong Li},
year = {2023},
url = {https://www.github.com/5663015/LLMs_train},
}