序文 大規模なデータセットでトレーニングされた最新のニューラル ネットワーク アーキテクチャは、画像認識や自然言語処理から不正検出や推奨システムまで、さまざまな領域にわたって優れた結果を達成できます。しかし、これらのニューラル ネットワーク モデルのトレーニングには、大量の浮動小数点計算能力が必要です。近年、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 とワーカーの比率は 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 プラットフォームで分散トレーニングを実行します。 |
>>: TIC 2018で人工知能が熱く議論され、AIが応用段階に突入
企業がビッグデータを活用するには、データ サイエンティストと開発者がデータを準備して整理し、アナリス...
[[209375]]単一画像の超解像度では、品質の低下を最小限に抑えながら小さな画像のサイズを拡大...
Tinygrad は、ニューラル ネットワークを理解して実装するためのシンプルで直感的なアプローチ...
[[436583]] [51CTO.com クイック翻訳]人工知能という用語は、20 世紀半ばに生ま...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
2 台のプロトタイプ組み立てロボットが稼働しており、ボクセルと呼ばれる一連の小さなユニットを組み立...
車線は高レベルのセマンティクスを備えた交通標識であり、視覚ナビゲーション システムでは特に重要です。...
顔認識技術がさまざまな分野で持つ大きな可能性は、ほとんど想像できないほどです。ただし、最も洗練された...
Googleは2021年末にPixel 6シリーズの携帯電話をリリースした際、携帯電話に心拍数モニ...
ディープ畳み込みニューラル ネットワーク (CNN) は、さまざまな競合ベンチマークで最先端の結果を...
1. マルチモーダル大規模モデルの歴史的発展上の写真は、1956年にアメリカのダートマス大学で開催さ...
[[393199]]画像提供:ロイター/セルジオ・ペレスエマニュエル・ラガリグシュナイダーエレクトリ...
統計によると、人間が得る情報の 83% は目から得られます。目が「心の窓」と考えられているのも不思議...
海外メディアの報道によると、Facebook(現在はMetaに改名)は、ARとAIアシスタンスをサポ...