「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は数千の過去の取引ペアを使用して、最適な流動性の分配、プール手数料などを見つけるためのシミュレーションを実行します。
- 「Amazon SageMakerとHugging Faceを使用して、FetchはML処理の遅延を50%削減します」
- 「アジア競技大会、eスポーツがオリンピックの夢に火をつける新たな節目となる」
- 「科学者たちが歴史的なコードを解読し、失われた秘密を明らかにする方法」
初期の実装は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ロールを提供する必要があります。次の手順を完了してください:
-
AWS Management Consoleにサインインし、IAMコンソールを開きます。
-
左側のナビゲーションペインで、「ポリシー」を選択します。
-
次のアクセス許可を持つ「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への送信。
以下の信頼ポリシーを持つ
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イメージを使用できます。次の手順を完了してください:
- SageMakerコンソールで、ナビゲーションペインでイメージを選択します。
- イメージの作成を選択します。
- 前のセクションからのイメージURIを入力し、次へを選択します。
- イメージ名と表示名に
rapids
を入力します。 - 説明に説明を入力します。
- IAMロールには、SageMakerドメインに適切なIAMロールを選択します。
- EFSマウントパスには、
/home/sagemaker-user
(デフォルト)を入力します。 - 高度な設定を展開します。
- ユーザーIDに
1000
を入力します。 - グループIDに
100
を入力します。
- イメージタイプセクションで、SageMaker Studioイメージを選択します。
- カーネルの追加を選択します。
- カーネル名には、
conda-env-rapids-py
と入力します。 - カーネルの表示名には、
rapids
と入力します。 - 送信を選択して、SageMakerイメージを作成します。
新しいイメージをSageMaker Studioドメインに添付する
カスタムイメージを作成したので、イメージをドメインに添付して使用できるようにする必要があります。以下の手順を完了してください:
- SageMakerコンソールで、ナビゲーションペインでドメインを選択します。
- ドメインを選択します。このステップは任意です。ドメインからカスタムイメージを直接作成および添付することもできます。
- ドメインの詳細ページで、環境タブを選択し、イメージを添付を選択します。
- 既存のイメージを選択し、リストから新しいイメージ(
rapids
)を選択します。 - 次へを選択します。
- カスタムイメージの構成を確認し、イメージタイプを前のステップと同じくSageMaker Studioイメージに設定し、同じカーネル名とカーネル表示名を設定してください。
- 送信を選択します。
カスタムイメージは、SageMaker Studioで利用可能で使用する準備ができています。
イメージを使用して新しいノートブックを作成する
新しいノートブックを起動する手順については、「Amazon SageMaker Studioでカスタムイメージを起動する」を参照してください。以下の手順を完了してください:
- SageMaker Studioコンソールで、ランチャーを開くを選択します。
- 環境を変更を選択します。
- イメージには、新たに作成したイメージ
rapids v1
を選択します。 - カーネルには、
rapids
を選択します。 - インスタンスタイプには、インスタンスを選択します。
SageMaker Studioでは、AWSの高速化コンピューティング、汎用コンピューティング、コンピューティング最適化、メモリ最適化ファミリからインスタンスを選択して、コンピューティングパワーをカスタマイズするオプションが提供されています。この柔軟性により、CPUとGPUの間をシームレスに移行したり、必要に応じてインスタンスサイズをダイナミックにスケーリングしたりすることができます。ノートブックでは、GPUアクセラレータを利用してcuDFのパフォーマンスをテストするために、ml.g4dn.2xlargeインスタンスタイプを使用しました。
- 選択を選択します。
- 環境を選択し、ノートブックを作成して、ノートブックのカーネルが使用可能になるまで待ちます。
カスタムイメージを検証する
カスタムイメージが起動され、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!
Was this article helpful?
93 out of 132 found this helpful
Related articles