Вопросы

#2
by Arketov - opened

Не знаю куда написать, чтоб спросить.
Можешь рассказать про "оптимизировано по технологии TiMe"
И как ты формируешь датасет, что в итоге получается разговорная модель?

TiMe — это обработка исходных диалогов в 2 варианта. (TiMe - анаграмма ТыЯ)
Например:
Я увидел Машу — превращается в 4 варианта:
Я увидел тебя
Ты увидел меня
Я увидела тебя
Ты увидела меня
т.е. убираются имена собственные и меняются м/ж глаголы, прилагательные и прочее.
Это совместно с исходными текстами объединяется.
Нерелевантные куски — тупо фильтруются абзацы по ключевым словам, обычных фраз в исходных моделях достаточно.
Также прямая речь преобразуется:
из
Привет, — сказал он, — Как твое имя?
в
Привет (сказал он) Как твое имя?

Также добавляю токен "" в модель и в датасете перед началом диалога убирать дефис, заменяя на этот токен. В итоге, в промптах можно даже не использовать этот токен, модель начинает понимать что от нее хотят

Это основа для сдвига генерации в сторону диалогов, для erotic моделей также отбираю абзацы по ключевым словам, чтобы убрать мусор не относящийся к теме. Обычного контента в базовых моделях достаточно, но позволяет сократить датасет в несколько раз.

Скоро выложу что-то вроде toolchain для подготовки датасетов.
Но для хорошей работы датасет доложен быть более 1 Gb
Также medium модель в диалогах показала себя лучше large

Ого, спасибо. Суть с ТыЯ особо не уловил. Хочу попробовать до обучить твою large на своём roleplay датасете. Ну и toolchain тоже жду, заранее спасибо.

P.s. обучал лору на ruGPTQ 8bit. Результаты смешанные, вроде хорошо, а иногда очень плохо и скорость обучения даже на небольшом датасете не оч :с

Суть в том, что датасет обезличивается (имена собственные преобразуются в местоимения в разных комбинациях) и объединяется с исходным датасетом. В итоге модель может выступать за любую сторону в диалоге.

rugpt3.5 - спорная модель, много с ней экспериментировал, ее похоже криво обучали, много мусорных весов, часто внезапно в бред уходит, далекий от контекста, дообучение там не поможет. Для эффекта датасет должен быть от 10000 блоков и около 10 эпох. Обучаться это все будет недели, без гарантии на успех.
large не используй для ролеплея, за два года medium всегда показывает лучший результат.

И еще момент.
Для rugpt моделей loss - не показатель качества обучения. Даже после нескольких эпох средний loss в 2.8-3.0 это норма, особенности архитектуры.
Под каждую эпоху нужно подбирать LR, также лучше использовать constant scheduler, adamw8bit

large не используй для ролеплея, за два года medium всегда показывает лучший результат.

что странно вроде большая модель должна показывать лучший результат.

Ещё не подскажешь модельки по крупнее 3гб для тренировки и экспериментов. Сам начинал с ai-forever/rugpt3large_based_on_gpt2, но хочется модельку побольше и поумнее изначально

И еще момент.
Для rugpt моделей loss - не показатель качества обучения. Даже после нескольких эпох средний loss в 2.8-3.0 это норма, особенности архитектуры.
Под каждую эпоху нужно подбирать LR, также лучше использовать constant scheduler, adamw8bit

вот у меня кстати loss был меньше 1.5 и падал до 0.6

что странно вроде большая модель должна показывать лучший результат.
Больше свободы - больше шанса уйти от контекста. Это все-таки не ИИ
Ещё не подскажешь модельки по крупнее 3гб для тренировки и экспериментов. Сам начинал с ai-forever/rugpt3large_based_on_gpt2, но хочется модельку побольше и поумнее изначально

Для русского языка есть wortega, fred, но я их несколько месяцев крутил, хуже small модели в разы.

вот у меня кстати loss был меньше 1.5 и падал до 0.6

Датасет маленький значит. у меня от 1 Gb все, для errotic почти 20 gb

