Fluid を使用すると、JindoRuntime を使用して、サーバーレスクラウドコンピューティングシナリオで Object Storage Service (OSS) に保存されているデータへのアクセスを高速化できます。キャッシュモードとキャッシュモードなしでデータアクセスを高速化できます。このトピックでは、キャッシュモードなしでオンラインアプリケーションを高速化する方法について説明します。
前提条件
non-containerOS の Container Service for Kubernetes (ACK) Pro クラスターが作成され、クラスターの Kubernetes バージョンが 1.18 以降であること。詳細については、「ACK Pro マネージドクラスターの作成」をご参照ください。
重要ack-fluid コンポーネントは現在 ContainerOS ではサポートされていません。
クラウドネイティブ AI スイートがインストールされ、ack-fluid コンポーネントがデプロイされていること。
重要オープンソースの Fluid をインストールしている場合は、ack-fluid コンポーネントをデプロイする前に Fluid をアンインストールしてください。
クラウドネイティブ AI スイートをインストールしていない場合: [Fluid] をデプロイし、データキャッシングアクセラレーションを有効にします。詳細については、「クラウドネイティブ AI スイートのデプロイ」をご参照ください。
すでにクラウドネイティブ AI スイートをインストールしている場合は、ACK コンソールの [クラウドネイティブ AI スイート] ページに移動し、[ack-fluid] コンポーネントをデプロイします。
ACK Pro クラスターに仮想ノードがデプロイされていること。詳細については、「Pod を Elastic Container Instance にスケジューリングする」をご参照ください。
kubectl クライアントが ACK Pro クラスターに接続されていること。詳細については、「kubectl を使用して ACK クラスターに接続する」をご参照ください。
Object Storage Service (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: **** fs.oss.accessKeySecret: ****次のコマンドを実行して Secret をデプロイします。
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次の表に、上記のコードブロックで指定されているパラメーターの一部を示します。
パラメーター
説明
mountPointUFS ファイルシステムがマウントされるパス。パスのフォーマットは
oss://<oss_bucket>/<bucket_dir>です。パスにエンドポイント情報を含めないでください。
<bucket_dir>は、バケットに直接アクセスできる場合はオプションです。fs.oss.endpointOSS バケットのパブリックエンドポイントまたはプライベートエンドポイント。
データセキュリティを強化するために、バケットのプライベートエンドポイントを指定できます。ただし、プライベートエンドポイントを指定する場合は、OSS が有効化されているリージョンに ACK クラスターがデプロイされていることを確認してください。たとえば、OSS バケットが中国 (杭州) リージョンで作成されている場合、バケットのパブリックエンドポイントは
oss-cn-hangzhou.aliyuncs.comで、プライベートエンドポイントはoss-cn-hangzhou-internal.aliyuncs.comです。fs.oss.accessKeyIdバケットへのアクセスに使用される AccessKey ID。
fs.oss.accessKeySecretバケットへのアクセスに使用される AccessKey Secret。
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 によって高速化されたデータアクセスをテストしたり、機械学習ジョブを送信して関連機能を使用したりできます。このセクションでは、Deployment を使用して 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 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次のコマンドを実行して Deployment をデプロイします。
kubectl create -f serving.yamlServing ファイルのサイズを確認します。
次のコマンドを実行してコンテナーにログインします。
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 キャッシュモード」をご参照ください。