Kubernetes上の機械学習プラットフォームの実践

Kubernetes上の機械学習プラットフォームの実践

背景

これまで、音楽アルゴリズムのモデル トレーニング タスクは、物理マシン上で開発、デバッグ、スケジュールされていました。各アルゴリズム チームは独自の独立した物理マシンを使用しているため、いくつかの問題が発生します。たとえば、物理マシンは分散しており、統一された管理がないため、マシンの使用状況や所有権の記録は主にドキュメント内のテーブルに依存しています。企業間でマシン リソースを割り当てるには、異なるコンピューター ルームにマシンを再配置する必要がある場合があり、これには時間と労力がかかります。また、開発やスケジュールのタスクを複数人で分担して行うため、環境がお互いに影響を及ぼし、リソースの競合も発生します。現状を踏まえると、問題点は以下のようにまとめられます。

  • リソース使用率が低い: 一部のマシンのリソース使用率が低いため、各ビジネスのさまざまな段階に応じてシステムを迅速かつ動的にスケールアップおよびスケールダウンして、合理的なリソース割り当てを実現し、全体的なリソース使用率を向上させることが不可能です。
  • 環境の相互影響: 複数の人が分離せずに同じ開発マシンを共有、テスト、スケジュールすると、環境と共有リソースの相互影響と競合が発生する可能性があります。
  • 監視とアラームの欠如: 物理マシン モードでは、タスクの監視とアラーム機能がないため、タスクを操作および保守できないか、効率が低下します。

リソースがグローバルに統一的かつ合理的に割り当てられない場合、負荷の不均衡が発生し、リソースを最大限に活用できなくなります。

Kubernetesへの試み

Kubernetes とその関連拡張機能は、急速な拡張と縮小、環境の分離、リソースの監視などの問題をうまく解決できます。ここで、物理マシンを集めて Kubernetes クラスターを構築します。アルゴリズムの同僚たちのこれまでの作業方法を分析することにより、機械学習プラットフォーム (GoblinLab) は、Kubernetes に基づく 2 つのソリューション、つまり、それぞれタスク開発とタスク スケジューリングの 2 つのシナリオを対象とした、オンライン開発およびデバッグ コンテナー環境とコンテナー化されたタスク スケジューリングを提供することにしました。

タスク開発

アルゴリズムの同僚を物理マシンからコンテナ化された環境に移行する際の学習コストを最小限に抑えるために、GoblinLab システムでは基本的に Kubernetes コンテナをクラウド ホストとして使用します。コンテナ イメージは、さまざまなバージョンの Tensoflow イメージ (基礎レイヤーは Ubuntu) に基づいており、ビッグ データ開発環境 (Hadoop、Hive、Spark などのクライアント) を統合し、よく使用されるソフトウェアをインストールします。また、コンテナ環境では使いやすさを考慮して、Jupyter Lab、SSH ログイン、コード サーバー (VSCode) の 3 つの使用方法を提供しています。

GoblinLab でコンテナ化された新しい開発環境を作成するのは比較的簡単です。イメージを選択し、必要なリソースとマウントする必要がある外部ストレージを入力するだけです (タスク開発用の環境を以下、開発インスタンスと呼びます)。

新しい環境設定を作成したら、「インスタンスの開始」をクリックします。コンテナが初期化されると、Jupyter lab、SSH、および CodeServer が自動的に起動します。

Jupyterラボ:

コード サーバー:

SSHログイン:

アルゴリズムは、上記のいずれかの方法を選択してタスクを開発またはデバッグできます。 Code Server (VSCode) が提供されているため、より良いエクスペリエンスを得ることができます。

