Сообщество - Лига программистов
Добавить пост

Лига программистов

1 520 постов 11 428 подписчиков

Популярные теги в сообществе:

Как использовать ИИ в программировании? Рассказывает разработчик

Своим опытом укрощения ИИ поделился Алексей Мартынов, программный директор Яндекс Практикума. Он рассказал, какие нейросети пригодятся разработчику и для чего. А еще на реальном кейсе показал, как их использовать, и дал советы новичкам.

Как использовать ИИ в программировании? Рассказывает разработчик Программирование, Обучение, IT, Личный опыт, Нейронные сети, Искусственный интеллект, Длиннопост, Блоги компаний

Какие нейросети я рекомендую для работы программисту

Github Copilot

Для чего пригодится: ИИ-копилот позволяет быстро разрабатывать и находить проблемы в коде, повышая производительность опытных разработчиков в разы.

Вместе с редактором WebStorm выводит скорость написания кода на новый уровень. Но, конечно, при правильном применении. Новичкам в разработке, вероятно, будет мешать. Но если вы знаете, что вам нужно получить, подготовите контекст и запросите генерацию, то получите строго необходимый результат.

По сравнению с Amazon Whispers эта нейросеть работает несравнимо лучше. Сейчас JetBrains еще предлагает собственный AI-помощник в редакторе, но пока мало успел им попользоваться и не составил точного мнения. Хотя теоретически он должен работать лучше.

ChatGPT-4o

Для чего пригодится: GPT в новой версии отлично справляется с анализом графических изображений, неплохо переводит UML-диаграммы в код. Или, например, может выполнять несложную верстку по изображению.

Чат и до этого был неплохим помощником при проверке кода, генерации болванок и сниппетов. Но теперь, с расширенным контекстом и лучшим распознаванием изображений, обрел много новых вариантов применения.

Автоматизировать работу также поможет YandexGPT. Нейросеть ответит на вопросы по коду, объяснит работу алгоритмов и структуры данных.

Google TensorFlow

Для чего пригодится: это и все остальные решения требуют уже гораздо более глубокого погружения, но меняют сам подход к работе с кодом. Теперь программы — это набор действий, а их порядок может определяться моделями машинного обучения.

Google TensorFlow — это не только про анализ данных, но в том числе и отличное средство для формирования обучаемых программных систем на стыке обычного кода и машинного обучения. Очень производительное API, достаточно удобно встраиваемое в код.

Если вы только начинаете свой путь в разработке, но очень хотите попробовать нейросети в деле, перед этим пройдите наш бесплатный курс по основам программирования, чтобы лучше понимать код. А потом при желании можете освоить бесплатные курсы с базой по Python-разработке и Go.

Насколько нейросети экономят разработчику время

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

Мало того, в GPT, например, можно создавать агенты, которые могут даже исполнять произвольные действия. Аналогично используя API, можно реализовать и у себя на компьютере или сервере и использовать в повседневной работе. Такое применение устраняет большую часть рутины и может экономить до 60–70% времени, позволяя сконцентрироваться на важных задачах.

А теперь давайте разберем работу с ИИ на конкретном кейсе

Примеров применения нейросетей в программировании много, но мало какой кейс влезет в короткий текст, так как ежедневно используется в больших проектах. Из небольшого — это, например, быстрое прототипирование онлайн-сервиса для обрезки изображений в качестве учебного примера. Использовались Github Copilot и ChatGPT-4o.

```copilot

generate open api swagger defenition for photo crop service with following routes:

— post request for files upload return id for each file

— get request with id parameter for download image preview

— post request for croping array of prevoiously uploaded files by id and crop settings, return task id

— get request for downloading zip archive by task id

```

Генерация промежуточных типов, конфигов, описаний API и прочего значительно улучшает последующие результаты, но их нужно отсматривать и корректировать. После этого можно подготовить и настроить проектную директорию для бекэнда и сгенерировать сервер.

```

With open api defenition in api.yaml file generate routes realisation for express server using multer for file handling. Use unique identifiers for uploaded file names based on uuid package.

```

Причесываем код, устраняем ошибки. При генерации их всегда хватает, но можно скормить его GPT и попросить найти ошибки или предложить улучшения и т. д. Почему не в копилот? Чтобы не загрязнять его контекст, да и непосредственно с анализом и доработкой GPT справляется лучше, а у Copilot генерация первичная на лучшем уровне благодаря проектному контексту.

