Rayメモ
Rayとは Rayとは機械学習を使ったpythonアプリケーションをスケーリングするためOSSフレームワーク。 以下の機能を提供する データ前処理、分散トレーニング、調整、強化学習、モデル提供など一般的な機械学習タスクに必要なこと Pythonアプリケーションの分散処理 Kubernetesや各種クラウド製品を使ったスケーリング Rayのフレームワーク 以下の3つのレイヤで構成されている RayAIRuntime:機械学習アプリケーションにて使うツールキット。 次の5つの分野がサポート揃っている。 Data:データの読み込み・変換・チューニング・予測 Train:学習 Tune:チューニング Serve:モデルの提供 RLib:他のtensorflow,torchなどのRayAIRuntime RayCore:分散処理できるようにする部分 RayCluster:スケールする部分 試してみる 「RayCluster」と「RayCore」を試してみる 「RayCluster」 前述通りPythonアプリケーションをスケールする部分。 ray.initを呼び出せばRayClusterを組まなくてもRayは動作するが、スケールしたい場合はClusterを組む必要がある。 どこで組めるのか RayClusterはAWS,GCP,Azureなどクラウド製品からKubernetes上でも組めるようにサポートされている。 RayClusterの構成 RayClusterは一つのHeadnodeといくつかのWorkernodeにて構成されている。 公式画像引用:https://docs.ray.io/en/latest/cluster/key-concepts.html Headnodeは受け取ったワークロードリソース要求がクラスタの現在の容量を超えてるとWorkernodeを自動で増やし調整する。逆にWorkernodeがidle状態になるとWorkernodeを自動で削除する。 Kubernetesを利用したRayClusterの構成 Kubernetesを利用してRayClusterを構築しジョブを実行するには以下の3つの提供されているCRDを構成する必要がある。 RayCluster: Cluster本体 RayJob: Clusterジョブ RayService: Clusterサービス kind:RayJobを使わずRayServiceの指定のPortにray job submitをして、ジョブを実行することもできる。前者の場合kind:RayJobをDeployすると都度RayClusterが作られるが、後者はユーザ側でRayClusterを作り直さない限り一つのRayClusterを使い続けることになる。なので使い分けとしては常にRayJobと1:1でRayClusterをDeployしたい場合はkind:RayJobを使い、そうではない場合はRayServiceの指定のPortに都度ray job submitを使うという形で良さそう。 Kubernetesを利用してRayClusterを構築してみる 各種Operatorのインストールをする。 $ kubectl apply -k "github.com/ray-project/kuberay/ray-operator/config/default" namespaceray-system上で正常に動いていることを確認できる。 $ kubectl get all -n ray-system NAME READY STATUS RESTARTS AGE pod/kuberay-operator-79dd8d67db-skm94 1/1 Running 0 13s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kuberay-operator ClusterIP 10....