Глубинный котер
95 subscribers
60 photos
7 videos
4 files
71 links
Download Telegram
Кратко о fitness functions. Любое приложение всегда стремится к энтропии. Как говорил известный в ИТ-индустрии Gregor Hohpe:

💬 It’s almost like enterprise IT is subject to the Second Law of Thermodynamics, which concludes that the entropy in an (isolated) system can never decrease - at best it can be constant, but usually it increases.
-- "Here’s why enterprise IT is so complex" by Gregor Hohpe

Технически невозможно контролировать качество работы каждого разработчика. Это побуждает индустрию искать способы поддержания качества архитектуры на принципиальном уровне. Одним из таких способов является Evolutionary Architecture.

Генетический механизм репродукции реализует адаптивный способ разрешения неопределенности.

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

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

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

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

Robert Martin говорил, что архитектура - это о том, как не надо делать. Иными словами, архитектурное решение - это сокращение количества возможных вариантов. Т.е. архитектура должна выполнять хищнические функции.

Чем отличаются собаки от волков? Волк имеет естественных врагов-хищников, а собаки - нет.

Вместо хищников, процесс селекции собак выполняют выставки и стандарты пород, которые фиксируют желаемые свойства пород.

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

По мере возникновения исторических изменений в породе, в стандарт вносятся изменения, требования ужесточаются, что обеспечивает прогресс породы.

Этот же принцип положен в основу Evolutionary Architecture. Архитектор выступает в роли автора стандарта породы, а разработчик - в роли заводчика, который выбирает (путём сравнения) для репродукции такой экземпляр породы из всех возможных, который наилучшим образом соответствует стандарту.

Роль стандарта породы выполняют fitness functions (функции соответствия, приспособленности). Они позволяют разработчикам измерить степень соответствия старого варианта системы и нового, и выбрать тот, который соответствует требованиям наилучшим образом.

Понимая, что требования fitness functions будут ужесточаться, разработчик всегда стремится увеличивать запас по требованиям , что вынуждает искать его новые решения и постоянно повышать собственный уровень знаний.

Хотя fitness functions выполняют охранные функции, препятствуя деградации свойств системы, главная их ценность заключается не в этом, а в создании благоприятных условий для постоянного развития уровня квалификации специалистов.

Наиболее важными я считаю fitness functions с нагрузочным и объемным тестированием, которые мгновенно выявляют костыльные запросы и побуждают разработчиков изначально закладывать в систему решения с дальним горизонтом развития, например, такие, как CQRS.

Пример реализации fitness functions.
Мощно
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Из заметки Михаила Корнеева узнал про FastStream. В целом хорошая идея с единым интерфейсом для работы с разными очередями и генерацией документации с описанием топиков и структурой сообщений. Но самым интересным показался их отдельный пакет faststream-gen для генерации кода приложения, где используется FastStream, и тестов на этот код. Для этого достаточно вести описание топиков, хостов, конкретного брокера и т.д. Правда под капотом пакет использует OpenAI API, так что нужно вводить свой ключ. С учетом быстрого развития техник по запуску LLM на локальных машинах ждём дальнейшее распространение такого подхода у авторов пакетов
👍1
Недавно слушал доклад про схожее решение с автоматизацией работы доменного эксперта. Тут пошли дальше: ассистент не только помогает с документацией, но и может в код. Явно вырисовывается тренд на 2024 год, осталось поймать волну 🏄‍♂️
👍2
Forwarded from Pavel Zloi
Всем привет! Хочу рассказать про ещё одну обученную мною модель под названием PavelGPT-7B-128K-v0.1-LoRA, на этот раз я взял скрипты Saiga (rulm) и модифицировал их таким образом, чтобы получить языковую модель типа INSTRUCT, но с данными оформленными в виде чата (для того чтобы её было легко использовать в связке с проектами типа text-generation-webui).

В качестве основы взял Yarn-Mistral-7b-128k, а датасеты собирал так, чтобы модель могла не только решать базовые задачи, но и отгадывать загадки, а ещё решать несложные математические задачки, писать небольшие тексты, составлять оглавление и создавать простые скрипты.

Вот все ссылочки, которые могут пригодиться:
- скрипт обучения модели
- отчёт обучения на wandb
- тестовые ответы модели в карточке на huggingface
- скрипт запуска модели