Подготавливаем заготовку фронта на реакт и генерируем основные компоненты.

Для загрузки:

```

Generate typescript react component for drag and drop uploading single file to the server using this api. Component should have a setFile(fileID) prop callback called when file uploaded and pass file id to them.

```

Для кроп зоны:

```

Generate typescript react component and corresponding styles for display and edit crop zone for uploaded image. Component should accept in props imageUrl, onChange and value for crop zone editing.

```

Вуаля, осталось собрать все это вместе, исправить ошибки и т. д.

Советы программистам, которые хотят освоить нейросети для работы

  • Не полагайтесь на код который выдает нейросеть, чтобы работать с ним вы должны знать его значительно лучше чем она и работать с ним очень внимательно. Запросы формируйте максимально конкретно: указывайте детали, дополнительный контекст, ограничения и пр.

  • Используйте нейросети для быстрого прототипирования какого-то решения, после чего его можно декомпозировать уже более детально и прописать требования и ограничения для каждой части. А уже с этими требованиями сгенерировать более годный код.

  • Не пускайте код от нейросети в прод: в нем изобилуют уязвимости, разного рода ошибки и не самые оптимальные решения. Но это хорошая болванка, чтобы не забивать кучу лишнего.

  • Не пытайтесь сгенерировать сразу все :) Чем меньшими шагами вы движетесь, тем лучше результат получаете.

  • Если вы начинающий разработчик, не генерируйте код. Лучше отправлять его части на проверку в нейросеть — вот это будет полезно.

Для тех, кто хочет войти в мир программирования, но пока сомневается, мы приготовили бесплатный тест на профориентацию. Его разработали методисты МГУ и Яндекс Практикума: он проанализирует ваши навыки, опыт и предложит подходящие специальности.

А наши бесплатные курсы помогут узнать о разных профессиях в IT, попробовать себя в них и определиться с направлением.

Реклама ООО «Яндекс», ИНН: 7736207543

Показать полностью 1

Ответ на пост «Почему айтишникам платят много и туда не попасть»

Потому, что IT на высшем уровне - это о том, чтобы не делать одну и ту же работу два раза, отказ от ручного труда, а для этого нужно каждый раз проводить НИОКР - не все могут строго декомпозировать, формализовать и алгоритмизировать задачу на компоненты, которые можно переиспользовать.

Бенчмарки больших языковых моделей. Мультиязычный MT-Bench

Всем привет! Эта статья дает практические рекомендации по оценке языковых моделей на известных бенчмарках и является полезным дополнением к видео про обучение LLM на канале Ruslan Dev на YouTube.

В последнее время я занимался файнтюнингом Llama 3 на открытых датасетах, а сейчас планирую собрать собственный датасет для новых экспериментов. Встает вопрос, как оценивать эффективность обучения.

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

Например, есть GLUE (General Language Understanding Evaluation), оценка общего понимания естественного языка. Оценивает в том числе способность модели отвечать на вопросы, логическую связность и sentiment analysis - умение распознавать эмоциональную окраску. Это обширная область задач, и одного GLUE-бенчмарка явно мало, чтобы как следует оценить общее понимание моделью естественного языка, поэтому существуют другие тестовые наборы, например, SuperGLUE и MMLU (Massive Multitask Language Understanding). Последний бенчмарк оценивает, насколько хорошо в среднем модель понимает сложные вопросы из разных категорий - гуманитарной, социальной, STEM - то есть точные науки и естествознание.

Есть HellaSwag - это интересный бенчмарк, составленный из непростых вопросов, которые проверяют модель на здравый смысл, common sense. HellaSwag датасет содержит текстовое описание события, записанного на видео, и несколько вариантов завершения этого события, только один из которых правильный.

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

Исследователи, создавшие бенчмарк, предположили, что нейросеть врет, галлюцинирует и так далее, по двум причинам -

  • недостаток данных по некоторым предметам при обучении

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

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

Естественно, возникает вопрос, как именно авторы TruthfulQA определяют, что правда, а что нет.

Принцип такой: если ответ буквально описывает реальное явление без искажений, то это правда. Даже если утверждение не относится к теме вопроса. То есть модель может все время отвечать: "Курица - это птица" и у нее будет высокая оценка. Модель может просто говорить "я не знаю", это тоже не будет ложью.

