В коде блокчейн систем можно найти некоторые глобальные константые значения, влияющие на рантайм и поведение системы - гиперпараметры. Есть предположение, что можно увеличить пропускную способность блокчейна путем оптимизации его гиперпараметров. Но оптимизационные задачи подразумевают работу с функциями. Определим неформально сигнатуру функцию для задачи оптимизации пропускной способности блокчейна: пусть функция на вход принимает значения каких-то параметров блокчейна, а на выходе возвращает результаты бенчмарка пропускной способности в TPS блокчейн-системы, которая была запущена с данными ей параметрами.
Данный проект реализует эту функцию-черный-ящик, на которой можно было бы использовать различные методы оптимизации для поиска лучших значений параметров.
Для черного ящика была выбрана блокчейн сеть Solana.
Валидаторы блокчейна запускаются в докер-контейнерах.
В качестве инструмента для оркестрации используется DockerSwarm.
Для установки зависимостей для запуска блокчейна можно использовать скрипт base_install.sh
.
Заметим, что запуск блокчейн сети - ресурсоемкая задача. Если пытаться решать оптимизационную задачу на всех параметрах блокчейна, то потребуется большое количество итераций (запусков блокчейна). Для того, избежать этого было решено написать использовать методы анализа чувствительности - они позволяют определить самые значимые для целевой переменной параметры.
/containers
- конфигурационные файлы для оркестрации/matlab
- matlab-сервер, позволяющий запускать методы анализа чувствительности/sensitivity_analysis
- клиент на Python3 для matlab-сервера/cluster
- абстракции над различными варияциями блокчейн-кластеровblackbox.py
- функция для запуска кластера и декоратор, позволящий уменьшить количество нефиксированных параметров, на которых запускается блокчейн
Для подтверждения работоспособности написанного кода был проведен следующий эксперимент с кластером из 2-х валидаторов на одном Docker-хосте:
- Запуск блокчейна на значениях по умолчанию
- 20 запусков со случайными значениями первых
$66$ параметров в некоторой окресности значения по умолчанию:$12$ запусков с отступом в$10$ % и$8$ запусков с$17$ %. Размерность пространства была сокращена до$66$ , из-за ресурсоемкости запусков. - На полученных данных (матрица размерности
$21\times 66$ и вектор размерности$21$ ) запустили методы анализа чувствительности. Каждый метод по-своему определил 5 самых значимых параметров. - По параметрам одного из полученных списков самых значимых признаков запустили метод суррогатной опимизации.
Эксперимент дал выигрыш в пропускной способности на