PS. Мне давно хотелось сделать себе чуть более умного помощника для работы с документацией которую я храню в Obsidian и пока что впечатления от использования данной модели более приятные чем от предыдущих моих экспериментов.

Надеюсь вам данная моделька тоже окажется полезной :)

#ai #saiga #gpt
👍2
Вот это поворот
#шуе_ппш

вы думали нам добавили генераторы? Не, нам добавили менеджеры контекста 😈
👍2
Походу олимпиадников автоматизируют быстрее, чем джсонукладчиков с завода 🏭
👍2
Forwarded from Knowledge Accumulator
AutoNumerics-Zero: Automated Discovery of State-of-the-Art Mathematical Functions [2023] - ещё одно AI-открытие уходящего года

Продолжаем тему оптимизации программ. Почти одновременно с FunSearch вышла другая работа от Deepmind, правда, не применяющая LLM, и поэтому попавшая только в Just Links. Идеологически она похожа на AutoML-Zero, про который я уже тоже писал пост.

Итак, мы умеем легко и быстро производить на компьютере 4 базовые арифметические операции. Однако, "трансцендентные" функции, например, экспоненту, нельзя легко посчитать. Компьютер их считает приближённо, например, с помощью ряда Тейлора. При этом, нам достаточно уметь приближать её на промежутке [0;1], т.к. в целую степень мы умеем легко возводить и таким образом получить любую степень.

Итак, задача - найти как можно более короткую / быструю программу, вычисляющую экспоненту на отрезке с заданной точностью. Авторы представляют программу в виде графа вычислений (см. картинку). Вершинами является вход x, выход f, константы и математические операции, в которые по направленным рёбрам попадают входные данные.

Генетический алгоритм поддерживает популяцию графов, случайно добавляет мутации в них - добавление вершин, удаление, замена ребра и т.д. Оптимизируется одновременно точность и скорость (кол-во операций или время исполнения). Так как у нас 2 важных критерия отбора, используется специальный алгоритм сортировки популяции, выбирающий программы, сбалансированные по-разному с точки зрения критериев.

В результате, алгоритм не оставляет камня на камне от бейзлайнов, созданных приматами. Количество операций сокращается примерно в 2 раза, но это не самое крутое. Алгоритм подбирает функции так, чтобы компилятор оптимизировал их наиболее выгодно, в итоге скорость возрастает в >3 раза.

И вновь кожанные мешки показывают свою несостоятельность в сложных многослойных задачах, которые нельзя разбить на изолированные кусочки. End-to-end алгоритмическая оптимизация не оставляет нам никаких шансов.

@knowledge_accumulator
👍2
Forwarded from RWPS::Mirror
Bruh
👍2
А вот и модельки подъехали для вики-будущего
Мы релизнули вихрь💨 Нормально.

Проблемы: мы не очень уверены что оно точно аутперформит mistral и saiga mistral. Формально - да, все хорошо.

Цитируя классику

Если вам интересно что мы сделали: хабр

А еще оформили все в красивую HF репу: https://huggingface.co/Vikhrmodels
👍2
Forwarded from Код и Капуста
Ребята из grafana делают много полезных штук.

k6 - это тулза для нагрузочного тестирования. Сами тесты пишутся на js, но запускаются с помощью утилиты, которая написана на #golang


k6 run script.js


Сайт https://k6.io/
Репа https://github.com/grafana/k6
👍2
Глубинный котер
Из заметки Михаила Корнеева узнал про FastStream. В целом хорошая идея с единым интерфейсом для работы с разными очередями и генерацией документации с описанием топиков и структурой сообщений. Но самым интересным показался их отдельный пакет faststream-gen…
Команду заинтересовал faststream валидацией сообщений с помощью pydantic и генерацией AsyncAPI из коробки для работы с kafka. Поэтому решил поближе познакомиться с этим фреймворком.

Первые впечатления были конечно получше, авторам не удалось решить типичные проблемы для таких чудо швейцарских ножей: сильная связность компонентов пакета и как следствие отсутствие гибкости. Сурсы довольно мудреные, а некоторые блоки очень спорные.

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

