|
機械学習の発展に伴い、モデルとそのトレーニングに必要なデータ量は増加しており、分散トレーニングがますます一般的になっています。アルゴリズムエンジニアは通常、これらの分散フレームワークの基盤となるファイルストレージとスケジューリングシステムを深く理解することで、バッチモデルのトレーニングを迅速に開始し、リソースを最大限に活用する必要があります。 現在、TonY、TensorFlowOnSpark、KubeflowのTraining Operatorsなど、業界には類似のフレームワークが数多く存在します。しかし、これらのフレームワークには、固定の機械学習フレームワーク(Tensorflow、PyTorch)と組み合わせる際にPSやWorkerといったロールを指定する必要がある、フォールトトレランスと柔軟なスケジューリングのサポートが不十分、異種スケジューリングのサポートが不足、スケジューリングのセマンティクスが比較的単純、ファイル読み取りのサポートが不足といった問題があります。 Primus は、アルゴリズム エンジニアをこのような重い低レベルの詳細作業から解放し、アルゴリズム自体にさらに集中できるようにするという問題を解決します。 バイトダンスの1日あたり100万コアの運用の実践ByteDance による継続的な実践を通じて洗練され改善された Primus は、ビジネス ニーズをサポートする次の機能を備えています。
現在、Primusストリーミングおよびバッチトレーニングフレームワークは、Douyin、Toutiao、TikTok、広告など、ByteDanceのほとんどの事業をサポートしており、毎日数百万のジョブコアがPrimus上で実行されています。従来のHadoopストリーミングベースのフレームワークと比較して、トレーニングパフォーマンスは3倍向上し、1回のトレーニングセッションのデータ総量はテラバイトからペタバイトに増加し、トレーニング準備時間は数十分から数秒に短縮されました。 Primus、分散トレーニングスケジューリングフレームワークPrimus は、機械学習トレーニング フレームワーク (Tensorflow や PyTorch など) のライフサイクルとデータ分散を管理し、トレーニング フレームワークがより優れた分散機能を実現できるように支援する、汎用の分散トレーニング スケジューリング フレームワークです。 アーキテクチャの紹介プリムス全体のアーキテクチャ Primus のライフサイクル全体は、コミット フェーズと実行フェーズの 2 つのフェーズに分かれています。
ユーザーは、タスク全体のトレーニング リソース、データ入力、フォールト トレランス戦略を記述する必要があります。
Primus クライアントは、ユーザーの設定に従って Primus アプリケーション マスター (以下、AM と呼びます) を YARN または Kubernetes クラスターに送信し、Primus ジョブ クラスターの動作を管理します。
ジョブがクラスターに送信されると、AMはユーザーの設定に応じてリソースマネージャーに複数のExecutorを要求し、対応するロールを起動します。これらのロールのヘルスステータスを継続的に監視し、異常なステータスが検出された場合、AMはユーザーの設定に応じて適切なアクションを実行し、トレーニングが正常に実行されるようにします。
Primusはトレーナーへのデータ出力の読み取りをサポートしており、データの負荷分散と継続的なデータステータス記録により、ロングテール問題の発生を軽減します。また、トレーナーに問題が発生した場合、稼働中のトレーナーに切り替えてトレーニングを継続することもできます。Advanced Manager(AM)はトレーニング対象のデータをスキャンし、タスクに分割します。タスクはExecutorに分散されます。AMはExecutorと通信してタスクのステータスを記録します。 機能紹介
展開状況Primus は、1 日あたり数万件のトレーニング タスクと 450 万のコア リソースを使用した大規模なディープラーニング トレーニングのために、Toutiao 推奨、Douyin 動画推奨、Pangolin 広告、Qianchuan グラフィック広告、Douyin 検索など、ByteDance 社内の「推奨」、「広告」、「検索」シナリオをサポートしています。 今後の計画
Primus は現在 GitHub でオープンソース化されており、誰でも開発に参加できます。 プロジェクトアドレス: https://github.com/bytedance/primus |