Обновить
4
0

Пользователь

Отправить сообщение

Книга: «Строим LLM с нуля»

Время на прочтение3 мин
Количество просмотров11K

Привет, Хаброжители! Говорят, что физик Ричард Фейнман однажды сказал: «Я не понимаю того, чего не могу создать». Основываясь на этом же важном принципе, автор бестселлеров Себастьян Рашка шаг за шагом ведет вас к созданию LLM в стиле GPT, которую вы сможете запустить на своем ноутбуке. Это увлекательная книга, которая охватывает каждый этап процесса — от планирования и кодирования до обучения и тонкой настройки.

Читать далее

Отсекая лишнее: как сократить бинарный код программы на C++ и не потерять нужную функциональность

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров6.6K

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

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

Меня зовут Максим Гончаров, и я расскажу, как мы оптимизировали кодовую базу на C++ по размеру конечного образа, чтобы новые фичи были доступны на всех уже работающих у заказчиков серверах.

Читать далее

Мой первый pet-проект: процесс-менеджер synd3

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.4K

Всем привет!

Пишу этот пост, чтобы поделиться своим опытом и получить критику или советы от людей с большим опытом.

Мне 22 года, я из Латвии. По образованию я судовой механик, но уже около 4 лет увлекаюсь программированием. Долгое время это оставалось хобби: пробовал сайты, простые игры — но они не приносили настоящего удовольствия. Я считал, что в программировании нужно было разбираться ещё со школы, и долго не верил, что могу найти себя в этой сфере.

Переломный момент наступил, когда я заинтересовался системным программированием. Каждый раз, когда узнаю, как работает низкоуровневая часть ОС, у меня будто открывается новый мир. Особенно зацепила тема процессорного планирования: все говорят «железо, CPU, видеокарта», но на практике даже реализация планировщика процессов может заметно влиять на производительность.

Читать далее

Задачи по алгоритмам: избавляемся от анаграмм

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2K

Задача с LeetCode.

Дан массив слов words. Слово содержит латинские буквы в нижнем регистре a-z. Проверить пары смежных слов (w_i, w_{i+1}) и удалить w_{i+1}, когда w_i и w_{i+1} - анаграммы.

Найдем группы смежных анаграмм и оставим в массиве первую строку каждой группы.

Читать далее

RL (RLM): Разбираемся вместе

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.7K

Всем привет! Недавно я познакомился с курсом по глубокому обучению с подкреплением от HuggingFace Deep Reinforcement Learning Course и захотел сделать выжимку самого интересного. Эта статья — своего рода шпаргалка по основам Reinforcement Learning (RL) и одному из ключевых алгоритмов — PPO, который лежит в основе тонкой настройки современных LLM (Large Language Models).

Читать далее

Категории типов. Часть 4. Монады

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров4.2K

И вот, в четвёртой части обзора мы наконец-то встретимся с главным героем! Мы рассмотрим анатомию и морфологию монад и попробуем выяснить, почему их бывает сложно композировать. Попутно познакомимся с аппликативными функторами и комонадами.

Читать далее

Реализация DOM-подобных структур данных на C++

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров4.6K

Это третья статья в серии про DOM-подобные модели данных в различных языках программирования.

Ранее мы рассмотрели что такое DOM-подобные структуры данных и как оценить их поддержку языках программирования и препарировали JavaScript.

Сегодня мы проверим как с Card DOM справится С++.

Читать далее

Настоящий тест для языков программирования — как они справляются с DOM-подобными структурами данных

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.8K

Большинство тестов языков программирования — это синтетика. Мы сравниваем скорость сортировки массивов, подсчёт аллокаций и другие упражнения, которые почти не встречаются в реальной жизни.

А вот настоящие приложения — редакторы, движки, интерфейсы, базы данных — живут совсем в другом мире. Они управляют не числами, а сложными структурами объектов. И если присмотреться, почти все эти структуры сводятся к одной универсальной модели: DOM-подобному графу.

Читать далее

Новый сезон «Битовых масок» — подкаста о системном программировании и разработке процессоров

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров3K

В «Битовых масках» — подкасте «Истового инженера» — ведущие знакомят слушателей с инженерами, преподавателями и энтузиастами, которые делают железо и низкоуровневое ПО понятнее, ближе и интереснее.

В обширном списке тем — современные инструменты проектирования, open-source-инициативы, архитектуры процессоров, компиляторы, история вычислительной техники. В этом посте мы расскажем о самых известных гостях «Битовых масок» и поделимся планами по нему.