タスク開発に使用されるコンテナ化された環境は、基盤となる Kubernetes 上の StatefulSet 型を通じて実装されます。対応するリソース オーケストレーション ファイルは次のとおりです (詳細は簡略化されています)。

  1. 種類: ステートフルセット
  2. APIバージョン: アプリ/v1
  3. メタデータ:
  4. 名前: ${名前}
  5. 名前空間: "${namespace}"  
  6. 仕様:
  7. レプリカ: 1
  8. セレクタ:
  9. 一致ラベル:
  10. ステートフルセット: ${ name }
  11. システム/アプリ: ${名前}
  12. テンプレート:
  13. 仕様:
  14. <#if (gpu > 0)>
  15. 許容範囲:
  16. - 効果: NoSchedule
  17. キー: nvidia.com/gpu
  18. 値: "true"  
  19. </#if>
  20. <#usePrivateRepository == "true"の場合>
  21. イメージプルシークレット:
  22. -名前: registrykey-myhub
  23. </#if>
  24. ボリューム:
  25. -名前: 現地時間
  26. ホストパス:
  27. パス: /etc/localtime
  28. <#if MountPVCs?? && (MountPVCs?サイズ> 0)>
  29. <#MountPVCs?keysリストする キー>
  30. -名前: "${key}"  
  31. 永続ボリュームクレーム:
  32. クレーム名: "${key}"  
  33. </#リスト>
  34. コンテナ:
  35. -名前:ノートブック
  36. 画像: ${image}
  37. イメージプルポリシー: IfNotPresent
  38. ボリュームマウント:
  39. -名前: 現地時間
  40. マウントパス: /etc/localtime
  41. <#if readMountPVCs?? && (readMountPVCs?サイズ> 0)>
  42. <#list readMountPVCs?keys as  キー>
  43. -名前: "${key}"  
  44. マウントパス: "${readMountPVCs[キー]}"  
  45. 読み取り専用: true  
  46. </#リスト>
  47. </#if>
  48. <#if writeMountPVCs?? && (writeMountPVCs?サイズ> 0)>
  49. <#list writeMountPVCs?keys as  キー>
  50. -名前: "${key}"  
  51. マウントパス: "${writeMountPVCs[key]}"  
  52. </#リスト>
  53. </#if>
  54. 環境:
  55. -名前: NOTEBOOK_TAG
  56. 値: "${name}"  
  57. -名前: HADOOP_USER
  58. 値: "${hadoopUser}"  
  59. -名前:パスワード 
  60. 値: "${password}"  
  61. リソース:
  62. リクエスト:
  63. CPU: ${CPU}
  64. メモリ: ${memory}Gi
  65. <#if (gpu > 0)>
  66. nvidia.com/gpu: ${gpu}
  67. </#if>
  68. 制限:
  69. CPU: ${CPU}
  70. メモリ: ${memory}Gi
  71. <#if (gpu > 0)>
  72. nvidia.com/gpu: ${gpu}
  73. </#if>

現在、GolbinLab は Tensoflow のさまざまなバージョンに基づいた 11 個の CPU および GPU 汎用イメージと、複数のカスタマイズされたイメージを提供しています。

タスクのスケジュール

コンテナ化された環境を使用する前、アルゴリズムの同僚は GPU 物理マシン上でタスクを開発し、スケジュールしていました。スケジュールは通常、タイマーまたは crontab コマンドを通じて行われていました。障害、タイムアウト、その他のアラームはなく、再試行メカニズムもなく、基本的に関連するタスク操作および保守ツールはありませんでした。

コンテナ内で開発されたタスクをオンラインでスケジュールする方法を紹介する前に、まずは GoblinLab のシステム アーキテクチャについて簡単に紹介します。

上の図は、GoblinLab の簡略化されたシステム アーキテクチャを示しています。これは、上から下に向かって主に 4 つのレイヤーに分かれています。

  • アプリケーション層: ユーザーに直接機械学習開発プラットフォームを提供する (GoblinLab)
  • 中間層: 中間層は主に統合されたスケジュール、アラーム、構成サービスに接続します。
  • ウィザード実行サービス: Kubernetes、Spark、Jar などのさまざまなタスクの送信と実行を含む、統合された実行サービスを提供します。プラグイン、急速な拡張をサポート
  • インフラストラクチャ: 主に Kubernetes クラスター、Spark クラスター、通常のサーバーを含む基盤となるインフラストラクチャ。

