Кластер для финансового анализа

В предыдущем посте (посту?) я показал свой комп, но проблема конечно этим не решается. Даже если учесть что у меня сейчас 16×3=48 ядер, этого хватает для того чтобы что-то считать, гонять TeamCity (видите какой я лояльный?) и еще кое-какую сервисную муть. Но этого мало, поэтому касательно вычислительной мощи у меня припасен другой козырь, про который я вам и расскажу.

Когда я ушел из аспирантуры в 2006 году, я не то чтобы уволился. Ну вот не уволился и все тут. Остался на позиции Visiting Researcher (или просто Visitor, чтоб без пафоса) в универе. Зачем? Ну, для начала плюшки простые: я получил от универа кучу софта, доступ в библиотеки (попробуйте поищите статьи в журналах не имея подписки), и другие мелкие плюшки вроде возможности получать академический софт и покупать железки от Altera со скидкой.

Но главное не это. Как я уже говорил, когда я начал заниматься алготрейдингом, я был нищий и вычислительных мощностей у меня практически не было — я гонял нейросети на компе который был HTPC билдом с Пентиум М (ноутбучный!) на борту. Ну, чем богаты тем и рады.

Так вот, тут внезапно оказалось, что мой универ входит в некий консорциум, которому принадлежит второй по размеру кластер в Англии! Хотите глянуть на спеку кластера? Окей. На текущий момент она выглядит как-то вот так:

  • 750 нодов, каждый из которых оборудован двумя ксеонами по 8 ядер (E5-2670) и 64гб оперативки
  • Четыре “толстозадые” ноды с E5-4640 (т.е. 32 ядра) и 256Gb оперативки
  • 12 GPU нодов в каждом из которых по две теслы — сейчас это K20. Одна такая игрушка стоит $5k, что сейчас кажется копейками, но когда-то это было огого!
  • Порядка 10 Xeon Phi 5110P нод которые, как вы понимаете, уже морально устарели.

Естественно, все это оборудование предназначено для исследований и академического использования, но печальный факт в том, что и студенты и профессора порядочные раздолбаи, и программировать-то толком всю эту кухню не могут (это ж С++ надо знать, для современного студента-английчанина это нереально).

Когда я сунулся во все это я, вообщем-то, тоже был тот еще раздолбай: у меня не было навыков ни в численных дисциплинах ни в программировании. Но я-то знаю как замотивировать себя изучить новый предмет: написать видеокурс по нему! Что я и сделал, записав для Pluralsight курс по High-Performance Computing.

После попадания на кластер, я столкнулся с очевидными ограничениями в работе системы: все данные синхронизованы по GPFS (ухх, InfiniBand, мне б такое!), а поскольку у нод нет своих дисков, это накладывает некоторые ограничения на то, сколько можно всего обсчитать.

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

Кластер сам по себе управляется с помощью MPI. Межпроцессорное взаимодействие я реализую с помощью OpenMP — достаточно бесячего, но работающего кое-как стандарта. Помимо этого, я порой использую SIMD — либо явно (это конечно не особо желательно), либо путем использования оптимизаций компилятора и подстаивания своих циклов так, чтобы это можно было делать проще через #pragma simd и иже с ними.

Что касается собственно того что я запускаю там, в основном это рассчеты на С++ или MATLAB (там лицензия MDCS) которые, как правило, тестируют ту или иную рыночную теорию. Поскольку вычислительных ресурсов чуть более чем дофига, а платить за них не надо (в отличии от, например, Azure), я гоняю очень много спекулятивной или вычислительно-неэффективной фигни которая, вместо того чтобы использовать механизмы machine learning-а (всякий annealing там), пытается по сути брут-форсить анализ путем рассмотрения избыточных комбинаций данных. Это моя визитная карточка — вместо того чтобы делать все умно (и сложно), я делаю де факто Монте-Карло.

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

Спеки нового кластера меня порадовали еще больше — 464 ноды по 40 ядер и 192гб оперативки, особо мощные ноды (которых мало и для них нужно просить допуск — для меня не вариант), а также няшные GPU ноды — 10 нод по 4 GTX1080 и 10 нод по 2 Volta V100. Я пожалуй единственный, у кого есть и навыки программирования CUDA (да-да, по этой технологии я тоже курс сделал, по тем же причинам) а также подходящие задачи чтобы все это амортизировать.

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

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

12 responses to “Кластер для финансового анализа”

  1. Чото я не пойму где мулька. Ну посчитал ты где нужно купить/продать. А дальше что? Как на этом зарабатывать? На Московской Бирже большие деньги делаются на инсайде. В остальном мире, мне кажется тоже, только инсайд дороже.

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

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

    Если твой бот сыграл в плюс, то надо учитывать стоимость ввода/вывода у брокера, + надо учитывать процент за прибыль.

    Есть ли профит по сравнению с “купить и держать” у голубых фишек? И если есть, то стоит ли он затрат?

    1. Я размышления в стиле “все есть инсайд” комментировать не намерен. Если все есть инсайд, идите “покупайте” инсайд. Обсуждать подход “купить и держать”… я здесь за арбитраж а вы тут за ритейл инвестинг. Побойтесь сотону!

  2. neznaika_finansov Avatar
    neznaika_finansov

    Почему F# а не Haskell?

    1. Хмм, а почему F#? У меня поначалу были части на F# но я от них избавился. А Haskell я вообще не знаю.

  3. Вот подфартило так подфартило. У меня всего 2 ноды по 40 ядер :(

    А ещё интересно, почему если кластер, то обязательно C++. Под докером же можно всё, что угодно запускать. Ну ладно, почти всё.

    1. >> А ещё интересно, почему если кластер, то обязательно C++. Под докером же можно всё, что угодно запускать.

      Потому что реализация MPI под другие языки хромает на все четыре ноги. А docker (даже docker swarm) это про изоляцию контейнеров друг от друга и “прозрачную” балансировку нагрузки.

    2. В те времена когда я начинал не было .NET Core. На джаву я не хочу из эстетических соображений. К тому же, векторизация, параллелизация и все вот это доступно в С++ напрямую, не говоря уже о том что программирование под CUDA и (да простят меня) Xeon Phi тоже делается на C/С++, и никаких возможностей запускать там что либо иное нет.

  4. … И реально весь этот “суперкрей” полностью монте-карлой загрузить можно? Это вопрос к тому, что конечно – круто и фантастика – но неужели тому, у кого нет столько – и соваться не стоит?

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

    2. Есть подозрение, что сколько ресурсов ни дай, всегда будет мало :-) И для каких-нибудь Goldman Sachs весь этот “суперкерей” – это как одна рабочая станция для одного человека.

  5. Интересно, что делать, коли тебя забанят. Чисто теоретически, можно заработать бабла, чтобы на ибее приобрести 300 б/у-шных xeon по 20 ядер, но как потом всё это размещать и обслуживать…

    1. Сейчас это уже не является большим риском, т.к. можно будет просто купить время в облаке или даже начать строить собственную инфру. У нас в РФ все еще водится подход размещать нагрузку “за счетчиком”, так что кто знает…

Оставить комментарий