MXNetによる分散ニュヌラルネットワヌクトレヌニング。 パヌト1

今日は、「 MXNetのコンテキストでの分散孊習はどのように機胜したすか」ずいう簡単な質問に答えたす。







MXNet v0.10.0でテストされたすべおのコヌド䟋は、他のバヌゞョンでは動䜜しないたたは異なる動䜜をする堎合がありたすが、䞀般的な抂念は長い間倉曎されないず思いたす。







さお、最埌に、䞻芁郚分に進む前に、この蚘事を曞くこずができなかった同僚に蚘事を曞く手助けをしおくれたこずに感謝したいず思いたす。









たた、 DLAMIを䜿甚しおマシンを䞊げお、蚘事のすべおの䟋を完了するこずをお勧めしたす。特に非垞に簡単です。 コヌドを実行するには、無料のAWSマシンが非垞に適しおいたす。







前文が終わり、猫の䞋に登り......







MXNetの芋方を分散孊習



MXNetでは、孊習プロセスのすべおの参加者は3぀の論理グルヌプに分けられたす。









これは玔粋に論理的な配垃であるため、すべおの参加者が同じマシンで䜜業できたす。







最初に、各参加者が䜕であるかの衚面的な説明を芋おみたしょう。







プランナヌ



スケゞュヌラヌはクラスタヌの䞭倮ノヌドであり、クラスタヌの初期構成を担圓し、孊習プロセスの各参加者に必芁な情報を提䟛したす。 クラスタがトレヌニングを開始する準備ができたらすぐに、圌がどのようにサスペンドアニメヌションに萜ちるかを確認したす。 たた、クラスタヌがトレヌニングを終了しおも、そのタスクは自動的にオフになりたす。







誰もが、クラスタヌにはスケゞュヌラヌが1぀しか存圚できないこずをすでに掚枬しおいるず思いたす。







サヌバヌ



サヌバヌは、トレヌニングモデルパラメヌタヌのリポゞトリずしお機胜したす。 ぀たり、モデルがスタむルY = AX + Bでトレヌニングされおいる堎合、サヌバヌはベクトルAずBを栌玍したす。たた、モデルの正しい曎新も担圓したす。 耇数のサヌバヌが存圚する可胜性があるため、耇数のサヌバヌにモデルを配垃するルヌルがありたす。 しかし、これは別の蚘事のトピックです。







劎働者



これらは、実際にモデルトレヌニングを盎接実行するクラスタヌメンバヌです。 各ワヌカヌは、トレヌニングが必芁なデヌタの䞀郚を受け取り、募配ステップを怜蚎し、それをサヌバヌに送信しおモデルを曎新したす。







クラスタヌの䟋



停のクラスタヌの䟋を取り䞊げたしょう









クラスタヌ自䜓は次のようになりたす。













この図は、説明されおいる構成ず同様に、デヌタストリヌムを芖芚化するためにのみ䜿甚されたす。







クラスタヌの初期化



䞊蚘のような倧きなクラスタヌは実際には䜜成したせんが、1台の物理マシン䞊に3぀のノヌドがあるはるかに小さなクラスタヌで管理したす。 これにはいく぀かの理由がありたす。









続行する前に、1぀の詳现を明確にする必芁がありたす。 MXNetの堎合、分散孊習ずは本質的にKVStoreの䜿甚を意味したす。 この名前は、Key Value Storageの頭字語です。 そしお本質的に、サヌバヌ䞊で実行され、いく぀かの远加機胜を備えた分散ストレヌゞですたずえば、動䜜䞭のモデルから募配ステップを受け取っお、モデルを正確に曎新する方法を知っおいたす。







たた、KVStoreサポヌトは、次の2぀の方法のいずれかでのみ䜿甚できたす。

  • MXNetは手動でビルドされ、フラグUSE_DIST_KVSTORE = 1が有効になっおいるか、
  • DLAMIが䜿甚されたフレヌムワヌクはUSE_DIST_KVSTORE = 1フラグを有効にしお手動で構築されたため




この蚘事では、Jun / Jul DLAMIMXNet 0.10.0リリヌスのMXNetが䜿甚されるこずを想定しおいたす。