スケジュールされたタスクの安定性を確保するために、GolbinLab はタスクの開発とスケジュールを分割し、以前のアルゴリズムを変更して物理マシン上で直接タスクを開発し、タイマーまたは crontab を通じてタスクをスケジュールします。上図に示すように、開発が完了した後、タスク フロー内のコンテナ化されたタスク スケジューリング コンポーネントを通じてタスク スケジューリングが実装されます。ユーザーは、コンポーネントの関連パラメータ (コードが配置されている PVC とパス、構成イメージなど) を入力し、タスク フローのスケジューリング機能を通じてタスク スケジューリングを実装する必要があります。タスク開発とは異なり、各スケジューリングタスクは独立したコンテナで実行されるため、タスク間の分離が確保されます。同時に、後述するリソース分離ソリューションにより、オンラインスケジューリングタスクに必要なリソースに優先順位を付けることができます。

タスク スケジューリング実行の一般的なプロセスは次のとおりです。

タスク スケジューリングが実行される際の Kubernetes 上のリソース オーケストレーション ファイル (詳細は簡略化されています):

  1. APIバージョン: batch/v1
  2. 種類: 仕事
  3. メタデータ:
  4. 名前: ${名前}
  5. 名前空間: ${namespace}
  6. 仕様:
  7. テンプレート:
  8. 仕様:
  9. コンテナ:
  10. -名前: jupyter-job
  11. 画像: ${image}
  12. 環境:
  13. -名前: ENV_TEST
  14. 値: ${envTest}
  15. コマンド: [ "/bin/bash" , "-ic" , "cd ${workDir} && \
  16. ${execCommand} /root/${entryPath} ${runArgs}"]
  17. ボリュームマウント:
  18. - マウントパス: "/root"  
  19. 名前: "ルートディレクトリ"  
  20. リソース:
  21. リクエスト:
  22. CPU: ${CPU}
  23. メモリ: ${memory}Gi
  24. <#if (gpu > 0)>
  25. nvidia.com/gpu: ${gpu}
  26. </#if>
  27. 制限:
  28. CPU: ${CPU}
  29. メモリ: ${memory}Gi
  30. <#if (gpu > 0)>
  31. nvidia.com/gpu: ${gpu}
  32. </#if>
  33. ボリューム:
  34. -名前: "ルートディレクトリ"  
  35. 永続ボリュームクレーム:
  36. クレーム名: "${pvc}"  
  37. バックオフ制限: 0

権限制御

コンテナ化された開発環境が構成され、起動されると、ユーザーは SSH ログイン、CodeServer、または JupyterLab を通じてそれを使用できるようになります。 GoblinLabでは、コンテナ化された開発環境が他人に利用されることを防ぐために、メソッドごとに統一されたキーを設定し、起動のたびにキーをランダムに生成します。

1. パスワードをランダムに生成する

2. アカウントパスワード(SSHログインパスワード)を設定する

  1. echo "root:${password}" | chpasswd

3. コードサーバーのパスワードを設定する (VSCode)

  1. #環境変数PASSWORDを設定する
  2. 環境:
  3. -名前:パスワード        
  4. 値: "${password}"   

4. Jupyter Labのパスワードを設定する

  1. jupyterノートブック--generate-config、~/.jupyterディレクトリにjupyter_notebook_config.pyを生成し、コードを追加します。  
  2. インポートOS
  3. IPython.libからpasswdをインポートする
  4. c = c # pylint:disable=未定義変数
  5. c.NotebookApp.ip = '0.0.0.0' # https://github.com/jupyter/notebook/issues/3946 c.NotebookApp.port = int (os.getenv( 'PORT' , 8888)) c.NotebookApp.open_browser = False  
  6. PASSWORDの場合パスワードを設定します  セット 環境において
  7. 'パスワード'の場合  os.environ:
  8. パスワード= os.environ[ 'パスワード' ]
  9. パスワードの場合:
  10. c.NotebookApp.password = passwd (パスワード)
  11. それ以外
  12. c.NotebookApp.password = ''       
  13. c.NotebookApp.token = ''     
  14. os.environ[ 'パスワード' ]を削除します

データの永続性

