Как стать автором
Обновить
22
0
Загорулькин Дмитрий @HDDimon

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

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

Вкатываемся в Machine Learning с нуля за ноль рублей: что, где, в какой последовательности изучить

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

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

Читать далее
Всего голосов 159: ↑157 и ↓2 +155
Комментарии 44

Русский LLM-помощник (saiga) с кэшем, используя RAG (Retrieval-Augmented Generation)

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

Используя технику Retrieval-Augmented Generation ("Поисковая расширенная генерация"), мы настроим русскоязычного бота, который будет отвечать на вопросы потенциальных работников для выдуманного свечного завода в городе Градск.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 11

7 направлений оптимизации ClickHouse, которые помогают в BI

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

Привет, Хабр! Меня зовут Никита Ильин, я занимаюсь разработкой архитектуры BI-платформы Visiology. Сегодня мы поговорим про оптимизацию ClickHouse — ведущей СУБД, которую все чаще используют для решения задач аналитики на больших объемах данных. В этой статье я расскажу, почему важно оптимизировать ClickHouse, в каких направлениях это можно делать, и почему разумный подход к размещению информации, кэшированию и индексированию особенно важен с точки зрения производительности BI-платформы. Также мы поговорим о том, к каким нюансам нужно готовиться, если вы решаете оптимизировать CH самостоятельно, сколько времени и сил может потребовать этот процесс и почему мы решили “зашить” в новый движок ViQube 2 десятки алгоритмов автоматической оптимизации. 

А что там с оптимизацией ClickHouse?
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 2

GPT или GigaChat — ответит RAGAS

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

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

Читать далее
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 7

Как (быстро) сделать русский локальный ChatGPT

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

Эта история началась в начале марта этого года. ChatGPT тогда был в самом расцвете. Мне в Telegram пришёл Саша Кукушкин, с которым мы знакомы довольно давно. Спросил, не занимаемся ли мы с Сашей Николичем языковыми моделями для русского языка, и как можно нам помочь.

И так вышло, что мы действительно занимались, я пытался собрать набор данных для обучения нормальной базовой модели, rulm, а Саша экспериментировал с существующими русскими базовыми моделями и кустарными инструктивными наборами данных.

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

Читать далее
Всего голосов 90: ↑89 и ↓1 +88
Комментарии 54

Вихрь — семейство переведенных русскоязычных LLM

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

Мы русифицировали Mistral и он работает лучше(по бенчмаркам) чем закрытые русскоязычные LLM. Как мы это сделали, ссылки на модели и бенчмарки - в статье.

Читать далее
Всего голосов 45: ↑40 и ↓5 +35
Комментарии 33

GPT-like модель «впервые сделала научное открытие»: что, как, и куда дальше?

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

14го декабря в одном из самых авторитетных общенаучных журналов Nature была опубликована статья с, кажется, сенсационным заголовком: «ИИ-модели Google DeepMind превосходят математиков в решении нерешённых проблем». А в блогпосте дочки гугла и вовсе не постеснялся указать, что это — первые находки Больших Языковых Моделей (LLM) в открытых математических проблемах. Неужели правда? Или кликбейт — и это в Nature? А может мы и вправду достигли техносингулярности, где машины двигают прогресс? Что ж, давайте во всём разбираться!

Ну давай разберёмся →
Всего голосов 182: ↑178 и ↓4 +174
Комментарии 271

Строим свой SSO. Часть 4: Vue.js, Регистрация, Сброс пароля

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

Всем привет!
Мы продолжаем строить собственный SSO Server. Сегодня мы детально разберем Vue.js приложение, а также спроектируем и реализуем долгожданные механизмы регистрации и сброса пароля. Как всегда, дополнительно мы разберём ряд интересных общесистемных решений, которые наверняка Вам пригодятся в дальнейшем.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 7

Искусство ETL. Пишем собственный движок SQL на Spark [часть 1 из 5]

Уровень сложности Сложный
Время на прочтение 18 мин
Количество просмотров 5.6K

image


В данной серии статей я подробно расскажу о том, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL с использованием Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.

— Евдокимов, ты что, совсем уже там кукухой поехал?! При живом-то Spark SQL! Опять ты ненормальным программированием маешься, нет бы что-то полезное делал…
— Ну-ну-ну, спокойно, спокойно. Я ещё настолько не уехал, чтобы потратить целый год на страдание полной ерундой. Речь на сей раз пойдёт не о развлекухе, а о диалекте языка, специализированном для решения целого класса задач, для которых любой существующий SQL был бы, в теории, хорошим решением, если бы не несколько серьёзных «но».


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


Нет, голый — не нужен. Так рассказывать я буду о разработке настоящего production ready инструмента, с интерактивным шеллом с подсветкой синтаксиса и автодополнением, который сможет работать в клиент-серверном режиме, и не только на кластере, но и локально. Да не монолитный, а расширяемый при помощи подключаемых функций. И с автогенератором документации впридачу. Короче, всё будет совсем по-взрослому, с рейтингом M for Mature.


В каком смысле «M for Mature»?

Уровень сложности данной серии статей — высокий. Базовые понятия по ходу текста вообще не объясняются, да и продвинутые далеко не все. Поэтому, если вы не разработчик, уже знакомый с терминологией из области бигдаты и жаргоном из дата инжиниринга, данные статьи будут сложно читаться, и ещё хуже пониматься. Я предупредил.

Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 10

Основы Интернета

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

Есть такая интересная книга – «High Performance Browser Networking» Ильи Григорика, в которой описаны основы работы сетей и способы оптимизации передачи данных. В этой книге автор пишет про CDN следующее:

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

Если подумать, то наверное можно согласиться с тем фактом, что CDN улучшают UX, потому что ускоряют загрузку сайта. Но... минуточку. А как именно CDN это делает?

Вы можете сказать: «Ну, когда пользователь запрашивает файлы с CDN, они загружаются с ближайшего к пользователю сервера. Легко и просто». Да, но ведь эти данные загружаются всегда с одного домена. Как тогда запрос может приходить на разные сервера?

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

Начнём с проводов
Всего голосов 51: ↑47 и ↓4 +43
Комментарии 15

Как не мусорить в Java

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

Существует популярное заблуждение о том, что если не нравится garbage collection, то надо писать не на Java, а на C/C++. Последние три года я занимался написанием low latency кода на Java для торговли валютой, и мне приходилось всячески избегать создания лишних объектов. В итоге я сформулировал для себя несколько простых правил, как свести аллокации в Java если не до нуля, то до некого разумного минимума, не прибегая к ручному управлению памятью. Возможно, кому-то из сообщества это тоже будет полезно.

Читать дальше →
Всего голосов 44: ↑40 и ↓4 +36
Комментарии 61

Топ 6 оптимизаций для netty

Время на прочтение 5 мин
Количество просмотров 26K
Всем привет. Эта статья продолжение 10к на ядро с конкретными примерами оптимизаций, которые были проделаны для повышения производительности сервера. С написания первой части прошло уже 5 мес и за это время нагрузка на наш продакшн сервер выросла с 500 рек-сек до 2000 с пиками до 5000 рек-сек. Благодаря netty, мы даже не заметили это повышение (разве что место на диске уходит быстрее).

Blynk load
(Не обращайте внимание на пики, это баги при деплое)

Эта статья будет полезна всем тем кто работает с netty или только начинает. Итак, поехали.

Нативный Epoll транспорт для Linux


Одна из ключевых оптимизаций, которую стоит использовать всем — это подключение нативного Epoll транспорта вместо реализации на java. Тем более, что с netty это означает добавить лишь 1 зависимость:

<dependency>
   <groupId>io.netty</groupId>
   <artifactId>netty-transport-native-epoll</artifactId>
   <version>${netty.version}</version>
   <classifier>linux-x86_64</classifier>
</dependency>

и автозаменой по коду осуществить замену следующих классов:

  • NioEventLoopGroup → EpollEventLoopGroup
  • NioEventLoop → EpollEventLoop
  • NioServerSocketChannel → EpollServerSocketChannel
  • NioSocketChannel → EpollSocketChannel

Дело в том, что java реализация для работы с не блокирующими сокетами реализуется через класс Selector, который позволяет вам эффективно работать с множеством соединений, но его реализация на java не самая оптимальная. Сразу по трем причинам:

  • Метод selectedKeys() на каждый вызов создает новый HashSet
  • Итерация по этому множеству создает iterator
  • И ко всему прочему внутри метода selectedKeys() огромное количество блоков синхронизации

В моем конкретном случае я получил прирост производительности около 30%. Конечно же, эта оптимизация возможна только для Linux серверов.
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 6

Материалы летней школы Deep|Bayes по байесовским методам в глубинном обучении

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

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


Многие современные исследовательские статьи активно используют байесовский формализм в сочетании с глубокими нейросетями, приходя к интересным результатам. Мы – исследовательская группа BayesGroup с помощью наших друзей из Сколтеха, а так же при поддержке Высшей Школы Экономики, Сбербанка, Яндекса, Лаборатории Касперского, JetBrains и nVidia – решили поделиться накопленным опытом и устроить летнюю школу по байесовским методам в глубинном обучении Deep|Bayes, где подробно рассказать, что такое байесовские методы, как их комбинировать с глубинным обучением и что из этого может получиться.


Отбор на школу оказался весьма сложным занятием – мы получили более 300 заявок от сильных кандидатов, но вместить смогли только 100 (приятно, что среди участников были не только жители Москвы и Петербурга, но и студенты из регионов, а так же русскоговорящие гости из-за границы). Пришлось отказать многим сильным кандидатам, поэтому для смягчения этого прискорбного факта мы решили сделать доступными максимальное количество материалов, которыми и хотим поделиться с хабраюзерами.

Читать дальше →
Всего голосов 65: ↑64 и ↓1 +63
Комментарии 5

Новый GC Epsilon. У джавы может не быть сборки мусора. Шок. Сенсация

Время на прочтение 6 мин
Количество просмотров 37K
Добрый день, господа! Спешу сообщить, что настают последние дни. Кажется, мир Java развился до такой степени, что то ли мы теперь можем спокойно использовать Rust вместо Java, то ли Java вместо Rust. Кровавые подробности ждут вас под катом.
Читать дальше →
Всего голосов 84: ↑69 и ↓15 +54
Комментарии 96

Приглашаем на Data Fest⁴ 11 и 12 февраля

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


Почти через две недели в нашем московском офисе состоится Data Fest⁴ — уже четвертая конференция, которая объединяет исследователей, инженеров и разработчиков, связанных с Data Science во всех его проявлениях. Вас ждет богатая программа, множество теоретических и практических секций. Подробности читайте под катом.
Читать дальше →
Всего голосов 37: ↑37 и ↓0 +37
Комментарии 1

Голуби брутфорсят парадокс Монти Холла лучше людей

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

Голуби дают людям фору в решении дилеммы Монти Холла, что могло бы позволить им успешно выступать на одноименном ток-шоу. Это закономерность может, в свою очередь, излить свет на то, почему людям так трудно она дается.



Чем примечательна эта дилемма? При кажущейся простоте, она запутывает логические цепочки наших умозаключений, заставляя людей (но не голубей), в буквальном смысле, блуждать в трех соснах, вернее — в дверях. Это свойственно представителям самых разных культурных традиций: американцы, китайцы, шведы и бразильцы совершают одинаково неверный выбор.


Когнитивный психолог Massimo Piattelli-Palmarini заметил по этому поводу: Ни одна статистическая задача даже рядом не стоит по способности дурачить всех людей и во все времена.


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

оставить или поменять
Всего голосов 99: ↑99 и ↓0 +99
Комментарии 311

Как мы писали код Netflix

Время на прочтение 7 мин
Количество просмотров 18K
Как именно в Netflix реализован код до этапа работы в облаке? Части этой истории мы рассказывали и прежде, но сейчас настало время добавить в неё больше деталей. В данном посте мы опишем инструменты и методы, позволившие нам пройти путь от исходного кода до развёрнутого сервиса, который позволяет наслаждаться фильмами и сериалами более чем 75 миллионам подписчиков со всего мира.

image

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

  • Код должен быть написан и локально испытан плагинами Nebula;
  • Изменения перемещаются в центральное хранилище git;
  • Jenkins запускает Nebula, которая создаёт, тестирует и подготавливает приложения для облака;
  • Билды «выпекаются» в Amazon Machine Image;
  • Spinnaker способствует разблокировке и активизации измененного кода.

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

Организационная культура, облако и микросервисы


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

Культура Netflix расширяет возможности инженеров в плане использования любого, по их мнению, подходящего инструментария ради решения поставленных задач. По нашему опыту, для того, чтобы какое-либо решение получило всеобщее признание, оно должно быть аргументированным, полезным и уменьшать когнитивную нагрузку на большинство инженеров Netflix. Команды свободны в выборе пути решения задач, но за это расплачиваются дополнительной ответственностью по поддержке этих решений. Предложения центральных команд Netflix начинают считаться частью «проторенной дорожки» (paved road). Сейчас именно она находится в центре нашего внимания и поддерживается нашими специалистами.
Читать дальше →
Всего голосов 14: ↑12 и ↓2 +10
Комментарии 1

Spring MVC/Security, REST, Hibernate, Liquibase запускаем в две строки

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

Современные системы сборки позволяют полностью автоматизировать процесс компиляции и запуска приложения из исходников. На целевой машине необходим лишь JDK, все остальное включая и сам сборщик загрузится налету. Надо лишь правильно построить процесс сборки и по запуску двух команд получить, например, следующее: запуск базы данных, выполнение SQL скриптов, компиляцию Java, Javascript и CSS файлов, запуск контейнера сервлетов. Реализуется это с помощью Gradle, HSQLDB, Liquibase, Google closure compile и Gretty. Подробнее в статье.
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 8

Технокнига, часть 2: литература по СУБД, разработке фронтенда, проектированию интерфейсов и углубленному программированию на Java

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


Недавно мы начали публиковать обзорный список литературы, рекомендуемой к прочтению студентам наших образовательных проектов: Технопарка, Техносферы и Технотрека. Но это не значит, что остальным эти книги будут не интересны. Так что если вы жаждете знаний по вынесенным в заголовок темам, то наверняка найдете что-нибудь интересное во второй части обзора.
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 12

15 тривиальных фактов о правильной работе с протоколом HTTP

Время на прочтение 7 мин
Количество просмотров 231K
Внимание! Реклама! Пост оплачен Капитаном Очевидность!

Ниже под катом вы найдёте 15 пунктов, описывающих правильную организацию ресурсов, доступных по протоколу HTTP — веб-сайтов, «ручек» бэкенда, API и прочая. «Правильный» здесь означает «соответствующий рекомендациям и спецификациям». Большая часть ниженаписанного почти дословно переведена из официальных стандартов, рекомендаций и best practices от IETF и W3C.



Вы не найдёте здесь абсолютно ничего неочевидного. Нет, серьёзно, каждый веб-разработчик теоретически эти 15 пунктов должен освоить где-то в районе junior developer-а и/или второго-третьего курса университета.

Однако на практике оказывается, что великое множество веб-разработчиков эти азы таки не усвоило. Читаешь документацию к иным API и рыдаешь. Уверен, что каждый читатель таки найдёт в этом списке что-то новое для себя.
Читать дальше →
Всего голосов 191: ↑186 и ↓5 +181
Комментарии 120

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность