背景 これまで、音楽アルゴリズムのモデル トレーニング タスクは、物理マシン上で開発、デバッグ、スケジュールされていました。各アルゴリズム チームは独自の独立した物理マシンを使用しているため、いくつかの問題が発生します。たとえば、物理マシンは分散しており、統一された管理がないため、マシンの使用状況や所有権の記録は主にドキュメント内のテーブルに依存しています。企業間でマシン リソースを割り当てるには、異なるコンピューター ルームにマシンを再配置する必要がある場合があり、これには時間と労力がかかります。また、開発やスケジュールのタスクを複数人で分担して行うため、環境がお互いに影響を及ぼし、リソースの競合も発生します。現状を踏まえると、問題点は以下のようにまとめられます。
リソースがグローバルに統一的かつ合理的に割り当てられない場合、負荷の不均衡が発生し、リソースを最大限に活用できなくなります。 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 型を通じて実装されます。対応するリソース オーケストレーション ファイルは次のとおりです (詳細は簡略化されています)。
現在、GolbinLab は Tensoflow のさまざまなバージョンに基づいた 11 個の CPU および GPU 汎用イメージと、複数のカスタマイズされたイメージを提供しています。 タスクのスケジュール コンテナ化された環境を使用する前、アルゴリズムの同僚は GPU 物理マシン上でタスクを開発し、スケジュールしていました。スケジュールは通常、タイマーまたは crontab コマンドを通じて行われていました。障害、タイムアウト、その他のアラームはなく、再試行メカニズムもなく、基本的に関連するタスク操作および保守ツールはありませんでした。 コンテナ内で開発されたタスクをオンラインでスケジュールする方法を紹介する前に、まずは GoblinLab のシステム アーキテクチャについて簡単に紹介します。 上の図は、GoblinLab の簡略化されたシステム アーキテクチャを示しています。これは、上から下に向かって主に 4 つのレイヤーに分かれています。
スケジュールされたタスクの安定性を確保するために、GolbinLab はタスクの開発とスケジュールを分割し、以前のアルゴリズムを変更して物理マシン上で直接タスクを開発し、タイマーまたは crontab を通じてタスクをスケジュールします。上図に示すように、開発が完了した後、タスク フロー内のコンテナ化されたタスク スケジューリング コンポーネントを通じてタスク スケジューリングが実装されます。ユーザーは、コンポーネントの関連パラメータ (コードが配置されている PVC とパス、構成イメージなど) を入力し、タスク フローのスケジューリング機能を通じてタスク スケジューリングを実装する必要があります。タスク開発とは異なり、各スケジューリングタスクは独立したコンテナで実行されるため、タスク間の分離が確保されます。同時に、後述するリソース分離ソリューションにより、オンラインスケジューリングタスクに必要なリソースに優先順位を付けることができます。 タスク スケジューリング実行の一般的なプロセスは次のとおりです。 タスク スケジューリングが実行される際の Kubernetes 上のリソース オーケストレーション ファイル (詳細は簡略化されています):
権限制御 コンテナ化された開発環境が構成され、起動されると、ユーザーは SSH ログイン、CodeServer、または JupyterLab を通じてそれを使用できるようになります。 GoblinLabでは、コンテナ化された開発環境が他人に利用されることを防ぐために、メソッドごとに統一されたキーを設定し、起動のたびにキーをランダムに生成します。 1. パスワードをランダムに生成する 2. アカウントパスワード(SSHログインパスワード)を設定する
3. コードサーバーのパスワードを設定する (VSCode)
4. Jupyter Labのパスワードを設定する
データの永続性 Kubernetes コンテナでは、特に設定しない限り、コンテナ内のデータは保持されません。つまり、コンテナが削除または再起動されると、データが失われます。対応するソリューションは比較的簡単です。永続化する必要があるディレクトリの外部ストレージをマウントするだけです。 GoblinLab では、デフォルトの外部ストレージ PVC がユーザーごとに自動的に作成され、コンテナの /root ディレクトリにマウントされます。さらに、ユーザーは外部ストレージのマウントをカスタマイズすることもできます。 自動的に作成される PVC に加えて、ユーザーは独自の PVC を作成し、作成した PVC を読み取り専用モードまたは読み取り/書き込みモードで他のユーザーと共有することもできます。 さらに、PVC 内のデータも Goblinlab 上で管理できます。 サービス露出 Kubernetes クラスター内に作成されたサービスには、クラスター外部から直接アクセスすることはできません。GoblinLab は、Nginx Ingress + Gateway を使用して、クラスター内のサービスにアクセスし、外部に公開します。 コンテナ化された開発環境のサービス リソース オーケストレーション ファイルは次のとおりです (詳細は簡略化されています)。
ユーザーがコンテナ化された開発環境を起動するたびに、GoblinLab はインターフェースを通じて Nginx Ingress 構成を自動的に変更し、ユーザーが使用できるようにサービスを公開します。Ingress 転送構成は次のとおりです。
リソース管理 リソースの使用率を向上させるために、GoblinLab の基盤となる Kubernetes のリソースは基本的に共有方式で使用され、一定の割合で過剰に販売されます。ただし、複数のチームが固定の総リソース量を持つクラスターを共有する場合は、各チームがリソースを公平に共有できるように、リソースを管理および制御する必要があります。 Kubernetes では、リソース クォータがこの問題を解決するためのツールとなります。現在、GoblinLab が管理する必要があるリソースには、主に CPU、メモリ、GPU、ストレージが含まれます。プラットフォームは、各チームの実際のニーズを考慮した上で、リソースを複数のキュー(Kubernetes での概念は名前空間)に分割し、各チームに提供します。
クラスターでは、最も一般的なリソースは CPU とメモリです。これらは過剰販売 (オーバーコミット) される可能性があるため、制限とリクエストの 2 つのクォータ制限があります。また、その他のリソースは拡張型であり、オーバーコミットが許可されていないため、リクエストのクォータのみが制限されます。パラメータの説明:
クォータで制御できるリソースはCPU、メモリ、ストレージ、GPUだけではありません。他の種類については公式ドキュメントを参照してください: https://kubernetes.io/docs/con ... otas/ リソースの分離 GoblinLab のリソース分離とは、GPU マシン リソースの分離やオンライン タスクとテスト タスクの分離など、同じ Kubernetes クラスター内のスケジュール レベルでのリソースの相対的な分離を指します。 GPUマシンリソースの分離Kubernetes クラスターでは、GPU マシンのリソースは CPU マシンよりも貴重です。そのため、GPU の使用率を向上させるために、CPU タスクを GPU マシンにスケジュールすることは禁止されています。 GPU ノードの汚染設定: GPU ノードでの一般的なタスクのスケジュールを禁止する
汚染効果のオプション構成:
GPUタスク設定許容範囲(Toleration):GPUタスクをGPUノードでスケジュールできるようにする
オンラインタスクとテストタスクの分離 オンラインタスクとテストタスク(GolbinLab におけるオンラインタスクとテストタスクは、定期的なスケジュールタスクと開発およびテストタスクを指す、ビジネスレベルで定義されます)は同じ Kubernetes クラスターを使用しますが、オンラインタスクのリソースを保護するために、一部のマシンノードはオンラインタスク専用のリソースプールとして特別に設定されます。オンライン タスクが実行されると、最初にオンライン ノードでスケジュールされます。オンライン リソース プールにリソースがない場合は、非オンライン ノードでスケジュールすることもできます。 オンライン リソース プール ノードを汚染する: オンライン リソース プールでの一般的なタスク スケジュールを禁止する
オンラインタスクに許容範囲を追加: オンラインタスクをオンラインリソースプールにスケジュールできるようにしますが、オンラインリソースプールにスケジュールする必要はありません。
オンライン リソース プール内のマシン ノードのラベルを設定し、オンライン タスクのノード アフィニティを設定します。オンライン リソース プール内のオンライン タスクのスケジュールを優先しますが、オンライン リソース プールにリソースがない場合は、他のノードでスケジュールすることもできます。 オンライン リソース プール内のノードにはラベルが付けられます。便宜上、ラベルの名前はテイントと同じになります。
オンラインタスクのノードアフィニティを設定する: オンラインタスクはオンラインリソースプールで最初にスケジュールされます
現在、ノード アフィニティには次の戦略があります。公式ドキュメントの「affinity-and-anti-affinity」を参照してください。
ポリシーが有効になった後の効果は、次の図に示されています。オンライン タスクは、最初にオンライン リソース プール ノードで実行されますが、オンライン リソース プールにアイドル リソースがない場合、オンライン タスク Job5 は通常のノードのリソースも使用できます。 中間結果現在までに、音楽機械学習プラットフォーム (GoblinLab) はコンテナ化の実験をしばらく行っており、いくつかの初期結果を達成しています。 クラスター構築 現在の音楽データプラットフォームのKubernetesは、試行期間を経て、ますます多くのビジネスとKubernetesベースのビッグデータコンピューティングプラットフォーム(Flinkなど)の実装があり、今後は大量のCPUリソースが追加され、その安定性が比較的大きな課題になります。 ユーザーの使用
タスク開発
コンテナ化の利点 アルゴリズム担当者にとって、物理マシンから機械学習プラットフォームによって提供されるコンテナ化された環境に移行すると、次のようなメリットが得られます。
その後の計画現在、音楽機械学習プラットフォームは、コンテナ化された開発のための完全な基本機能を提供できます。クラスターのリソース使用率をさらに向上させ、運用と保守の効率を高めるために、その後の最適化計画は、リソーススケジューリング戦略の最適化(プリエンプションなど)、より豊富なリソース監視、およびその他の側面から始まり、さらなる最適化が図られます。 著者: 王俊正、NetEase Cloud Music、データインテリジェンス部門、データプラットフォームグループ |
>>: 2020 年の最もクールな機械学習スタートアップ 12 社
[[417589]]パイソン[[417590]] Python は現在、機械学習で最も人気のあるプ...
2019年7月26日、人工知能企業Daguan Dataは北京で「大道知建」をテーマにした製品発表...
[[263447]]人工知能技術の継続的な導入は、新たな産業発展の中核的な原動力となり、さまざまな...
ちょうど今、IBM は量子コンピューティングの新たなマイルストーンに到達し、現時点での最高量子ボリュ...
私たちは、日常の習慣から抜け出し、長い間待ち望まれていた自分自身を変えるために、ちょっとしたモチベー...
「ネットワーク全体」を使い果たすと、生成 AI はすぐにデータを使い果たします。最近、カリフォルニア...
太平洋標準時3月18日午後10時、米国アリゾナ州で、ウーバーが路上試験中に自転車に乗った女性と衝突し...
目が覚めると、「アメリカフォーラム」Redditの8,000以上のサブエリアのうち7,000以上が消...
私たちの多くは、毎日たくさんのファイルを処理する必要があります。新しい文書を受け取ったとき、通常は、...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
序文多くの人は、BitMap は文字通りビットマップを意味すると考えています。実際、より正確には、ビ...
[51CTO.com からのオリジナル記事] 今週の土曜日、Ascend Academy Tech...
1. 機械学習プラットフォームまず、Du Xiaomanの機械学習プラットフォームの背景、開発プロセ...
2020年、マイクロソフトはOpenAIと合意に達し、MicrosoftはGPT-3のソースコードに...