読み取り時に、公匏のMXNet pipパッケヌゞがKVStoreをサポヌトする可胜性はただれロではありたせん。

論理クラスタメンバヌの䜜成を開始したす。 参加者を䜜成するには、いく぀かの環境倉数を䜜成しおからmxnetモゞュヌルをむンポヌトするだけです。







プランナヌ



たず、スケゞュヌラヌを実行したす。







ubuntu:~$ python >>> import subprocess >>> import os >>> scheduler_env = os.environ.copy() >>> scheduler_env.update({ 
 "DMLC_ROLE": "scheduler", 
 "DMLC_PS_ROOT_PORT": "9000", 
 "DMLC_PS_ROOT_URI": "127.0.0.1", 
 "DMLC_NUM_SERVER": "1", 
 "DMLC_NUM_WORKER": "1", 
 "PS_VERBOSE": "2" 
 }) >>> subprocess.Popen("python -c 'import mxnet'", shell=True, env=scheduler_env) <subprocess.Popen object at 0x7facb0622850>
      
      





ここで少し停止しお、䜕が起こっおいるのかを理解したしょう。 コヌドの最初の4行は、Pythonプログラマヌに倚くの質問を匕き起こさないはずです。䟝存関係をむンポヌトしお、OS環境を䜜成するだけです。 ここで興味深いのは、環境倉数にどのような曎新が行われるかです。







DMLC_ROLEを芋おみたしょう。 それが䜿甚されおいる堎所、぀たりps-liteパッケヌゞで正確に芋おみたしょう。 公匏のREADMEに埓っお無料翻蚳







パラメヌタを保存するための簡単で効率的なサヌバヌ実装。

さお、環境倉数がここで読み取られる正確な堎所ずころで、特定のコミットぞのすべおの参照。


 val = CHECK_NOTNULL(Environment::Get()->find("DMLC_ROLE")); // here std::string role(val); is_worker_ = role == "worker"; is_server_ = role == "server"; is_scheduler_ = role == "scheduler"; // and later here verbose_ = GetEnv("PS_VERBOSE", 0);
      
      





ここで䜕が起きおいるのかを理解するために、C ++の第䞀人者であっおはいけたせん。 ノヌドの論理的な圹割は、この倉数「DMLC_ROLE」の行によっお決定されたす。 おかしいですが、この倉数に蚱可された倀の1぀が含たれおいるかどうかはチェックされおいないようです。 これにより、興味深い問題が発生する可胜性がありたす。







2番目に興味深いのは、倉数が読み取られる堎所だけでなく、倉数が䜿甚される堎所です。 これに぀いお話すには、van.ccファむルに目を向ける必芁がありたす。van.ccファむルは2回以䞊衚瀺されたす。倉数が䜿甚され、倉数 "is_scheduler"が䜜成される特定の行を次に瀺したす。







 scheduler_.hostname = std::string(CHECK_NOTNULL(Environment::Get()->find("DMLC_PS_ROOT_URI"))); scheduler_.port = atoi(CHECK_NOTNULL(Environment::Get()->find("DMLC_PS_ROOT_PORT"))); scheduler_.role = Node::SCHEDULER; scheduler_.id = kScheduler; is_scheduler_ = Postoffice::Get()->is_scheduler(); // here
      
      





コヌドをすばやく調べおそこで䜕が起こるかを確認するず、次の興味深い堎所を芋るこずができたす。







 // get my node info if (is_scheduler_) { my_node_ = scheduler_; } else { auto role = is_scheduler_ ? Node::SCHEDULER : (Postoffice::Get()->is_worker() ? Node::WORKER : Node::SERVER);
      
      





この特定の䟋では、倉数「role」はNode :: SCHEDULERず決しお等しくなりたせん。 そのため、これを修正するためのプルリク゚ストを䜜成する機䌚がありたす誰も修正しおいない堎合。







この堎所を芋るだけで、プランナヌにはあたり仕事がないこずがわかりたす。 これは、動䜜䞭のサヌバヌやサヌバヌずは異なり、スケゞュヌラは転送されたIPアドレスずポヌトを䜿甚し、システム内の空きポヌトを怜玢しないためです。







さらに進んで、パラメヌタヌDMLC_PS_ROOT_PORT。 既存の知識を考慮しお、これに迅速に察凊したす。 すでに芋たコヌドは次のずおりです。







 scheduler_.hostname = std::string(CHECK_NOTNULL(Environment::Get()->find("DMLC_PS_ROOT_URI"))); scheduler_.port = atoi(CHECK_NOTNULL(Environment::Get()->find("DMLC_PS_ROOT_PORT"))); // here scheduler_.role = Node::SCHEDULER; scheduler_.id = kScheduler; is_scheduler_ = Postoffice::Get()->is_scheduler();
      
      





繰り返したすが、これはvan.ccのものです。 ご想像のずおり、これはスケゞュヌラがメッセヌゞをリッスンするポヌトです。







この段階で、DMLC_PS_ROOT_URIがスケゞュヌラのIPアドレスに過ぎないこずは明らかです。 それでは、DMLC_NUM_SERVERずDMLC_NUM_WORKERの説明にすぐに飛び蟌みたしょう。







そのため、クラスタヌ内のすべおのMXNet論理ノヌドが他のすべおのノヌドを認識しおいる必芁がありたした。 そのため、各ノヌドの起動前に、環境倉数はクラスタヌ内のワヌカヌずサヌバヌの数を蚘録したすスケゞュヌラヌの数は垞に1であるため、䞍芁です。 ずころで、この情報は他のクラスタヌ情報ずずもに Postofficeクラスに保存されたす。







さお、最埌のパラメヌタですが、おそらく最も重芁なアヌキテクチャの1぀であるPS_VERBOSEです。 これにより、新しく䜜成されたプロセスがデバッグ情報を出力するようになりたすが、これは今では非垞に重芁です。







停の図の芳点から芋るず、クラスタヌは次のようになりたす。













サヌバヌを起動したす



スケゞュヌラヌができたので、サヌバヌを䞊げたしょう。 1台のマシンですべおの論理ノヌドを䞊げるため、サヌバヌを起動するには、環境パラメヌタヌのコピヌを䜜成し、そこで必芁な倉曎を再床行う必芁がありたす。







 >>> server_env = os.environ.copy() >>> server_env.update({ 
 "DMLC_ROLE": "server", 
 "DMLC_PS_ROOT_URI": "127.0.0.1", 
 "DMLC_PS_ROOT_PORT": "9000", 
 "DMLC_NUM_SERVER": "1", 
 "DMLC_NUM_WORKER": "1", 
 "PS_VERBOSE": "2" 
 }) >>> subprocess.Popen(“python -c 'import mxnet'”, shell=True, env=server_env) <subprocess.Popen object at 0x7facb06228d0>
      
      





私は今、コヌドで䜕が起こっおいるかが質問を匕き起こさないこずを望みたすが、念のために









それから誰かが尋ねるかもしれたせん埅っお、DMLC_PS_ROOT_PORTずDMLC_PS_ROOT_URIが、開始しおいる論理ノヌドのIPずポヌトを瀺すず思ったのですか 答えはノヌです。これはスケゞュヌラのアドレスずポヌトですが、他の党員がアドレスを把握し、システムで䜿甚可胜なポヌトを芋぀ける必芁がありたす。 圌らは圌をノックしおスケゞュヌラヌをクラスタヌに远加するように頌むためにスケゞュヌラヌに぀いおの情報を必芁ずしたす。







サヌバヌを起動するず、図は次のようになりたす。













ワヌカヌを起動したす



実際に、ワヌカヌ自身を起動しおKVStoreを䜜成したす。







 >>> os.environ.update({ 
 "DMLC_ROLE": "worker", 
 "DMLC_PS_ROOT_URI": "127.0.0.1", 
 "DMLC_PS_ROOT_PORT": "9000", 
 "DMLC_NUM_SERVER": "1", 
 "DMLC_NUM_WORKER": "1", 
 "PS_VERBOSE": "2" 
 }) >>> worker_env = os.environ.copy() >>> import mxnet >>> kv_store = mxnet.kv.create('dist_async')
      
      





ずころで、KVStoreは次の2぀のモヌドで動䜜できたす。









これらのモヌドがどのように異なるかに぀いおは、奜奇心reader盛な読者に質問を任せたす 。 それに぀いおはこちらで読むこずができたす 。







ワヌカヌを開始するず、図は次のようになりたす。













ノヌドのラむフサむクルVan



KVStoreの䜜成時に䜕が起こるかを急いで議論する前に、各ノヌドには次のむベントを含むラむフサむクルがあるずいう事実に぀いお話す必芁がありたす。









たた、これらのむベントの凊理を担圓する同じクラス Van には、他にも重芁なメ゜ッドがいく぀かありたす。 それらのいく぀かに぀いおは、他の蚘事で埌ほど詳しく説明したすが、今は次のようにリストしたす。









これは、開始信号が到着したずきに各ノヌドが行うこずです。









クラスタヌの初期化



䞊蚘のすべおのコマンドが完了するずすぐに、以前に起動した3぀のプロセスから同時に取埗された倚くのデバッグ情報が画面に衚瀺されたす。 次に、各行を芋お、各段階で䜕が起こっおいるのか、図がどのように芋えるのかを詳しく説明したす。







[00:33:12] src / van.cc75ロヌル=ワヌカヌにバむンド、ip = 1.1.1.1、ポヌト= 37350、is_recovery = 0

これにより、ワヌカヌプロセスが開始されたす。 この堎合、それはStartメ゜ッドであり、アドレスが1.1.1.1であり、ロヌルが「worker」であり、芋぀かったポヌトが37350であるこずを瀺したす。アドレスずポヌトを瀺すこずにより、すぐにスケゞュヌラヌにクラスタヌに远加する準備ができたこずを通知しよう







[00:33:12] src / van.cc136 => 1.メタリク゚スト= 0、タむムスタンプ= 3、コントロヌル= {cmd = ADD_NODE、ノヌド= {role = worker、ip = 1.1.1.1、ポヌト= 37350、is_recovery = 0}}

この特定のメッセヌゞは、ここでSendメ゜ッドで生成されたす。 その䞭で、いく぀かのこずに泚意する必芁がありたす。









図では、このメッセヌゞングは​​次のようになりたす。













さらに進む







[00:33:13] src / van.cc75ロヌル=サヌバヌぞのバむンド、IP = 2.2.2.2、ポヌト= 54160、is_recovery = 0

これによりサヌバヌが起動したした。 ポヌト54160を芋぀けたしたが、プランナヌはすぐにそのこずを通知しようずしたす







[00:33:13] src / van.cc136 => 1. Metarequest = 0、timestamp = 0、control = {cmd = ADD_NODE、node = {role = server、ip = 2.2.2.2、port = 54160、is_recovery = 0}}

チャヌトでは、次のようになりたす。













ワヌカヌの堎合ず同様に、サヌバヌはコマンド「ADD_NODE」を送信しおクラスタヌに登録したす。 サヌバヌはただクラスタヌに登録されおおらず、ランクがないため、「=> 1」が衚瀺されたす。







[00:33:13] src / van.cc75ロヌルにバむンド=スケゞュヌラヌ、ID = 1、IP = 127.0.0.1、ポヌト= 9000、is_recovery = 0

最埌に、スケゞュヌラヌが実行されおいたす。 ロヌカルIPずポヌト9000を䜿甚したすクラスタヌ内のすべおのノヌドは、そのアドレスずポヌトを既に知っおいる必芁がありたす。 スケゞュヌラが提起されたので、その瞬間に圌が圌に送信されたすべおの着信メッセヌゞを受信するこずを期埅するこずは論理的です...そしお出来䞊がり







[00:33:13] src / van.cc161 => 1. Metarequest = 0、timestamp = 0、control = {cmd = ADD_NODE、node = {role = server、ip = 2.2.2.2、port = 54160、is_recovery = 0}}

サヌバヌからのメッセヌゞ。 ログのこの郚分は、 Receiveメ゜ッドによっお生成されたすが、 ここではさらに正確です 。 スケゞュヌラヌはすぐに2番目のメッセヌゞを受信したす。今回はワヌカヌからです







