← На главную

Rosalind на Rust обрабатывает геном человека потоково менее 100 МБ RAM

21.05.2026 13:55 · hackernews

Rosalind — движок для геномного анализа, написанный на Rust. Он умеет выравнивать последовательности, вызывать варианты в потоковом режиме и запускать кастомную биоинформатику на обычном «железе» — хоть на ноутбуке, хоть на полевом компьютере. Главная фишка: весь пайплайн для целого генома человека укладывается в менее 100 МБ оперативной памяти.

Обычные инструменты вроде BWA или GATK жрут под 50–100+ ГБ RAM, требуют полных копий промежуточных файлов и мощных дата-центров. Rosalind решает проблему иначе: разбивает задачу на √t блоков, держит в памяти только текущий блок и компактное дерево высотой log₂(t), а остальное пересчитывает при необходимости. Это даёт O(√t) рабочей памяти без потери точности — результаты бит-в-бит идентичны при любых запусках и разбиениях на блоки. Детерминизм жёстко проверяется тестами, в том числе в CI.

Сам движок использует FM-index для выравнивания и Bayesian scoring для вызова вариантов. Всё работает потоково: читает на вход FASTQ, отдаёт SAM/BAM и VCF прямо на лету, не создавая гигантских временных файлов. За счёт того, что состояние помещается в L1/L2 кэш, снижаются промахи кэша и подкачка страниц — реальная производительность на скромном железе заметно выше, чем у классических пайплайнов.

Применений несколько. В больницах, где нет мощных серверов, Rosalind запускается на общем десктопе с 8–16 ГБ ОЗУ — данные пациентов не уезжают в облако. В полевых условиях (Эбола, Зика, SARS-CoV-2) он толерантен к прерываниям связи и выдаёт варианты прямо на месте. В университетах студенты могут ставить опыты с реальными геномами на личных ноутбуках — это делает курс hands-on и доступным. Для разработчиков есть плагины на Rust и Python-биндинги через PyO3: новая аналитика автоматически наследует те же гарантии по памяти и детерминизму.

Сравнение с типичным стеком: у Rosalind пиковое RAM для полного генома — <100 МБ, у обычного стека — 1–16+ ГБ плюс гигантские временные файлы; детерминизм бит-в-бит и инвариантность к разбиению на блоки против плавающих результатов из-за порядка потоков или шардирования; потоковый вывод без материализации промежуточных данных против батчевых стадий с полными промежуточными файлами; работает на 8–16 ГБ ноутбуках против ориентации на высокомощные серверы или облако.

Технически всё собрано в репозитории на GitHub. Нужен Rust 1.72+, Python 3.9+ для биндингов, native заголовки для BAM. Есть CLI, тесты на детерминизм, границы памяти и золотые снепшоты. Лицензия — двойная Apache-2.0 + MIT.

Читать оригинал →