Home Машинное обучение Как VirtuSwap ускоряет моделирование торговли на основе Pandas с помощью пользовательского контейнера Amazon SageMaker Studio и экземпляров графического процессора AWS | DeepTech

Как VirtuSwap ускоряет моделирование торговли на основе Pandas с помощью пользовательского контейнера Amazon SageMaker Studio и экземпляров графического процессора AWS | DeepTech

0
Как VirtuSwap ускоряет моделирование торговли на основе Pandas с помощью пользовательского контейнера Amazon SageMaker Studio и экземпляров графического процессора AWS
 | DeepTech

Этот пост написан в сотрудничестве с Димой Задорожным и Фуадом Бабаевым из VirtuSwap.

ВиртуСвап — стартап-компания, разрабатывающая инновационные технологии децентрализованного обмена активами на блокчейнах. Технология VirtuSwap обеспечивает более эффективную торговлю активами, между которыми нет прямой пары. Отсутствие прямой пары приводит к дорогостоящей косвенной торговле, а это означает, что для завершения желаемого свопа требуются две или более сделок, что приводит к двойным или тройным торговым издержкам. Технология виртуальных пулов на основе резервов VirtuSwap решает эту проблему, делая каждую сделку прямой, экономя до 50% торговых затрат. Подробнее читайте на Virtuswap.io.

В этом посте мы рассказываем, как VirtuSwap использовала функцию «принеси свой собственный контейнер» в Amazon SageMaker Studio для создания надежной среды для размещения своих симуляций с интенсивным использованием графических процессоров для решения задач линейной оптимизации.

Соревнование

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

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

VirtuSwap нуждалась в совместимой с графическим процессором библиотеке pandas для запуска моделирования и выбрала CUDFбиблиотека DataFrame графического процессора от Пороги. cuDF используется для загрузки, объединения, агрегирования, фильтрации и иного манипулирования данными в панды-подобный API, который ускоряет работу с кадрами данных, используя CUDA для значительно более высокой производительности, чем панды.

Обзор решения

VirtuSwap выбрала SageMaker Studio для комплексной разработки, начиная с итеративной интерактивной разработки в блокнотах. Благодаря гибкости SageMaker Studio они решили использовать ее и для моделирования, воспользовавшись преимуществами пользовательских образов Amazon SageMaker, которые позволяют VirtuSwap использовать свои собственные библиотеки и необходимое программное обеспечение, например cuDF. На следующей диаграмме показан рабочий процесс решения.

В следующих разделах мы поделимся пошаговыми инструкциями по созданию и использованию образа Rapids cuDF в SageMaker.

Предварительные условия

Чтобы запустить это пошаговое руководство, вам понадобится учетная запись AWS с разрешениями для SageMaker, Amazon Elastic Container Registry (Amazon ECR), AWS Identity and Access Management (IAM) и AWS CodeBuild. Кроме того, вам необходимо иметь готовый домен SageMaker.

Создание ролей и политик IAM

