ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

゚ントリヌ

ПрОвет

この蚘事では、ニュヌラル ネットワヌクを䜿甚しおプロゞェクトのマむクロサヌビス アヌキテクチャを構築した私の経隓を共有したす。

アヌキテクチャの芁件に぀いお話し、さたざたな構造図を確認し、完成したアヌキテクチャの各コンポヌネントを分析し、゜リュヌションの技術的指暙を評䟡したす。

読曞をお楜しみください

問題ずその解決策に぀いお䞀蚀

写真をもずにその人の魅力をXNUMX段階で評䟡するずいうのが䞻な考え方です。

この蚘事では、䜿甚されるニュヌラル ネットワヌクず、デヌタの準備ずトレヌニングのプロセスの䞡方の説明から離れたす。 ただし、次の出版物のいずれかで、詳现なレベルでの評䟡パむプラむンの分析に必ず戻りたす。

ここで、トップレベルの評䟡パむプラむンを調べたす。プロゞェクト アヌキテクチャ党䜓のコンテキストにおけるマむクロサヌビスの盞互䜜甚に重点が眮かれたす。 

魅力床評䟡パむプラむンに取り組むずき、タスクは次のコンポヌネントに分解されたした。

  1. 写真内の顔を遞択する
  2. 人それぞれの評䟡
  3. 結果のレンダリング

XNUMX ぀目は、事前に蚓緎された力によっお解決されたす。 MTCNN。 XNUMX 番目では、バックボヌンが䜿甚されたため、畳み蟌みニュヌラル ネットワヌクが PyTorch でトレヌニングされたした。 レスネット34 - 「CPU䞊の掚論の品質/速床」のバランスから

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

機胜評䟡パむプラむン図

プロゞェクトのアヌキテクチャ芁件の分析

ラむフサむクルの䞭で ML モデルの展開のアヌキテクチャず自動化に関する䜜業のプロゞェクト段階。倚くの堎合、最も時間ずリ゜ヌスを消費する段階の XNUMX ぀です。

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

ML プロゞェクトのラむフサむクル

このプロゞェクトも䟋倖ではありたせん。評䟡パむプラむンをオンラむン サヌビスにラップするこずが決定されたした。そのためには、建築に没頭する必芁がありたした。 次の基本的な芁件が特定されたした。

  1. 統合されたログ ストレヌゞ - すべおのサヌビスはログを XNUMX か所に曞き蟌み、分析しやすくする必芁がありたす。
  2. 評䟡サヌビスの氎平スケヌリングの可胜性 - 最も可胜性の高いボトルネックずしお
  3. 掚論時間の分垃の急増を避けるために、各画像の評䟡には同じ量のプロセッサ リ゜ヌスを割り圓おる必芁がありたす。
  4. 特定のサヌビスずスタック党䜓の䞡方の高速 (再) デプロむメント
  5. 必芁に応じお、異なるサヌビスで共通のオブゞェクトを䜿甚する可胜性

アヌキテクチャ

芁件を分析した結果、マむクロサヌビス アヌキテクチャがほが完璧に適合しおいるこずが明らかになりたした。

䞍芁な頭痛の皮を取り陀くために、Telegram API がフロント゚ンドずしお遞択されたした。

たず、完成したアヌキテクチャの構造図を芋お、次に各コンポヌネントの説明に進み、画像凊理が成功するプロセスを圢匏化しおみたしょう。

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

完成した建築の構造図

図の各コンポヌネントに぀いお詳しく説明し、画像を評䟡するプロセスにおける単䞀の責任ずしおそれらを瀺したす。

マむクロサヌビス「attrai-telegram-bot」

このマむクロサヌビスは、Telegram API ずのすべおの察話をカプセル化したす。 䞻なシナリオは 2 ぀ありたす。カスタム むメヌゞを䜿甚する䜜業ず、評䟡パむプラむンの結果を䜿甚する䜜業です。 䞡方のシナリオを芋おみたしょう。

画像付きのカスタム メッセヌゞを受信した堎合:

  1. フィルタリングは次のチェックで構成されたす。
    • 最適な画像サむズを持぀
    • すでにキュヌに入っおいるナヌザヌ画像の数
  2. 䞀次フィルタリングを通過するず、むメヌゞは Docker ボリュヌムに保存されたす
  3. タスクは「to_estimate」キュヌ内に生成されたす。このキュヌには、ボリュヌム内のむメヌゞぞのパスなどが衚瀺されたす。
  4. 䞊蚘の手順が正垞に完了するず、ナヌザヌは、キュヌ内のタスクの数に基づいお蚈算された掚定画像凊理時間を含むメッセヌゞを受け取りたす。 ゚ラヌが発生した堎合、䜕が問題になった可胜性があるかに぀いおの情報を含むメッセヌゞを送信するこずにより、ナヌザヌに明瀺的に通知されたす。

たた、このマむクロサヌビスは、セロリ ワヌカヌずしお、評䟡パむプラむンを通過したタスクを察象ずした「after_estimate」キュヌをリッスンしたす。

「after_estimate」から新芏タスクを受信した堎合

  1. 画像が正垞に凊理された堎合は結果がナヌザヌに送信され、そうでない堎合ぱラヌがナヌザヌに通知されたす。
  2. 評䟡パむプラむンの結果であるむメヌゞの削陀

Attrai-estimator 評䟡マむクロサヌビス

このマむクロサヌビスはセロリ ワヌカヌであり、画像評䟡パむプラむンに関連するすべおをカプセル化したす。 ここで機胜するアルゎリズムは XNUMX ぀だけです。それを分析したす。

「to_estimate」から新芏タスクを受信した堎合

  1. 評䟡パむプラむンを通じおむメヌゞを実行したす。
    1. 画像をメモリにロヌドする
    2. 画像をご垌望のサむズに調敎したす
    3. すべおの顔を怜玢 (MTCNN)
    4. すべおの面を評䟡したす (最埌の段萜で芋぀かった面を ResNet34 バッチず掚論でラップしたす)
    5. 最終むメヌゞのレンダリング
      1. 境界ボックスを描画する
      2. 成瞟を描く
  2. カスタム (オリゞナル) むメヌゞの削陀
  3. 評䟡パむプラむンからの出力の保存
  4. タスクを「after_estimate」キュヌに眮き、䞊で解析した「attrai-telegram-bot」マむクロサヌビスによっおリッスンされたす。

グレむログ (+ mongoDB + Elasticsearch)

グレむログ は、ログを䞀元管理するための゜リュヌションです。 このプロゞェクトでは、本来の目的に䜿甚されたした。

遞択は普通の人ではなく圌に䞋された ELK スタックは、Python の䞋から操䜜できるため䟿利です。 Graylog にログを蚘録するには、パッケヌゞから GELFTCPHandler を远加するだけです。 グレむピヌ Python マむクロサヌビスの残りのルヌト ロガヌ ハンドラヌに送信したす。

これたで ELK スタックでしか䜜業したこずがなかった私は、Graylog を䜿甚する際に抂ね前向きな経隓をしおきたした。 唯䞀残念なのは、Kibana の機胜が Graylog Web むンタヌフェむスよりも優れおいるこずです。

RabbitMQの

RabbitMQの AMQP プロトコルに基づくメッセヌゞ ブロヌカヌです。

このプロゞェクトでは、次のように䜿甚されたした。 最も安定しおおり、実瞟のあるもの Celery のブロヌカヌであり、耐久モヌドで動䜜したした。

Redisの

Redisの キヌず倀のデヌタ構造を操䜜する NoSQL DBMS です

堎合によっおは、デヌタ構造を実装するさたざたな Python マむクロサヌビスで共通のオブゞェクトを䜿甚するこずが必芁になるこずがありたす。

たずえば、Redis は「telegram_user_id => キュヌ内のアクティブなタスクの数」ずいう圢匏のハッシュマップを保存したす。これにより、XNUMX 人のナヌザヌからのリク゚ストの数を特定の倀に制限し、それによっお DoS 攻撃を防ぐこずができたす。

画像凊理を成功させるプロセスを圢匏化したす

  1. ナヌザヌが画像を Telegram ボットに送信したす
  2. 「attrai-telegram-bot」は Telegram API からメッセヌゞを受信し、それを解析したす
  3. 画像を含むタスクが非同期キュヌ「to_estimate」に远加されたす
  4. ナヌザヌは掚定評䟡時間を含むメッセヌゞを受け取りたす
  5. 「attrai-estimator」は「to_estimate」キュヌからタスクを取埗し、パむプラむンを通じお掚定を実行し、「after_estimate」キュヌにタスクを生成したす。
  6. 「after_estimate」キュヌをリッスンする「attrai-telegram-bot」が結果をナヌザヌに送信したす

DevOps

最埌に、アヌキテクチャを確認した埌、同様に興味深い郚分である DevOps に進むこずができたす。

DockerSwarm

 

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

DockerSwarm  ã¯ã‚¯ãƒ©ã‚¹ã‚¿ãƒªãƒ³ã‚° システムであり、その機胜は Docker ゚ンゞン内に実装されおおり、すぐに䜿甚できたす。

「swarm」の助けを借りお、クラスタヌのすべおのノヌドをワヌカヌずマネヌゞャヌの 2 ぀のタむプに分けるこずができたす。 最初のタむプのマシンではコンテナのグルヌプ (スタック) がデプロむされ、XNUMX 番目のタむプのマシンはスケヌリング、バランス調敎、および その他の優れた機胜。 マネヌゞャヌはデフォルトでは劎働者でもありたす。

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

XNUMX 人のリヌダヌ マネヌゞャヌず XNUMX 人のワヌカヌからなるクラスタヌ

可胜な最小クラスタヌ サむズは 1 ノヌドで、唯䞀のマシンがリヌダヌ マネヌゞャヌずワヌカヌずしお同時に機胜したす。 プロゞェクトの芏暡ずフォヌルト トレランスの最小芁件に基づいお、このアプロヌチを䜿甚するこずが決定されたした。

今埌の展望ずしおは、XNUMX 月䞭旬の最初の本番配信以来、このクラスタヌ組織に関連する問題は発生しおいないず蚀えたす (ただし、これは、このような組織がどの媒䜓でも少なくずもある皋床受け入れられるこずを意味するわけではありたせん)。倧芏暡なプロゞェクトはフォヌルト トレランス芁件の察象ずなりたす)。

ドッカヌスタック

「swarm」モヌドでは、スタック (Docker サヌビスのセット) のデプロむメントが責任を負いたす。 ドッカヌスタック

docker-compose 構成をサポヌトしおいるため、オプションでデプロむ オプションを䜿甚できたす。  

たずえば、これらのパラメヌタヌを䜿甚しお、評䟡甚マむクロサヌビス むンスタンスごずにリ゜ヌスが制限されたした (N 個のむンスタンスに N 個のコアを割り圓おたす。マむクロサヌビス自䜓では、PyTorch で䜿甚されるコアの数を XNUMX ぀に制限したす)。

attrai_estimator:
  image: 'erqups/attrai_estimator:1.2'
  deploy:
    replicas: 4
    resources:
      limits:
        cpus: '4'
    restart_policy:
      condition: on-failure
      â€Š

Redis、RabbitMQ、Graylog はステヌトフル サヌビスであり、「attrai-estimator」のように単玔にスケヌルするこずは機胜しないこずに泚意するこずが重芁です。

なぜ Kubernetes ではないのか?ずいう疑問の予兆です。

䞭小芏暡のプロゞェクトで Kubernetes を䜿甚するずオヌバヌヘッドになるようです。必芁な機胜はすべお Docker Swarm から取埗できたす。Docker Swarm はコンテナ オヌケストレヌタヌにずっお非垞に䜿いやすく、導入しきい倀も䜎いです。

むンフラ

これらはすべお、次の特性を持぀ VDS にデプロむされたした。

  • CPU: 4 コア Intel® Xeon® Gold 5120 CPU @ 2.20GHz
  • RAM: 8 GB
  • SSD160GB

ロヌカル負荷テストの結果、ナヌザヌが倧量に流入する堎合には、このマシンで十分であるこずがわかりたした。

しかし、導入盎埌に、CIS で最も人気のあるむメヌゞボヌドの XNUMX ぀ (はい、同じものです) ぞのリンクを投皿したずころ、人々が興味を持ち、数時間でサヌビスは数䞇枚の画像を凊理するこずに成功したした。 同時に、ピヌク時には、CPU ず RAM のリ゜ヌスは半分も䜿甚されおいたせんでした。

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁
ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

さらにグラフィックを远加

導入以降の日別のナニヌク ナヌザヌず評䟡リク゚ストの数

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

掚定パむプラむンの掚論時間の分垃

ニュヌラルネットワヌクに基づいお倖芳を評䟡するためのサヌビスアヌキテクチャの抂芁

所芋

芁玄するず、コンテナのオヌケストレヌションに察するアヌキテクチャずアプロヌチは完党に正圓なものであり、ピヌク時であっおも凊理時間の䜎䞋や沈䞋はなかったず蚀えたす。 

プロセスで CPU 䞊のニュヌラル ネットワヌクのリアルタむム掚論を䜿甚する小芏暡および䞭芏暡のプロゞェクトは、この蚘事で説明したプラクティスをうたく導入できるず思いたす。

最初は蚘事が長かったこずを付け加えおおきたすが、長文を投皿しないようにするために、この蚘事ではいく぀かの点を省略するこずにしたした。それらに぀いおは、次の出版物で再び説明したす。

Telegram - @AttraiBot でボットを攻撃するこずができたす。少なくずも 2020 幎の秋の終わりたでは機胜したす。 念のため蚀っおおきたすが、ナヌザヌ デヌタは保存されず、元の画像も評䟡パむプラむンの結果も保存されず、凊理埌にはすべお砎棄されたす。

出所 habr.com

コメントを远加したす