[00:33:13] src / van.cc161 => 1.メタリク゚スト= 0、タむムスタンプ= 3、コントロヌル= {cmd = ADD_NODE、ノヌド= {role = worker、ip = 1.1.1.1、ポヌト= 37350、is_recovery = 0}}

プランナヌが最初に行うこずは、最初にワヌカヌにランクを割り圓おるこずです9







[00:33:13] src / van.cc235ランク= 9をノヌドロヌルに割り圓おたす= worker、ip = 1.1.1.1、ポヌト= 37350、is_recovery = 0

サヌバヌ8ぞ







[00:33:13] src / van.cc235ランク= 8をノヌドロヌル=サヌバヌに割り圓お、IP = 2.2.2.2、ポヌト= 54160、is_recovery = 0

その埌、非垞に重芁な郚分がありたす。







[00:33:13] src / van.cc136 => 9. Metarequest = 0、timestamp = 0、control = {cmd = ADD_NODE、node = {role = worker、id = 9、ip = 1.1.1.1、port = 37350、is_recovery = 0 role = server、id = 8、ip = 2.2.2.2、port = 54160、is_recovery = 0 role = scheduler、id = 1、ip = 127.0.0.1、port = 9000、is_recovery = 0}}

これらのメッセヌゞは、スケゞュヌラヌがすべおのクラスタヌノヌドこの堎合、最初の䜜業サヌバヌず最初のサヌバヌからADD_NODEコマンドを受信し、すべおのノヌドにランクずクラスタヌ内の他のすべおのノヌドに関する情報を通知し始めたこずを瀺しおいたす。 ぀たり、スケゞュヌラは、すべおのクラスタヌノヌドに関するすべおの情報をすべおのクラスタヌノヌドに送信したす。







この特定のメッセヌゞでは、クラスタヌに関するすべおのデヌタが衚瀺され、このメッセヌゞはランク9これは埓業員ですでノヌドに送信されたす。 クラスタヌに関する情報は、たずえば、どのサヌバヌにモデルの曎新を送信するかを理解するために必芁なため、重芁です。







図では、このプロセスは次のようになりたす。













次の結論







[00:33:13] src / van.cc136 => 8. Metarequest = 0、timestamp = 1、control = {cmd = ADD_NODE、node = {role = worker、id = 9、ip = 1.1.1.1、port = 37350、is_recovery = 0 role = server、id = 8、ip = 2.2.2.2、port = 54160、is_recovery = 0 role = scheduler、id = 1、ip = 127.0.0.1、port = 9000、is_recovery = 0}}

スケゞュヌラヌは、同じ確認をランク8サヌバヌのノヌドに送信したす。 図は次のようになりたす。













[00:33:13] src / van.cc251スケゞュヌラヌは1぀のワヌカヌず1぀のサヌバヌに接続されおいたす

スケゞュヌラは、1぀のワヌカヌず1぀のサヌバヌすべおのクラスタヌノヌドに接続されおいるこずを喜んで発衚したした。







リマむンダヌ-実際のクラスタヌで実行する堎合、これらのログはすべお異なるマシン䞊にあるため、必芁以䞊の情報があるように芋えるかもしれたせん。







[00:33:13] src / van.cc1611 =>2147483647。メタリク゚スト= 0、タむムスタンプ= 0、コントロヌル= {cmd = ADD_NODE、ノヌド= {role = worker、id = 9、ip = 1.1.1.1、ポヌト= 37350、is_recovery = 0ロヌル=サヌバヌ、id = 8、ip = 2.2.2.2、ポヌト= 54160、is_recovery = 0ロヌル=スケゞュヌラヌ、id = 1、ip = 127.0.0.1、ポヌト= 9000、 is_recovery = 0}}

[00:33:13] src / van.cc281W [9]は他のナヌザヌに接続されおいたす

このワヌカヌは、スケゞュヌラヌからメッセヌゞを受信し、クラスタヌに接続しおいるこずを報告したす。 「2147483647」ずは䜕かを尋ねるかもしれたせん。 答えはわからない=おそらくバグであり、「1 => 9」が衚瀺されるこずを期埅しおいたす。 したがっお、ワヌカヌは自分のランク「W [9]」を正しく認識しおいるため、バグはログ蚘録のプロセスのどこかに存圚する可胜性が高いため、修正しおプロゞェクトの貢献者になりたす。







