現在、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 つ
事情に詳しい関係者によると、10月28日、Googleはこれまでの投資に加え、OpenAIの競合企業...
エネルギー、ガス、水道、廃棄物管理などの公共事業では、すでにインフラストラクチャを最適化し、需要と供...
7月5日のニュース、6月28日、OpenAIのチャットボットChatGPTは、MicrosoftのB...
[[405478]]このチュートリアルでは、TensorFlow (Keras API) を使用して...
今年5月に発表され、国内の有力者である馬怡氏と沈向陽氏が主導する、まったく新しい初のAI学術会議CP...
インテリジェント レコメンデーションは、ビジネス ニーズを満たすビッグ データと人工知能テクノロジに...
[[248047]] (AIの2つのルート)ホフスタッターは1995年に予測した。 (人工知能におい...
調査によると、人工知能(AI)ソリューションは現在急速に成長している市場であり、2020年までに1,...
それは恥ずかしいですね。物理学の論文でも ChatGPT ボタンがコピーされていました。結果は2か月...
昨年、ハーバード大学は大きなことを成し遂げました。彼らは CS50 コースに AI ツールの完全なセ...