UAI Trainプラットフォームに基づく分散トレーニング

UAI Trainプラットフォームに基づく分散トレーニング

序文

大規模なデータセットでトレーニングされた最新のニューラル ネットワーク アーキテクチャは、画像認識や自然言語処理から不正検出や推奨システムまで、さまざまな領域にわたって優れた結果を達成できます。しかし、これらのニューラル ネットワーク モデルのトレーニングには、大量の浮動小数点計算能力が必要です。近年、GPU ハードウェアの計算能力とトレーニング方法が大幅に進歩したにもかかわらず、単一のマシン上でネットワークをトレーニングするために必要な時間は、依然として非現実的に長いのが実情です。したがって、ニューラル ネットワーク トレーニング システムの浮動小数点計算機能を向上させるには、分散 GPU 環境を使用する必要があります。

TensorFlow 分散トレーニング

TensorFlow はデータフローパラダイムを採用し、ノードとエッジの有向グラフを使用して計算を表します。 TensorFlow では、ユーザーはこのようなシンボリック計算グラフを静的に宣言し、書き換えとパーティショニングを使用してそれらをマシンに分散して分散実行する必要があります。

TensorFlow での分散機械学習トレーニングでは、図に示すパラメータ サーバー アプローチが使用されます。

クラスター、ジョブ、タスク

TensorFlow の分散トレーニングに関して、主な概念としては Cluster、Job、Task があり、それらの関係は次のとおりです。

  • TensorFlow 分散クラスターは複数のタスクで構成され、各タスクはクラスターの個別のノードである tf.train.Server インスタンスに対応します。
  • 同じ機能を持つ複数のタスクを 1 つのジョブにグループ化できます。分散型ディープラーニング フレームワークでは、通常、ジョブをパラメーター サーバーおよびワーカーに分割します。パラメーター ジョブはパラメーターの保存と更新を管理しますが、ワーカー ジョブは OP を実行し、コンピューティング ノードとして計算集約型のグラフ計算のみを実行します。
  • クラスター内のタスクは相互に通信して、状態の同期やパラメータの更新などの操作を実行します。パラメータの数が多すぎて 1 台のマシンで処理できない場合は、複数のタスクが必要になります。

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. 現在のタスクノードのサーバーを作成する

  1. クラスター = tf.train.ClusterSpec({ "ps" : ps_hosts, "worker" : worker_hosts})
  2.  
  3. server = tf.train.Server(cluster、job_name=FLAGS.job_name、task_index=FLAGS.task_index) です。

3. 現在のノードがパラメータ サーバーの場合は、server.join() を呼び出して無限に待機します。ワーカーの場合は次のステップを実行する

  1. FLAGS.job_name == "ps"の場合:
  2.  
  3. server.join ()関数

4. 次に、トレーニングするモデルを構築します

  1. # テンソルフローグラフモデルを構築する

5. モデルのトレーニングプロセスを管理するための tf.train.Supervisor を作成する

  1. #トレーニング プロセスを監督するスーパーバイザー」を作成します
  2. sv = tf.train.Supervisor(is_chief=(FLAGS.task_index == 0), logdir= "/tmp/train_logs" )
  3. # スーパーバイザはセッションの初期化チェックポイントからの復元を処理します
  4. sess = sv.prepare_or_wait_for_session(server.target)
  5. # スーパーバイザがシャットダウンするまでループする
  6. sv.should_stop()ではないとき
  7. # 列車モデル

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 プラットフォームで実行されていることを確認します。

  1. /data/cifar10_main.py --トレーニングバッチサイズ=16  

UAIプラットフォームでの分散トレーニング

CIFAR-10 サンプル コードでは tf.estimator.Estimator API が使用されており、分散環境と分散環境構成だけで直接分散トレーニングを行うことができます。この構成は tf.estimator.Estimator API の標準である必要があります。つまり、TF_CONFIG 構成を定義します。

  1. TF_CONFIG = {
  2. 「クラスター」 : {
  3. "マスター" :[ "ip0:2222" ],
  4. "ps" :[ "ip0:2223" , "ip1:2223" ],
  5. "ワーカー" :[ "ip1:2222" ]},
  6. 「タスク」 :{ 「タイプ」 : 「ワーカー」 「インデックス」 :0},
  7. 「環境」 「クラウド」  
  8. }