Kubernetes コンテナでは、特に設定しない限り、コンテナ内のデータは保持されません。つまり、コンテナが削除または再起動されると、データが失われます。対応するソリューションは比較的簡単です。永続化する必要があるディレクトリの外部ストレージをマウントするだけです。 GoblinLab では、デフォルトの外部ストレージ PVC がユーザーごとに自動的に作成され、コンテナの /root ディレクトリにマウントされます。さらに、ユーザーは外部ストレージのマウントをカスタマイズすることもできます。

自動的に作成される PVC に加えて、ユーザーは独自の PVC を作成し、作成した PVC を読み取り専用モードまたは読み取り/書き込みモードで他のユーザーと共有することもできます。

さらに、PVC 内のデータも Goblinlab 上で管理できます。

サービス露出

Kubernetes クラスター内に作成されたサービスには、クラスター外部から直接アクセスすることはできません。GoblinLab は、Nginx Ingress + Gateway を使用して、クラスター内のサービスにアクセスし、外部に公開します。

コンテナ化された開発環境のサービス リソース オーケストレーション ファイルは次のとおりです (詳細は簡略化されています)。

  1. APIバージョン: v1
  2. 種類: サービス
  3. メタデータ:
  4. 名前: ${名前}
  5. 名前空間: ${namespace}
  6. 仕様:
  7. クラスターIP: なし
  8. ポート:
  9. -名前: ポートノートブック
  10. ポート: 8888
  11. プロトコル: TCP
  12. ターゲットポート: 8888
  13. -名前: port-sshd
  14. ポート: 22
  15. プロトコル: TCP
  16. ターゲットポート: 22
  17. -名前: ポート-vscode
  18. ポート: 8080
  19. プロトコル: TCP
  20. ターゲットポート: 8080
  21. -名前: port-tensofboard
  22. ポート: 6006
  23. プロトコル: TCP
  24. ターゲットポート: 6006
  25. <#if ポート?? && (ポート?サイズ> 0)>
  26. <# ポートをポートとしてリストする>
  27. -名前: ポート-${port}
  28. ポート: ${port}
  29. ターゲットポート: ${port}
  30. </#リスト>
  31. </#if>
  32. セレクタ:
  33. ステートフルセット: ${ name }
  34. タイプ: ClusterIP

ユーザーがコンテナ化された開発環境を起動するたびに、GoblinLab はインターフェースを通じて Nginx Ingress 構成を自動的に変更し、ユーザーが使用できるようにサービスを公開します。Ingress 転送構成は次のとおりです。

  1. APIバージョン: v1
  2. 種類: ConfigMap
  3. メタデータ:
  4. 名前: tcp-services
  5. 名前空間: kube-system
  6. データ:
  7. "20000" : ns/ノートブックテスト:8888
  8. "20001" : ns/ノートブックテスト:8080
  9. "20002" : ns/ノートブックテスト:22

リソース管理

リソースの使用率を向上させるために、GoblinLab の基盤となる Kubernetes のリソースは基本的に共有方式で使用され、一定の割合で過剰に販売されます。ただし、複数のチームが固定の総リソース量を持つクラスターを共有する場合は、各チームがリソースを公平に共有できるように、リソースを管理および制御する必要があります。 Kubernetes では、リソース クォータがこの問題を解決するためのツールとなります。現在、GoblinLab が管理する必要があるリソースには、主に CPU、メモリ、GPU、ストレージが含まれます。プラットフォームは、各チームの実際のニーズを考慮した上で、リソースを複数のキュー(Kubernetes での概念は名前空間)に分割し、各チームに提供します。

  1. APIバージョン: v1
  2. 種類: リソースクォータ
  3. メタデータ:
  4. 名前: スキフクォータ
  5. 名前空間: テスト
  6. 仕様:
  7. 難しい:
  8. 制限.CPU: "2"  
  9. メモリ制限: 5Gi
  10. リクエスト.CPU: "2"  
  11. リクエストメモリ: 5Gi
  12. リクエスト.nvidia.com/gpu: "1"  
  13. リクエストストレージ: 10Gi

