Fluid を使用すると、サーバーレス クラウドコンピューティング シナリオで、Object Storage Service (OSS) に格納されているデータへのアクセスを高速化するために JindoRuntime を使用できます。 キャッシュモードとキャッシュなしモードでデータアクセスを高速化できます。 このトピックでは、キャッシュなしモードでオンライン アプリケーションを高速化する方法について説明します。
前提条件
non-containerOS を使用した Container Service for Kubernetes (ACK) Pro マネージドクラスターが作成されており、クラスターの Kubernetes バージョンが 1.18 以降であること。 詳細については、「ACK マネージドクラスターを作成する」をご参照ください。
重要ack-fluid コンポーネントは現在、ContainerOS ではサポートされていません。
クラウドネイティブ AI スイートがインストールされ、ack-fluid コンポーネントがデプロイされていること。
重要オープンソースの Fluid を既にインストールしている場合は、Fluid をアンインストールし、ack-fluid コンポーネントをデプロイしてください。
クラウドネイティブ AI スイートをまだインストールしていない場合は、スイートをインストールするときに [Fluid アクセラレーション] を有効にしてください。 詳細については、「クラウドネイティブ AI スイートをデプロイする」をご参照ください。
クラウドネイティブ AI スイートを既にインストールしている場合は、クラウドネイティブ AI スイートACK コンソール の [クラウドネイティブ AI スイート] ページに移動し、[ack-fluid] コンポーネントをデプロイしてください。
仮想ノードが ACK Pro マネージドクラスターにデプロイされていること。 詳細については、「ポッドをエラスティック コンテナー インスタンスにスケジュールする」をご参照ください。
kubectl クライアントが ACK Pro マネージドクラスターに接続されていること。 詳細については、「kubectl を使用してクラスターに接続する」をご参照ください。
OSS がアクティブ化され、バケットが作成されていること。 詳細については、「OSS をアクティブ化する」および「バケットを作成する」をご参照ください。
制限事項
この機能は、ACK のエラスティック スケジューリング機能と相互排他です。 ACK のエラスティック スケジューリング機能の詳細については、「優先順位ベースのリソース スケジューリングを設定する」をご参照ください。
手順 1:テスト データセットを OSS バケットにアップロードする
2 GB のサイズのテスト データセットを作成します。 この例では、テスト データセットを使用します。
作成した OSS バケットにテスト データセットをアップロードします。
OSS が提供する ossutil ツールを使用してデータをアップロードできます。 詳細については、「ossutil をインストールする」をご参照ください。
手順 2:データセットと JindoRuntime を作成する
ACK クラスターと OSS バケットを設定した後、データセットと JindoRuntime をデプロイする必要があります。 デプロイには数分かかります。
次の内容に基づいて、secret.yaml という名前のファイルを作成します。
ファイルには、OSS バケットにアクセスするために使用される
fs.oss.accessKeyId
とfs.oss.accessKeySecret
が含まれています。apiVersion: v1 kind: Secret metadata: name: access-key stringData: fs.oss.accessKeyId: **** // アクセスキー ID fs.oss.accessKeySecret: **** // アクセスキー シークレット
次のコマンドを実行して、シークレットをデプロイします。
kubectl create -f secret.yaml
次の内容に基づいて、resource.yaml という名前のファイルを作成します。
YAML ファイルには、次の情報が格納されています。
Dataset
: リモート データストアに格納されているデータセットと Unix ファイルシステム (UFS) 情報を指定します。JindoRuntime
: クラスター内のデータキャッシングのために JindoFS を有効にします。
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: serverless-data spec: mounts: - mountPoint: oss://large-model-sh/ name: demo path: / options: fs.oss.endpoint: oss-cn-shanghai.aliyuncs.com encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: access-key key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: access-key key: fs.oss.accessKeySecret accessModes: - ReadWriteMany --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: serverless-data spec: master: disabled: true // マスターノードを無効化 worker: disabled: true // ワーカーノードを無効化
次の表は、上記のコードブロックで指定されているパラメーターの一部について説明しています。
パラメーター
説明
mountPoint
UFS ファイルシステムがマウントされるパス。 パスの形式は
oss://<oss_bucket>/<bucket_dir>
です。パスにエンドポイント情報は含めないでください。 バケットに直接アクセスできる場合は、
<bucket_dir>
は省略可能です。fs.oss.endpoint
OSS バケットのパブリックまたはプライベート エンドポイント。
データ セキュリティを強化するために、バケットのプライベート エンドポイントを指定できます。 ただし、プライベート エンドポイントを指定する場合は、ACK クラスターが OSS がアクティブ化されているリージョンにデプロイされていることを確認してください。 たとえば、OSS バケットが中国 (杭州) リージョンに作成されている場合、バケットのパブリック エンドポイントは
oss-cn-hangzhou.aliyuncs.com
で、プライベート エンドポイントはoss-cn-hangzhou-internal.aliyuncs.com
です。fs.oss.accessKeyId
バケットにアクセスするために使用される AccessKey ID。
fs.oss.accessKeySecret
バケットにアクセスするために使用される AccessKey シークレット。
accessModes
アクセス モード。 有効な値:
ReadWriteOnce
、ReadOnlyMany
、ReadWriteMany
、ReadWriteOncePod
。 デフォルト値:ReadOnlyMany
。disabled
マスターノードとワーカーノードの両方でこのパラメーターを
true
に設定すると、キャッシュなしモードが使用されます。次のコマンドを実行して、データセットと JindoRuntime をデプロイします。
kubectl create -f resource.yaml
次のコマンドを実行して、データセットがデプロイされているかどうかを確認します。
kubectl get dataset serverless-data
予期される出力:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE serverless-data Bound 1d
出力の
PHASE
列にBound
と表示されます。 これは、データセットがデプロイされていることを示します。次のコマンドを実行して、JindoRuntime がデプロイされているかどうかを確認します。
kubectl get jindo serverless-data
予期される出力:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE serverless-data Ready 3m41s
出力の
FUSE
列にReady
と表示されます。 これは、JindoRuntime がデプロイされていることを示します。
手順 3:OSS にアクセスするためのサーバーレス コンテナーを作成する
JindoFS によって高速化されたデータアクセスをテストするためのコンテナーを作成したり、関連機能を使用するために機械学習ジョブを送信したりできます。 このセクションでは、デプロイメントを使用して OSS に格納されているデータにアクセスするためのコンテナーを作成する方法について説明します。
次の内容に基づいて、serving.yaml という名前のファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: model-serving // デプロイメント名 spec: selector: matchLabels: app: model-serving template: metadata: labels: app: model-serving alibabacloud.com/fluid-sidecar-target: eci alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge // ECI のスペック spec: containers: - image: fluidcloudnative/serving // コンテナーイメージ name: serving ports: - name: http1 containerPort: 8080 env: - name: TARGET value: "World" volumeMounts: // ボリュームマウント - mountPath: /data name: data volumes: // ボリューム - name: data persistentVolumeClaim: claimName: serverless-data // データセット名
次のコマンドを実行して、デプロイメントをデプロイします。
kubectl create -f serving.yaml
Serving ファイルのサイズを確認します。
次のコマンドを実行して、コンテナーにログインします。
kubectl exec -it model-serving-85b645b5d5-2trnf -c serving -- bash
次のコマンドを実行して、Serving ファイルのサイズをクエリします。
bash-4.4# du -sh /data/wwm_uncased_L-24_H-1024_A-16.zip
予期される出力:
1.2G /data/wwm_uncased_L-24_H-1024_A-16.zip
次のコマンドを実行して、コンテナーログを出力します。
kubectl logs model-serving-85b9587c5b-w5528 -c serving
予期される出力:
Begin loading models at 18:23:59 real 0m27.107s user 0m0.000s sys 0m0.742s Finish loading models at 18:24:26
出力の
real
フィールドは、Serving ファイルの複製に 27.107 秒 (0m27.107s
) かかったことを示しています。 所要時間は、ネットワーク遅延と帯域幅によって異なります。 データアクセスを高速化するには、「キャッシュモードでオンライン アプリケーションを高速化する」をご参照ください。
手順 4:データをクリアする
データアクセスの高速化が不要になった場合は、環境をクリアできます。
次のコマンドを実行して、コンテナーを削除します。
kubectl delete deployment model-serving
次のコマンドを実行して、データセットを削除します。
kubectl delete dataset serverless-data
参照資料
キャッシュなしモードでのオンライン アプリケーションの高速化の詳細については、「ジョブの高速化」および「Argo ワークフローの高速化」をご参照ください。
ACK モードでのキャッシュなしモードでのオンライン アプリケーションの高速化の詳細については、「ACK キャッシュモード」をご参照ください。
ACK Serverless モードでのキャッシュなしモードでのオンライン アプリケーションの高速化の詳細については、「ACK Serverless キャッシュモード」をご参照ください。