Как стать автором
Поиск
Написать публикацию
Обновить
59.1
Wunder Fund
Мы занимаемся высокочастотной торговлей на бирже
Сначала показывать

6 приёмов, которые я использую, создавая отличный UX для Shell-скриптов

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

Обязательно посмотрите shell-скрипт в репозитории — он чудо как хорош. Раскрашивает выходные данные, надёжный как скала… настоящий мастер-класс по созданию shell-скриптов.

Спасибо Гуннару Морлингу за добрые слова!

В январе 2024 года меня, вместе с несколькими дюжинами других гиков, повёрнутых на производительности, что называется, «заснайпили», заинтересовав участием в конкурсе Гуннара One Billion Row Challenge (1BRC).

Гуннара, оценивающего результаты работы конкурсантов (бесплатно), очень быстро буквально завалил непрерывный поток решений. Я рискнул помочь ему автоматизировать оценку работ и написал Shell-скрипт, за что и получил от него вышеприведённый хвалебный отзыв. Он это сказал в выступлении на конференции JavaZone (# 1BRC‑Nerd Sniping the Java Community — Gunnar Morling). Посмотрите это выступление, если хотите узнать о подходах к повышению производительности кода, применённых на конкурсе.

Здесь я расскажу о 6 приёмах, которые я использовал в Shell-скрипте для конкурса. Эти приёмы позволили сделать скрипт надёжным, безопасным и приятным в использовании для Гуннара.

Читать далее

Масштабирование AI/ML-инфраструктуры в Uber

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

Компания Uber уже 8 лет применяет технологии машинного обучения (Machine Learning, ML). В 2016 году мы впервые начали использовать сложные ML-модели, основанные на правилах. Мы внедрили их в командах, которые занимались подбором водителей и пассажиров и ценообразованием. С тех пор мы многого добились. А именно, речь идёт о том, что сегодня модели глубокого обучения являются неотъемлемой частью большинства приложений, критически важных для деятельности компании. Мы, кроме того, активно исследуем возможности, предлагаемые генеративными ИИ-моделями (Artificial Intelligence, AI, искусственный интеллект). По мере того, как растут масштаб и сложность AI/ML-моделей, увеличивается и потребность в высокоэффективной инфраструктуре, которая способна достойно обеспечивать их работу. За последние несколько лет мы, руководствуясь стратегическими соображениями, внедрили целый ряд инфраструктурных решений, основанных как на CPU, так и на GPU. Эти решения ориентированы на динамическое масштабирование наших систем и на то, чтобы удовлетворять потребности всё новых и новых задач, возникающих в сфере машинного обучения. Развитие нашей инфраструктуры заключалось во внедрении уникальных конфигураций аппаратного обеспечения, в расширении программных библиотек, в интеграции различных фреймворков распределённого обучения и в непрерывном совершенствовании нашей платформы Michelangelo. Эта платформа обеспечивает полный цикл работы с моделями. Все эти постепенные улучшения происходили благодаря тем знаниям и опыту, которые мы получили в процессе работы, а так же благодаря тому, что мы, что-то меняя, постоянно сверялись с трендами индустрии и со стратегией развития Uber. В сущности, все эти улучшения нацелены на то, чтобы компания соответствовала бы постоянно меняющимся потребностям наших партнёров и пользователей.

Читать далее

Flame-графики Doom для GPU

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

Код AI Flame Graphs теперь открыт, этот проект поддерживает GPU Intel Battlemage. Это значит, что AI Flame Graphs теперь способен генерировать flame-графики (Flame Graph, граф пламени, диаграмма пламени), охватывающие полный стек GPU — это даёт пользователям новые аналитические данные о производительности игр. Особенно полезным AI Flame Graphs выглядит в связке с FlameScope (это — мой опенсорсный проект, созданный несколько лет назад). Вот — пример профилирования игры GZDoom. Тут показаны результаты визуализации использования CPU и GPU, проведённые с помощью FlameScope и снабжённые комментариями.

Читать далее

Мне нужен хороший параллельный компьютер

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

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

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

Современный видеоускоритель — это ещё и невероятно сложная система, которая постоянно становится всё сложнее. Новые возможности, вроде сеточных шейдеров (mesh shader) и графов задач (Work Graphs) хорошо описывает фраза «два шага вперёд, шаг назад». С каждой новой возможностью связана некая базовая задача, поддержка решения которой реализована не полностью.

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

Читать далее

Глупые фокусы: преобразование 32-битного значения в 64-битное, когда неважен мусор в старших битах

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

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

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

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

Я решил использовать встроенный ассемблер gcc/clang и написать код, который сообщает системе: «Я могу создать 64-битное значение из 32-битного, не выполнив ни одной инструкции».

Читать далее

Ускорение тестового набора PyPI на 81%

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

Компания Trail of Bits уже несколько лет сотрудничает с репозиторием PyPI, помогая добавлять в проект новые возможности и улучшать стандартные параметры безопасности в экосистеме управления пакетами Python.

Читать далее

Рассказ о том, как rclone в 4 раза быстрее rsync синхронизирует файлы по сети

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

Последнюю пару лет я переносил со службы домой и обратно «набор рабочих материалов» — видеофайлы и данные проектов, пользуясь внешним SSD-диском стандарта NVMe с интерфейсом Thunderbolt.

Но, когда я синхронизировал данные, это всегда происходило очень медленно. В обычный рабочий день я могу создать новую папку проекта, содержащую 500-1000 файлов. При этом среди них будут дюжины файлов размером 1-10 Гб.

Мой Thunderbolt-диск способен передавать данные со скоростью, значительно превышающей 5 Гб/с, а 10-гигабитное сетевое соединение, имеющееся в моём распоряжении, может выдать 1 Гб в секунду. Недавно я даже обновил диск до Thunderbolt 5, хотя его и нельзя назвать узким местом моей системы.

Я использовал команду rsync следующего вида для копирования файлов с общего сетевого ресурса, смонтированного на моём Mac, на диск, которому я дал имя Shuttle:

Читать далее

Современный C++23/26: концепты, корутины и многое другое в высокопроизводительных службах

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

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

Читать далее

Первый год free-threaded Python

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

На прошлой неделе разработчики CPython выпустили CPython 3.14.0b1. А на этой неделе в Питтсбурге, штат Пенсильвания, начинается конференция PyCon 2025. Оба эти события знаменуют собой важную веху в делах, связанных с разработкой, выпуском и доведением до стабильного состояния релизов free-threaded Python (Python с поддержкой свободной многопоточности — с отключённым механизмом GIL).

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

Читать далее

Оптимизация производительности кода — это тяжёлый труд

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

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

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

Читать далее

Как взрывы крохотных звёзд поддерживают закон Мура

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

«Мы все сделаны из звёздного вещества», — любил напоминать человечеству астроном Карл Саган. Взрывы сверхновых — акты катастрофического самоуничтожения «изношенных» звёзд определённого типа — тесно связаны с жизнью на Земле. Дело в том, что именно в них рождаются тяжёлые элементы, которые можно встретить во всей Вселенной. Большая часть железа в нашей крови, и серы в аминокислотах, возникла в звёздах, взорвавшихся миллиарды лет назад. Но обнаружена и ещё одна, совершенно неожиданная связь между сверхновыми и миром людей. Речь идёт о связи с технологиями, которые нужны для производства компьютерных микросхем, применяемых в современных смартфонах и в других электронных устройствах.

Эта связь проявилась несколько лет назад в череде бесед между мной, Джейсоном Стюартом и моим дедушкой Рудольфом Шульцем. Дедушка был страстным астрономом-любителем, который держал в прихожей, сразу у входа, большой телескоп-рефлектор, который он всегда готов был направить на небо. Когда я учился в старших классах, он подарил мне книгу Стивена Хокинга «Краткая история времени» (Bantam Books, 1988) и на всю жизнь зажёг во мне любовь к физике. Позднее астрономический взгляд на вещи моего дедушки оказался, по счастливой случайности, полезным в моей карьере, о чём я рассказал ему во время одного из наших астрономических вечеров у него дома, в предгорьях Тусона.

Читать далее

Почему я не люблю использовать «alias» для создания псевдонимов команд

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

Настройка алиасов (alias, псевдоним команды) была одной из первых задач, которую я решал, редактируя конфигурационные файлы (dotfiles) в Unix-подобных ОС. Вот пример одного из моих очень ранних алиасов:

alias g=git

Благодаря этой конструкции я могу, когда мне это нужно, вызвать, вместо команды git, команду g. Это позволяет сэкономить немного времени при использовании тех команд, к которым я прибегаю десятки раз в день!

# Теперь эти две команды равноценны:
git status
g status

Раньше я задавал псевдонимы команд с помощью команды alias. В конце концов… я ведь создавал то, что называется «alias»!

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

Читать далее

Как стать хорошим инженером

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

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

Читать далее

Опыт PostHog: 50 советов о создании успешных продуктов

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

Для того чтобы отпраздновать то, что рассылка Product for Engineers набрала 50000 подписчиков, мы решили поделиться пятьюдесятью советами, в которых собрано всё самое важное, что мы узнали о разработке успешных программных продуктов.

Читать далее

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

Плавающие запятые и ящики

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

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

Читать далее

NVIDIA cuDF и 100-кратное ускорение чтения данных формата JSON Lines в pandas

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

JSON — это широко распространённый формат, применяемый для хранения информации, основанной на обычном тексте. Он поддерживается самыми разными системами, обеспечивая их взаимодействие. Чаще всего это — веб-приложения и большие языковые модели (Large Language Model, LLM). Хотя JSON-данные удобны для восприятия человеком, их сложно обрабатывать, используя инструменты из сфер Data Science (наука о данных) и Data Engineering (инженерия данных).

JSON-данные часто существуют в виде JSON-строк (формат JSON Lines), отделённых друг от друга символами перевода строки (NDJSON, Newline-Delimited JSON). NDJSON используется для представления записей, входящих в состав набора данных. Часто первым этапом обработки данных является чтение файлов формата JSON Lines и преобразование их в объекты DataFrame (датафрейм).

В это материале мы сравним производительность и функционал API, доступных в Python и применяемых для преобразования формата JSON Lines в датафреймы.

Читать далее

Советы по эффективному обучению ML-моделей

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

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

Читать далее

Индивидуальные встречи в Data Science: от отчётов по проектам до карьерного роста

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

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

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

Вы когда-нибудь сталкивались с трудностями в попытках извлечь из индивидуальных встреч максимум пользы? Если так — я могу дать вам несколько советов.

Читать далее

Где твои системные вызовы?

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

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

Если вы программируете на C — всё это делается автоматически. Поэтому мы будем писать код только на языке, который совершенно нельзя назвать C, и при этом обойдёмся без линковки с libc.

Читать далее

Как пустой S3 бакет может вас обанкротить

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

Представьте, что вы создали пустую, приватную корзину (их ещё называют «бакетами» — от «bucket») AWS S3 в выбранном вами регионе. Каким будет счёт за услуги AWS на следующее утро?

Несколько недель назад я начал работу над прототипом системы индексирования документов для моего клиента. Я создал одну корзину S3 в регионе eu-west-1 и загрузил туда несколько файлов для тестирования. Через два дня я проверил мою страницу выставления счетов AWS, заглянув туда, преимущественно, для того, чтобы проверить, что то, чем я занимаюсь, нормально укладывается в лимиты бесплатного тарифного плана. Но, судя по тому, что я там увидел, ни о какой нормальности речи не шло. Мой счёт превышал $1300, а в консоли выставления счетов были видны сто миллионов PUT-запросов к корзине S3, выполненных всего за один день!

Читать далее
1
23 ...

Информация

Сайт
wunderfund.io
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
xopxe