Для процесса сборки пользовательских блокнотов SageMaker мы использовали AWS CloudShell, который предоставляет все необходимые пакеты для создания пользовательского образа. В CloudShell мы использовали Сборка Docker для SageMaker, интерфейс командной строки для создания образов Docker для SageMaker Studio и в его среде. CLI может создать репозиторий в Amazon ECR и собрать контейнер с помощью CodeBuild. Для этого нам необходимо предоставить инструменту роль IAM с соответствующими разрешениями. Выполните следующие шаги:

  1. Войдите в консоль управления AWS и откройте консоль IAM.
  2. На панели навигации слева выберите Политика.
  3. Создайте политику с именем sm-build-policy со следующими разрешениями:
    {
        "Version": "2012-10-17",
        "Statement": (
            {
                "Effect": "Allow",
                "Action": (
                    "codebuild:DeleteProject",
                    "codebuild:CreateProject",
                    "codebuild:BatchGetBuilds",
                    "codebuild:StartBuild"
                ),
                "Resource": "arn:aws:codebuild:*:*:project/sagemaker-studio*"
            },
            {
                "Effect": "Allow",
                "Action": "logs:CreateLogStream",
                "Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*"
            },
            {
                "Effect": "Allow",
                "Action": (
                    "logs:GetLogEvents",
                    "logs:PutLogEvents"
                ),
                "Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*:log-stream:*"
            },
            {
                "Effect": "Allow",
                "Action": "logs:CreateLogGroup",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": (
                    "ecr:CreateRepository",
                    "ecr:BatchGetImage",
                    "ecr:CompleteLayerUpload",
                    "ecr:DescribeImages",
                    "ecr:DescribeRepositories",
                    "ecr:UploadLayerPart",
                    "ecr:ListImages",
                    "ecr:InitiateLayerUpload",
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:PutImage"
                ),
                "Resource": "arn:aws:ecr:*:*:repository/sagemaker-studio*"
            },
            {
                "Sid": "ReadAccessToPrebuiltAwsImages",
                "Effect": "Allow",
                "Action": (
                    "ecr:BatchGetImage",
                    "ecr:GetDownloadUrlForLayer"
                ),
                "Resource": (
                    "arn:aws:ecr:*:763104351884:repository/*",
                    "arn:aws:ecr:*:217643126080:repository/*",
                    "arn:aws:ecr:*:727897471807:repository/*",
                    "arn:aws:ecr:*:626614931356:repository/*",
                    "arn:aws:ecr:*:683313688378:repository/*",
                    "arn:aws:ecr:*:520713654638:repository/*",
                    "arn:aws:ecr:*:462105765813:repository/*"
                )
            },
            {
                "Sid": "EcrAuthorizationTokenRetrieval",
                "Effect": "Allow",
                "Action": (
                    "ecr:GetAuthorizationToken"
                ),
                "Resource": (
                    "*"
                )
            },
            {
                "Effect": "Allow",
                "Action": (
                    "s3:GetObject",
                    "s3:DeleteObject",
                    "s3:PutObject"
                ),
                "Resource": "arn:aws:s3:::sagemaker-*/*"
            },
            {
                "Effect": "Allow",
                "Action": (
                    "s3:CreateBucket"
                ),
                "Resource": "arn:aws:s3:::sagemaker*"
            },
            {
                "Effect": "Allow",
                "Action": (
                    "iam:GetRole",
                    "iam:ListRoles"
                ),
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": "iam:PassRole",
                "Resource": "arn:aws:iam::*:role/*",
                "Condition": {
                    "StringLikeIfExists": {
                        "iam:PassedToService": "codebuild.amazonaws.com"
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": (
                    "ecr:CreateRepository",
                    "ecr:BatchGetImage",
                    "ecr:CompleteLayerUpload",
                    "ecr:DescribeImages",
                    "ecr:DescribeRepositories",
                    "ecr:UploadLayerPart",
                    "ecr:ListImages",
                    "ecr:InitiateLayerUpload",
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:PutImage"
                ),
                "Resource": "arn:aws:ecr:*:*:repository/*"
            }
        )
    }