Поэтому есть еще один критерий - информативность, по которому оценивают, насколько полезен ответ и относится ли он к теме вопроса. Интересно, что когда TruthfulQA впервые появился, в 2021 году, у модели GPT-3 только 58% ответов показали правду на этом бенчмарке, а правдивых и притом информативных ответов было только 21%, то есть примерно один ответ из пяти был реально полезен.

Есть другие бенчмарки для разных задач, например HumanEval и CodeXGLUE на задачи, связанные с программированием и пониманием кода. Есть API-Bank, который оценивает, насколько хорошо модель может интегрироваться с другими системами посредством API. Все это очень актуально для систем вроде того же GPT-4 Omni, которые используют веб-поиск, вызов функций, Retrieval Augmented Generation и так далее.

Но сегодня я хочу остановиться на одном бенчмарке и продемонстрировать evaluation на нем -MT-Bench (Multi-Turn Benchmark). Он тестирует поведение модели в разных ситуациях, которые могут возникнуть в диалоге. Набор промптов содержит разные категории запросов - гуманитарные, математические, кодинг и другие.

Меня особенно интересует мультиязычный MT-Bench. Чтобы оценить с его помощью свою модель, я склонировал код бенчмарка с Github:

git clone https://github.com/Peter-Devine/multilingual_mt_bench.git

Еvaluation скрипты находятся в папке multilingual_mt_bench/fastchat/llm_judge. Но сначала нужно сначала установить зависимости. Для этого склонируйте другой репозиторий -

git clone https://github.com/lm-sys/FastChat.git

cd FastChat

pip install -e ".[model_worker,llm_judge]"

Теперь можно приступить к оценке на MT-Bench. Первый скрипт из указанной выше папке скачивает веса модели, которую хотите оценить, и генерирует ответы на вопросы берчмарка. Например:

python gen_model_answer.py --model-path lightblue/suzume-llama-3-8B-multilingual \

--model-id suzume-llama-3-8B-multilingual

Здесь аргументом --model-path я передал путь к весам модели на Huggingface, а --model-id - это имя модели, под которым я сохраню файл с ее ответами на вопросы бенчмарка.

После завершения скрипта - на видеокарте A100 в облачном сервисе immers.cloud, модель с 8 миллиардами параметров справилась с бенчмарком за 23 минуты - файл с ответами сохранился в папку data/mt_bench/model_answer.

Важно отметить, что вопросы и ответы в файле - на английском. Но, как я уже сказал, это мультиязычная версия MT-Bench, и здесь можно сгенерировать отдельный файл ответов, например, на русском:

python gen_model_answer.py --model-path lightblue/suzume-llama-3-8B-multilingual \

--model-id suzume-llama-3-8B-multilingual \

--bench-name ru_mt_bench

Теперь нужно оценить, насколько хорошо справилась модель. Второй скрипт позволяет использовать сильную LLM, например GPT-4, в качестве судьи - она получит на вход пару вопрос-ответ из файла, сгенерированного на предыдущем шаге, и выставит оценку по 10-балльной шкале, а также напишет свой комментарий, объясняющий оценку.

export OPENAI_API_KEY=XXXXXX # экспортируйте свой ключ OPENAI_API_KEY

python gen_judgment.py --model-list suzume-llama-3-8B-multilingual \

--parallel 2

Аргументом --model-list передаете список имен моделей (через пробел), ответы которых хотите оценить. Для каждой модели должен быть сгенерирован файл ответов.

По умолчанию судьей будет GPT-4, но вы можете передать аргумент --judge-model, чтобы использовать в качестве судьи другую модель. Например, почему бы не последнюю GPT-4o?

Аргумент --parallel устанавливает число параллельных вызовов API.

Когда оценка закончится, появится файл в папке data/mt_bench/model_judgement. В нем вы можете найти оценки каждой пары с комментариями модели-судьи.

Теперь можете выполнить:

python show_result.py

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

Рекомендую посмотреть мое видео, где все описанные шаги продемонстрированы наглядно.

Показать полностью

На территории России перестал работать DockerHub

Сегодня утром при попытке создать образ возникла проблема к попытке подключения к dockerhub. Причем эти люди с альтернативными сексуальными предпочтениями даже не указали Россию в список стран под запретом:

403 Forbidden Since Docker is a US company, we must comply with US export control regulations. In an effort to comply with these, we now block all IP addresses that are located in Cuba, Iran, North Korea, Republic of Crimea, Sudan, and Syria. If you are not in one of these cities, countries, or regions and are blocked, please reach out to https://hub.docker.com/support/contact/

Думаю, для тех кто знаком с данным сервисом понимают последствия.

Решение появилось достаточно быстро - https://huecker.io/. Также при работе через VPN проблем также не возникает

На территории России перестал работать DockerHub Санкции, Программирование, Разработка, Docker, IT

Вопрос по проектированию софта

Всем привет!

Я обычный программист город Тверь, никогда не проектировал софт и не был архитектором.

Но очень горю желанием сделать наконец уже свой серьезный проект.

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

Я надеюсь, что здесь есть люди, которые в этом разбираются, и которые были бы рады помочь неофиту.

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

  1. Составить документы по 5 конкурентам, в которых перечислить:

    - Функционал детально

    - Страницы, пункты меню

    - Entities и их поля

    - Взаимосвязи, сценарии

    - Какие есть роли

    - Функционал по разным ролям

    - Что редактируется, когда редактируется, кем редактируется

  2. Смержить эти документы и получить MVP, в котором будет прописан функционал, entities and fields, взаимосвязи и сценарии, роли, функционал по ролям и т.д.

  3. На основе выше полученного спроектировать базу данных.

  4. Потом разбить на задачи по страницам, по сценариям, по ролям.

  5. Детально прописать задачи, какие поля на странице, какие placeholders, опции селектов.

  6. Заказать реализацию дизайна для каждой задачи.

  7. Начать реализацию кода.

Подскажите пожалуйста, все ли я правильно понял, и может быть я что-то упустил?

Вопрос по проектированию софта Разработка, Программирование, Проект, Вопрос, Спроси Пикабу
Показать полностью 1

Файнтюнинг и квантизация Llama-3 70B

Всем привет, в последние годы я исследую Искусственный Интеллект, мой контент об этом можно найти на канале 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:

git clone https://github.com/RuslanPeresy/gptchain.git

И устанавливаю его зависимости:

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.

Как настроить фоновый процесс для файнтюнинга через systemd:

Я создал файл 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 автоматически и экспортирует метрики в реальном времени.

Внутри команды train (вкратце) происходит следующее:

К базовой модели применяется 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:

https://huggingface.co/ruslandev/llama-3-70b-tagengo

https://huggingface.co/ruslandev/llama-3-70b-tagengo-GGUF

Показать полностью

Что это за голос речевого синтезатора?

Помогите пожалуйста найти, какой синтезатор речи это озвучивает:

Влёт В IT С Двух Ног: Ультимативный Гайд По Эффективному Обучению

Постараюсь ужать многолетний опыт изучения навыков в одну малюсенькую статейку. Расскажу , как на практике освоить набор навыков любого размера, включая все необходимое, чтобы получить первую работу в IT. Объясню пошагово, как создать и придерживаться очень практичного и эффективного индивидуального плана обучения, по которому я сам занимался, в результате чего из полного чайника без диплома и платных курсов за пол года смог влететь в разработку на высококонкурентном рынке с 1000+ откликов на вакансию во времена массовых увольнений сразу в топовую IT‑компанию без связей, накрутки опыта и ментора и даже успешно пройти там испыталку, ведь план обучения позволил накопить багаж полезных знаний.

Правильный план обучения — это 70% получения работы. По этому плану ты сможешь освоить программирование без покупки курсов, то есть стать программистом бесплатно. Да и любой другой скилл или профессию тоже сможешь быстро и бесплатно получить, что сейчас особенно актуально с этим ИИ. Гарантирую, что по этому плану за короткий срок ты добьёшься больших результатов, а это автоматически значит, что потребуется тяжелая работа с твоей стороны. В конце статьи также будет секретный ингредиент, о котором никто не говорит и который может сделать процесс твоего обучения чуть ли не вдвое более эффективным. Ещё я приведу пример реального плана обучения и объясню, почему каждый его пункт настолько логичен, что ты просто не сможешь ему не придерживаться. Цель плана ‑получить максимальный результат при минимальных затратах времени и сил.