クラスターでは、最も一般的なリソースは CPU とメモリです。これらは過剰販売 (オーバーコミット) される可能性があるため、制限とリクエストの 2 つのクォータ制限があります。また、その他のリソースは拡張型であり、オーバーコミットが許可されていないため、リクエストのクォータのみが制限されます。パラメータの説明:

  • limits.cpu: 非ターミナル状態のすべてのポッド全体で、CPU 制限の合計がこの値を超えることはできません。
  • limits.memory: 非ターミナル状態のすべてのポッド全体で、メモリ制限の合計がこの値を超えることはできません。
  • request.cpu: 非ターミナル状態のすべてのポッド全体で、CPU リクエストの合計はこの値を超えることはできません。
  • request.memory: 非ターミナル状態のすべてのポッド全体で、メモリ要求の合計がこの値を超えることはできません。
  • http://requests.nvidia.com/gpu: 非ターミナル状態のすべてのポッド全体で、GPU 要求の合計はこの値を超えることはできません。
  • request.storage: すべての永続ボリューム要求にわたって、ストレージ要求の合計がこの値を超えることはできません。

クォータで制御できるリソースはCPU、メモリ、ストレージ、GPUだけではありません。他の種類については公式ドキュメントを参照してください: https://kubernetes.io/docs/con ... otas/

リソースの分離

GoblinLab のリソース分離とは、GPU マシン リソースの分離やオンライン タスクとテスト タスクの分離など、同じ Kubernetes クラスター内のスケジュール レベルでのリソースの相対的な分離を指します。

GPUマシンリソースの分離

Kubernetes クラスターでは、GPU マシンのリソースは CPU マシンよりも貴重です。そのため、GPU の使用率を向上させるために、CPU タスクを GPU マシンにスケジュールすることは禁止されています。

GPU ノードの汚染設定: GPU ノードでの一般的なタスクのスケジュールを禁止する

  1. キー: nvidia.com/gpu
  2. 値:  
  3. 効果: NoSchedule

汚染効果のオプション構成:

  • NoSchedule: ポッドは、汚染としてマークされたノードにスケジュールされません。
  • PreferNoSchedule: NoSchedule のソフト ポリシー バージョン。許容できない汚染があるノードにポッドをスケジュールすることは避けてください。
  • NoExecute: このオプションは、Taint が有効になると、ノードで実行されている Pod に対応する Tolerate 設定がない場合、その Pod が直接削除されることを意味します。

GPUタスク設定許容範囲(Toleration):GPUタスクをGPUノードでスケジュールできるようにする

  1. <#if (gpu > 0)>
  2. 許容範囲:
  3. - 効果: スケジュールなし
  4. キー: nvidia.com/gpu
  5. 値: "true"     
  6. </#if>

オンラインタスクとテストタスクの分離

オンラインタスクとテストタスク(GolbinLab におけるオンラインタスクとテストタスクは、定期的なスケジュールタスクと開発およびテストタスクを指す、ビジネスレベルで定義されます)は同じ Kubernetes クラスターを使用しますが、オンラインタスクのリソースを保護するために、一部のマシンノードはオンラインタスク専用のリソースプールとして特別に設定されます。オンライン タスクが実行されると、最初にオンライン ノードでスケジュールされます。オンライン リソース プールにリソースがない場合は、非オンライン ノードでスケジュールすることもできます。

オンライン リソース プール ノードを汚染する: オンライン リソース プールでの一般的なタスク スケジュールを禁止する

  1. キー: node.netease.com/node-pool
  2. 価値: オンライン
  3. 効果: NoSchedule

オンラインタスクに許容範囲を追加: オンラインタスクをオンラインリソースプールにスケジュールできるようにしますが、オンラインリソースプールにスケジュールする必要はありません。

  1. 許容範囲:
  2. - 効果: NoSchedule
  3. キー: node.netease.com/node-pool
  4. 値: "オンライン"           
  5. 演算子: 等しい

オンライン リソース プール内のマシン ノードのラベルを設定し、オンライン タスクのノード アフィニティを設定します。オンライン リソース プール内のオンライン タスクのスケジュールを優先しますが、オンライン リソース プールにリソースがない場合は、他のノードでスケジュールすることもできます。

オンライン リソース プール内のノードにはラベルが付けられます。便宜上、ラベルの名前はテイントと同じになります。

  1. node.netease.com/node-pool:オンライン