UAI Train プラットフォームの分散トレーニング機能は、TensorFlow 分散トレーニング用の GPU クラスター環境を自動生成し、各トレーニング ノードの TF_CONFIG を自動生成することができます。したがって、UAI Train プラットフォームで CIFAR-10 の分散トレーニングを実行することは、単一マシンのトレーニングと同じです。入力/出力の UFS アドレスを指定して、次の命令を実行するだけです。

  1. /data/cifar10_main.py --トレーニングバッチサイズ=16  

要約する

UAI Train TensorFlow の分散トレーニング環境は、データ交換にデフォルトの grpc プロトコルを使用する TensorFlow の分散トレーニング システムの実装に基づいています。 PS と Worker はハイブリッド方式で展開されます。 PS は純粋な CPU コンピューティングを使用し、Worker は GPU + CPU コンピューティングを使用します。

UAI Train プラットフォームでは分散コンピューティングを非常に便利に実行できるため、効率が向上し、トレーニング時間が短縮されます。最後に、この記事では、CIFAR-10 ケースを使用して、UAI Train プラットフォームでのトレーニングに必要な変更を分析し、UAI Train プラットフォームで分散トレーニングを実行します。

<<:  データ流通の鍵となる技術の研究

>>:  ハイパーコンバージェンスが後半に突入:クラウドコンピューティングのソフトウェアとハ​​ードウェアの統合配信

推薦する

効果的なクラウドコンピューティングコスト管理戦略を実装する方法

[[266338]]現在、企業のワークロードはオンプレミスよりもクラウドで実行する方がコスト効率が高...

競合他社をうまく扱い、SEOの旅を成功させましょう

当社の SEO の主な目的は、検索エンジンから指定されたキーワードのトラフィックを獲得し、目標を達成...

料金が高ければ高いほど、顧客は満足します。別の視点から価格設定を見てみましょう。

この記事は、2012 年 9 月 21 日にパトリックが自身のブログで公開したものです。会話の音声版...

興味深いブラックハットSEOテクニックの紹介

蔡蔡はブラックハットSEO技術を推奨したことはありませんが、それでも注目しています。実際、ブラックハ...

extravm: 米国無制限トラフィック VPS (帯域幅: 10G 入力/1G 出力)、100G 高防御、33% 割引、月額 3.7 ドル、1G メモリ/1 コア (Ryzen9)/15g NVMe

Extravm は、米国東海岸のニュージャージー州ピスカタウェイに新しい米国データセンター - VP...

世界のパブリッククラウドサービスの市場価値は2019年に2,334億ドルに達する

インターナショナル・データ・コーポレーション(IDC)のデータによると、2019年、インフラストラク...

質問: 市場には垂直型電子商取引の機会がどれだけ残されていますか?

近年の垂直電子商取引業界の業績は期待外れと言える。特に2013年は垂直電子商取引が疑わしい時期だった...

Web ページ コードの最適化: 10 年間の努力の結晶!

今日は、私が長年かけてまとめてきた Web コード最適化の真の原則を皆さんと共有したいと思います。な...

コンテンツは依然として王様です。企業ウェブサイトのコンテンツ構築についてお話ししましょう。

電子商取引の発展に伴い、自社のウェブサイトを持つ企業が増えていますが、インターネット上の企業ウェブサ...

Baidu がコンテンツページをインデックスできない主な 4 つの要因の簡単な分析

今日では、ウェブサイトの主なトラフィックがさまざまなロングテールキーワードの集合から発生することを、...

「海天盛宴」の孫静亜の事件から通信セキュリティを考察

CCTVのニュースは最近、警察が「海天生宴」の周辺少女である孫静亜のネット売春事件を摘発したと報じた...

クラウドでビジネスを変革する方法

過去 1 年間でよく耳にした流行語の 1 つは「変革」です。 「IT 変革」、「デジタル変革」、「変...

企業マイクロブログの運用方法:擬人化運用は実在の人間ほど良くない

企業はWeiboの公式アカウントを運営する際に、それを単なるオンライン顧客サービスホットラインとして...

Huobi.comは、18日までにICBCの口座を解約するよう求める通知を受けたと発表した。

さらに読む:国内ビットコイン取引ネットワークBtcTradeは、銀行が15日前に口座を閉鎖するよう同...