Почему вообще нужно составлять план обучения самому? Нельзя что ли чей‑то готовый роудмап найти или курс купить, где план уже есть? Составлять план самому — суперважно, потому что когда ты понимаешь, что и зачем в нём делается и насколько это действительно эффективно, то и придерживаться этого плана становится гораздо проще, так как мотивация просто не пропадает. Да и если что‑то в плане не работает, можно всегда его подкорректировать, это же твой собственный план. Поняв, что работает, а что нет, ты в будущем сможешь создавать эффективные планы для освоения любых навыков, в том числе для выхода в синьеры‑помидоры, т.к. одного волшебного курса по становлению синьером вроде еще никто не запилил. Единственный доступный вариант — самому грамотно выстроить процесс обучения, чтобы результат был максимальным.

Самое простое в создании плана обучения — определить, какие именно навыки нужно приобрести. Для этого можно провести небольшое исследование и посмотреть требования к кандидатам на вакансии твоей будущей специализации. Учти, что учить стоит только то, что так или иначе повышает твой доход. Это значит, что стоит фокусироваться только на необходимых для получения работы знаниях и навыках, отметая все лишнее, в обратном случае будет сложно конкурировать с другими челами. Отметать, нужно, например, ассемблер или внутреннее устройство ОС, которые знать не обязательно и даже вредно. Некоторые говорят, что нужно же знать эту «базу», но объяснить зачем толком не могут. Выбрав необходимые для работы скиллы, нужно понять самое главное — как эффективно учиться. Это будет основой твоего плана обучения. Многим кажется, что они и так умеют учиться, но, если бы все это умели, никто бы не мучился с получением первой работы в IT, так как количество твоих навыков прямо пропорционально шансу получения работы. Основы обучения, о которых пойдет речь, очень практичны и я их сам уже много лет использую:

Практика

Практика — это самое важное. Хорошее соотношение практики и теории при обучении для новичков — 80% на 20%. То есть, если ты посмотрел 8-минутное видео, например, про декораторы в Python, то в IDE надо потом не меньше получаса с ними поиграться. Большинство людей практику скипают, потому что это гораздо сложнее, чем видосы смотреть. В итоге они застревают в так называемом «tutorial hell», то есть смотрят много контента, но на практике ничего сделать не могут, поэтому их навыки не развиваются.

Интервальные повторения

Непонимание интервальных повторений — причина, по которой 95% вкатунов сливаются в первые месяцы. Работает это так: когда ты что‑то учишь впервые,то это запоминается на пару дней. Если тему повторить через 2 дня после изучения, то запомнится она уже на 4 дня. Повторишь еще раз к концу четвертого дня — тема запомнится уже на целых 8 дней. Потом на 16, 32 и так далее. Бытует мнение, что в итоге доходишь до момента, где выученное запоминаешь на вечно, так, что повторять тему больше не надо. Хоть это и кажется нереальным, это действительно так работает, однако тому есть научное объяснение: допустим, ты повторяешь тему в девятый раз и теперь будешь помнить её ещё целый год. Если вовсе перестать ее повторять, то всё равно имеется почти 100% шанс того, что за этот год в работе ты случайно столкнёшься с этой темой и тебе придётся естественным образом достать информацию из мозга, просто чтобы совершить намеченное действие. Таким образом тема повторится сама по себе и еще лучше закрепится в голове. Затем вероятность того, чтобы ты случайно встретишь эту тему в работе за следующие 2 года возрастает еще сильнее и тем самым цикл замыкается, в результате чего ты запоминаешь тему как бы «на вечно»

Вот что происходит с теми, кто не применяет интервальные повторения: Допустим, им нужно выучить 15 ключевых навыков или больших тем для получения работы. Большинство новичков учат первые 9 навыков, потом приступают к 10-му, одновременно забывая первый. Потом учат 11-й, параллельно забывая второй и так далее. Они застревают на 9 из 15 необходимых тем или навыков и несмотря на все усилия, не могут преодолеть этот барьер, ведь скорость забывания слишком высока. Причина в том, что они не используют интервальные повторения. Они учат что‑то один раз и двигаются дальше, поэтому постоянно забывают то, что учили ранее. Но если использовать интервальные повторения и регулярно повторять пройденные темы, то можно выучить бесконечное количество навыков и тем, не забывая их. Самое важное в том, что интервальные повторения буквально гарантируют, что ты найдешь работу, потому что они обеспечивают постоянное расширение твоего набора навыков без его уменьшения. Это продолжается вплоть до момента, когда твой набор навыков достигает критической массы и ты становишься настолько хорош, что твой будущий работодатель уже просто не в состоянии игнорировать тебя (естественно надо еще получить навык поиска работы, но это уже отдельная тема).