На чём обучаешь, на colab?

1080 ti

Тогда я явно делал что-то не так с ruGPTQ ибо на 3090 на очень маленьком датасете (1.3к строк от 1800 до 2048 токенов на строку), это часа 4 batch size = 1

Влияет версия peft, autogptq. Лучше 4-bit обучать, по тестам разница несущественная с полной точностью.

На 1080 ti при датасете input-output в 27000 элементов эпоха 30:15:19, 4.04s/it . И это с градиентами.
rank 16 alpha 16

Обучать rugpt35 на простых текстах как gpt2 неэффективно, лучше датасетом в стиле альпаки

За 5 эпох финальный loss 0.11

Кароче, супер спасибо большое.
Буду ждать toolchain с примером датасета.

https://github.com/zlsl/llm_toolchain_ti_me

Лучший!
Спасибо)

Привет, что насчет того чтобы попробовать обучить лору под rwkv world? она имеет размеры 1.5/3/7 миллиардов параметров и довольно неплохо понимает русский, и обучается эффективно т.к жрет меньше обычных трансформеров. Кроме того, версию на 1.5 миллиардов параметров можно полноценно обучить на 16gb GPU

Привет, не понял кому ты говоришь)
Но я пока собираю датасет, потом буду пробывать обучать может быть rwkv world, но пока не решил.
Мне кажется что знание многих языков не оч для небольших моделей.

Привет, что насчет того чтобы попробовать обучить лору под rwkv world? она имеет размеры 1.5/3/7 миллиардов параметров и довольно неплохо понимает русский, и обучается эффективно т.к жрет меньше обычных трансформеров. Кроме того, версию на 1.5 миллиардов параметров можно полноценно обучить на 16gb GPU

rugpt3 (medium-large) самые оптимальные для русского языка. Полноценно обучить на одном GPU анголязычную модель - это годы. Для ассистента "весов русскоязычных параметров" достаточно, чтобы модель давала приемлемый результат в таких задачах. А вот литературный и слэнговый русский язык - это не к ним. Все модели, имеющие базе цензурированные англоязычные модели в итоге и выдадут испорченый результат, еще и с учетом двойного-тройного перевода.

Многие неверно понимают все "попугаи" в которых измеряют "точность" языковых моделей. Грубо говоря, обучили модель на статье о кошках, получили final loss близкий к нулю - в validation получат продолжение фразы "Кошки это ... " на 99 процентов так же, как и в статье и укажут, что галлюцинаций почти ноль, точность - 99%. А если "попросить модель" (убить журналистов за такой словооборот), т.е. сгенерировать продолжение текста, к примеру, как кошки играют на балалайке, то метрики для подобных результатов нет и не может быть. Поэтому дело не в количестве параметров и метриках модели, а в конечном результате в нужной задаче.

Так же альпака, при минимальном датасете даёт возможность LLM действовать "по мотивам" input-output датасета, согласно своим каноничным способностям генерировать бред. И именно поэтому LLM принципиально не может "в математику". Чудеса логики для старших моделей очень просто объясняются - в интернетах "нагенерено" много всего.

Для обучения моделей важный параметр качество и объём датасета. "под капотом" моделей нет чудес, это чуть улучшенные цепи Маркова, а это простите, 1906 год (Еще на ЕС-1841/42 в дремучих годах создавал очень "живые" диалоговые системы, но тогда были ограничения аппаратные).

А что скажешь про модель ai-forever mGPT и их там вариаций уйма?

А что скажешь про модель ai-forever mGPT и их там вариаций уйма?

Это multilang модели с малым количеством параметров, там особый подход к обучению, они не креативны в своей сути. Для перевода неплохи

А ты не думал\пробывал, покрывать имена "mask" и прогонять через модели енкодеры?

А ты не думал\пробывал, покрывать имена "mask" и прогонять через модели енкодеры?

Через Fred, T5?

Да, были эксперименты. Модели контекст вообще не держат. Иногда фразы выдаёт на уровне "сойдёт", процентах в 5 случаев.

Типо через это ai-forever/ruRoberta-large. | Маша села за стол - mask села за стол - Она села за стол (Нюанс в том что модели обучены на имена, а надо наоборот не имена )

Модель креативит это хорошо, но если надо чтоб она запомнила информацию что делать нужно?

Модель креативит это хорошо, но если надо чтоб она запомнила информацию что делать нужно?

BERT-модели для других задач, можно натянуть обучающие выборки, но не представляю результат.

Есть возможность использовать BERT для анализа фразы пользователя и добавления результат в контекст перед обработкой GPT моделью.

Например из фразы "Меня друзья зовут Вася, если я дома" вытащить - Имя = Вася и добавить в начало контекста - "Диалог Маши и Васи"

Для обучения моделей важный параметр качество и объём датасета. "под капотом" моделей нет чудес, это чуть улучшенные цепи Маркова, а это простите, 1906 год (Еще на ЕС-1841/42 в дремучих годах создавал очень "живые" диалоговые системы, но тогда были ограничения аппаратные).

уж простите, но базовые знания о том как устроены модели трансформеры, да и в целом модели у меня имеются, сам делал файнтюн rugpt small/medium/large под ответы мейл ру.
А насчет файнтюна англоязычных моделей под русский язык, могу посоветовать посмотреть это, результаты довольно неплохие, и не похоже что модель выдает испорченный результат: https://huggingface.co/IlyaGusev/saiga_7b_lora

А насчет файнтюна англоязычных моделей под русский язык, могу посоветовать посмотреть это, результаты довольно неплохие, и не похоже что модель выдает испорченный результат: https://huggingface.co/IlyaGusev/saiga_7b_lora

Обучить можно, но как обучить LoRA для 7B параметров, для датасета более 1Gb? Это адские затраты времени. Для Saiga импользовались всего 100k строк

Вообще, появилась гипотеза, как можно оптимизировать датасет для ускоренного обучения. Попробую на LLama2 протестировать

Если нужна видюха помощнее, могу предложить свою)))

Если нужна видюха помощнее, могу предложить свою)))

Ограниченность ресурсов заставляет работать мозги лучше. Есть доступ к 8xA100 машинам

Хах, Оке)

Привет. Ещё вопросик есть при обучении large на длине 2048 жрёт ультра дофига памяти ~30gb при float32, если на смешанной точности типо bf16 то как бы лучше около ~17гб. Я что-то делаю не так?) Если обучать bf16 то она и сохранятся как bf16 и весит не ~3гб а ~1.5гб

    --per_device_train_batch_size 1 
    --block_size 2048 
    --num_train_epochs 1 
    --torch_dtype="bfloat16" 
    --gradient_accumulation_steps 2 
    --learning_rate="0.00005" 
    --lr_scheduler_type="constant" 
    --optim="adamw_8bit" 

Привет. Ещё вопросик есть при обучении large на длине 2048 жрёт ультра дофига памяти ~30gb при float32, если на смешанной точности типо bf16 то как бы лучше около ~17гб. Я что-то делаю не так?) Если обучать bf16 то она и сохранятся как bf16 и весит не ~3гб а ~1.5гб
--per_device_train_batch_size 1 --block_size 2048
--num_train_epochs 1 --torch_dtype="bfloat16"
--gradient_accumulation_steps 2 --learning_rate="0.00005"
--lr_scheduler_type="constant" `
--optim="adamw_8bit"

У меня кушает около 9 Гб на 1080ti при float32, блок 2048. Скорее всего не включен gradient checkpointing

TrainingArguments(
_n_gpu=1,
adafactor=False,
adam_beta1=0.9,
adam_beta2=0.999,
adam_epsilon=1e-08,
auto_find_batch_size=False,
bf16=False,
bf16_full_eval=False,
data_seed=None,
dataloader_drop_last=False,
dataloader_num_workers=0,
dataloader_pin_memory=True,
ddp_backend=None,
ddp_broadcast_buffers=None,
ddp_bucket_cap_mb=None,
ddp_find_unused_parameters=None,
ddp_timeout=1800,
debug=[],
deepspeed=None,
disable_tqdm=False,
dispatch_batches=None,
do_eval=False,
do_predict=False,
do_train=True,
eval_accumulation_steps=None,
eval_delay=0,
eval_steps=None,
evaluation_strategy=no,
fp16=False,
fp16_backend=auto,
fp16_full_eval=False,
fp16_opt_level=O1,
fsdp=[],
fsdp_config={'min_num_params': 0, 'xla': False, 'xla_fsdp_grad_ckpt': False},
fsdp_min_num_params=0,
fsdp_transformer_layer_cls_to_wrap=None,
full_determinism=False,
gradient_accumulation_steps=1,
gradient_checkpointing=True,
greater_is_better=None,
group_by_length=False,
half_precision_backend=auto,
hub_always_push=False,
hub_model_id=None,
hub_private_repo=False,
hub_strategy=every_save,
hub_token=,
ignore_data_skip=False,
include_inputs_for_metrics=True,
include_tokens_per_second=False,
jit_mode_eval=False,
label_names=None,
label_smoothing_factor=0.0,
learning_rate=7.5e-06,
length_column_name=length,
load_best_model_at_end=False,
local_rank=0,
log_level=debug,
log_level_replica=warning,
log_on_each_node=True,
logging_dir=runs/waha_1_h,
logging_first_step=True,
logging_nan_inf_filter=True,
logging_steps=2,
logging_strategy=steps,
lr_scheduler_type=constant,
max_grad_norm=1.0,
max_steps=-1,
metric_for_best_model=None,
mp_parameters=,
no_cuda=False,
num_train_epochs=1.0,
optim=adamw_bnb_8bit,
optim_args=None,
output_dir=waha_1,
overwrite_output_dir=False,
past_index=-1,
per_device_eval_batch_size=8,
per_device_train_batch_size=1,
prediction_loss_only=False,
push_to_hub=False,
push_to_hub_model_id=None,
push_to_hub_organization=None,
push_to_hub_token=,
ray_scope=last,
remove_unused_columns=True,
report_to=['tensorboard'],
resume_from_checkpoint=None,
run_name=waha_1,
save_on_each_node=False,
save_safetensors=True,
save_steps=1000,
save_strategy=steps,
save_total_limit=2,
seed=42,
skip_memory_metrics=False,
tf32=None,
torch_compile=False,
torch_compile_backend=None,
torch_compile_mode=None,
torchdynamo=None,
tpu_metrics_debug=False,
tpu_num_cores=None,
use_cpu=False,
use_ipex=False,
use_legacy_prediction_loop=False,
use_mps_device=False,
warmup_ratio=0.03,
warmup_steps=0,
weight_decay=0.001,
)

GPT2Config {
"_name_or_path": "/zstorage/models/llm/l_wh40k_all2",
"activation_function": "gelu_new",
"architectures": [
"GPT2LMHeadModel"
],
"attn_pdrop": 0.1,
"bos_token_id": 50256,
"embd_pdrop": 0.1,
"eos_token_id": 50256,
"gradient_checkpointing": false,
"initializer_range": 0.02,
"layer_norm_epsilon": 1e-05,
"model_type": "gpt2",
"n_ctx": 2048,
"n_embd": 1536,
"n_head": 16,
"n_inner": null,
"n_layer": 24,
"n_positions": 2048,
"reorder_and_upcast_attn": false,
"resid_pdrop": 0.1,
"scale_attn_by_inverse_layer_idx": false,
"scale_attn_weights": true,
"summary_activation": null,
"summary_first_dropout": 0.1,
"summary_proj_to_labels": true,
"summary_type": "cls_index",
"summary_use_proj": true,
"torch_dtype": "float32",
"transformers_version": "4.35.0.dev0",
"use_cache": true,
"vocab_size": 50258
}

screenshot_20231022_181510.png

Блин реально. Спасибо.

скорость только упала

Я не использую float16, так как на 1080ti быстрее работает float32, на новых картах лучше float16, точность такая же в итоге

скорость только упала

На 20-25 процентов :)

Еще стоит проверить, всё ли в порядке с библиотекой bitsandbytes, иногда нет модулей под gpu

Я не использую float16, так как на 1080ti быстрее работает float32, на новых картах лучше float16, точность такая же в итоге

Дак меня пугает что сама модель начинает весить в два раза меньше)

Еще стоит проверить, всё ли в порядке с библиотекой bitsandbytes, иногда нет модулей под gpu

Я сижу под виндой, там с bnb ваще геморой. Офицально под винду нет) Но есть для webui для win. В итоге он работает и через видюху.

Я сижу под виндой, там с bnb ваще геморой. Офицально под винду нет) Но есть для webui для win. В итоге он работает и через видюху.

тогда оптимизатор lion или paged_lion

тогда оптимизатор lion или paged_lion

lion_8bit? lion_32bit?

А по поводу что модель в два раза уменьшается это норм? в качестве не теряю?

тогда оптимизатор lion или paged_lion

lion_8bit? lion_32bit?

А по поводу что модель в два раза уменьшается это норм? в качестве не теряю?

lion_32bit. Если 8bit заработает и будет быстрее, то его.

Вообще стоит попробовать adamw_torch_fused и компиляцию включить, если карта свежая

Вообще стоит попробовать adamw_torch_fused и компиляцию включить, если карта свежая

А можно чуть подробнее?)

И я так пологая про размер модели вопрос глупый, раз не отвечаете )))

учитывая то, что квантизированные до 4-х бит модели работают хорошо, то с 16 битами все понятно :
bfloat16 еще лучше, для весов - значимая часть - это после запятой, поэтому битность очень относительна

Кароче как обычно огромное спасибо.
Буду использовать bf16 lion 8bit, но без gradient checkpointing, так быстрее

P.S. torch.compile под виндой не поддерживается)

@zlsl Привет сейчас немного до обучил твою модель l_kink на переведённых датасетах lima, pipa и bluemoon получилось, оооочень даже не дурно (с первого не опытного взгляда).

Добавил твой токен char в свой датасет с разметкой chatml.

Вот вопрос. Ты сейчас что-то обучаешь?

P.S. Хотелось бы ещё конечно банальных инструкций добавить, но мне кажется модель уж точно маловата для этого

Owner

@zlsl Привет сейчас немного до обучил твою модель l_kink на переведённых датасетах lima, pipa и bluemoon получилось, оооочень даже не дурно (с первого не опытного взгляда).
Добавил твой токен char в свой датасет с разметкой chatml.
Кривовато получилось но есть и норм моменты, хотя надо дорабатывать, надо фильтрацию сделать на всякие END_OF_DIALOG и прочее. Также постоянно вылазят куски инструкций (Write as ... This is a roleplay)

И из наблюдений - модель стала с привкусом "политкорректности", похоже на цензурированный перевод, либо исходный датасет был создан ChatGPT. И жестко вылазят RPG-моменты, когда всякие "приключенцы", "авантюристы" вне контекста появляются. Ну и в сторону анимэ пошел перекос.

Вот вопрос. Ты сейчас что-то обучаешь?

Третий год в разработке AI на принципах полностью отличающихся от существующих LLM, сейчас 6 "слоев" специализированных сеток, у трех - долговременная память на эмбеддингах. Принцип не в "сочинении продолжния текста", а в понимании, выводах и выводе, все это с обучением.

P.S. Хотелось бы ещё конечно банальных инструкций добавить, но мне кажется модель уж точно маловата для этого

Для малых сетей писать промпт в стиле - "Действуй как анимешная милфа, твои диалоги длинные и подробные..." это зло. Даже большие начинают тупить. LLM ведь просто дописывает, промпт должен быть либо в стиле самого чата, держа в начале либо основные фразы контекста, либо инжектя контекстные эмбеддинги по ходу, либо в стиле рассказа. Чем ближе к датасету, тем лучше.

Всякие "Act as..." приемлемы для бедных языков вроде eng, где и произведения скудны на обороты :)

Sign up or log in to comment