現在、AIに関するチュートリアルは数多くあります。オブジェクト検出、画像分類、NLP の実行方法、チャットボットの構築方法など、リストは続きます。 しかし、AI を適切に拡張する方法に関する情報を探したところ、ほとんど見つかりませんでした。さらに驚くべきことは、存在する数少ないリソースが一貫して同じ点を強調していることです。
私はすでにモデルを開発していたので、2 番目の点にもっと興味がありましたが、それを実現する方法についての詳細がなく、各ソリューションの欠点に関する情報がさらに少ないことに驚きました。 Crane.ai で数日間 AI を研究し、拡張した後、これらの方法を展開する方法、これらの方法の欠点、および低レベルで TensorFlow モデルを最適化する方法に関するコンテンツをまとめました。
モデルをクライアントにパッケージ化することは、悪い考えです。 最も一般的なアプローチの 1 つは、TensorFlow.js、TF Lite、TensorFlow Slim などのツールを使用して、AI を任意のクライアントにパッケージ化することです。これらのフレームワークがどのように機能するかについては詳しく説明しません。ただし、その欠点については強調しておきます。
これらの欠点により、クライアント上で大規模なニューラル ネットワークを展開して維持することがほぼ不可能になるため、これをモデルのスケーリングのオプションのリストから除外します。 クラウドエンドポイントとして展開 画像出典: https://xkcd.com/908/ クラウドは、モデルを大規模に展開するための強力なツールです。ニーズに合わせて環境をカスタマイズし、アプリケーションをコンテナ化し、アプリケーションを瞬時に水平方向に拡張しながら、大企業に匹敵する SLA と稼働時間を実現できます。 デプロイメント プロセスは、ほとんどの TensorFlow モデルで同じです。
最初の部分は比較的簡単です。グラフを「固定化」すると、名前付きノード、重み、アーキテクチャ、チェックポイント メタデータがすべて含まれる protobuf バイナリ ファイルが作成されます。このステップはさまざまなツールで実行できますが、最も一般的なのは、任意の出力ノード名のグラフを固定できる TF 独自のツールです。 この手法とその実装の詳細については、https://www.tensorflow.org/guide/extend/model_files#freezing を参照してください。
推論コードの調整も難しくありません。ほとんどの場合、feed_dict は変更されませんが、主な違いは、モデルをロードするためのコードの追加と、出力ノードの仕様の変更です。 コンテナ化も簡単です。Dockerfile で環境を設定するだけです。 API レイヤーを追加し始めると、状況は複雑になってきます。通常、次の 2 つの方法が使用されます。 推論スクリプトを実行できる拡張コンテナをデプロイします。これらのコンテナは入力に基づいてスクリプトを実行し、セッションを開始して推論を実行し、パイプラインを通じて出力を返します。これは問題です。コンテナを操作してパイプで出し入れできる API レイヤーを追加することは、ほとんどのクラウド プロバイダーにとって容易ではありません (たとえば、AWS には API ゲートウェイがありますが、期待するほど便利ではありません)。また、このアプローチは最も効率の悪いアプローチです。ここでの問題は、コンテナの起動、ハードウェアの割り当て、セッションの開始、推論の実行中に貴重な時間が失われることです。 stdin を開いたままにして出力をパイプすると、スクリプトは高速化しますが、スケーラビリティは失われます (コンテナーの STDIN に接続されるため、複数のリクエストを受け入れることができなくなります)。 API レイヤーを実行する拡張コンテナをデプロイします。アーキテクチャ的には似ていますが、いくつかの理由からこのアプローチの方が効率的です。 API レイヤーをコンテナに組み込むことで、以前に発生した問題のほとんどが軽減されます。これにはより多くのリソースが必要ですが、使用するリソースは最小限で、垂直スケーリングはありません。各コンテナは実行されたままになり、この場合 API は分散化されているため、特定の stdin/stout をメインのリクエスト ルーターに接続できます。つまり、起動時間がなくなり、複数のリクエストを処理しながら速度を維持でき、水平方向のスケーラビリティが保証されます。ロードバランサーを使用してコンテナを集中管理し、Kubernetes を使用してほぼ 100% の稼働時間を保証し、クラスターを管理できます。この方法はシンプルで効果的です。
クラスターをデプロイします。 API をコンテナのクラスター全体に分散することの主な欠点は、計算コストが比較的急速に増加する可能性があることです。残念ながら、これは AI では避けられませんが、この問題を軽減する方法はあります。
タスク キューを使用します。一般的には、より大きいまたはより小さい推論タスク (この場合、より大きい画像とより小さい画像、複雑な画像と単純な画像) を実行することになります。 UX の場合、小さなタスクを優先するヒープ キューを使用する方がよい場合があります。これにより、単純なステップを実行したいユーザーは、別のユーザーのより大きな推論タスクが最初に完了するのを待つのではなく、そのステップが完了するのを待つだけで済みます。 (ここで水平スケーリングを使用しないのはなぜかと疑問に思うかもしれません。水平スケーリングを使用することもできますが、計算コストが増加します)。 タスク キューを使用して専用の GPU でモデルをトレーニングします。トレーニングは、多くの利用可能なリソースを必要とする長くて困難なタスクであり、トレーニング プロセス中はモデルは使用できません。各インタラクションをトレーニングのためにモデルに返す場合は、別のサーバーまたは GPU で実行することを検討してください。トレーニングが完了したら、モデルをコンテナにデプロイできます (AWS では、モデル リポジトリを S3 に集中管理できます)。 結論は 慎重に検討した結果、大規模に AI を展開するための効率的なワークフローを考案しました。
これらの技術を使用することで、最小限のコストで最大限の速度と効率で AI を大規模に導入できます。 オリジナルリンク: https://towardsdatascience.com/scaling-ai-2be294368504 [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: 2018 年に最も価値のあるオープンソース機械学習プロジェクト 6 つ
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
GenAIの急速な出現はすでにサイバーセキュリティに大きな変化をもたらし、各国政府に対策を取らせてお...
医療用人工知能製品は多様化しており、下流の需要は強い医療人工知能産業の上流は、主に医療データマイニン...
スタンフォード大学の「エビフライと皿洗い」ロボットとほぼ同時に、 Google DeepMindも最...
アップルに3年間在籍した後、同社の機械学習担当ディレクターのイアン・グッドフェロー氏が突然辞任を発表...
この記事はWeChatの公開アカウント「Big Data DT(ID:hzdashuju)」から転載...
ChatGPT は私たちが知る限り最新の音声アシスタントです。 SiriやAlexaなどの企業は長年...
近年、人工知能はロボットが人間のように考え、行動することを可能にする強力なツールへと発展しました。さ...
実際、ディープラーニングは多くの厄介な最適化問題を解決しています。ニューラル ネットワークは、問題に...
[[327238]] Twitter社が永久に在宅勤務を行うと発表した後、ザッカーバーグ氏は今後5年...
TSMCの生産能力不足により、Nvidiaはチップ製造をIntelに頼らざるを得なくなったのか? T...
人工知能 (AI) はクラウドからエッジへと急速に移行しており、ますます小型の IoT デバイスに導...