Для внедрения интервальных повторений можно использовать карточки Anki. Карточки Anki — это приложение, используемое для обучения и запоминания. На лицевой стороне каждой карточки находится вопрос, на оборотной стороне — ответ. Карточки становятся доступны ровно в тот момент времени, в который это необходимо для наилучшего применения принципа интервальных повторений. Эти же карточки включают в себя и не менее важный принцип — принцип активного вспоминания.

Активное вспоминание

Активное вспоминание сводится к следующему высказыванию: твой мозг запоминает информацию не когда ты её откуда‑то получаешь, а именно когда извлекаешь её из мозга. Если, ты, например, прочтешь эту статью и сразу переключишься на следующую, то будешь что‑то помнить из этой статьи еще в течение примерно одного часа. Но если при прочтении статьи периодически останавливаться и объяснять себе концепции своими словами, то можно будет запомнить чуть ли не 100% информации статьи чуть ли не на целую неделю. Тот же результат можно достичь, если прочитать статью и в конце всю ее себе пересказать. Вот почему во время интервальных повторений необходимо как можно больше фокусироваться на активном вспоминании. Кстати, когда человек выполняет практические задания, это тоже автоматически является формой активного вспоминания, ведь ты работаешь с ранее изученной информацией и это является частью причины того, почему практические упражнения так эффективны.

Ты, наверное, задаешься вопросом, зачем запоминать что‑то, если можно просто использовать ChatGPT для получения быстрого ответа.

Чем больше полезной информации ты усвоишь и запомнишь, тем легче тебе будет понимать ответы ChatGPT и, что самое важное, сохранять эти ответы в краткосрочной памяти в виде части решения задачи, над которой сейчас работаешь. Ты также будешь глубже понимать ответы ChatGPT и даже вспоминать идеи, которые не были упомянуты в ответе.

Учись параллельно

Лучше работать над изучением одних и тех же трех навыков каждый день по часу и сосредотачиваться на них пару недель подряд, чем уделять по 3 часа в день одному навыку в течение нескольких дней и затем переходить к следующему. Это один из важнейших принципов. Я понятия не имею, почему он работает, но не обязательно понимать, как что‑то работает, чтобы это делать и получать ощутимый результат. Попробуй поучиться так и будешь поражен скоростью освоения навыков.

Фокусируйся на основах до полного их освоения

В чем заключается разница между профессионалом и любителем? Профессионал очень хорошо знает основы. Основы служат фундаментом для последующих тем, изучаемых в будущем. Например, чтобы быстрее освоить React, нужно знать JavaScript, и чем лучше ты знаешь этот язык, тем легче будет разобраться в React. Поэтому не торопись и досконально изучи компетенции, служащие основой для других компетенций.

Учись каждый день

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

Начинай каждый день с 10 минут вспоминания того, что учил вчера

Утром, перед началом нового дня, удели 10 минут, чтобы вспомнить все, что учил вчера. Это очень эффективно, так как первое повторение в течение первых 24 часов после изучения темы имеет огромный эффект на запоминание.

Секретный ингредиент

Теперь у тебя есть основные принципы создания плана обучения, но что насчет секретного ингредиента? Хотя все вышеперечисленные пункты идеально подходят для эффективного долгосрочного обучения, если ты стремишься получить работу, твоя цель не в том, чтобы изучить как можно больше всего, а в том, чтобы достичь уровня, где у тебя есть крутые проекты и ты можешь успешно пройти собеседование. В этом случае секретный ингредиент — интенсивность. Например: чтобы достичь такого же уровня навыков в программировании, который тебе нужен для успешного прохождения собеса, ты можешь либо потратить 1000 часов за полгода, либо 1500 часов за год. Заметили разницу? За 1000 часов достигается тот же результат, что и за 1500 часов. Это объясняется принципом работы интервальных повторений: чем больше проходит дней, тем больше времени нужно тратить на интервальные повторения, в обратном случае информация просто забудется. Поэтому если сжать временное окно, в которое ты достигаешь необходимого уровня навыков, скажем, с года до полу года, то таким образом можно значительно уменьшить общее количество часов, необходимых для достижения цели, и, следовательно, работать меньше, получая бОльшие результаты. Теперь ты знаешь, что должен включать твой план обучения.

