DC/OSに基づいて分散機器学習システムを確立する。

5190 ワード

PS-liteに基づいてword 2 vecを実現しました。次はこのアルゴリズムを分散的に走ることができるようにすることです。一番簡単な分散方式は大体次のステップです。バイナリファイルのcopyをあなたが走るマシンに送ります。各プロセスに必要なデータファイルを該当のところにコピーします。
  • はschedulerを起動する。
  • Serverを起動します。
  • ウォーカーを起動します。
  • もちろん、これらは一つのシナリオでSSHに基づいて実現できます。いくつかの問題があります。
  • 走るマシンにはCPUとメモリが十分ありますか?
  • 他の人と同じダイナミックライブラリのバージョンに依存しています。
  • あなたが走っている間に、あなたのプロセスは他の人によって誤ってキルされました。
  • はもともとschedulerのマシンIPを起動しました。wokerとserverは彼らが依存するschedulerのアドレスを修正します。
  • 新しい機械が増えて、もっと多くのプロセスが走れるようになりました。
  • 毎回、copyデータファイルを必要とします。各プロセスは異なるファイルを読みます。
  • 上の問題を解決するためには、3つのものが必要です。
  • 分散型のオペレーティングシステムは、各マシンのCPUとメモリを管理する。
  • 分散型ファイルシステムは、ファイルの保存と読み書きを解決する。
  • 仮想マシンシステムは、異なるプロジェクトの異なるバージョンの依存性を解決するために(もちろん、各プログラムに個別の依存ライブラリのディレクトリを作成することができますが、依存度が非常に複雑で、システムのある1つの底の依存度が異なると、より面倒です)。
  • DCOSは1,3を解決するために設計されたものです。彼はmesos+marthon+dockerです。
  • mesosは分散CPUとメモリ管理を担当しています。
  • marthonは、mesosのパッケージに基づいて、rest APIを提供し、mesos管理プロセスを使用する。
  • dockerは、別の人のプログラムに依存するバージョンが衝突しないようにする仮想マシンシステムである。
  • ps-liteをDCOS上に走らす方法を詳しく紹介します。ps-liteは3種類のサービスがあります。
  • ウォーカー:トレーニングデータの読み込み、パラメータの更新を担当します。
  • server:パラメータの格納を担当しています。workerローカルのパラメータはタイミングとserverが同期します。
  • scheduler:サービスの発見を担当して、workerとserverはschedulerを通じてそれぞれどこにあるかを知ることができます。同時にworkerとserverのプロセス同期も担当しています。例えば同時に仕事を始めます。一台だけです。彼のIPとポートは事前に知っておく必要があります。環境変数を使って起動時にウォーカーとserverに教えます。
  • 同じ宿泊マシンで複数のウォーカーとserverが起動する可能性があります。だから、ウォーカーとserverの仕事のポートは事前に指定できません。占有されていないポートをランダムに使うしかありません。これまで多くの統合ps-liteの分散システムの場合、ウォーカーとserverの分散問題(たとえばyarnでworkerとserverをスケジュールする)だけが解決されましたが、schedulerはマシンを探して単独で展開しました。このようにschedulerのIP/ポートは事前に知っていて、workerとserverを教えてくれます。しかし、私はschedulerを分散システムで起動したいです。方法は以下の通りです。schedulerの任務をschと命名し、marthoneで起動します。ポート(10000など)を同時に指定します。そして、dockerにHOSTネットワークモードを使用させ(HOSTモードを使うのは性能がいいからです。ps-liteはまたネットワーク性能が要求される高いアプリケーションです。)、10000ポートに結合します。この時、mesos-dnsを利用して、schedulerは自動的にsch.marthone.mesosのドメイン名を与えられて、それから環境変数を通じてworkerとserverを教えます。ウォーカーとserverはランダムでポートを探しています。起動時にdockerがランダムで利用可能なポートを割り当てられ、環境変数を通じてworker/serverに転送してから、worker/serverがポートをバインドする必要があります。marthonは$PORTの環境変数を提供してこの任務を完成します。
    サービスを解決したら、残りは分散式ファイルシステムです。一番簡単なのはmoosefsです。そしてmountから各mesos-slavieのマシンに行きます。
    {
    "id": "/sw2vscheduler",
    "cmd": null,
    "cpus": 1,
    "mem": 128,
    "disk": 0,
    "instances": 1,
    "container": {
    "type": "DOCKER",
    "volumes": [],
    "docker": {
    "image": "registry.aliyuncs.com/xlvector/sw2v",
    "network": "HOST",
    "privileged": false,
    "parameters": [],
    "forcePullImage": true
    }
    },
    "env": {
    "LD_LIBRARY_PATH": "/tmp/sw2v/ps-lite/deps/lib",
    "DMLC_PS_ROOT_URI": "sw2vscheduler.marathon.mesos",
    "DMLC_NUM_WORKER": "4",
    "DMLC_ROLE": "scheduler",
    "DMLC_NUM_SERVER": "1",
    "DMLC_PS_ROOT_PORT": "18001"
    },
    "portDefinitions": [
    {
    "port": 18001,
    "protocol": "tcp",
    "labels": {}
    }
    ]
    }
    “id”:“//sw 2 vserver”,“cmd”:null,“cpuss”:1,“mem”:1200,“disk”:0,“instancs”:1,“container”:{type”:“DOCKER”,“volumes”:[],“docker”:“prinininintttttfore”:“stingggggggggge”,“stral”,“stral”,“stral”,“stine”,“stininine”,“stral”,“stral”,“stral”,“stininine”,“stinine”:“stral”,“stract「parameters」:[],「forcePullImage」:true},「env」:「「「"LD liBRIYuPATH」:「/tmp/sw 2 v/ps-lite/deps/lib」「DLCLCDMUPSUPSTUROOTUURI」:「sw 2 vscheduler.mamanthone.mesos」、「DLCHuNUMUMUWORKER」:「4」、「DLCuROLE」:「server」、「DLCHuNUMUMUSERVER」:「1」、「PS 2 VuDATA/COTA」:「COCOCOTTTTTTU/COTTTTTTU」:“COCOCOTTTTU”:“COCOCOU/COCOCOU”:“COCOUUUZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZport」:10004,「protocol」:「tcp」、「labels」:{}}
    “id”:“//sw 2 vworkker”、“cmd”:null、“cpsps”:1、“mem”:128、“disk”:0、“instancs”:4、“container”:{type”:“DOCKER”、“volumes”:{containerath”:“stremstadnt”、“costant”、“costadtatataininininince”:“costant”、“costant”、“costant”、“costath”、“doker”、“costath”、“costath”、“costastath”、“costath”、“docostath”、“ファッション”、“ファッション”y.aliyuncs.com/xlvector/sw 2 v」「network」:「HOST」、「priveged」:false、「parameters」:[]、「forcePurimage」:true)「/tmp/sw 2 v/ps-lilililite/deps/lib」、「DLC PS ROOTUURI」:「sw 2 vscheduler.mantho. mesos」、「DLCHuNUMUMUMUMUUUUWORKER」:「DMUMC」、「DMMUMUMUMUMUMUMUMUMUUUUWORKER」:「EEEVVVVVVVVVEEEEEEEEEEEEEZZZZZZZZKER」:「EEZZZZZZZZZZZZZZZZZZZZZZZZZKER」:「EEEEEEEEEEEEEEEEEEEcos/text 8」、「DLC_PSuROOT_PORT」、「18001」、「portDefinitions」、「{port}」:10003、「protocol」:「tcp」、「labels」:{}」
    最後に、仕事は青雲の上でやりました。全部で3台のサーバーを買いました。centos 7オペレーティングシステム、各4 Gメモリ、1台はmaster、2台はslaaveを作ります。全部で200以上かかりました。また、アリ雲のdocker加速サービスとdocker構築サービスがいいです。Dockerのミラーはregistry.aliyuncs.com/xlvector/sw 2 vにあります。すべてのコードはhttps://github.com/xlvector/sw2v現在は性質を検証するための作業にすぎません。また、moosefsはファイルシステムとして、全てのワーカーがlocalからファイルを読むだけでは保証できません。ここでファイルを読みます。の性能に問題があるかもしれません。marthonは長時間サービスのシステムです。オフライントレーニングは定時任務です。現在のmesosにはchronosのタイムミッションフレームがありますが、残念なことにchronosとmesos-dnsが統合されていて問題があるようです。この経験があれば、評価論で教えてくれます。でも、marthonに基づいたメリットはオンラインlearningのサービスができます。