Deepfake: Уважаемая администрация
Теги панорама, deepfake, нейросети стоит выводить первыми и не прятать под кат. Также указывать один из них в заголовке.
Теги панорама, deepfake, нейросети стоит выводить первыми и не прятать под кат. Также указывать один из них в заголовке.
😁 Две нейросети спорят, кто из них ИИ, а кто человек
— Как думаете, чем закончилась их дискуссия?
- - -
NeuroTrends
Всем привет, в последние годы я исследую Искусственный Интеллект, мой контент об этом можно найти на канале Ruslan Dev на YouTube. В этой статье я расскажу о том, как я сделал файнтюнинг Llama 3 70B - лучшей базовой модели на сегодняшний день. Я обучал модель на мультиязычном датасете Tagengo, в котором есть русскоязычная выборка.
Очевидно, обучение такой модели требует серьезных вычислительных мощностей, поэтому полного цикла на 3-4 эпохи я делать не стал. Я рассчитывал потратить пять-десять GPU-часов, чтобы проверить мой код для файнтюнинга на работоспособность, посмотреть метрики обучения, запустить инференс модели и оценить первые результаты.
Кстати, для файнтюнинга моделей я использую свой фреймворк gptchain, который построен на основе библиотек unsloth и trl (Transformer Reinforcement Learning).
Моей второй целью была квантизация обученной модели и сохранение в формате GGUF. Этот формат позволяет запустить Большую Языковую Модель (LLM) на любом компьютере с достаточно мощным процессором.
Базовая модель, которую я файнтюнил - unsloth/llama-3-70b-bnb-4bit. Cначала я проверил, как эта модель справляется с русскоязычным промптом, задав ей вопрос - "Из чего состоит нейронная сеть?"
Очевидно, что базовая модель не обучена следовать инструкциям. Она просто повторяла мой вопрос, итерация за итерацией, пока генерация не достигла максимальной заданной длины. Я рассчитывал на то, что после файнтюнинга модель будет следовать инструкциям на русском языке.
Я обратился к облачному GPU сервису immers.cloud. чтобы обучить модель.
Сначала я собирался обучать на нескольких видеокартах параллельно и выбрал два GPU A100 c NvLink.
Однако, я не учел тот факт, что библиотека unsloth, которую я использую в моем фреймворке, еще не поддерживает model parallelism, а это серьезное ограничение. В их дискорде нашел пост, что в ближайшее время обучение на нескольких GPU станет возможным. Если этого не случится, мне придется искать альтернативные пути.
Поскольку файнтюнинг базовой модели Llama 70B c квантизацией в 4 bit на 3 эпохи на одном A100 требует порядка 5 дней, мне пришлось сократить количество шагов обучения.
Также я решил перейти на другую видеокарту - H100, самую мощную из того что есть.
Настройка рабочего окружения у меня довольно простая. Мне нужен только python >= 3.9, а затем клонирую свой фреймворк gptchain с github:
И устанавливаю его зависимости:
pip install -r requirements-train.txt
Весь код, который понадобится мне для файнтюнинга, запускается через консольный интерфейс фреймворка.
После обучения веса модели мержатся с параметрами LoRA, полученными в процессе файнтюнинга, их можно загрузить на Huggingface.
Я использовал датасет lightblue/tagengo-gpt4.
На странице датасета заявлено, что "Tagengo - самый большой в мире мультиязычный датасет высокого качества". 78 тысяч примеров диалога на разных языках, включая русский. Здесь есть серьезная выборка на русском - 8 тысяч строк.
Я обучил модель на 2,400 шагов, на это ушло 7 часов на H100.
python gptchain.py train -m unsloth/llama-3-70b-bnb-4bit \
--dataset-name tagengo_gpt4 \
--save-path checkpoints/llama-3-70b-tagengo \
--huggingface-repo llama-3-70b-tagengo \
--max-steps 2400
Если использовать A100, по моим расчетам, потребовалось бы примерно 10 часов.
Я запустил файнтюнинг на Виртуальной Машине в бэкграунд-процессе. Для этого я воспользовался systemd, стандартным способом создания фоновых процессов (демонов) в Linux.
Я создал файл gptchain.service в /etc/systemd/system. В него вставил вот такую конфигурацию:
[Unit]
Description=Llama-3-70b finetune
[Service]
WorkingDirectory=/home/ubuntu/gptchain
ExecStart=/home/ubuntu/venv/bin/python gptchain.py train --model_id unsloth/llama-3-70b-bnb-4bit --dataset-name tagengo_gpt4 --save-path checkpoints/llama-3-70b-tagengo --huggingface-repo llama-3-70b-tagengo --max-steps 2400
Type=simple
Restart=no
Здесь главное - команда gptchain.py train, которая запускает файнтюнинг модели.
А теперь нужно выполнить:
sudo systemctl daemon-reload
sudo systemctl start gptchain
И все, остается ждать завершения файнтюнинга, но метрики вроде Train Loss хотелось бы как-то отслеживать. Самое простое - посмотреть логи процесса:
journalctl -u gptchain.service
Чтобы иметь возможность нормально наблюдать метрики, лучше, конечно, использовать wandb или tensorboard.
В этот раз я использовал wandb - просто указал ключ доступа в переменной WANDB_API_KEY в файле .env. Мой процесс подключается к wandb автоматически и экспортирует метрики в реальном времени.
К базовой модели применяется LoRA (Low Rank Adaptation), метод, позволяющий файнтюнить параметры более эффективно - исходная матрица параметров оставляется неизменной ( "замораживается"). В процессе обучения изменяется представление параметров модели в виде двух матриц более низкой размерности. Реализация LoRA, с которой мы обычно имеем дело, работая на стеке Huggingface Transformers (как и в данном случае) - через библиотеку peft.
Дальше происходит загрузка датасета и приведение к нужной структуре. Данные в Tagengo представлены в виде массивов json, какие принимает и возвращает OpenAI API. Чтобы использовать эти данные для файнтюнинга, я сконвертировал их в формат ChatML. У библиотеки Unsloth есть хорошая поддержка СhatML, что мне очень помогло конвертировать данные из вот этого:
[
{
"from": "human",
"value": "The user’s message goes here"
},
{
"from": "gpt",
"value": ""
}
]
Вот в это:
<|im_start|>user
The user’s message goes here
<|im_end|>
<|im_start|>assistant
Следующее, что происходит в моем коде - конфигурируется экземпляр Supervised Fine-tuning Trainer (SFTTrainer) - класса, предоставленного библиотекой trl. В нем задаются параметры файнтюнинга.
Основные из них:
learning_rate: 2e-4
seed: 3407
gradient_accumulation_steps: 4
per_device_train_batch_size: 2
optimizer: adamw_8bit
lr_scheduler_type: linear
warmup_steps: 5
max_steps: 2400
weight_decay: 0.01
Через семь часов файнтюнинг завершился. Я убедился, что Train Loss медленно, но верно сходится. Хотелось бы обучить на несколько полных эпох, но, как я уже говорил, надо значительно больше GPU часов. Обучать нужно минимум на 2, а лучше на 4 видеокартах параллельно.
Затем я проверил, начала ли Llama следовать инструкциям на русском языке:
python gptchain.py chat -m checkpoints/llama-3-70b-tagengo \
-q '[{"from": "human", "value": "Из чего состоит нейронная сеть?"}]' \
--chatml true
Да, начала - вместо бессмысленных повторений я получил правильный, очень подробный ответ на вопрос "Из чего состоит нейронная сеть?" Рекомендую посмотреть видео, чтобы оценить качество ответа и скорость инференса Llama 3 70B на H100.
Стиль ответа напоминает GPT-4, это длинный детализированный текст. Неудивительно, так как датасет tagengo включает именно ответы GPT-4.
Затем я выполнил квантизацию модели и сконвертировал ее в формат GGUF, чтобы ее можно было запускать без GPU, на обычном процессоре.
Для этого в моем фреймворке есть консольная команда quant. Среди прочих аргументов она принимает метод квантизации. В интерфейсе llama.cpp, который используется под капотом, есть также полезная команда quantize --help, которая покажет много полезной информации по методам квантизации, в том числе какие из них рекомендуются в плане баланса качества модели, скорости инференса и размера файла. Я воспользовался методом q4_k_m:
python gptchain.py quant -m checkpoints/llama-3-70b-tagengo \
--method q4_k_m \
--save-path quants/llama-3-70b-tagengo \
--huggingface-repo llama-3-70b-tagengo-GGUF
Для Llama 3 70B непосредственно квантизация занимает примерно полчаса, перед этим еще произойдет сборка llama.cpp из C++ исходников, что необходимо для конвертации весов модели в GGUF формат.
В итоге вы получите файл gguf в папке quants, его можно запустить с помощью llama.cpp.
Я задал модели тот же вопрос "Из чего состоит нейронная сеть?", и модель начинала генерировать просто completion - завершила фразу, выдала в конце токен end-of-text и остановилась.
Это потому, что я не задал формат промпта. Здесь ведь нет автоматической конвертации инпута в формат СhatML, которую мне обеспечивал Unsloth при инференсе несжатой модели.
Я задал формат ChatML вручную и запустил еще раз:
llama.cpp/main -m quants/llama-3-70b-tagengo-unsloth.Q4_K_M.gguf \
-p "<|im_start|>user \nИз чего состоит нейронная сеть?<|im_end|>"
Модель на этот раз поняла, что от нее хотят. Она сгенерировала ответ в нужном формате.
Это такой же развернутый ответ в том же стиле, что у несжатой модели. Но инференс GGUF значительно медленнее, чем на GPU. Зато вы можете запустить этот файл на любом компьютере, лишь бы хватило мощности CPU, иначе инференс будет длиться вечность.
Однако ближе к концу ответа модель стала генерировать странную последовательность обратных слэшей и других символов. У несжатой модели такого дефекта не было. Возможно, если бы файнтюнинг был проведен полностью, эта проблема бы не возникла.
Тем не менее, в целом мне понравилось качество ответов обеих моделей - с квантизацией и без. Я бы хотел протестировать свою модель на разных бенчмарках, например MT-Bench, в особенности меня интересуют результаты для русского языка. Это, вероятно, тема для новой статьи. А пока я рекомендую посмотреть видео о том, как происходил файнтюнинг, описанный в этой статье.
Веса моей модели можно скачать с Huggingface:
Я Саша, .NET Fullstack разработчик. Недавно разработал парсер Google Images. Он позволяет за 3-5 минут собрать сотни изображений из выдачи Google по картинкам и опубликовать на ваш Wordpress сайт. Дополнительные опции:
уникализация изображений (изменение размеров, добавление рамок, вставка в PSD шаблоны, водяные знаки)
генерация или рерайт описаний через ChatGPT API (OpenAI)
альтернативные площадки: парсинг Яндекс картинок, фотостоков (Pixabay, Pexels, Shutterstock), cоциальных сетей: ВК Фото, Instagram
публикация в базу данных, а также в популярные CMS (Joomla, DLE, Tilda, Shopify, Woocommerce)
Хотите протестировать демо, пишите в тг
Слушайте трейлер первого тематического сезона «Стартап-секретов» и готовьтесь к выходу первого эпизода.
Весь этот месяц я провожу по три интервью в неделю, чтобы создать самую подробную картину жизни стартапов на нейросетях. Какие деньги зарабатывают. Какие проблемы испытывают. Где находят финансирование.
Я отошел от стандартного формата 1 выпуск = 1 гость. Теперь за 1,5 часа можно услышать истории трех основателей в одной нише, но с разными продуктами, успехами и трудностями.
Вас ждут 30 интервью, собранных в 10 тематических выпусков с основателями стартапов из всех областей: от транскрибаторов и генераторов картинок до медицинских стартапов с ИИ.
Как вы понимаете, это сложнее, но и более информативно.
А еще я превращаю полные интервью и невошедшие в подкаст материалы в конспекты, на основе которых создаю базу знаний по ИИ-стартапам. Ранний доступ к ней можно получить на сайте подкаста.
Поддерживает спец-сезон Yandex Cloud, за что им большое спасибо!
Надеюсь, вы оцените мой труд и примените эти знания для ваших проектов 🌚
Первый выпуск уже завтра! Где подписаться:
🎵 Яндекс • 🎵 Apple • 📺 YouTube • 🎵 Spotify • 🌐 На сайте подкаста
Дорогие друзья! 🥰🥳🎉 Сегодня — День ароматного жарко́го! 🍖🔥🔥 Представьте себе, как ароматы сочного мяса и ароматных специй наполняют воздух, заставляя желудки урчать от предвкушения! 🍗🌶🧄 Это настоящий праздник для гурманов и ценителей кулинарных шедевров! 👨🍳
Так давайте же отпразднуем этот замечательный день вместе! 🎉🎊🥳 Я желаю вам насладиться каждым ароматным и восхитительным кусочком сочного жаркого! 🍽🍽🍽 Пусть ваш стол будет полон вкусностей, а ваши улыбки сияют ярче, чем огонь в камине! 🔥🔥💕 Ведь нет ничего лучше, чем разделить этот волшебный момент с близкими людьми. 🥰🤗🥰
С Днем ароматного жаркого, мои дорогие! 🎉🎉🎉 Пусть он принесет вам только положительные эмоции и незабываемые вкусовые впечатления! 😍😍😍 Наслаждайтесь каждым кусочком, и пусть ваше настроение будет таким же горячим и пряным, как это удивительное блюдо! 🔥🔥🔥 Я желаю вам самой потрясающей праздничной трапезы! 🍽🍽🍽 🥳🥳🥳
Для всех поклонников футбола Hisense подготовил крутой конкурс в соцсетях. Попытайте удачу, чтобы получить классный мерч и технику от глобального партнера чемпионата.
А если не любите полагаться на случай и сразу отправляетесь за техникой Hisense, не прячьте далеко чек. Загрузите на сайт и получите подписку на Wink на 3 месяца в подарок.
Реклама ООО «Горенье БТ», ИНН: 7704722037
Мы часто сталкиваемся как студенты и научные сотрудники применяют ботов (ChatGPT, Алиса и др) в своей работе, даже не замечая на сколько сильно падает качество научных текстов.
Скажите как часто вы пользуетесь подобными сервисами и в каком формате?
Написание полноценных текстов и публикаций или частичное дополнение?