DevelopersIO 2023 ビデオセッション資料。 https://youtu.be/EZ-jNWFcMM8
DevelopersIO 2023 公式サイト: https://event.classmethod.jp/developers-io/2023
Glue for Rayを使ってみよう2 0 2 3/8/3データアナリティクス事業本部 笠原 宏
View Slide
⾃⼰紹介笠原 宏• データアナリティクス事業本部ビジネスソリューション部• 新潟県新潟市在住• 好きなAWSサービス: S3、Lambda、SageMaker• JAWS-UG新潟⽀部∕Python機械学習勉強会in新潟∕JaSST新潟∕SWANII∕etc.• AWS Community Builder /2 0 2 3Japan AWS All CertificationsEngineer2@kasacchiful@kasacchiful
お話ししたいことGlue for RayがGAしました。Glue for Rayをまだ使ったことない⽅向けに、Glue for Rayの簡単な使い⽅をレクチャーします。3
⽬次1. Glue for Rayとは何か?2. まずは使ってみよう3. 知っておくと良いこと4. 気をつけておくこと5. まとめ4
Glue for Rayとは何か5
AWS GlueのおさらいAWS Glue• ⼤規模なETL処理も可能な、マネージドなサーバーレスサービス主な特徴• サーバーレスETL• Spark / Python Shell / Ray• メタデータ管理• データクローリング• 他AWSサービス間連携• 様々なデータソースに対応6
Spark / Python Shell / RaySpark• マルチノードクラスタで分散処理• 学習コストがそれなりにかかるPython Shell• シングルノード処理• 分散処理できないため、スケールアウトが難しい7Ray• マルチノードクラスタで分散処理• 少ない学習コスト
Glue for RayRay• Pythonアプリケーションのスケーリングを容易にするオープンソースのライブラリGlue for Ray に含まれる機能• Ray Core• Pure Pythonコードを分散処理可能にする、Tasks、Actors等の基本機能• Ray Data• Rayアプリケーション上で分散処理可能な、PyArrowベースのデータセット8ը૾Ҿ༻IUUQTEPDTSBZJPFOMBUFTUSBZPWFSWJFXJOEFYIUNM
Glue for Ray is GAGlue for Ray GA時点で Ray2.4が利⽤可能です。9Ҿ༻IUUQTEFWDMBTTNFUIPEKQBSUJDMFTBXTHMVFGPSSBZHFOFSBMMZBWBJMBCMF
Glue for Rayの特徴実装• Pure Pythonコードに近い記述なので、⽐較的実装しやすい• クラスター設定は少ない• 関数を分散処理するTasks、クラスオブジェクトを分散処理するActorsが使える• ray.datasets は、Pandasのdataframeに似た関数を有しており、Pandasを使ったことがある⽅であれば、⽐較的移⾏が⽤意1 0
Glue for Rayの特徴パフォーマンス• ケースによっては、Sparkより⾼速に処理する場合もある• 例: TripAdvisorレビューデータセットの128万レビュー⽂章を⽤いた検証• Scikit-learn HashingVectorizerを⽤いた特徴量抽出• シングルノードで、Spark:5 0s / Ray:3 3s• マルチノードでも、SparkよりRayが⾼速• Wordbatchを⽤いたテキスト処理• シングル、マルチともSparkよりRayが⾼速1 1Ҿ༻IUUQTUPXBSETEBUBTDJFODFDPNCFODINBSLJOHQZUIPOEJTUSJCVUFEBJCBDLFOETXJUIXPSECBUDICD
まずは使ってみよう1 2
IAMロール作成1 3• Glueジョブ⽤のIAMロールを事前に作成しておきます。• マネージドポリシー「AWSGlueServiceRole」「AmazonS3FullAccess」があれば、とりあえず動作します。
Glue Studioを利⽤1 4• メニュー「ETL jobs」から「Ray Script Editor」を新規作成します。
コードを書く前に1 5• コードを書く前に「Job details」タブから、「ジョブ名」と「ロール」を設定して保存します。
コードを書いて実⾏してみましょう1 6• 「Script」でコードを記述して、「Run」をクリックして実⾏します。
実⾏結果を⾒てみましょう1 7• 「Runs」タブで、実⾏履歴が確認できます。
CloudWatch Logsも⾒てみましょう1 8• /aws-glue/ray/jobs/ の各種ロググループが⽣成されてます。• print() で標準出⼒した結果は、「/aws-glue/ray/jobs/script-log」で確認できます。
知っておくと良いこと1 9
以下のことを知っていればとりあえずOK• 「ray.init()」で初期化• 「@ray.remote」デコレータを、分散処理したい関数やクラスに付与• 「remote()」メソッドで、分散処理したい関数に引数を渡し、Rayクラスタで実⾏• 「ray.get()」で、実⾏結果を取得Ray の基本的な使い⽅2 0
Actor• クラスに「@ray.remote」デコレータ•Task• 関数に「@ray.remote」デコレータRay Tasks と Ray Actors2 1
Ray Dataset と Pandas Dataframe2 2• ETL処理をするなら、Ray Dataの操作をおさえておきましょう。• S3read → データ変換処理 → S3write の処理は、Pandasの操作とほぼ同じでできます。Ray Dataset Pandas Dataframe
Ray Dataset と Pandas Dataframe2 3• 参考までに、同じRayジョブ内で実⾏して、処理時間を⽐較してみました。• Amazon Customer Reviews Dataset の Wireless カテゴリ: 約900万件• Ray:6 4[s]• Pandas:1 2 5[s]• RayはPandasのほぼ半分の時間で処理
Ray Dataset と Pandas Dataframe2 4• Rayのページに、Ray Dataset と Pandas Dataframe のメソッド⽐較表があるので、ご参考ください。ը૾Ҿ༻IUUQTEPDTSBZJPFOMBUFTUEBUBBQJGSPN@PUIFS@EBUB@MJCTIUNM
Ray Dataset の構造2 5• Ray Datasetでは、並列数に応じて「ブロック」単位で処理されます。• 「ブロック」毎に部分テーブルを持っているイメージը૾Ҿ༻IUUQTEPDTSBZJPFOMBUFTUEBUBEBUBJOUFSOBMTIUNM
Ray Dataset の read と write2 6• read_parquet() 等のデータ読込時に⾃動的に並列数が算出されて、その分のブロック毎に部分テーブルを持っています。• 「parallelism」オプションで並列数を指定できます。• write_parquet() 等のデータ書込時は、ブロック毎にファイル書き込みを⾏うため、並列数と同じ数のファイルが作成されます。• 書込時にブロック数を変更したい場合は repartition() メソッドを使⽤します。ը૾Ҿ༻IUUQTEPDTSBZJPFOMBUFTUEBUBEBUBJOUFSOBMTIUNM
Glue for Rayジョブワーカー2 7• Glue for Ray向けに、Graviton2ベースのEC2ワーカータイプでジョブが実⾏されます。• Glueで⽤いられる標準的なデータ処理ユニット(DPU)より、メモリ最適化されたデータ処理ユニット(M-DPU)が適⽤されます。• 現在利⽤可能なワーカータイプは「Z.2X」です。•2M-DPU (8vCPU,6 4GBメモリ)•1 2 8GBストレージ
料⾦2 8• 東京リージョンでの料⾦⽐較です。• 秒単位課⾦。最⼩単位は1分。• デフォルトDPU構成によって、Python Shell < Ray < Spark の順に費⽤がかかりやすい。%16࣌ؒ͋ͨΓ౦ژϦʔδϣϯ࠷খ%16σϑΥϧτ%161ZUIPO4IFMM 3BZ.%16 4QBSL
気をつけておくこと2 9
Interactive Sessionはまだプレビュー版3 0• 「Jupyter Notebook」からKernelを「Ray」も選べますが、こちらはまだプレビュー版です。• 本資料では、扱いません。
プレビュー版とGA版で同梱ライブラリが異なる3 1• プレビュー版に同梱されていた 「awswrangler」「modin」が、GAで同梱されていません。• プレビュー版で動作していたスクリプトは、そのままだと動作しない場合があるので、「awswrangler」「modin」をインストールする必要があります。Preview GAҾ༻IUUQTEPDTBXTBNB[PODPNHMVFMBUFTUEHFEJUTDSJQUSBZFOWEFQFOEFODJFTIUNM
PIPライブラリ追加インストール3 2• ライブラリを追加インストールする必要がある場合、Job parametersにて「--pip-install」を指定します。• 複数のライブラリをインストールする場合は、カンマ区切りで指定します。
VPCへのプライベートアクセスは不可3 3• GA時点では、VPCへのプライベートアクセスはできません。• RDS等、VPC内のリソースへアクセスしたい場合、パブリックアクセスができる必要があります。Ҿ༻IUUQTEPDTBXTBNB[PODPNHMVFMBUFTUEHFEJUTDSJQUSBZDPOOFDUJPOTGPSNBUTIUNM
まとめ3 4
まとめ3 5• Glue for RayがGAしました。• ⽐較的容易に分散処理が記述できるようになっています。• ETL処理に関しては、Pandas等と⽐較してほとんど変わらない記述で処理が可能になっています。• まだ成⻑段階のサービスです。今後より使いやすくなっていくことを期待しながら、みなさんで積極的に使っていきましょう。
参考資料3 7• AWS Glue for Ray の⼀般提供が開始されました | DevelopersIO• https://dev.classmethod.jp/articles/aws-glue-for-ray-generally-available/• AWS Glue on Ray ではじめるデータ分析 とそのパフォーマンス• https://pages.awscloud.com/rs/1 1 2-TZM-7 6 6/images/2 0 2 3 0 1 2 6_2 6th_ISV_DiveDeepSeminar_GlueonRay.pdf• Working with Ray jobs in AWS Glue - AWS Glue• https://docs.aws.amazon.com/glue/latest/dg/ray-jobs-section.html• Welcome to Ray!• https://docs.ray.io/en/releases-2.4.0/• Benchmarking Python Distributed AI Backends with Wordbatch | by Antti Puurula | Towards Data Science• https://towardsdatascience.com/benchmarking-python-distributed-ai-backends-with-wordbatch-9 8 7 2 4 5 7b7 8 5c