オンラインタスクのノードアフィニティを設定する: オンラインタスクはオンラインリソースプールで最初にスケジュールされます

  1. 親和性:
  2. ノードアフィニティ:
  3. 優先スケジュール中は無視実行中:
  4. ノードセレクタ用語:
  5. - 一致する表現:
  6. -キー: node.netease.com/node-pool
  7. 演算子:                 
  8. - オンライン

現在、ノード アフィニティには次の戦略があります。公式ドキュメントの「affinity-and-anti-affinity」を参照してください。

  • requiredDuringSchedulingIgnoredDuringExecution は、条件を満たすノードに Pod をデプロイする必要があることを意味します。条件を満たすノードがない場合、継続的に再試行されます。 IgnoreDuringExecution は、Pod がデプロイされ実行されているときに、ノード ラベルが変更され、Pod によって指定された条件を満たさなくなった場合でも、Pod は引き続き実行されることを意味します。
  • requiredDuringSchedulingRequiredDuringExecution は、条件を満たすノードに Pod をデプロイする必要があることを意味します。条件を満たすノードがない場合、継続的に再試行されます。 RequiredDuringExecution は、デプロイ後に Pod が実行されているときに、ノード ラベルが変更され、Pod によって指定された条件を満たさなくなった場合に、要件を満たすノードが再選択されることを意味します。
  • preferredDuringSchedulingIgnoredDuringExecution は、条件を満たすノードにデプロイメントが優先されることを意味します。条件を満たすノードがない場合、これらの条件は無視され、通常のロジックに従ってデプロイメントが実行されます。
  • preferredDuringSchedulingRequiredDuringExecution は、条件を満たすノードにデプロイメントが優先されることを示します。条件を満たすノードがない場合、これらの条件は無視され、通常のロジックに従ってデプロイメントが実行されます。 RequiredDuringExecution は、後続ノードのラベルが変更され、条件が満たされた場合、条件を満たすノードに再スケジュールされることを意味します。

ポリシーが有効になった後の効果は、次の図に示されています。オンライン タスクは、最初にオンライン リソース プール ノードで実行されますが、オンライン リソース プールにアイドル リソースがない場合、オンライン タスク Job5 は通常のノードのリソースも使用できます。

中間結果

現在までに、音楽機械学習プラットフォーム (GoblinLab) はコンテナ化の実験をしばらく行っており、いくつかの初期結果を達成しています。

クラスター構築

現在の音楽データプラットフォームのKubernetesは、試行期間を経て、ますます多くのビジネスとKubernetesベースのビッグデータコンピューティングプラットフォーム(Flinkなど)の実装があり、今後は大量のCPUリソースが追加され、その安定性が比較的大きな課題になります。

ユーザーの使用

  • タスク移行:現在、アルゴリズムの同僚はタスク移行の80%を完了しています。

タスク開発

  • ユーザーの状況: アルゴリズムの学生の60%が開発インスタンスのコンテナ化された環境を使用しています。ユーザーソースには、音楽推奨アルゴリズム、ソーシャルビデオ推奨アルゴリズム、検索アルゴリズム、オーディオとビデオ、データアプリケーション、リアルタイムコンピューティングアルゴリズムなどのチームが含まれます。
  • 開発インスタンス: プラットフォームでは、グループ内での開発インスタンスの共有を推奨しており、各ユーザーが作成できる開発インスタンスは最大 3 つに制限されています。
  • タスクのスケジューリング: クラウド音楽推奨、ソーシャル ビデオ推奨アルゴリズム、検索アルゴリズム、オーディオとビデオ、データ アプリケーション、リアルタイム コンピューティング アルゴリズムなど、複数のチームをカバーします。

コンテナ化の利点