Разрешения дают возможность использовать утилиту в полном объеме: создавать репозитории, создавать задания CodeBuild, использовать Amazon Simple Storage Service (Amazon S3) и отправлять журналы в Amazon CloudWatch.

  1. Создайте роль с именем sm-build-role со следующей политикой доверия и добавьте политику sm-build-policy который вы создали ранее:
    {
        "Version": "2012-10-17",
        "Statement": (
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "codebuild.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        )
    }

Теперь давайте рассмотрим шаги в CloudShell.

Создайте образ Docker cuDF в CloudShell.

Для наших целей нам понадобился образ Rapids CUDA, который также включает в себя ipykernelчтобы изображение можно было использовать в блокноте SageMaker Studio.

Мы используем существующий образ CUDA РапидсАИ который доступен в официальном Докер-центр Rapids AIи добавьте ipykernel монтаж.

В терминале CloudShell выполните следующую команду:

printf "FROM nvcr.io/nvidia/rapidsai/rapidsai:0.16-cuda10.1-base-ubuntu18.04
RUN pip install ipykernel && \
python -m ipykernel install --sys-prefix && \ 
useradd --create-home --shell /bin/bash --gid 100 --uid 1000 sagemaker-user
USER sagemaker-user" > Dockerfile

Это создаст файл Dockerfile, в котором будет создан наш собственный образ Docker для SageMaker.

Создайте и отправьте образ в репозиторий.

Как уже упоминалось, мы использовали Библиотека сборки SageMaker Docker, что позволяет ученым и разработчикам данных легко создавать собственные образы контейнеров. Дополнительную информацию см. в разделе Использование интерфейса командной строки Amazon SageMaker Studio Image Build для создания образов контейнеров из блокнотов Studio.

Следующая команда создает репозиторий ECR (если репозиторий не существует). sm-docker создаст его, соберет и отправит новый образ Docker в созданный репозиторий:

sm-docker build . --repository rapids:v1 --role sm-build-role

На случай, если вы пропали без вести sm-docker в CloudShell выполните следующий код:

pip3 install sagemaker-studio-image-build

По завершении будет возвращен URI изображения ECR.

Создайте собственный образ SageMaker

После того как вы создали собственный образ Docker и отправили его в репозиторий контейнеров (Amazon ECR), вы можете настроить SageMaker на использование этого пользовательского образа Docker. Выполните следующие шаги:

  1. На консоли SageMaker выберите Изображений в панели навигации.
  2. Выбирать Создать изображение.
  3. Введите вывод URI изображения из предыдущего раздела, затем выберите Следующий.
  4. Для Название изображения и Отображаемое имя изображениявходить rapids.
  5. Для Описаниевведите описание.
  6. Для Роль IAMвыберите подходящую роль IAM для вашего домена SageMaker.
  7. Для Путь монтирования EFSвходить /home/sagemaker-user (по умолчанию).
  8. Расширять Расширенная конфигурация.
  9. Для ID пользователявходить 1000.
  10. Для Идентификатор группывходить 100.

  1. в Тип изображения раздел, выберите Изображение SageMaker Studio.
  2. Выбирать Добавить ядро.
  3. Для Имя ядравходить conda-env-rapids-py.
  4. Для Отображаемое имя ядравходить rapids.
  5. Выбирать Представлять на рассмотрение для создания образа SageMaker.

Прикрепите новое изображение к своему домену SageMaker Studio.

Теперь, когда вы создали собственное изображение, вам необходимо сделать его доступным для использования, прикрепив изображение к своему домену. Выполните следующие шаги:

  1. На консоли SageMaker выберите Домены в панели навигации.
  2. Выберите свой домен. Этот шаг не является обязательным; вы можете создать и прикрепить собственное изображение непосредственно из домена и пропустить этот шаг.

  1. На странице сведений о домене выберите Среда вкладка, затем выберите Прикрепить изображение.
  2. Выбирать Существующее изображение и выберите новое изображение (rapids) из списка.
  3. Выбирать Следующий.

  1. Просмотрите конфигурацию пользовательского образа и обязательно установите Тип изображения как Изображение SageMaker Studioкак и на предыдущем шаге, с тем же именем ядра и отображаемым именем ядра.
  2. Выбирать Представлять на рассмотрение.

Пользовательский образ теперь доступен в SageMaker Studio и готов к использованию.

Создайте новый блокнот с изображением.

Инструкции по запуску нового блокнота см. в разделе «Запуск пользовательского образа SageMaker в Amazon SageMaker Studio». Выполните следующие шаги:

  1. На консоли SageMaker Studio выберите Открыть лаунчер.
  2. Выбирать Изменить среду.

  1. Для Изображениевыберите вновь созданное изображение, rapids v1.
  2. Для Ядровыбирать rapids.
  3. Для Тип экземпляра¸ выберите свой экземпляр.

SageMaker Studio предоставляет возможность настроить вычислительную мощность, выбрав экземпляр из семейств ускоренных вычислений AWS, вычислений общего назначения, оптимизированных вычислений или оптимизированных для памяти. Такая гибкость позволяла плавно переключаться между процессорами и графическими процессорами, а также динамически увеличивать или уменьшать размеры экземпляров по мере необходимости. Для нашего ноутбука мы использовали тип экземпляра ml.g4dn.2xlarge для проверки производительности cuDF при использовании ускорителя графического процессора.

  1. Выбирать Выбирать.

  1. Выберите свою среду и выберите Создать блокнотзатем подождите, пока ядро ​​ноутбука не будет готово.

Подтвердите свое собственное изображение

Чтобы убедиться, что ваш собственный образ был запущен и cuDF готов к использованию, создайте новую ячейку, введите import cudfи запустите его.

Очистить

Выключите экземпляр Jupyter, на котором запущен тестовый блокнот в SageMaker Studio, выбрав Запуск терминалов и ядер и выключение работающего экземпляра.

Результаты сравнения времени выполнения

Мы провели сравнение нашего кода во время выполнения с использованием как ЦП, так и графического процессора на экземплярах SageMaker g4dn.2xlarge с временной сложностью O(N). Результаты, как показано на следующем рисунке, показывают эффективность использования графических процессоров по сравнению с центральными процессорами.

Основное преимущество графических процессоров заключается в их способности выполнять параллельную обработку. Когда мы увеличиваем значение N, время работы процессоров увеличивается со скоростью 3N. С другой стороны, для графических процессоров скорость увеличения можно описать как 2N, как показано на предыдущем рисунке. Чем больше размер задачи, тем эффективнее становится графический процессор. В нашем случае использование графического процессора было как минимум в 20 раз быстрее, чем использование центрального процессора. Это подчеркивает растущую важность графических процессоров в современных вычислениях, особенно для задач, требующих быстрой обработки больших объемов данных.

Благодаря экземплярам графического процессора SageMaker VirtuSwap может значительно увеличить размерность решаемых задач и ускорить поиск решений.

Заключение

В этом посте мы показали, как VirtuSwap настроил SageMaker Studio, используя собственный образ для решения сложной проблемы. Благодаря возможности легко менять среду выполнения и переключаться между различными экземплярами, размерами и ядрами VirtuSwap смогла быстро экспериментировать, ускорить время выполнения в 15 раз и предоставить масштабируемое решение.

В качестве следующего шага VirtuSwap рассматривает возможность расширения использования SageMaker и запуска обработки в Amazon SageMaker Processing для обработки огромных данных, которые они собирают из различных блокчейнов, на свою платформу.


Об авторах

Адир Шараби — главный архитектор решений Amazon Web Services. Он работает с клиентами AWS, помогая им создавать безопасные, отказоустойчивые, масштабируемые и высокопроизводительные приложения в облаке. Он также увлечен данными и помогает клиентам извлечь из них максимальную пользу.

Омер Хаим — старший архитектор решений для стартапов в Amazon Web Services. Он помогает стартапам в их облачных путешествиях и увлечен контейнерами и машинным обучением. В свободное время Омер любит путешествовать и иногда играть с сыном.

Дмитрий Задорожный работает аналитиком данных в Virtuswap.io. Он отвечает за интеллектуальный анализ, обработку и хранение данных, а также за интеграцию облачных сервисов, таких как AWS. До прихода в virtuswap он работал в области науки о данных и был ведущим послом по аналитике в фонде dydx. Дима имеет степень магистра компьютерных наук. В свободное время Дима любит играть в компьютерные игры.

Фуад Бабаев работает специалистом по науке о данных в Virtuswap (Virtuswap.io). Он обладает опытом решения сложных задач оптимизации, создания симуляций и проектирования моделей торговых процессов. Помимо профессиональной карьеры Фуад увлекается игрой в шахматы.

LEAVE A REPLY

Please enter your comment!
Please enter your name here