Aspiring Data Science – Telegram
Aspiring Data Science
386 subscribers
465 photos
12 videos
12 files
2.15K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#dask #coiled

Ещё что интересно, coiled поддерживает dask-овые ресурсы, но аннотировать рабочие узлы ресурсами нужно самостоятельно, что крайне странно. Ну неужели нельзя было нормально сделать, чтобы железо аннотировалось автоматически?
#dask #coiled

Ураа, после пары часов танцев удалось запустить вычисления на кластере AWS через coiled. Уже хотел отказаться от этой затеи, т.к. постоянно выкидывало ошибку что не установлен мой модуль, хотя я его копировал на узлы с помощью client.upload_file. Уже было расстроился, что не получается сделать прозрачную замену локального dask на распределённый, но оказалось, в той функции, что требуется запустить на кластере, надо сделать импорт из нужного модуля, и тогда всё заработает. Это нигде не документировано и в поисковике не находится, не удивлюсь, если многие до этой проблемы дошли и бросили. Ну ладно, все проблемы решены, получается? Нет, конечно.

Замерил использование CPU на воркере, похоже, всегда загружено только 1 ядро, что за чёрт? Запостил вопрос на их гитхабе (другой поддержки там не предусмотрено).
Похоже, стартап с US$ 21M финансированием, цель которого демократизировать кластерные вычисления питонистов в облаках... решил, что поддерживать многопроцессовость vs многопотоковость, которая нужна для чистого питон-кода, не умеющего обходить GIL, (и которая уже была в dask) не надо, и так сойдёт. Как говорится, что это, глупость или предательство?

Пока что мне подсказали использовать много машинок не более чем с 2 vCPU. По результатам теста, действительно, это позволяет извлечь максимум из железа: 1 ядро по-любому подсунут виртуальное (HT), и оно даёт +15% к производительнсти, даже с учётом того, что dask от coiled на потоках (не знаю, как это получается). Но при добавлении ещё одного реального и виртуального ядра это масштабирается ещё на 15% вместо 50%, что уже невыгодно. Конечно, создавать каждый раз вирутальный сервер со своим полноразмерным образом диска ради 2 потоков глупо, ну а что делать.
Что-то мне уже кажется, что проще самому написать поднятие контейнера с установленным dask для воркеров и шедулера, присоединение к кластеру, отработку задач и удаление кластера, чем убеждать команду coiled из 30 человек добавить функциональность многопроцессовости, раз уж они за несколько лет не захотели/не смогли/не догадались это сделать. Ну как так можно работать, тупо штаны протирать годами. Я за 1 день столько проблем увидел, требующих решения, а у них там и конь не валялся, хотя в штате 30 высококлассных спецов и это платный сервис, т.е. они должны быть заинтересованы в развитии продукта. Самая очевидная проблема в подборе инстансов, регионов и облаков оптимальных по цене/скорости работы для данной клиентской нагрузки. А они в доке уныло бубнят, мол, мы не знаем, какой инстанс будет лучше для вашей задачи, попробуйте сами несколько.. Так блять сделайте удбную фишку для клиента, чтобы его нагрузка бенчилась автоматом на нескольких инстансах,и потом ему предлагалась лучшая конфигурация, возьмите за это больше денег.. Добавьте ML чтобы предсказывать производительнось, не гоняя нагрузку на всех 100500 возможных инстансах... Да нет, нахер надо.
А, так у них ещё и конский ценник.

10,000 CPU-hours free every month
$0.05 per CPU-hour thereafter
Bulk discounts starting at $10,000
(Costs are in addition to your AWS or Google Cloud costs, which we work to help you minimize.)

Эти 10k CPU-часов пролетят незаметно, за сутки работы 200 мелких машинок с 2 ядрами. А потом надо будет платить coiled по сути БОЛЬШЕ, чем за сами сервера облачному провайдеру, потому что на спот-рынке даже не самые мелкие 2 vCPU сервера стоят $0.0134/hr. А Coiled за такой будет брать уже 0.05*2=$0.1/hr, фига себе, в 10 раз больше.
Разные области математики в представлении бота Kandinsky 2:

- Mathematical analysis
- Linear algebra
- Abstract algebra
- Topology
- Geometry
- Mathematical statistics and probability
- Number theory
- Equations of Mathematical Physics
- Category theory
- Foundations of Mathematics (4k).

P.S. Чтобы не получать в генерации обложки учебников, можно добавить модификатор стиля (4k) или переформулировать запрос
2❤‍🔥1🆒1
Forwarded from Борис опять
#работа
Посмотрел резюме, которые нам прислали через линкдин (не отсюда) на вакансию Data Engineer. И это фестиваль кринжа.

Мое любимое из разных резюме:
* Резюме на 12 страниц
* Парень, который вставил в резюме сканы шести своих бангладешских дипломов
* Ярко синий текст на белом фоне
* Прошлое место работы: клерк в банке
* Прошлое место работы: студент магистратуры
* Прошлое место работы: настраивал Майкрософт ворд и все такое
* Всратые пережатые сотней шакалов фотки
* Таблица на половину страницы, показывающая уровень знания четырёх языков в разрезе райтинг, листенинг, спикинг
* Простыня текста на половину первой и половину второй страницы
* Никакой верстки, просто ворд документ с текстом сплошняком сверху вниз. 3 страницы
* Резюме из конструкторов резюме с кучей разноцветных иконок
* Резюме файлом в формате .docx

Я и не предполагал, что обычное резюме из одной страницы, сверстанное в латехе, это такое большое преимущество. Среди всей пачки из 30+ резюме таких нашлось три штуки
👍2
#ml #metrics #brier

Как известно, оценка Бриера (Брайера?) для бинарного классификатора представляет собой по сути среднеквадратическую ошибку между реальными исходами и предсказанными вероятностями. В теории это число между 0 и 1, где 0 означает идеальную калибрацию (из всех событий, предсказанных с вероятностью 25%, реализовались точно 25%, и тд). Я на эту метрику в работе часто смотрю, т.к. откалиброванность модельки очень важна, особенно когда бизнес-решения принимаются на вероятностях. И вот сегодня узнал нечто новое. Задумался, а чего вообще можно ожидать от модели, идеально предсказывающей вероятности, в терминах оценки Бриера. Давайте для этого скрафтим реализации миллиона событий, следующие заранее известным вероятностям:

probs = np.random.uniform(size=1000_000)
realizations = np.random.uniform(size=len(probs))
realizations = (realizations < probs).astype(np.int8)

В теории, у нас теперь есть массив единичек и нулей realizations, порождённый "истинными" вероятностями probs. Если ситуацию перевернуть, рассмотреть probs как вероятности, предсказанные моделью машинного обучения, а realizations как то, что мы реально пронаблюдали в жизни, то подобная точность должна быть мечтой любого ML-щика!
1
↑ Какой же будет оценка Бриера для такой отличной модели? Что выдаст brier_score_loss(realizations, probs)?
Anonymous Quiz
0%
0
38%
0.166
25%
0.5
38%
1
А что, если реализации никак не связаны с вероятностями? realizations = (realizations < 0.5).astype(np.int8), какой будет оценка Бриера?
Anonymous Quiz
13%
1
63%
0.5
13%
0.33
13%
0
Ну и последнее. Что за оценку получит "антимодель", которая прогнозирует, что событие не случится, а оно обычно случается, и наоброт? realizations = (realizations > probs).astype(np.int8)
Anonymous Quiz
33%
1
22%
0.99
44%
0.5
0%
0