「VirtuSwapがAmazon SageMaker StudioのカスタムコンテナとAWS GPUインスタンスを使用して、Pandasベースの取引シミュレーションを加速する方法」

VirtuSwapがAmazon SageMaker Studioを使用して取引シミュレーションを加速する方法

この投稿は、VirtuSwapのDima ZadorozhnyとFuad Babaevとの共同執筆です。

VirtuSwapは、ブロックチェーン上で資産の非中央集権的な交換のための革新的な技術を開発しているスタートアップ企業です。VirtuSwapの技術は、直接のペアが存在しない資産のより効率的な取引を提供します。直接のペアがないと、間接的な取引が高コストになり、所望のスワップを完了するために2つ以上の取引が必要になり、取引コストが2倍または3倍になります。VirtuSwapのReserve-based Virtual Pools技術は、すべての取引を直接的に行うことで、取引コストを最大50%節約することでこの問題を解決します。詳細はvirtuswap.ioで読むことができます。

この投稿では、VirtuSwapがAmazon SageMaker Studioのbring-your-own-container機能を使用して、GPUを使用したシミュレーションをホストするための堅牢な環境を構築した方法を共有します。

課題

VirtuSwap Minervaエンジンは、異なる流動性プール間での資産の最適な分配のための推奨事項を作成します。これには、取引量、現在の市場の流動性、取引される資産の変動性などの複数のパラメータを考慮し、分配用に利用可能な総流動性量に制約があります。これらの推奨事項を提供するために、VirtuSwap Minervaは数千の過去の取引ペアを使用して、最適な流動性の分配、プール手数料などを見つけるためのシミュレーションを実行します。

初期の実装はpandasデータフレームを使用してコーディングされました。しかし、シミュレーションデータが増えるにつれて、ランタイムはほぼ4倍に増加し、問題のサイズも増大しました。その結果、反復が遅くなり、より大きな次元のタスクを実行することがほとんど不可能になりました。VirtuSwapは、シミュレーションのためにGPUインスタンスを使用する必要があることに気付きました。

VirtuSwapは、シミュレーションを実行するためのGPU互換のpandasライクなライブラリが必要であり、RapidsのGPU DataFrameライブラリであるcuDFを選択しました。cuDFは、データのロード、結合、集計、フィルタリング、およびその他の操作を行うためのpandasライクなAPIを提供し、CUDAを使用してpandasよりもはるかに高速なパフォーマンスを実現します。

ソリューションの概要

VirtuSwapは、イテレーション型で対話的な開発を行うためにSageMaker Studioをエンドツーエンドの開発に選択しました。SageMaker Studioの柔軟性により、VirtuSwapはシミュレーションにもそれを使用することにしました。これにより、VirtuSwapはcuDFなど、必要なカスタムライブラリやソフトウェアを持ち込むことができるAmazon SageMakerカスタムイメージの利点を活用することができます。以下の図は、ソリューションのワークフローを示しています。

次のセクションでは、SageMakerでRapids cuDFイメージをビルドして使用する手順をステップバイステップで共有します。

前提条件

このステップバイステップガイドを実行するには、SageMaker、Amazon Elastic Container Registry(Amazon ECR)、AWS Identity and Access Management(IAM)、およびAWS CodeBuildへのアクセス権限を持つAWSアカウントが必要です。さらに、SageMakerドメインが準備されている必要があります。

IAMロールとポリシーの作成

SageMakerカスタムノートブックのビルドプロセスでは、必要なパッケージを提供するAWS CloudShellを使用しました。CloudShellでは、SageMaker Studio向けのDockerイメージをビルドするためのCLIであるSageMaker Docker Buildを使用しました。CLIはAmazon ECRでリポジトリを作成し、CodeBuildを使用してコンテナをビルドできます。そのために、ツールに適切なアクセス許可を持つIAMロールを提供する必要があります。次の手順を完了してください:

  1. AWS Management Consoleにサインインし、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/*"
    

    権限を使用することで、以下の機能を完全に利用できます:リポジトリの作成、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の手順を確認しましょう。

    CloudShellでcuDF Dockerイメージを作成する

    私たちの目的のために、SageMaker Studioのノートブックで使用できるように、Rapids CUDAイメージとipykernelを含むイメージが必要です。

    公式のRapids AI Dockerハブで利用可能な既存のCUDAイメージを使用し、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

    これにより、SageMakerのカスタムDockerイメージをビルドするためのDockerfileが作成されます。

    イメージをビルドしてリポジトリにプッシュする

    先述のように、SageMaker Docker Buildライブラリを使用して、簡単にカスタムコンテナイメージをビルドすることができます。詳細については、「SageMakerノートブックからコンテナイメージをビルドするためのAmazon SageMaker Studio Image Build CLIの使用」を参照してください。

    次のコマンドにより、ECRリポジトリ(リポジトリが存在しない場合)が作成されます。sm-dockerはそれを作成し、新しいDockerイメージを作成してプッシュします:

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

    CloudShellにsm-dockerが存在しない場合は、次のコードを実行してください:

    pip3 install sagemaker-studio-image-build

    完了すると、ECRイメージURIが返されます。

    SageMakerカスタムイメージの作成

    カスタムDockerイメージを作成し、それをコンテナリポジトリ(Amazon ECR)にプッシュした後、SageMakerを構成してそのカスタムDockerイメージを使用できます。次の手順を完了してください:

    1. SageMakerコンソールで、ナビゲーションペインでイメージを選択します。
    2. イメージの作成を選択します。
    3. 前のセクションからのイメージURIを入力し、次へを選択します。
    4. イメージ名表示名rapidsを入力します。
    5. 説明に説明を入力します。
    6. IAMロールには、SageMakerドメインに適切なIAMロールを選択します。
    7. EFSマウントパスには、/home/sagemaker-user(デフォルト)を入力します。
    8. 高度な設定を展開します。
    9. ユーザーID1000を入力します。
    10. グループID100を入力します。

    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で利用可能で使用する準備ができています。

    イメージを使用して新しいノートブックを作成する

    新しいノートブックを起動する手順については、「Amazon SageMaker Studioでカスタムイメージを起動する」を参照してください。以下の手順を完了してください:

    1. SageMaker Studioコンソールで、ランチャーを開くを選択します。
    2. 環境を変更を選択します。

    1. イメージには、新たに作成したイメージrapids v1を選択します。
    2. カーネルには、rapidsを選択します。
    3. インスタンスタイプには、インスタンスを選択します。

    SageMaker Studioでは、AWSの高速化コンピューティング、汎用コンピューティング、コンピューティング最適化、メモリ最適化ファミリからインスタンスを選択して、コンピューティングパワーをカスタマイズするオプションが提供されています。この柔軟性により、CPUとGPUの間をシームレスに移行したり、必要に応じてインスタンスサイズをダイナミックにスケーリングしたりすることができます。ノートブックでは、GPUアクセラレータを利用してcuDFのパフォーマンスをテストするために、ml.g4dn.2xlargeインスタンスタイプを使用しました。

    1. 選択を選択します。

    1. 環境を選択し、ノートブックを作成して、ノートブックのカーネルが使用可能になるまで待ちます。

    カスタムイメージを検証する

    カスタムイメージが起動され、cuDFを使用する準備ができていることを確認するために、新しいセルを作成し、import cudfと入力して実行します。

    クリーンアップ

    SageMaker Studioで実行中のテストノートブックを選択し、実行中のターミナルとカーネルを選択して実行中のインスタンスを停止します。

    ランタイム比較結果

    SageMaker g4dn.2xlargeインスタンス上でCPUとGPUを使用してコードのランタイムを比較しました。時間の複雑さはO(N)です。次の図に示す結果から、GPUを使用することの効率性が明らかになります。

    GPUの主な利点は並列処理能力です。Nの値を増やすと、CPU上でのランタイムは3Nの速度で増加します。一方、GPUでは増加率は2Nと表現されます。問題のサイズが大きくなるほど、GPUの効率が高くなります。この場合、GPUを使用することはCPUを使用するよりも少なくとも20倍高速です。これは、大量のデータを迅速に処理するタスクにおいて、GPUの重要性がますます高まっていることを示しています。

    SageMaker GPUインスタンスを使用することで、VirtuSwapは問題の次元を劇的に増やし、より速く解決策を見つけることができます。

    結論

    この投稿では、VirtuSwapがカスタムイメージを使用して複雑な問題を解決するためにSageMaker Studioをカスタマイズする方法を紹介しました。実行環境を簡単に変更し、異なるインスタンス、サイズ、カーネル間を切り替える能力により、VirtuSwapは迅速な実験が可能になり、ランタイムを15倍高速化し、スケーラブルなソリューションを提供することができました。

    次のステップとして、VirtuSwapはSageMakerの使用範囲を広げ、さまざまなブロックチェーンから収集した大量のデータをプラットフォームに処理するためにAmazon SageMaker Processingで処理を実行することを検討しています。

    We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

    Share:

    Was this article helpful?

    93 out of 132 found this helpful

Discover more

機械学習

チューリングのミル:AIスーパーコンピューターが英国の経済エンジンを加速

産業革命の発祥地であるイギリスが、次なる革命に巨額な投資を行うことを発表しました。 イギリス政府は、世界最速のAIスパー...

人工知能

「屈折-1 パーソナルAIの次なるフロンティア」

「Inflection-1を紹介します:Inflection.AI社内のPi.aiを使用したLLMで、お客様のユニークなニーズに対応しています」

AIテクノロジー

「人工知能と画像生成の美学」

はじめに 技術と創造力の融合という興奮を感じる中、人工知能(AI)は画像生成に生命を与え、創造性の概念を変えてきました。...

AI研究

このAIリサーチはGAIAを紹介します:一般AIの能力の次のマイルストーンを定義するベンチマーク

FAIR Meta、HuggingFace、AutoGPT、GenAI Metaの研究者は、論理思考や多様性のハンドリングなどの基本的なスキルを必要とする...

機械学習

「ステレオタイプやディスインフォメーションに対抗するAIヘイトスピーチ検出」

AIがどのようにヘイトスピーチやステレオタイプと戦い、AIベースの対話とヘイトスピーチ検出技術を使って安全なオンラインコ...

機械学習

LLMs(Language Model)と知識グラフ

LLMとは何ですか? Large Language Models (LLMs)は、人間の言語を理解し生成できるAIツールです。これらは、膨大な量のテキ...