Люблю тебя ❤️🔥
def closure_func_0():
cnt = [0]
def f():
cnt[0] += 1
return cnt[0]
return f
def closure_func_1():
cnt = 0
def f():
nonlocal cnt
cnt += 1
return cnt
return f
f_0 = closure_func_0()
f_1 = closure_func_1()
cnt_0 = f_0()
cnt_1 = f_1()
assert cnt_0 == cnt_1 == 1
Forwarded from DevFM
This media is not supported in your browser
VIEW IN TELEGRAM
Load balancing
Прочитал на одном дыхании замечательную статью о балансировке нагрузки (load balancing).
С увеличением нагрузки на приложение один сервер может уже не справляться. Тут-то и вступают в дело алгоритмы балансировки нагрузки.
По сути, оптимизировать можно два показателя: задержки при запросах и количество отклонённых сервером запросов.
Автор рассматривает:
– алгоритм round robin, когда запросы отправляются на сервера по кругу. Этот алгоритм не учитывает, что сервера могут иметь разную мощность. Тогда более мощные сервера будут быстро обрабатывать запросы, а менее мощные могут загибаться и давать отлупы.
– алгоритм dynamic weighted round robin учитывает мощность серверов. На основе среднего времени ответа им динамически устанавливаются веса. И, в зависимости от весов, будет автоматически варьироваться количество запросов.
– алгоритм least connection учитывает количество подключений, поддерживаемых серверами в текущий момент времени. Запрос будет передан серверу с наименьшим количеством активных подключений.
– алгоритм peak exponentially weighted moving average (PEWMA) направлен на уменьшение задержек в запросах. По сути, сочетает в себе dynamic weighted round robin, least connection и немного магии сверху.
Каждый из описанных алгоритмов сопровождается красивой и понятной анимацией. А в конце статьи можно поиграться с наглядным симулятором каждого из методов.
Помимо теоретических выкладок, автор проводит целое исследование, и смотрит, как в разных ситуациях ведёт себя каждый из алгоритмов.
Вас ожидают интересные выводы :)
#skills
Прочитал на одном дыхании замечательную статью о балансировке нагрузки (load balancing).
С увеличением нагрузки на приложение один сервер может уже не справляться. Тут-то и вступают в дело алгоритмы балансировки нагрузки.
По сути, оптимизировать можно два показателя: задержки при запросах и количество отклонённых сервером запросов.
Автор рассматривает:
– алгоритм round robin, когда запросы отправляются на сервера по кругу. Этот алгоритм не учитывает, что сервера могут иметь разную мощность. Тогда более мощные сервера будут быстро обрабатывать запросы, а менее мощные могут загибаться и давать отлупы.
– алгоритм dynamic weighted round robin учитывает мощность серверов. На основе среднего времени ответа им динамически устанавливаются веса. И, в зависимости от весов, будет автоматически варьироваться количество запросов.
– алгоритм least connection учитывает количество подключений, поддерживаемых серверами в текущий момент времени. Запрос будет передан серверу с наименьшим количеством активных подключений.
– алгоритм peak exponentially weighted moving average (PEWMA) направлен на уменьшение задержек в запросах. По сути, сочетает в себе dynamic weighted round robin, least connection и немного магии сверху.
Каждый из описанных алгоритмов сопровождается красивой и понятной анимацией. А в конце статьи можно поиграться с наглядным симулятором каждого из методов.
Помимо теоретических выкладок, автор проводит целое исследование, и смотрит, как в разных ситуациях ведёт себя каждый из алгоритмов.
Вас ожидают интересные выводы :)
#skills
💔1
Forwarded from Experimental chill
Сегодня прям праздник статей!
Я тут писал про оптимизации хеширования и сортировок с помощью Reinforcement Learning, Deepmind выложили статью, я в acknowledgements.
AlphaDev discovers faster sorting and hashing algorithms
https://www.deepmind.com/blog/alphadev-discovers-faster-sorting-algorithms
Faster sorting algorithms discovered using deep reinforcement learning
https://www.nature.com/articles/s41586-023-06004-9
Из очень хорошего, работать мне с ними понравилось. Из интересного -- результаты не самые революционные, но какие-то циклы серверов сэкономили.
HN: https://news.ycombinator.com/item?id=36228125
Я тут писал про оптимизации хеширования и сортировок с помощью Reinforcement Learning, Deepmind выложили статью, я в acknowledgements.
AlphaDev discovers faster sorting and hashing algorithms
https://www.deepmind.com/blog/alphadev-discovers-faster-sorting-algorithms
Faster sorting algorithms discovered using deep reinforcement learning
https://www.nature.com/articles/s41586-023-06004-9
Из очень хорошего, работать мне с ними понравилось. Из интересного -- результаты не самые революционные, но какие-то циклы серверов сэкономили.
HN: https://news.ycombinator.com/item?id=36228125
Deepmind
AlphaDev discovers faster sorting algorithms
In our paper published today in Nature, we introduce AlphaDev, an artificial intelligence (AI) system that uses reinforcement learning to discover enhanced computer science algorithms – surpassing those honed by scientists and engineers over decades.
🤔1
Forwarded from Love. Death. Transformers.
к слову это весь код, ага...
Когда сегодня утром Кирилл кинул мне этот код я подумал что это прикол и я прокомментировал это как: Чо за olympyad style code? Слили кодовую базу tg?
Когда сегодня утром Кирилл кинул мне этот код я подумал что это прикол и я прокомментировал это как: Чо за olympyad style code? Слили кодовую базу tg?
👏1
Forwarded from что-то на DL-ском
А вы знали, что есть способ улучшить генерализацию любой кодовой модели? Как? Применив до этого модель от Microsoft – CodeExecutor
Сложно-сложно, непонятно. Как я могу улучшить результаты своей модели, применив до этого CodeExecutor? А как именно надо применить?🤨
Итак, модель вышла в мае этого года. Основана она на предыдущей модели Microsoft под названием UnixCoder (2022). Коротко – чуваки взяли и поверх предыдущей модели на претрэйне обучали ее на предсказание трассировки по коду. Что за трассировка можно посмотреть во вложении, но по сути это состояние переменных в течении выполнения кода.
Они кстати выложили, как выглядит их датасет, но я нашла только test.😠 А собирали они его следующим образом: брали код из датасета CodeNet и прогоняли в песочнице, которая будет комплитить этот код и выдавать трассировку. Вау, как неожиданно. Ладно, на самом деле это не все, они еще зааугали данные различными операциями (вложения, там список). И получив AST дерево (тоже напомню во вложениях как оно выглядит), они получали элементы к которым они могут применить операции «мутаций»
Еще мне понравилось, что авторы вспомнили древний (ну реально, на фоне всех методов NLP) подход curriculum learning. Если коротко – это обучение с постепенным усложнением функции. Ну то есть начинаем с линейной, постепенно продвигаемся к выпуклой. Соответственно они начинали учить с однострочных кодов и увеличивали постепенно количество строк.
Так вот, как же она может то давать прирост величины результатов любой модели. Перед тем, как использовать кодовые модели просто прогоняем трестировку на данных и скарливаем. Все🧠 . По метрикам у моделей действительно увеличивается понимание кода.
🤗Модель
🖥 Код
Сложно-сложно, непонятно. Как я могу улучшить результаты своей модели, применив до этого CodeExecutor? А как именно надо применить?
Итак, модель вышла в мае этого года. Основана она на предыдущей модели Microsoft под названием UnixCoder (2022). Коротко – чуваки взяли и поверх предыдущей модели на претрэйне обучали ее на предсказание трассировки по коду. Что за трассировка можно посмотреть во вложении, но по сути это состояние переменных в течении выполнения кода.
Они кстати выложили, как выглядит их датасет, но я нашла только test.
Еще мне понравилось, что авторы вспомнили древний (ну реально, на фоне всех методов NLP) подход curriculum learning. Если коротко – это обучение с постепенным усложнением функции. Ну то есть начинаем с линейной, постепенно продвигаемся к выпуклой. Соответственно они начинали учить с однострочных кодов и увеличивали постепенно количество строк.
Так вот, как же она может то давать прирост величины результатов любой модели. Перед тем, как использовать кодовые модели просто прогоняем трестировку на данных и скарливаем. Все
🤗Модель
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Forwarded from Блог*
Чат*, у меня для вас задачка.
Есть вот такое простенькое AST для подмножества арифметических выражений:
Напишите код для вывода этих выражений так, чтобы:
* в них были корректно расставлены скобки (в частности, никаких два знака операции подряд)
* с учётом ассоциативности сложения (то есть
* без избыточных скобок (в частности, без скобок на топ-левеле и без скобок вокруг положительных литералов).
Отрицание на вычитание переправлять не надо.
Не то чтобы сильно сложная задача, но сложнее, чем кажется на первый взгляд.
Есть вот такое простенькое AST для подмножества арифметических выражений:
enum Expr {
Lit(i32),
Neg(Box<Self>),
Add(Box<Self>, Box<Self>),
}
(взял отсюда, да)Напишите код для вывода этих выражений так, чтобы:
* в них были корректно расставлены скобки (в частности, никаких два знака операции подряд)
* с учётом ассоциативности сложения (то есть
add(lit(1), add(lit(2), lit(3))) должно выводиться, как 1 + 2 + 3, а не 1 + (2 + 3))* без избыточных скобок (в частности, без скобок на топ-левеле и без скобок вокруг положительных литералов).
Отрицание на вычитание переправлять не надо.
Не то чтобы сильно сложная задача, но сложнее, чем кажется на первый взгляд.
Telegram
Блог*
#prog #rust #article
Efficient, Extensible, Expressive: Typed Tagless Final Interpreters in Rust
Efficient, Extensible, Expressive: Typed Tagless Final Interpreters in Rust
👍1