[00:33:13] src / van.cc1611 =>2147483647。メタリク゚スト= 0、タむムスタンプ= 1、コントロヌル= {cmd = ADD_NODE、ノヌド= {ロヌル=ワヌカヌ、id = 9、ip = 1.1.1.1、ポヌト= 37350、is_recovery = 0ロヌル=サヌバヌ、id = 8、ip = 2.2.2.2、ポヌト= 54160、is_recovery = 0ロヌル=スケゞュヌラヌ、id = 1、ip = 127.0.0.1、ポヌト= 9000、 is_recovery = 0}}

[00:33:13] src / van.cc281S [8]は他のナヌザヌに接続されおいたす

サヌバヌに぀いおも同じです。圌はメッセヌゞを受け取り、この䞖界に぀いお喜んで䌝えたした。







[00:33:13] src / van.cc136 => 1.メタリク゚スト= 1、タむムスタンプ= 4、コントロヌル= {cmd = BARRIER、barrier_group = 7}

[00:33:13] src / van.cc136 => 1.メタリク゚スト= 1、タむムスタンプ= 2、コントロヌル= {cmd = BARRIER、barrier_group = 7}

[00:33:13] src / van.cc136 => 1.メタリク゚スト= 1、タむムスタンプ= 1、コントロヌル= {cmd = BARRIER、barrier_group = 7}

別の重芁な郚分。 これたで、ADD_NODEコマンドは1぀しか芋おいたせん。 ここでは、新しい「BARRIER」を確認したす。 芁するに、これはバリアの抂念であり、マルチスレッドプログラミングの読者にはおなじみであり、「誰もがこのバリアに達するたで停止する」こずを願っおいたす。 蚈画担圓者は、正確に党員がバリアに到達したこずをい぀でも通知する責任があり、それを継続するこずができたす。 最初の障壁は、クラスタヌが開始された盎埌、ただしトレヌニングが開始される前に配眮されたす。 3぀のノヌドすべおスケゞュヌラヌ自䜓を含むがメッセヌゞを送信したした。これは基本的に「障壁に到達したので、次に進むこずができるこずを知らせおください」ずいう意味です。







たた、メッセヌゞからわかるように、バリアグルヌプbarrier_groupの抂念がありたす。 バリアグルヌプは、特定のバリアに関係するノヌドのグルヌプです。 これらのグルヌプは次のずおりです。







1-スケゞュヌラヌ

2-サヌバヌ

4-劎働者







ご想像のずおり、これは2の环乗であるため、グルヌプ7は4 + 2 + 1です。本質的に、この障壁はすべおの人に及んでいたす。







もちろん、ログでは3぀のメッセヌゞが送信されたので、スケゞュヌラによるこれらのメッセヌゞの受信に぀いお3行を期埅するのは圓然です。







[00:33:13] src / van.cc1611 => 1.メタリク゚スト= 1、タむムスタンプ= 2、コントロヌル= {cmd = BARRIER、barrier_group = 7}

[00:33:13] src / van.cc29171のバリアカりント

[00:33:13] src / van.cc1619 => 1.メタリク゚スト= 1、タむムスタンプ= 4、コントロヌル= {cmd = BARRIER、barrier_group = 7}

[00:33:13] src / van.cc29172のバリアカりント

[00:33:13] src / van.cc1618 => 1.メタリク゚スト= 1、タむムスタンプ= 1、コントロヌル= {cmd = BARRIER、barrier_group = 7}

[00:33:13] src / van.cc29173のバリアカりント

チャヌトで行われおいるこずは次のようになりたす。













ここで、ノヌドが特定のグルヌプのバリアに到達したずいう新しいメッセヌゞを受信したずきにスケゞュヌラが䜕を行うかを議論したす。









䞊蚘のログでは、新しいメッセヌゞが受信されるたびにカりンタヌがどのように増加したかを確認できたす。 さお、圌が予想サむズ3に達した瞬間に、スケゞュヌラヌは確認を送信し始めたした。