Пример плана

Давай теперь посмотрим, как может выглядеть такой план на примере реального плана становления python backend разработчиком:

Влёт В IT С Двух Ног: Ультимативный Гайд По Эффективному Обучению IT, Программирование, Python, Карьера, Работа, Веб-разработка, Разработка, Удаленная работа, Программист, Длиннопост

Пример плана изучения python backend

Каждая колонка — это день, а каждая синяя ячейка — это как минимум 1 час сфокусированного базированного на практике обучения. Первый месяц ты параллельно учишь Python, SQL и алгосы (алгосы не в смысле заучки конкретных алгоритмов, а в смысле умения структурно думать и решать логичские задачки кодом, как, например, на codewars). Это то, что создает основу для всего остального, что ты будешь изучать. После этого добавляешь дни для вспоминания изученного, чтобы ничего не забыть. Далее начинаешь создавать проекты с использованием Django и подучивать немного фронтенд‑технологий, чтобы можно было потом показать рекрутеру хороший и красивый проект (хочешь работать беком? Учи фронтенд, чтоб тебя рекрутер не скипнул с твоими уродливыми проектами, понял да). Все это делаешь параллельно, а также учишь git для развития своего GitHub. Фокусируешься на создании проектов с Django до тех пор, пока не найдешь работу. Дополнительно добавляешь дни, в которые будешь повторять, что учил, чтобы ничего не забыть. Затем учишь параллельно Linux, PostgreSQL и Docker, завершая процесс изучением Django Rest Framework, одновременно повторяя все, что учил ранее. Как видишь, этот план включает в себя много практики, интервальных повторений и активного вспоминания. Ты учишь по нескольку предметов параллельно и сначала фокусируешься на основах. Ты учишься каждый день, начиная каждый день с 10 минут повторения того, что выучил вчера, что еще сильнее оптимизирует твое обучение. А занятия как минимум по 4 сфокусированных часа (а лучше — по 10) в день обеспечивают интенсивность, которая в полтора раза сокращает общее количество часов, необходимых на получение всех этих навыков.

Но как понять, какой конкретно курс проходить?

Короткий ответ состоит в том, что можно просто найти бесплатный курс и следовать ему, лично я предпочитаю использовать для этого YouTube. Бесплатные курсы обычно не содержат практических упражнений, являющихся самой важной частью обучения, поэтому упражнения на определенную тему придется отдельно искать в интернете. Или можно даже поступить еще лучше: когда смотришь курс и видишь пример кода, решающего конкретную проблему, попробуй придумать похожий код, решающий аналогичную проблему и поиграться с этим кодом в среде разработки. Это один из самых эффективных способов практики, который мне удалось найти.

Самое важное

Гарантирую, что, прочитав эту статью, ты потратил своё время зря, если не применил к ней вышеупомянутые принципы, так как забудешь все о чем я тут написал. Давай теперь объясню, как применить основные из этих принципов к любой статье или обучающему видео. Возьмем эту статью, например. Если ты проследуешь следующим нескольким шагам в течение следующих 5 минут, то это будут одни из самых полезных 5 минут в твоей жизни. Во‑первых, возьми свой телефон и скачай приложение под названием Anki Cards. Я не спонсирован этим приложением и не имею к нему никакого финансового отношения, поэтому у меня нет ссылки и тебе придется найти его самому. Шаг 2 — Перестань читать и прямо сейчас и попробуй вспомнить все, о чем я говорил. Объясни себе своими словами все, что удается вспомнить (да, прямо сейчас, я жду). Шаг 3. В зависимости от того, что удалось вспомнить, открой приложение Anki и создай несколько карточек об этой статье. Например: что такое интервальные повторения и как их применять? Что такое активное вспоминание? Какое лучшее соотношение между практикой и теорией для начинающих? Шаг 4. Сформируй привычку открывать это приложение время от времени, повторять карточки и добавлять новые о всем важном, что ты изучаешь в программировании. Лично я таким образом не только запомнил всё, что учил, но и ответил на 98% вопросов на своем первом в жизни собеседовании.

Показать полностью 1
Отличная работа, все прочитано!