О чем эта история
Во время пандемии COVID-19 врачи столкнулись с необходимостью анализировать огромное количество КТ-снимков легких. В 2020 году Правительство Москвы приняло решение включить КТ-исследование легких в эксперимент по использованию инновационных технологий в области компьютерного зрения для анализа медицинских изображений.
Разработанный в рамках эксперимента сервис компании CVisionLab на платформе Yandex Cloud обрабатывает 90% исследований за 2,5 минуты — от входящего запроса из медучреждения до сообщения о выгруженном в ответ результате. Во время третьей волны пандемии сервис успешно справлялся с нагрузкой в 1000 КТ-исследований в день, что соответствует примерно 200 ГБ обрабатываемых данных.
Как развивать проект в условиях неопределенности
Исследование методом компьютерной томографии при диагностике коронавирусной инфекции позволяет выявлять осложнения на ранних этапах заболевания и как можно скорее начинать лечение или госпитализировать пациента. Во время пандемии COVID-19 врачам приходится анализировать огромное количество КТ-снимков легких. Но если обрабатывать вручную большой поток исследований, внимание врача притупляется и повышается вероятность ошибки.
В 2020 году Правительство Москвы решило включить КТ-исследование легких на COVID-19 в эксперимент по использованию инновационных технологий в области компьютерного зрения для анализа медицинских изображений и дальнейшего применения в системе здравоохранения города Москвы. Компания CVisionLab — разработчик нестандартных R&D решений в области компьютерного зрения и искусственного интеллекта — решила принять участие в разработке нового сервиса, который с помощью технологии искусственного интеллекта (ИИ) анализировал бы КТ-снимок и выдавал предварительное заключение.
Начало разработки системы анализа медицинских изображений пришлось на период ухудшающейся эпидемиологической обстановки и постоянных изменений в процессах работы врачей-рентгенологов. Это приводило к ужесточению требований к создаваемым сервисам. Например, максимально допустимое время на обработку одного исследования сократилось с 15 до 6,5 минут, а количество КТ-снимков, которые нужно было обрабатывать в день, выросло в несколько раз.
Приходилось учитывать и плавающую нагрузку: днем запросы на обработку новых исследований могли поступать раз в 2-3 секунды, а вечером и ночью — раз в 10 минут или даже реже. По расчетам CVisionLab, чтобы самостоятельно справиться с пиковыми нагрузками и успевать обрабатывать КТ-снимки за 6,5 минут, пришлось бы поддерживать работу около 10 серверов, оснащенных современными GPU, и обеспечить балансировку трафика между ними. При этом значительную часть времени большинство из них простаивало бы.
Компания пошла другим путем — на базе управляемых сервисов Yandex Cloud разработала гибкое масштабируемое решение с использованием микросервисной архитектуры. Этот подход позволил динамически менять объем вычислительных ресурсов в соответствии с текущим уровнем нагрузки на сервис. Размещение сервиса на облачной платформе Яндекса позволило обеспечить безопасность систем и данных в соответствии с требованиями 152-ФЗ и индустриальных стандартов ISO 27001, ISO 27017, ISO 27018.
Компания CVisionLab стала участницей облачного акселератора Yandex Cloud Boost, который предлагал компаниям — разработчикам собственных IT-решений, находящихся хотя бы на стадии MVP, гранты от 200 тысяч до 1 млн рублей на тестирование сервисов Yandex Cloud, помощь в облачной миграции и бесплатную техническую поддержку в течение года.
От монолита к микросервисам
Микросервисному решению предшествовала базовая монолитная система, разработка которой началась весной 2020 года. Три месяца ушло на создание и обучение ML-модели, а следующие четыре — на разработку базового монолитного решения (MVP) и его интеграцию с ЕРИС ЕМИАС (Единым радиологическим информационным сервисом — Единой медицинской информационно-аналитической системы города Москвы) и проведение сторонних функциональных и калибровочных тестирований.
При этом в начале 2020 года, когда пандемия в России только начиналась, еще не было достаточно размеченных данных для обучения ML-алгоритмов, а все специалисты, которые могли бы подготовить такой датасет, боролись за жизни пациентов на передовой. Поэтому CVisionLab пришлось выжимать максимум из весьма ограниченного объема данных. Сейчас в основе системы анализа медицинских изображений лежат три сверточные нейронные сети:
- Сеть для проведения бинарной классификации — анализирует все срезы исследования на наличие признаков патологий, агрегирует информацию и делает предположение о наличии или отсутствии признаков коронавирусной инфекции в легких пациента.
- Сеть для сегментации области легких на снимке.
- Сеть для сегментации областей с патологическими изменениями в легких.
При разработке алгоритмов также использовали «Набор данных MosMedData: COVID19_1110», состоящий из 1110 КТ-исследований. Осенью 2020 года сервис был подключен к продуктовому контуру и начал обрабатывать КТ-исследования реальных пациентов.
Разработка микросервисного решения
Оценив нагрузку на новую систему и прогнозируя ее увеличение в будущем, в CVisionLab приступили к следующему этапу разработки — созданию масштабируемого микросервисного решения на базе управляемых сервисов Yandex Cloud.
Микросервисная архитектура предполагает построение единого приложения из множества слабосвязанных компонентов меньшего размера (микросервисов), поддерживающих независимое развертывание. При таком подходе гораздо легче не только обновлять код и добавлять новые функциональности, но и автоматизировать масштабирование системы, и увеличивать устойчивость к сбоям. В отличие от монолитного решения микросервисы масштабируются автоматически при увеличении нагрузки, а отказ одного сервиса не приводит к остановке системы в целом.
Микросервисный подход основан на контейнеризации, а для управления контейнерами в едином кластере микросервисов, то есть оркестрации, служит Kubernetes. Эта система предоставляет механизмы взаимодействия с кластером, с помощью которых автоматизируется развертывание, масштабирование и управление приложениями в контейнерах. Мы подробно рассказывали о работе с экосистемой Kubernetes® на конференции Kuber Conf.
Yandex Cloud предоставляет экосистему тесно интегрированных между собой облачных управляемых сервисов, которые позволяют создать микросервисную архитектуру:
- Yandex Managed Service for Kubernetes® — позволяет создавать кластеры и группы узлов Kubernetes с возможностью репликации в три географически распределенные зоны доступности, а обслуживает и обновляет все компоненты инфраструктуры облачный провайдер.
- Yandex Container Registry — сервис для хранения и управления Docker-контейнерами и образами в облаке.
- Yandex Network Load Balancer — сервис, который распределяет нагрузку по облачным ресурсам и обеспечивает отказоустойчивость приложений.
- Yandex Message Queue — масштабируемый сервис очередей для обмена сообщениями между сервисами в микросервисной архитектуре.
В CVisionLab развернули кластеры и группы узлов в Yandex Managed Service for Kubernetes®, что позволило им обеспечить масштабирование внутри групп и отказоустойчивость всей системы. Виртуальные машины Yandex Compute Сloud внутри кластера были выбраны с нужными характеристиками для всех экземпляров сервисов. На одних виртуальных машинах с GPU производится обработка исследования, а на других — происходит загрузка, сохранение, обработка входящих сообщений и т. д. С помощью групп виртуальных машин Instance Groups через Kubernetes экземпляры физических машин были разделены на группы, в которых устанавливались правила масштабирования для сервисов, развернутых на этих машинах, и непосредственно для физических машин.
Yandex Container Registry обеспечил быстрое развертывание новых образов и гарантировал стабильность работы в независимости от внешней среды. А Yandex Network Load Balancer использовался как балансировщик нагрузки между сервисами Dicom Downloader для скачивания DICOM-файлов с исследованиями — дал возможность иметь одну общую точку входа и проходить по «белым» спискам IP-адресов в файерволле внешней системы.
Для хранения дампов и обмена данными между сервисами было взято универсальное масштабируемое S3-хранилище Yandex Object Storage, а логи и контексты (для передачи информации между сервисами) разместили в управляемом сервисе для работы с базой данных MongoDB — Yandex Managed Service for MongoDB. Например, в базе данных хранится информация об источнике поступившего в систему файла, имя, уникальный идентификатор серии. DICOM-файл, полученный из КТ-исследований, может содержать несколько серий с КТ-срезами, но в системе обрабатывается лишь одна серия, самая подходящая по положению серии, наложенному фильтру, количеству срезов в серии и т. д.
Для обеспечения безопасности и разделения уровней доступа к ресурсам Yandex Cloud использовался сервис Yandex Identity and Access Management, а ключевые этапы работы системы, в частности, очереди, оцениваются метриками в Yandex Monitoring, по которым количество экземпляров однотипных сервисов масштабируется. То есть при увеличении нагрузки их количество может увеличиваться, а при уменьшении нагрузки соответственно уменьшается.
Работы по рефакторингу кода и переходу на микросервисную архитектуру заняли 3 месяца, а новую версию системы запустили в 2021 году.
2,5 минуты на исследование
В CVisionLab разработали систему, которая за 2,5 минуты полностью обрабатывает 90% исследований: от входящего запроса из медучреждения до сообщения о выгруженном в ответ результате. После завершения процедуры на компьютерном томографе исследование автоматически отправляется в ЕРИС ЕМИАС и сервис CVL на обработку, а затем — врачу. Оригинальный снимок и дополнительную серию, обработанную с помощью технологий ИИ, можно просмотреть совместно, так как серии автоматически послайсово синхронизируются.
Исследования, в которых сервис ИИ предсказал наличие патологии, поднимаются в начало рабочего списка исследований врача-рентгенолога и подсвечиваются красным или оранжевым цветом (в зависимости от уровня вероятности, с которым сервис сделал предсказание). При просмотре конкретного исследования контуры возможного поражения отмечаются красным цветом.
Микросервисная архитектура и облачные сервисы Yandex Cloud позволили во время третьей волны пандемии успешно справляться с нагрузкой в 1000 КТ-исследований в день, что соответствует примерно 200 Гб обрабатываемых данных. CVisionLab продолжает поддерживать и обновлять сервис, чтобы он соответствовал динамически обновляемым функциональным требованиям и API взаимодействия с ЕРИС ЕМИАС.
На независимом тестировании сервис показал следующие значения метрик качества:
- AUC (площадь под ROC-кривой) — 0.97
- Чувствительность — 0,94
- Специфичность — 0,94
В рейтинге эксперимента по использованию инновационных технологий в области компьютерного зрения для анализа медицинских изображений и дальнейшего применения в системе здравоохранения города Москвы решение CVL от компании CVisionLab занимает первое место по направлению КТ COVID по состоянию на август 2021 года.
Мнение
При разработке мы должны были уложиться в сроки реализации решения, при этом обеспечить его производительность и точность ML-алгоритма. Ключ к успеху нашли в эффективно масштабируемой бессерверной архитектуре решения, построенной на базе сервисов Yandex Cloud, и в глубокой алгоритмической базе нашего ИИ. Для работы алгоритмов ИИ мы активно используем GPU-инстансы в сервисе Compute Cloud. Так же, как и другие ресурсы, GPU-инстансы масштабируются в зависимости от трафика, что обеспечивает нам эффективную работу с ресурсами (позволяет нам экономить в случае снижения трафика и быстро масштабироваться в случае его возрастания). В результате мы реализовали сервис, который уже помог реальным врачам проанализировать десятки тысяч КТ-исследований пациентов с подозрением на COVID-19.