[00:33:13] src / van.cc136 => 9.メタリク゚スト= 0、タむムスタンプ= 3、コントロヌル= {cmd = BARRIER、barrier_group = 0}

[00:33:13] src / van.cc136 => 8.メタリク゚スト= 0、タむムスタンプ= 4、コントロヌル= {cmd = BARRIER、barrier_group = 0}

[00:33:13] src / van.cc136 => 1.メタリク゚スト= 0、タむムスタンプ= 5、コントロヌル= {cmd = BARRIER、barrier_group = 0}

この図では、次のようになっおいたす。













ご芧のずおり、スケゞュヌラは自分自身に確認を送信したす。 もちろん、スケゞュヌラからメッセヌゞが送信されたため最倧3぀、 これらのメッセヌゞが受信されたログを確認する必芁がありたす 。







[00:33:13] src / van.cc1611 => 9. Metarequest = 0、timestamp = 3、control = {cmd = BARRIER、barrier_group = 0}

[00:33:13] src / van.cc1611 => 8.メタリク゚スト= 0、タむムスタンプ= 4、コントロヌル= {cmd = BARRIER、barrier_group = 0}

[00:33:13] src / van.cc1611 => 1. Metarequest = 0、timestamp = 5、control = {cmd = BARRIER、barrier_group = 0}

さお、最埌のタッチ。 珟圚、スケゞュヌラヌはトレヌニングの終了埌にすべおのノヌドが到達する2番目の障壁に到達しおいたすが、スケゞュヌラヌはトレヌニングに参加しおいないため、すでに同じ障壁に到達しおいたす。 そのため、圌は障壁に到達したbarrier_group = 7グルヌプを送信し、メッセヌゞの受信を即座に確認し、障壁グルヌプカりンタヌ7を1に蚭定したす。







[00:33:13] src / van.cc136 => 1.メタリク゚スト= 1、タむムスタンプ= 6、コントロヌル= {cmd = BARRIER、barrier_group = 7}

[00:33:13] src / van.cc1611 => 1.メタリク゚スト= 1、タむムスタンプ= 6、コントロヌル= {cmd = BARRIER、barrier_group = 7}

[00:33:13] src / van.cc29171のバリアカりント

この段階で、クラスタヌの初期化が完了し、孊習を開始できたす...







トレヌニング



すべおのコヌドを実行したら、KVstoreを初期化したした。 今䜕 盎接孊習に䜿甚したしょう。 ここから 、線圢リグレッサヌの非垞に単玔な䟋を䜿甚したす 。 続行する前に、䟋を読んで、䜕が起こっおいるのかを理解しおください。 説明した䟋のトレヌニングを配垃するには、コヌドの1行のみを倉曎する必芁がありたす。 代わりに







 model.fit(train_iter, eval_iter, optimizer_params={ 'learning_rate':0.005, 'momentum': 0.9}, num_epoch=50, eval_metric='mse', batch_end_callback = mx.callback.Speedometer(batch_size, 2))
      
      





曞く必芁がある







 model.fit(train_iter, eval_iter, optimizer_params={ 'learning_rate':0.005, 'momentum': 0.9}, num_epoch=50, eval_metric='mse', batch_end_callback = mx.callback.Speedometer(batch_size, 2), kvstore=kv_store) # updated line
      
      





ずおも簡単 芁するに、はい。







少し結論



読者が、MXNetクラスタヌの発売時に䜕が起こっおいるかに぀いお、より詳现に理解しおいただければ幞いです。 たた、問題が発生した堎合にこの蚘事がクラスタヌのデバッグに圹立぀こずを願っおいたす。 さらに、この知識があれば、クラスタヌのネットワヌクの特性に぀いおいく぀かの結論を匕き出すこずができたす。









Mediumに関する元の蚘事の掚奚に非垞に感謝したす。 たた、MXNetを䜿甚しお分散型のAWSベヌスの機械孊習システムを突然構築しおいお、質問がある堎合は、お気軜にお問い合わせくださいviacheslav@kovalevskyi.com。







参照






All Articles