アルゴリズム担当者にとって、物理マシンから機械学習プラットフォームによって提供されるコンテナ化された環境に移行すると、次のようなメリットが得られます。

  • より多くのリソース: リソース使用率の向上により、物理マシンのみを使用して以前よりも多くのリソースを取得できるようになります。さらに、リソースの拡張と縮小のサイクルが数日から数秒に短縮されます。
  • より良いエクスペリエンス:ビッグデータとGit環境を接続し、多様な利用方法(SSHとオンラインIDE)を提供し、機械学習プラットフォームが環境イメージを統一的に維持することで、各チームが独自に環境を構築して維持しなければならないという手間を回避します。
  • より完全なタスクスケジューリング: GoblinLab のスケジューリングは、より完全なアラーム、再試行、依存関係チェックなどの機能を提供し、既存の PS および Ironbaby タスクと統合して、タスクフローで統一されたスケジューリングを実現できます。
  • より優れた隔離: 環境の隔離はコンテナ化の自然な利点です。さらに、スケジューリング レベルでのリソースの分離により、オンライン タスクをより適切に保証できます。
  • 入口の統一:開発入口を統一することで、運用の余地が広がります。たとえば、一般的なサービス (依存関係のチェック、スケジュール、アラームの監視など)、データの共有、イメージの更新、その後の継続的なサポート サービスは抽象化され、プラットフォームによって直接提供されます。

その後の計画

現在、音楽機械学習プラットフォームは、コンテナ化された開発のための完全な基本機能を提供できます。クラスターのリソース使用率をさらに向上させ、運用と保守の効率を高めるために、その後の最適化計画は、リソーススケジューリング戦略の最適化(プリエンプションなど)、より豊富なリソース監視、およびその他の側面から始まり、さらなる最適化が図られます。

著者: 王俊正、NetEase Cloud Music、データインテリジェンス部門、データプラットフォームグループ

<<:  AIが建設現場の安全性を向上させる10の方法

>>:  2020 年の最もクールな機械学習スタートアップ 12 社

ブログ    

推薦する

2021年にAI開発に使える言語は何ですか?

[[417589]]パイソン[[417590]] Python は現在、機械学習で最も人気のあるプ...

Daguan Data が自社開発の OCR と NLP 技術を統合し、インテリジェント RPA をリリース<

2019年7月26日、人工知能企業Daguan Dataは北京で「大道知建」をテーマにした製品発表...

人工知能はどのようにして銀行をより「インテリジェント」にすることができるのでしょうか?

[[263447]]人工知能技術の継続的な導入は、新たな産業発展の中核的な原動力となり、さまざまな...

新たなマイルストーン! IBM、量子コンピュータの最高記録64台を発表、ハネウェルを追い抜く

ちょうど今、IBM は量子コンピューティングの新たなマイルストーンに到達し、現時点での最高量子ボリュ...

GenAI の投資が 2024 年にデータセンターにどのような変化をもたらすか

私たちは、日常の習慣から抜け出し、長い間待ち望まれていた自分自身を変えるために、ちょっとしたモチベー...

GPT-4 は宇宙のすべてのデータを消費します! OpenAI、データ不足で相次いで訴訟に直面、カリフォルニア大学バークレー校教授が警告

「ネットワーク全体」を使い果たすと、生成 AI はすぐにデータを使い果たします。最近、カリフォルニア...

ショック!自動運転車が人をはねたが、救助活動は失敗し、死亡が確認された。

太平洋標準時3月18日午後10時、米国アリゾナ州で、ウーバーが路上試験中に自転車に乗った女性と衝突し...

Google ドキュメントでテキスト要約を自動的に生成できるようになりました。

私たちの多くは、毎日たくさんのファイルを処理する必要があります。新しい文書を受け取ったとき、通常は、...

テンセントのロボット犬が本物の犬の仕事を奪う!彼は楽しくゲームをしたり、歩き回ったりすることができます。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

10億のデータから数字を素早く見つける方法 | 定番アルゴリズムBitMapの詳しい説明

序文多くの人は、BitMap は文字通りビットマップを意味すると考えています。実際、より正確には、ビ...

...

杜暁曼自動機械学習プラットフォームの実践

1. 機械学習プラットフォームまず、Du Xiaomanの機械学習プラットフォームの背景、開発プロセ...

GPT-3 に匹敵するものでしょうか? EleutherAIがGPT-Jをオープンソース化

2020年、マイクロソフトはOpenAIと合意に達し、MicrosoftはGPT-3のソースコードに...