В итоге решили воздержаться от использования этого пакета ☠️
👍2
Мальчик слушает на саундклауде техно, мужчина:
👍2
Давно слышал про книжные клубы и вот наконец-то появилась возможность попробовать. Недавно начал читать «От монолита к микросервисам» Сэма Ньюмена и случайно наткнулся на ютубе на обсуждения каждой главы этой книги в рамках книжного клуба «между скобок». Ребята из клуба недалеко продвинулись по книге, поэтому решил попробовать засинкаться с ними и после прочтения каждой главы смотреть выпуск с обсуждением главы.

Интересное дополнение ко книге получается, потому что обсуждение выстраивается в виде дебата, где участники приводят аргументы за и против тех или иных практик, описанных в главе. При этом к каждой главе немного меняется состав спикеров, поэтому всегда можно услышать свежее мнение.

Мне очень понравился такой формат чтения, потому что есть возможность увидеть проблемы, поднятые в главе, под новыми углами, повторно осмыслить некоторые моменты.
👍2
Forwarded from Книжный куб (Alexander Polomodov)
An Introduction to Residuality Theory - Barry O'Reilly - NDC Oslo 2023 (Рубрика #Architecture)

Интересное выступление про residuality theory от Barry O'Reilly, автора теории. Автор делает подход к созданию теории, что поможет инженерам прокачиваться в архитектуру не просто набивая опыт, а используя достижения complexity theory, но без погружения во всю ее сложность. Для этого автор начинает с определения упорядоченных и неупорядоченных систем, а дальше он показывает как стрессоры (неизвестные факторы) могут негативно влиять на архитектуру. С учетом вариативности окружающего мира проанализировать все состояния системы и влияние стрессоров на систему в этом состоянии не представляется возможным. Поэтому автор предлагает рассматривать систему не целиком, а изучать то, что остается от системы, если случается пи... (стрессор X). Эти остатки определяют будущее системы и могут быть использованы для управления архитектурой программного обеспечения. Для моделирования стрессоров нам поможет метод Монте-Карло с его рандомизацией, которую мы можем применить к возможным стрессорам.

Дальше автор вводит рассказывает про аттракторы как устойчивые состояния, в которые скатывается система. Он приходит к ним через NK модель Кауффмана. У нас есть система с N элементами, принимающими значение 0 или 1, параметром K характеризующим связность (например, максимум связей одного элемента). Суть в том, чтобы показать, что при росте N и K у нас в системе увеличивается количество аттракторов. Заодно там появляется вероятностная характеристика P, которая характеризует bias связей между элементами. Финалом размышлений становится вывод некоторой выпуклой кривой критичности, которая вырисовывается в пространстве N и K, где мы играем с количеством элементов и связей между ними (еще один способ определить количество сервисов и связей между ними).

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

Дальше автор приводит крутые примеры из дизайна системы для управления зарядными станциями для электромобилей. Ребята учли corner cases, которые бывают с зарядкой электромобилей и это помогло потом упростить решение проблем с людьми, что оставляют заряжать машины на целый день, а также с ребятами, что занимались саботажем. А вообще история прикольная и рекомендую посмотреть ее в оригинале.

Ну и в финале автор рассказывает про составление матриц для описания связей между компонентами системы и факторами стресса. Эти матрицы помогают выявить нефункциональные требования и уязвимости в системе. В этой матрице у нас в строках приведены стрессоры, а в колонках - компоненты системы. В итоге, мы анализируем для каждого стрессора влияет ли он на компонент. Если несколько компонентов подвержены одному стрессору, то вероятно у них есть неявная связь (implicit coupling), с которой хорошо бы разобраться.

В конце автор приводит способ померить крутость нашей residual architecture по сравнению с ее наивной версией. Схема выглядит так, что нам надо подсчитать для каждого стрессора
- Переживает ли наша наивная архитектура его наступление
- Переживает ли его наступление residual architecture
- Из значения успехов для residual architecture вычесть количество успехов для наивной архитектуры, а потом отнормировать на общее количество стрессоров
- Полученное число показывает насколько мы хорошо как архитекторы прокачали нашу начальную архитектуру:)

В общем, все звучит достаточно логично и напоминает мне подход генеративно-состязательных сетей, но только к архитектуре. Дальше я планирую прочитать whitepaper "Residuality Theory, random simulation, and attractor networks" от автора доклада и рассказать про него:)

#DistributedSystems #SystemDesign #Math #Engineering #Architecture #SoftwareArchitecture #ComplexityTheory #Software #Processes
👍3