序文 大規模なデータセットでトレーニングされた最新のニューラル ネットワーク アーキテクチャは、画像認識や自然言語処理から不正検出や推奨システムまで、さまざまな領域にわたって優れた結果を達成できます。しかし、これらのニューラル ネットワーク モデルのトレーニングには、大量の浮動小数点計算能力が必要です。近年、GPU ハードウェアの計算能力とトレーニング方法が大幅に進歩したにもかかわらず、単一のマシン上でネットワークをトレーニングするために必要な時間は、依然として非現実的に長いのが実情です。したがって、ニューラル ネットワーク トレーニング システムの浮動小数点計算機能を向上させるには、分散 GPU 環境を使用する必要があります。 TensorFlow 分散トレーニング TensorFlow はデータフローパラダイムを採用し、ノードとエッジの有向グラフを使用して計算を表します。 TensorFlow では、ユーザーはこのようなシンボリック計算グラフを静的に宣言し、書き換えとパーティショニングを使用してそれらをマシンに分散して分散実行する必要があります。 TensorFlow での分散機械学習トレーニングでは、図に示すパラメータ サーバー アプローチが使用されます。 クラスター、ジョブ、タスク TensorFlow の分散トレーニングに関して、主な概念としては Cluster、Job、Task があり、それらの関係は次のとおりです。
TensorFlow 分散コンピューティング モード グラフ内モード グラフモードでは、モデルの計算グラフのさまざまな部分が異なるマシンで実行されます。コンピューティングは、複数の GPU を備えた単一のマシンから、複数の GPU を備えた複数のマシンに拡張されましたが、データの分散は依然として 1 つのノード上にあります。この構成は簡単です。複数のマシンと複数の GPU のコンピューティング ノードは、結合操作を実行し、タスクを受け入れるために外部へのネットワーク インターフェイスを提供するだけで済みます。トレーニング データの分散は依然として 1 つのノード上にあります。トレーニング データを異なるマシンに分散すると、同時トレーニングの速度に影響します。このモードは、大規模なデータのトレーニングには推奨されません。 グラフ間モード Between-graph モードでは、データが並列化され、各マシンはまったく同じ計算グラフを使用します。トレーニング パラメータはパラメータ サーバーに保存されます。データを配布する必要はありません。データは各コンピューティング ノードに分散されます。各コンピューティングノードは独自に計算を行い、更新するパラメータをパラメータサーバーに通知して更新します。このモードではトレーニング データの配布は不要であるため、データ量が TB レベルの場合に多くの時間を節約できます。現在主流の分散トレーニングモードは主に Between-graph です。 パラメータ更新方法 同期更新 並列計算に使用される各ノードは、独自のバッチを計算した後、勾配値を取得し、その勾配値を PS パラメータ サービス マシンに送信し、PS がモデル パラメータを更新するのを待機します。 PS パラメータ サーバーは、一定数のコンピューティング ノードの勾配を収集した後、平均勾配を計算し、PS パラメータ サーバー上のパラメータを更新し、各ワーカー ノードにパラメータをプッシュします。 非同期更新 PS パラメータ サーバーは、他のマシンを待たずに、1 台のマシンの勾配値を受信するとすぐにパラメータを直接更新します。この反復方法は、マシン A が PS パラメータ サーバーでパラメータを計算して更新するときに、マシン B が前回の反復からの古いパラメータ値をまだ使用している可能性があるため、比較的不安定です。 分散トレーニング手順 1. コマンドラインパラメータを解析して、クラスタ情報 ps_hosts と worker_hosts、および現在のノードのロール情報 job_name と task_index を取得します。 2. 現在のタスクノードのサーバーを作成する
3. 現在のノードがパラメータ サーバーの場合は、server.join() を呼び出して無限に待機します。ワーカーの場合は次のステップを実行する
4. 次に、トレーニングするモデルを構築します
5. モデルのトレーニングプロセスを管理するための tf.train.Supervisor を作成する
UAI Train 分散トレーニング展開 UCloud AI トレーニング サービス (UCloud AI Train) は、AI トレーニング タスク用の大規模分散コンピューティング プラットフォームです。高性能 GPU コンピューティング ノードに基づくワンストップ管理 AI トレーニング タスク サービスを提供します。 AI トレーニング タスクを送信した後、ユーザーはコンピューティング ノードのスケジュール設定、トレーニング環境の準備、データのアップロードとダウンロード、災害復旧について心配する必要がなくなります。 現在、UAI Train プラットフォームは、TensorFlow および MXNet フレームワークの分散トレーニングをサポートしています。 PS コードと Worker コードは同じコード エントリに実装する必要があります。実行中、PS と Worker は同じ Docker コンテナ イメージと同じ Python コード エントリを使用して実行され、システムは PS と Worker の env 環境パラメータを自動的に生成します。 TensorFlow 分散トレーニングは PS-Worker 分散形式を使用し、分散トレーニングを実行するための Python インターフェースを提供します。 UCloud AI Train 分散トレーニングは、パラメータ サーバーとワーカー サーバーのハイブリッド展開方式を採用しており、すべてのコンピューティング ノードは GPU 物理クラウド ホストで構成されています。 PS は計算に CPU のみを使用しますが、ワーカー サーバーは計算に GPU と CPU の両方を使用します。 PSとWorkerの比率は1:1です。 データストレージ 分散トレーニングで使用される入力データと出力データは、異なるデータ ソースから取得される場合があります。現在、UAI Train はデータ ストレージとして UFS のみをサポートしています。 入力データの保存 入力データ ソースとして UFS ネットワーク ディスクを指定します。トレーニング プロセス中、UAI Train プラットフォームは、対応する UFS データを、トレーニングが実行される Worker コンテナの /data/data ディレクトリにマップします。システムは、ip:/xxx/data/imagenet/tf → /data/data/ のように、実行されたコンテナにデータを自動的にマッピングします。 出力データの保存 出力データ ソースとして UFS ネットワーク ディスクを指定します。トレーニング プロセス中、UAI Train プラットフォームは、対応する UFS データを各 PS コンテナーと Worker コンテナーの /data/output ディレクトリにマッピングしてトレーニングを実行し、同じデータに共有形式でアクセスします。同時に、トレーニング プロセス中に、他のクラウド ホストを通じてトレーニングによって保存されたモデル チェックポイントにリアルタイムでアクセスできます。 ケーススタディ: CIFAR-10 による画像認識 CIFAR-10 は機械学習における一般的な画像認識データセットです。データセットには 60,000 枚のカラー画像が含まれており、10 のカテゴリに分かれており、各カテゴリには 6,000 枚の画像が含まれています。トレーニング用に 50,000 枚、テスト用に 10,000 枚の画像があります。 http://groups.csail.mit.edu/vision/TinyImages/ トレーニングコードを調整する UAI プラットフォームでトレーニングするには、まずソース コードをダウンロードし、cifar10_main.py に次の変更を加えます。 1. 関連するパラメータを追加します: --data_dir、--output_dir、--work_dir、--log_dir、--num_gpus。 UAI Train プラットフォームはこれらのパラメータを自動的に生成します。 2. コードに UAI パラメータを追加します。入力フォルダーを構成するには data_dir を使用し、出力フォルダーを構成するには output_dir を使用します。 具体的なケースコードは https://github.com/ucloud/uai-sdk/tree/master/examples/tensorflow/train/cifar から入手できます。 UAI Trainプラットフォームでトレーニングを実行する 1. https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10_estimator の指示に従って CIFAR-10 tfrecords を生成します。 2. UAI-SDK が提供する tf_tools.py を使用して、CIFAR-10 サンプルの Docker イメージを生成します。 3. Docker イメージが UHub にアップロードされ、UAI Train プラットフォームで実行されていることを確認します。
UAIプラットフォームでの分散トレーニング CIFAR-10 サンプル コードでは tf.estimator.Estimator API が使用されており、分散環境と分散環境構成だけで直接分散トレーニングを行うことができます。この構成は tf.estimator.Estimator API の標準である必要があります。つまり、TF_CONFIG 構成を定義します。
UAI Train プラットフォームの分散トレーニング機能は、TensorFlow 分散トレーニング用の GPU クラスター環境を自動生成し、各トレーニング ノードの TF_CONFIG を自動生成することができます。したがって、UAI Train プラットフォームで CIFAR-10 の分散トレーニングを実行することは、単一マシンのトレーニングと同じです。入力/出力の UFS アドレスを指定して、次の命令を実行するだけです。
要約する UAI Train TensorFlow の分散トレーニング環境は、データ交換にデフォルトの grpc プロトコルを使用する TensorFlow の分散トレーニング システムの実装に基づいています。 PS と Worker はハイブリッド方式で展開されます。 PS は純粋な CPU コンピューティングを使用し、Worker は GPU + CPU コンピューティングを使用します。 UAI Train プラットフォームでは分散コンピューティングを非常に便利に実行できるため、効率が向上し、トレーニング時間が短縮されます。最後に、この記事では、CIFAR-10 ケースを使用して、UAI Train プラットフォームでのトレーニングに必要な変更を分析し、UAI Train プラットフォームで分散トレーニングを実行します。 |
>>: ハイパーコンバージェンスが後半に突入:クラウドコンピューティングのソフトウェアとハードウェアの統合配信
百度の年次総会で、ロビン・リー氏は2012年の百度の業績を総括し、2012年は百度にとって最も困難な...
このような問題に遭遇することはよくあります。サイトを最適化するために一生懸命努力すると、すべてが非常...
もう1年が終わりました。2018年の国内電子商取引市場を振り返ると、前年と比べて大きな変化が起こって...
この記事は、CodiLime のエンジニアリング ディレクターである Krzysztof Kajko...
前回の記事では、分散ランタイム Dapr の使い方を紹介しました。この例では、状態ストレージ機能が ...
仮想化技術はますます広く使用されるようになっています。国内の仮想化市場においては、5年間で売上が2桁...
「大規模」なウェブサイトとは、業界内で一定の地位を持つウェブサイトです。そのようなウェブサイトには、...
かつて、SEO の世界でよく言われていた格言に、「コンテンツは王様、外部リンクは女王様」というものが...
国内SEO市場の拡大と各業界間の熾烈な競争により、SEO実践者は大きな課題に直面しています。最近、フ...
周知のとおり、SEO はウェブサイトの運用と保守の手段であり、その費用対効果の高さから多くの運用と保...
過去数年間、業界ではクラウドネイティブ テクノロジーの採用が急激に増加しました。コンテナと Kube...
2012年、世界は終わらず、人生は続いていきます。毎年年初には、多くの友人がキャリアにおけるさまざま...
Google 検索では通常、句読点や一部の数学記号は無視されますが、最近検索アルゴリズムが変更され、...
昔、ニュートンという人がいました。彼は、リンゴが木から落ちるのは地球の重力のせいだと言いました。また...
香港VPSを使いたいが、これ以上お金をかけたくないという人には、gestiondbi.comの香港N...