Читать далее

Как я с помощью LLM писал эмулятор ZX Spectrum

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров5.2K

... или может ли ИИ заменить программиста? Сейчас со всех сторон долбят про то, как ИИ помогает в жизни и вообще, если ты не используешь ИИ, то ты в отстающих и лузер. Я к этому отношусь спокойно, ибо мои занятия совершенно не допускают использование ИИ из-за очень большой цены ошибки, но долбежка все-таки делает свое дело. Плюс как-то внезапно обнаружил, что у (не реклама) cloud.ru доступны Foundation Models (они же БЯМ, они же LLM) без оплаты. Понятное дело, тестовый период и прочее, но использовать можно. Но просто мучать модельки вопросами уровня «сколько цифр в слове» смысла мало, поэтому решил попробовать сделать что-то хоть капельку полезного и получить собственный ответ на вопрос пригодности БЯМ. Результат для нетерпеливых тут https://github.com/kiltum/zxgo

Далее несколько абзацев истории, чтобы просто было понятно, каким путем я шел до результата. Скажу честно, выбор места приложения сил БЯМки был сделан довольно быстро: напиши мне много кода. Раз пока все бесплатно, выбрал самый большой Qwen и предложил ему написать эмулятор КР580ВМ80А (он же Intel 8080), причем на питоне. И внезапно, он с первой попытки сгенерил что-то очень похожее на правду. Хмыкнув, я нашел образ ПЗУ от Радио-86 и зарядил еще пару десятков запросов. Вскоре я с глубоким удовлетворением увидел в окошке заветное «РАДИО 86-РК» и следом «-->». 

Немного порадовавшись результату, я преисполнился энтузиазма и решил поднять ставки. Z80 и ZX Spectrum! Культовая машина, все нюансы которой разложены по полочкам и по которой документации на порядки больше, чем для «радио»,«микроши» и «специалиста» вместе взятых. А чтобы было совсем хардкорно, основным языком я выбрал С++.

Читать далее

Подробно о неопределённом поведении в С и C++

Время на прочтение24 мин
Количество просмотров11K

При работе с C или C++ необходимо в какой-то степени разбираться в неопределённом поведении (UB): что это такое, каковы его эффекты, и как о него не споткнуться. Для простоты картины я буду в этой статье рассказывать только о C, но всё изложенное здесь также применимо и к C++, если явно не указано иное.

Читать далее

XEH — редактор с живым кодом и путешествиями во времени

Время на прочтение4 мин
Количество просмотров7.4K

Заметка про экспериментальный редактор кода. Создавался для исследования бинарных данных. Графический клиент, консольный интерфейс и встраиваемая библиотека.

Основная идея - каждое изменение мгновенно применяется, любое изменение можно отменить. Концепция похожа на систему контроля версий, только работает не с текстом, а с памятью программы. Понравилось - фиксируешь, не понравилось - откатываешь.

Примечательные возможности: Живой кодинг. Создание контрольных точек. Отладка с перемещением во времени. Смещения, адреса и размеры в битах (да, если в байте 7 или 9 бит). Тэгирование данных.

Читать далее

Платотерапия: как я собрал свои Arduino UNO и Digispark с нуля

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров9.5K

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

Эта статья — рассказ о том, как я собрал клоны Arduino UNO и Digispark, сделал три разные платы расширения своими руками и протестировал две из них, купленные в магазине.

Попробуем сделать Arduino UNO DIY — свой ответ Arduino UNO Q.

Читать далее

Как работает система владений и ссылок в Rust на низком уровне

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров6K

Привет Хабр! В этой статье я хотел поговорить о теме вечных конфликтов разработчиков на C++ и Rust. Стоит ли того система управления памятью в Rust или все-же это бестолковый механизм стремящийся составить конкуренцию родному методу?

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

Читать далее

Мы решили задачу омографов и ударений в русском языке

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров11K

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

Несмотря на кажущуюся простоту (задача по сути является бинарной классификацией, число кейсов с тремя валидными вариантами ничтожно мало), задача является просто кладезем различных "мин замедленного действия" и типичных граблей в сфере машинного обучения. Да, задачу "ёфикации" (расстановка буквы ё там, где люди её поленились поставить) мы считаем частным случаем задачи простановки ударений и омографов.

