Pull to refresh
27
0
Send message

Разбираемся с параллельными и конкурентными вычислениями в Python

Reading time21 min
Views53K

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

Прим. Wunder Fund: для задач, где не критичны экстремально низкие задержки — при сохранении и обработке биржевых данных, мы используем Питон, и естественно применяем описанные в статье подходы. Статья будет полезна начинающим разработчикам.

Мы увидим, что когда один человек одновременно делает несколько дел — это похоже на конкурентность, а когда несколько человек, работая бок о бок, заняты каждый собственным делом — это напоминает параллелизм. Эти ситуации мы разберём на простом и понятном примере закусочных, в которые люди заходят в обеденный перерыв. Такие заведения стремятся обслуживать клиентов как можно быстрее и эффективнее. Потом я покажу реализацию механизмов этих закусочных на Python, а в итоге мы сравним разные возможности одновременного «приготовления нескольких блюд», которые даёт нам этот язык, и разберёмся с тем, в каких ситуациях их применение наиболее оправдано.

А именно, я раскрою здесь следующие вопросы:

▪ Отличия конкурентности от параллелизма.
▪ Различные варианты организации конкурентного выполнения кода (многопоточность, модуль asyncio, модуль multiprocessing, облачные функции) и их сравнение.
▪ Сильные и слабые стороны каждого подхода к организации конкурентного выполнения кода.
▪ Выбор конкретного варианта организации конкурентного выполнения кода с использованием специальной блок-схемы.

Читать далее
Total votes 25: ↑24 and ↓1+23
Comments6

Перплексия в языковых моделях

Reading time10 min
Views17K

В этом материале я хочу сделать подробный обзор такого понятия, как «перплексия» («коэффициент неопределённости»), так как оно применяется в обработке текстов на естественном языке (Natural Language Processing, NLP). Я расскажу о двух подходах, которые обычно используются для определения этого понятия, и о тех идеях, которые лежат в основе этих подходов.

Читать далее
Total votes 27: ↑27 and ↓0+27
Comments3

Все важные фичи и изменения в Python 3.10

Reading time8 min
Views55K

Если вам хочется попробовать все фичи великолепной последний версии Python, нужно установить альфа или бета-версию. Однако учитывая, что эти версии не стабильны, мы не хотим перезаписывать дефолтную установку языка. Будем устанавливать альфу Python 3.10 рядом с текущим интерпретатором. И в преддверии старта нового потока курса Fullstack-разработчик на Python — обозревать все новшества новой версии языка.

Читать далее
Total votes 28: ↑26 and ↓2+24
Comments56

Что такое энергоэффективность LPWAN. Проживет ли NB-IoT устройство 10 лет от батарейки?

Reading time8 min
Views12K

Как померить энергоэффективность?

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

При описании LPWAN систем постоянно используется слово энергоэффективность, что же оно означает и можно ли ее померить?

Читать далее
Total votes 27: ↑27 and ↓0+27
Comments41

Макет, прототип, серийный образец и вот это всё — учим термины

Reading time4 min
Views31K


Чем отличаются друг от друга макеты, прототипы корпусов для РЭА и для чего вообще нужны все эти опытные образцы? Версия Формлаба.

Макет


Макет (фр. maquette — масштабная модель, итал. macchietta, уменьшительное от macchia) — модель объекта в уменьшенном масштабе или в натуральную величину, лишённая, как правило, функциональности представляемого объекта. Предназначен для представления объекта. Используется в тех случаях, когда представление оригинального объекта неоправданно дорого, невозможно или просто нецелесообразно.
Wikipedia

Макет по геометрическим характеристикам только приближается к серийному изделию. Он изготавливается по несерийным, непроизводственным технологиям и практически из чего угодно (включая палки пластилин ), его задача — проверить дизайн и, может быть, вес реального устройства. Макет может не совпадать с конечным продуктом по реальным размерам, но по пропорциям — должен.
Total votes 9: ↑9 and ↓0+9
Comments5

Первые дни в команде разработки — как это бывает у нас

Reading time7 min
Views23K

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


Читать дальше →
Total votes 52: ↑48 and ↓4+44
Comments54

Логарифмируй это: метод логарифмической производной в машинном обучении

Reading time7 min
Views12K

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

Довольно математично.
Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments1

Генеративные модели от OpenAI

Reading time13 min
Views38K


Эта статья посвящена описанию четырех проектов, объединенных общей темой усовершенствования и применения генеративных моделей. В частности, речь пойдет о методах обучения без учителя и GAN.
 
Помимо описания нашей работы, в этой статье мы хотели бы подробнее рассказать о генеративных моделях: их свойствах, значении и возможных перспективах развития.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments2

LSTM – сети долгой краткосрочной памяти

Reading time8 min
Views210K

Рекуррентные нейронные сети


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

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

Решить эту проблемы помогают рекуррентые нейронные сети (Recurrent Neural Networks, RNN). Это сети, содержащие обратные связи и позволяющие сохранять информацию.
Читать дальше →
Total votes 41: ↑39 and ↓2+37
Comments4

Dropout — метод решения проблемы переобучения в нейронных сетях

Reading time7 min
Views83K


Переобучение (overfitting) — одна из проблем глубоких нейронных сетей (Deep Neural Networks, DNN), состоящая в следующем: модель хорошо объясняет только примеры из обучающей выборки, адаптируясь к обучающим примерам, вместо того чтобы учиться классифицировать примеры, не участвовавшие в обучении (теряя способность к обобщению). За последние годы было предложено множество решений проблемы переобучения, но одно из них превзошло все остальные, благодаря своей простоте и прекрасным практическим результатам; это решение — Dropout (в русскоязычных источниках — “метод прореживания”, “метод исключения” или просто “дропаут”).
Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments4

Обзор исследований в области глубокого обучения: обработка естественных языков

Reading time15 min
Views27K


Это третья статья из серии “Обзор исследований в области глубокого обучения” (Deep Learning Research Review) студента Калифорнийского университета в Лос-Анджелесе Адита Дешпанда (Adit Deshpande). Каждые две недели Адит публикует обзор и толкование исследований в определенной области глубинного обучения. В этот раз он сосредоточил свое внимание на применении глубокого обучения для обработки текстов на естественном языке.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments2

О том, как в Instagram отключили сборщик мусора Python и начали жить

Reading time8 min
Views44K
Отключив сборщик мусора Python (GC), который освобождает память, отслеживая и удаляя неиспользуемые данные, Instagram стал работать на 10% быстрее. Да-да, вы не ослышались! Отключив сборщик мусора, можно сократить объем потребляемой памяти и повысить эффективность работы кэша процессора. Хотите узнать, почему так происходит? Тогда пристегните ремни!

Читать дальше →
Total votes 70: ↑68 and ↓2+66
Comments29

PyMC3 — MCMC и не только

Reading time17 min
Views21K

PyMC3 — МСМС и не только



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


В этом посте уже упоминался PyMC3. Там можно почитать про основы MCMC-сэмплирования. Здесь я расскажу про вариационный вывод (ADVI), про то, зачем все это нужно и покажу на довольно простых примерах из галереи PyMC3, чем это может быть полезно. Одним из таких примеров будет байесовская нейронная сеть для задачи классификации, но это в самом конце. Кому интересно — добро пожаловать!


Читать дальше →
Total votes 48: ↑42 and ↓6+36
Comments3

Алгоритм Джонкера-Волгенанта + t-SNE = супер-сила

Reading time9 min
Views31K
До:



После:



Заинтригованы? Но обо всем по порядку.

t-SNE


t-SNE — это очень популярный алгоритм, который позволяет снижать размерность ваших данных, чтобы их было проще визуализировать. Этот алгоритм может свернуть сотни измерений к всего двум, сохраняя при этом важные отношения между данными: чем ближе объекты располагаются в исходном пространстве, тем меньше расстояние между этими объектами в пространстве сокращенной размерности. t-SNE неплохо работает на маленьких и средних реальных наборах данных и не требует большого количества настроек гиперпараметров. Другими словами, если взять 100 000 точек и пропустить их через эту волшебный черный ящик, на выходе мы получим красивый график рассеяния.
Читать дальше →
Total votes 65: ↑64 and ↓1+63
Comments2

Библиотека Google Benchmark

Reading time5 min
Views19K


Не так давно я писал о C++ библиотеках для микробенчмаркинга. Я рассказал о трех библиотеках: Nonius, Hayai и Celero. Но в действительности я хотел поговорить о четвертой. Мой Windows тогда не поддерживал Google Benchmark library, так что я не мог ее протестировать. К счастью, из комментариев к прошлому посту я узнал, что теперь библиотека доступна в Visual Studio!

Давайте посмотрим, как можно ее использовать.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments0

Поиск по регулярным выражениям с помощью суффиксного массива

Reading time7 min
Views11K
image

Еще в январе 2012 Расс Кокс опубликовал замечательный блог-пост, объясняющий работу Google Code Search с помощью триграммного индекса.

К этому времени уже вышли первые версии моей собственной системы поиска по исходному коду под названием livegrep, с другим метод индексации; я писал эту систему независимо от Google, с помощью нескольких друзей. В этой статье я хотел бы представить немного запоздалое объяснение механизма ее работы.
Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments1

Что такое Resizable Concurrent Map

Reading time6 min
Views10K
В одном из прежних постов я рассказывал, как реализовать «простейшую в мире lock-free хеш-таблицу» на C++. Она была настолько проста, что было невозможно удалять из нее записи или менять ее размерность. С тех пор прошло несколько лет, и не так давно я написал несколько многопоточных ассоциативных массивов без таких ограничений. Их можно найти в моем проекте Junction на GitHub.

Junction содержит несколько многопоточных реализаций интерфейса map – даже «самая простая в мире» среди них, под названием ConcurrentMap_Crude. Для краткости будем называть ее Crude map. В этом посте я объясню разницу между Crude map и Linear map из библиотеки Junction. Linear — самый простой map в Junction, поддерживающий и изменение размера, и удаление.

Можете ознакомиться с объяснением того, как работает Crude map, в первоначальном посте. Если коротко, то она основана на открытой адресации и линейном пробировании. Это значит, что она по сути является большим массивом ключей и значений, использующим линейный поиск. Во время добавления или поиска заданного ключа мы вычисляем хеш от ключа, чтобы определить, с какого места начать поиск. Добавление и поиск данных возможны в многопоточном режиме.


Читать дальше →
Total votes 27: ↑27 and ↓0+27
Comments5

Самая простая в мире lock-free хеш-таблица

Reading time6 min
Views19K
image

Безблокировочная хеш-таблица — это медаль о двух сторонах. В некоторых случаях они позволяют достигать такой производительности, которой не получить другими способами. С другой стороны, они довольно сложны.
Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments4

Введение в lock-free программирование

Reading time8 min
Views54K
image

В этом посте мы хотели бы еще раз поднять тему программирования без блокировок, сперва дав ему определение, а затем выделить из всего многообразия информации несколько ключевых положений. Мы покажем, как эти положения соотносятся между собой, с помощью блок-схем, а потом мы немного коснемся деталей. Минимальное требование к разработчику, постигающему lock-free, — умение писать правильный многопоточный код, используя мьютексы или другие высокоуровневые объекты синхронизации, например, семафоры или события.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments17

Information

Rating
Does not participate
Works in
Registered
Activity