PyGMTSAR (Python GMTSAR) — Простая и быстрая спутниковая интерферометрия для всех

PyGMTSAR (Python GMTSAR) — Простая и быстрая спутниковая интерферометрия для всехUbuntu testsPyPI testsAvailable on pypiDocker

Долго ли, коротко ли, а только мой проект спутниковой интерферометрии PyGMTSAR, начинавшийся просто для проверки некоторых идей и алгоритмов, превратился в самостоятельную Python PyPI библиотеку и обзавелся тестами (CI on Github Actions) и «живыми» примерами на Google Colab и в образе Docker, плюс документацией на GitHub Pages.

«Классическая» интерферограмма — обычно так выглядит смещение поверхности в результате сильного землетрясения

Введение

Приглашаю специалистов и всех желающих познакомиться с миром спутниковой интерферометрии — открыть «живые» ноутбуки на Google Colab или в образе Docker и посмотреть уже готовые результаты, запустить их на выполнение и, возможно, посчитать собственные интерферограммы для интересующих вас территорий и дат, следуя инструкциям в ноутбуках. Кроме того, в GitHub репозитории Yamchi Dam, Ardabil, North Iran доступны Jupyter ноутбуки для обработки серии из примерно 800 интерферограмм за период 5.5 лет (внимание — потребуется скачать несколько терабайт исходных Sentinel-1 SLC сцен в zip-архивах), протестированные на ноутбуке Apple Air (Apple Silicon M2) и моноблоке Apple iMac (Apple Silicon M1). Да, PyGMTSAR использует эффективные алгоритмы и концепцию отложенных вычислений (lazy computing) и способен успешно работать и на Apple Air, выполняя за день вычисления, которые занимают недели на мощных серверах и рабочих станциях (и далеко не всегда завершаются успешно).

Живые примеры в образе Docker

Если вы используете Docker, настройте ваш рантайм (Preferences -> Resources для Docker Desktop) на использование 2 ядер CPU и 8 GB RAM или 4 ядер CPU и 16 GB RAM (или более, в той же пропорции). Загрузите образ Docker (или соберите собственный с помощью Dockerfile в репозитории) и запустите контейнер с пробросом порта 8888 для JupyterLab используя приведенные ниже консольные команды:

docker pull mobigroup/pygmtsar

docker run -dp 8888:8888 --name pygmtsar docker.io/mobigroup/pygmtsar

docker logs pygmtsar

В отобразившемся тексте будет предложена ссылка для получения доступа из вашего веб браузера к JupyterLab серверу внутри контейнера. Также Docker образ можно запустить в приложении Docker Desktop, нажав для него кнопку «RUN» и указав имя контейнера (например, pygmtsar) и переадресуемый порт (8888) в появившемся диалоговом окне («Optional settings») и кликнув на вновь созданном контейнере, чтобы увидеть кликабельную ссылку для открытия интерфейса JupyterLab.

Ноутбук S1A_Stack_CPGF_T173.ipynb скачивает всего лишь около 1.5 GB предварительно подготовленных данных (вместо исходных архивов сцен Sentinel-1). Ноутбуки ASFDownloading* потребуют авторизации на общедоступном сервере NASA Alaska Satellite Facility (ASF), ссылка для регистрации приведена непосредственно в ноутбуках — на этом сервере можно найти и скачать Sentinel-1 SLC сцены для любой интересующей вас территории и интервала дат. Для выполнение всех ноутбуков потребуется контейнер размером 100 GB и будет скачено 30-50 GB данных.

Живые примеры на Google Colab

Этот вариант еще проще и требует лишь кликнуть на ссылках (см. иконки «Open in Colab»), чтобы получить интерактивный интерфейс выполнения предложенных Jupyter ноутбуков непосредственно в окне браузера с помощью облачных ресурсов Google Colab. Ноутбуки ASFDownloading* потребуют авторизации на общедоступном сервере NASA Alaska Satellite Facility (ASF), ссылка для регистрации приведена непосредственно в ноутбуках — на этом сервере можно найти и скачать Sentinel-1 SLC сцены для любой интересующей вас территории и интервала дат. Также ноутбуки включают в себя данные из публикаций, позволяющие сравнить результаты с полученными в таких известных программах спутниковой интерферометрии, как GMTSAR, SNAP and GAMMA Software. Далее комментарии к ноутбукам даны на английском языке, потому что использованные термины необходимы, если вы захотите по ключевым словам найти ноутбук, решающий определенную задачу.

Open In Colab ASF Downloading 2017 Iran–Iraq Earthquake vs GMTSAR GAMMA SNAP Co-Seismic Interferogram The notebook downloads Sentinel-1 Scenes from Alaska Satellite Facility (ASF) and compares the results to GMTSAR, SNAP and GAMMA Software. Note: replace the scene names to produce an interferogram and LOS displacement for your area of interest.

Open In Colab Live Example S1A_2016_Kumamoto Earthquake_Co-Seismic Interferogram vs ESA Sentinel 1 Toolbox on Alaska Satellite Facility. This is a single subswath processing with landmask applied to interferogram, unwapped phase, and LOS, east-west, vertical displacement results.



Open In Colab Live Example S1AB 2021 Crete Earthquake Co-Seismic Interferogram vs Centre of EO Research & Satellite Remote Sensing, Greece Report This is a single cropped subswath processing with landmask applied to interferogram, unwapped phase, and LOS, east-west, vertical displacement results.


Open In Colab GMTSAR example dataset S1A_Stack_CPGF_T173 This example illustrates SBAS and PSI analyses and detrending approach to remove atmospheric noise to produce much better results.


Open In Colab ASF Downloading 2020 Ardabil, Iran Earthquake Co-Seismic Interferogram and LOS Displacement The notebook downloads Sentinel-1 Scenes from Alaska Satellite Facility (ASF) to crop the area and merge subswaths and detrend results. Note: replace the scene names to produce an interferogram for your area of interest.


Заключение

Было довольно интересно, что называется, довести проект до ума — то есть из прототипа для собственного применения сделать систему, которой может воспользоваться действительно каждый, и при этом сохранить возможности для выполнения сложных проектов на большом объёме данных (терабайты и десятки терабайт) даже на типовом ноутбуке.

Процессоры Apple Silicon полностью оправдали мои надежды и позволяют делать фантастические вещи. Также очень полезен оказался Apple iCloud — единственный сервис хранения больших объемов данных, позволяющий получать прямые ссылки на файлы (смотрите, как сделано скачивание данных в представленных ноутбуках) и не требующий платы за трафик.

Docker произвел впечатление технологии удобной для пользователя, но очень «сырой» для разработчика. Во-первых, это совершенно нерациональное использование ресурсов с запуском виртуальной машины qemu даже для софта, совместимого с целевой платформой. Во-вторых, это совершенно адские программные баги — например, при сборке образа для платформы amd64 на платформе arm64 (Apple Silicon) в запущенном на целевой платформе (amd64) образе при многопоточном выполнении (при однопоточном выполнении все работает как ожидается) стандартный вывод скриптов (stdout) внезапно появляется на stderr, а stdout оказывается пустым! При сборке этого же образа на платформе amd64 (Intel Mac) баг не возникает. Пришлось в коде PyGMTSAR добавить «костыль» для чтения stderr вместо stdout в этом случае — поскольку покупать поддержку Docker, только чтобы зарепортить этот баг (не на форуме же у них об этом писать), я не планирую, то не факт, что его вообще когда-нибудь починят. Еще какие-то более мелкие «грабли» были, но после вот этого я о них уже забыл. И все же образы для amd64 и arm64 (Apple Silicon, в том числе) сделаны и работают.

И пару слов про отложенные, или ленивые, вычисления (lazy computing). Библиотеки Dask, xarray и прочие позволяют делать невероятные вещи, но порой грешат неумеренным потреблением памяти и, вдобавок, при прерывании вычисления (в случае ошибки или пользователем) память зачастую не освобождается. Указанные проблемы удалось обойти, распределив вычисления на отдельных блоках данных (chunk) по потокам с помощью библиотеки joblib — так что при прерывании и при завершении потока память освобождается, в то же время, можно пользоваться всеми преимуществами отложенных вычислений. Итак, PyGMTSAR позволяет мгновенно «загрузить» 3D куб данных размером в сотни гигабайт и эффективно выполнять вычисления при наличии всего лишь 16 GB RAM (для 8 ядер CPU). В то же время, при отсутствии достаточно большого файла подкачки (swap) — как в Docker контейнере — необходимо иметь 4 GB RAM на каждое ядро процессора, как это и указано выше в секции про использование Docker образа PyGMTSAR.

Также смотрите

 

Источник

Читайте также