Также мы опубликовали наше продуктовое решение для простановки ударений (в омографах в том числе) в рамках репозитория silero-stress и также напрямую через pypi. В ближайшее время добавим эту модель и обновим наши публичные модели синтеза и раскатим более мощную "большую" (тоже маленькую по современным меркам) версию модели в приватные сервисы и для клиентов. Также мы опубликовали бенчмарки качества и скорости публичных академических решений … и там всё очень неоднозначно.

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

Сели, налили, читаем

Лучшие задачи о взвешиваниях монет (шаров, таблеток)

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров2.4K

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

Для начала немного теории:

Из книги Д.А. Михалин, И.М. Никонов, Одна задача о нахождении фальшивой монеты, Матем. просв., 2007, выпуск 11, 149–158:

Максимальное число монет Q1, среди которых можно найти фальшивую и определить ее относительный вес за k взвешиваний определяется по формуле:

Q1 = (3k – 3)/2

Максимальное число монет Q2, среди которых можно найти фальшивую, не определяя ее относительный вес за k взвешиваний определяется по формуле:

Q2 = (3k – 1)/2

Максимальное число монет Q3, среди которых можно найти фальшивую, не определяя ее относительный вес за k взвешиваний, когда в распоряжении есть одна настоящая монета определяется по формуле:

Q3 = (3k + 1)/2

Таким образом, Q1, Q2 и Q3 для двух взвешиваний равно, соответственно, 3, 4 и 5 монет. Q1, Q2 и Q3 для трех взвешиваний равно, соответственно, 12, 13 и 14 монет.

Читать далее

Слёзы, баги и C++: как Isaac стал легендарной игрой

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров5.7K

Привет, Хабр!

Помню, как впервые запустил The Binding of Isaac: стартовая комната без подсказок, закрытые двери, на миникарте пусто. Пара забегов и у меня уже список технических вопросов по генерации этажей, приоритетам предметов, поведению врагов, рендеру и производительности. В тот момент я решил написать эту статью.

Сегодня я расскажу о разработке культовой инди-игры The Binding of Isaac и разберу технические нюансы: путь от Flash к C++, как собирается план этажа, как устроены большие комнаты и секретки, по каким правилам живут эффекты предметов и их синергии, как Lua-скрипты встраиваются в движок для модов, где в архитектуре сделаны осознанные компромиссы.

Читать полную историю

Руководство по Rust для посредственного программиста

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров11K

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

По этой причине я всегда избегал более академических языков вроде OCaml, Haskell, Clojure и тому подобных. Я знаю, что это хорошие языки — люди намного умнее меня строят с их помощью потрясающие вещи, — но к тому моменту, когда я слышу слово «эндофунктор», я теряю всё внимание (и большую часть интереса к вопросу). Мои любимые языки — те, что требуют меньше интеллектуальных усилий: C, PHP, Python и Ruby.

Так что довольно занятно, что я с большим рвением принялся за Rust. Это, безусловно, самый сложный язык, с которым я чувствую себя хотя бы отдалённо комфортно «в бою». Отчасти потому, что я собрал набор принципов, позволяющих почти полностью избегать ссор с ужасающим механизмом контроля заимствования, временем жизни и прочими тёмными, пугающими уголками Rust. А ещё потому, что Rust помогает мне писать лучшее ПО, и я это чувствую (почти) всё время.

В духе помощи моим товарищам‑посредственным программистам, которые пытаются освоить Rust, ниже я представляю принципы, которые я собрал на данный момент. Поехали!

Читать далее

Нейросети «на пальцах». Часть 1. От формулы простой линии к искусственному нейрону

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.7K

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

Эта ситуация подтолкнула автора к идее: при помощи ChatGPT, Википедии и ряда других источников постепенно, шаг за шагом, разобрать ключевые математические формулы и принципы работы нейросетей. Результатом станет пошаговый «гайд», который проведёт читателя от самых простых понятий школьной математики к пониманию основ современных нейросетей, а в перспективе — к их программированию.

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

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

Читать далее

Эволюция подходов к написанию корутин от Си до С++20. Часть 1. Функция+макросы=корутина

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров5.8K

Когда речь заходит о корутинах (сопрограммах) на С++, большинство программистов вспоминает фреймворк coroutine_ts, появившийся в стандарте С++20. Многие даже не догадываются о том, что писать корутины можно было задолго до появления упомянутого стандарта. При этом можно было использовать не только С++, но и Си. Данной статьей я открываю серию, в которой хочу описать свой личный опыт изучения корутин и привести примеры их использования. Надеюсь мои статьи помогут начинающим разобраться в этой сложной и интересной теме.

Читать далее

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность