Все потоки
Поиск
Написать публикацию
Обновить
163.07

Алгоритмы *

Все об алгоритмах

Сначала показывать
Порог рейтинга
Уровень сложности

Панорама матричных расширений: от x86 до RISC-V

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

Матричное расширение ISA CPU… Что это и что оно делает? Уже из названия понятно, что это расширение позволяет ускорять операции над матрицами на CPU. Но задумывались ли вы когда-нибудь, какие они бывают, когда появились, кто и как их создает?

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

Матричные расширения появились не так давно — чуть более трех лет назад. Несмотря на это, они есть у каждой уважающей себя процессорной архитектуры, в том числе и у относительно молодой открытой RISC-V. Почему их так много и чем они отличаются? Поддерживаются ли разреженные матрицы? Об этом и многом другом вы узнаете из статьи. Приготовьтесь, будет интересно и (спойлер!) без многоэтажных формул. 

Читать далее

JavaScript: структуры данных и алгоритмы. Часть 1

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


Привет, друзья!


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



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


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


Интересно? Тогда прошу под кат.

Читать дальше →

Эффективный запуск и инференс LLM на своем сервере с нуля (часть 1)

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

Привет, Хабр! На связи CEO команды Compressa AI. Недавно обнаружил для себя крутой базовый курс по эффективному запуску и инференсу LLM моделей от легенды AI мира — Andrew NG и его платформы DeepLearning. Он полностью на английском языке в формате видео, поэтому я осмелился адаптировать его под формат Хабра на русском языке. Знания должны быть доступны всем и в удобной форме, так ведь?

Многие команды (включая и Compressa AI) начинали LLM проекты с использования облачных API. Но по мере развития все больше разработчиков хотят использовать open-source LLM, чтобы экономить на токенах, снижать latency, запускать fine-tuning на собственных данных и в целом меньше зависеть от внешних моделей.

Из этого курса вы узнаете детали эффективного обслуживания и дообучения open-source LLM, включая методы обработки множества запросов от нескольких пользователей. Используя несколько таких методов одновременно, вы можете улучшить как задержку (latency), так и пропускную способность (throughput). Например, благодаря применению последних open-source технологий в своем продукте, мы добились увеличения пропускной способности до 70x на 1 GPU в сравнении с дефолтными Hugging Face & PyTorch.

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

Читать далее

Изучаем новые структуры данных для iOS разработчика

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

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

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

Читать далее

Протокол FAST: от технаря технарям

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

Внимание! Пожалуйста, уберите от экранов всех программистов в финансовой области с опытом менее 15 лет — мы будем обсуждать настоящие чудеса инженерии.

Полный газ!

Всё, что вам нужно — это линейное внимание

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

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

Говорят, что механизм внимания плохо переносит работу с последовательностями большой длины. Это — идея, которая встречалась любому, кто потратил достаточно много времени, занимаясь трансформерами и механизмом внутреннего внимания. Это, одновременно, и так, и не так. С одной стороны — с этим сталкивался каждый, кто пытался увеличить размеры контекста своей модели, натыкаясь при этом на то, что модель начинала работать с сильным скрипом. С другой стороны — возникает такое ощущение, что практически каждую неделю выходит новая эталонная модель, которая характеризуется новыми размерами контекста, бьющими все рекорды. (Контекстное окно Gemini составляет 2 миллиона токенов!)

Есть много хитроумных методов, вроде RingAttention, которые позволяют обучать модели с очень большими размерами контекста на мощных распределённых системах. Но сегодня меня интересует всего один простой вопрос: «Как далеко можно зайти, применяя лишь механизм линейного внимания?».

Читать далее

Оцениваем алгоритмы планирования процессов в операционных системах

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

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

Как я провел лето…

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

Никогда особо не стремился в большие компании, по душе всегда были небольшие уютные игровые студии, где и "отеческий" нагоняй от лида получить легко, да и самому "парой ласковых" объяснить коллегам где они были не правы можно. Но конечно шальные мысли, а вот если бы в Я..., да какой-нибудь еще фейсгугл попробоваться. Жаль только они не делают игры, но мысль эта таилась на закорках подсознания, периодически напоминая о себе в моменты просмотра объявлений, да после писем рекрутеров на linkedin. Около года назад два моих знакомых, которые давно уже живут на другом континенте, но с кем застали еще распад питерского EA, вдруг объявились на страничке в linkedin, оставили отзывы да отсыпали скилов. Сначала я не придал этому особого значения, мало ли чего там себе люди думают, может просто сеть знакомых обновляют, есть у них там за океаном такая забава. И так получилось, что на эти отзывы сагрились hr-боты большого G..., что и привело в дальнейшем к очень интересному опыту взаимодействия с людьми, знакомством с кухней отбора, этапами собеседования и воронкой "смерти" входа. Осторожнее надо быть со своими желаниями.

Где-то уже на хабре были статьи и про G... и про Я..., такие, что читая описания задачек на собесах, волевым решением на следующее утро начинал решать leetcode. Воли обычно хватало где-то на неделю, а потом рутина боевых задач и митинги затаскивали обратно в уютную берлогу не очень большого игростроя. Почему я решил написать об этом только через год после всех событий? Да банально подмахнул на третьем собеседовании NDA о методах проведения интервью, а когда понял ЧТО подписал - уже было поздно.

Вам письмо от G...

Логистика. Часть 7. Максимизация прибыли: как подход через теорему Байеса поможет авиакомпаниям разбогатеть

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

В бизнесе именно неопределенность стоит у истоков всех проблем по оптимизации, данные же расположились у истоков решений всех этих проблем. В эпоху расцвета анализа данных и искусственного интеллекта это уже не новость, а прописная истина. Тем не менее существует целый ряд проблем, где данных либо крайне мало, либо нет вовсе. Когда речь заходит о системах управления доходностью (RMS), всегда подразумевается B2C, где много клиентов, а значит должно быть много данных. А как при этом быть с B2B, где количество клиентов за год может запросто исчисляться десятками или даже единицами?

Читать дальше →

Адекватная латиница для русского языка

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

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

В первую очередь адекватный стандарт нужен для конвертации названий и имен для международных документов. Очевидно, что паспорта, водительские удостоверения и даже визитки должны быть с нормальными именами, написанным по правилам русского языка, а не английского, немецкого или французского. Сейчас в России и Казахстане используется стандарт конвертации из Британского Географического общества, который был принят столетия назад и предназначался для населенных пунктов, а не имен. И цель была отличать их от английских названий, поэтому, например, вместо очевидной буквы H для русской Х там используется KH — две буквы, которые носители английского языка не умеют читать, поскольку в их языке такого нет. И в русском тоже нет. Этот стандарт не подходит для нормального использования. Он даже не всегда одинаково относится к тем же самым буквам: Ц может превратится в C или в TS. А буква Ё чаще всего становится буквой E.

Второй областью использования является интернет и любые программно-аппаратные системы, где принято использовать латинские буквы. Есть такое понятие — «Человекопонятный URL» — сокращенно ЧПУ. Он используется для удобства пользователя, который может понять содержимое страницы сайта из ее адреса. Сейчас этот формат не стандартизирован и появляется масса вариантов, которые, если быть честным, все-таки больше похожи на стандарты перевода русскоязычных имен для документов на латиницы. Для программистов иногда может быть удобно именовать функции, переменные, таблицы и др. с помощью русских слов, но приходится это делать латинскими буквами. Для этого тоже очень нужен единый адекватный стандарт, который передает особенности русского языка, а не какого-то другого, как происходит это сейчас.

Читать далее

Графовые сети в рекомендательных системах

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

Всем привет! Меня зовут Александр Тришин, я работаю DS в команде персональных рекомендаций Wildberries и занимаюсь графовыми нейросетями.

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

В этой публикации я расскажу вам о LightGCN и не только. Вспомним, что такое сверточные графовые сети, их основные компоненты и принципы работы: подробно разберем модель на user-item графе, после перейдём к item-item графу. Затем познакомимся с моделью LightGCN: рассмотрим архитектуру, процесс обучения, недостатки (медленная сходимость и смещение в популярное) и варианты их устранения. А в конце посмотрим, как это всё применять на практике: обучим сетку на датасете Movielens-25m, замерим метрики, столкнёмся с проблемами LightGCN и вместе их решим! Ноутбук прилагается 🤓

Читать далее

Сумма степеней натурального ряда. Часть 1

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

Вам наверняка известна история о математике Карле Гауссе. Когда ему было восемь лет, учитель задал его классу задачу посчитать сумму всех натуральных чисел от 1 до 100. Пока остальные дети трудились над последовательным сложением, Гаусс нашел простое и изящное решение. Он заметил, что числа можно сгруппировать в 50 пар с одинаковой суммой и мгновенно получил ответ 50\cdot 101 = 5050.

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

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

Читать далее

Учимся летать: симуляция эволюции на Rust. 5/5

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



Это заключительная часть серии статей по разработке симуляции эволюции с помощью нейронной сети и генетического алгоритма.





Читать дальше →

Ближайшие события

ИИ нуждается в огромной вычислительной мощности. Могут ли помочь световые чипы?

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

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

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

Читать далее

Игра в танграм и её алгоритмический потенциал

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

Некоторое время назад я задумывался о том, возможно ли мышление без языка, только на уровне визуальных образов. В отличие от естественного языка, пиктографическая или геометрическая знаковая система в гораздо меньшей степени подвержена полисемии и ошибкам, связанным с неверной интерпретацией последовательности или контекста. Может ли быть, что визуальный язык окажется для некоторых машин/роботов более понятным, чем лингвистический? Размышляя об этом, я нашёл на Хабре статью уважаемого @FirstJohn в блоге компании FirstVDS «Семь дощечек мастерства на службе ML» от февраля 2023 года, рассказывающую об алгоритмическом применении танграма. Ниже я подробнее расскажу об этой игре, а также о том, как её сегодня пытаются применять в распознавании образов и при решении других задач, связанных с комбинаторикой. 

Читать далее

Volatile, Lock-free, Immutable, Atomic в Java. Как понять и начать использовать

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

Привет, меня зовут Денис Агапитов, я руководитель группы Platform Core компании Bercut.

Сегодня хочу поговорить об одном из lock-free алгоритмов в Java. Разберём как с ним связано ключевое слово volatile и паттерн immutable.

Читать далее

Как вспомнить чудное мгновение, или возможности стандартных журналов SAP NetWeaver (Анне К* в стиле ERP)

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

В данной статье посмотрим некоторые часто встречающиеся приёмы, а также посмотрим наличие к ним стандартной документации (справка тут Auding and Logging). В данной статье будут рассмотрены прежде всего стандартные инструменты.

о логах в SAP NetWeaver

ML-алгоритмы против хакеров: как поведенческая аналитика меняет правила игры в кибербезопасности

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

Здравствуйте, друзья! Меня зовут Алексей Потапов, и я представляю экспертный центр безопасности Positive Technologies. Ранее мы уже знакомили вас с ключевыми элементами нашего подхода к обнаружению атак на примере технологий в SIEM: механизме построения цепочек запускаемых процессов на основе нормализованных событий, автоматическом вайтлистинге и машинном обучении для выявления нестандартного поведения пользователей и процессов в инфраструктуре. Тему ML было бы невозможно раскрыть в одном посте, поэтому предлагаю углубиться в более технические детали.

Мы уже рассказывали про модуль Behavioral Anomaly Detection (BAD). Он работает как система second opinion — собирает данные о событиях и пользователях, присваивает им определенный уровень оценки риска (risk score) и выдает альтернативное мнение, основываясь на своих алгоритмах. Фишка BAD в том, что он снижает когнитивную нагрузку аналитика системы SIEM, позволяя эффективнее принимать решение по инциденту информационной безопасности.

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

Подробности

Разделяй и запускай: делим тестовый стенд между департаментами

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

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

В настоящей статье делюсь опытом разработки и внедрения в процессы компании оптимизационного решения на базе математического программирования. Материал расширил исследовательскими элементами и локальным мини benchmark'ом.

Читать далее

Учимся летать: симуляция эволюции на Rust. 4/5

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



Это предпоследняя часть серии статей по разработке симуляции эволюции с помощью нейронной сети и генетического алгоритма.






В сегодняшнем выпуске:


Сексуальные многоугольники





Сертифицированные ISO диаграммы ASCII


------------
| \...%....|
|   \......|
|    @>....|
|      \...|
|        \.|
------------

Клевые числа




Читать дальше →

Вклад авторов