現在、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 つ
[51CTO.com クイック翻訳] 過去1年間、人工知能と自動化技術が人間の雇用と労働市場に与え...
ニューラル ネットワークは機械学習におけるモデルの一種です。ニューラル ネットワークは、機械学習の分...
未来は、私たちが行く場所であるだけでなく、私たちが創り出す場所でもあるので、単なる時間の概念ではあり...
C言語を学んだ友人やIT関係の人ならアルゴリズムには詳しいと思います。したがって、分野が異なれば、ア...
世界の人口の58%が5Gネットワークにアクセスできるようになり、14%の家庭に「ロボット執事」が...
[オリジナル記事は51CTO.comより] 2018年ロシアワールドカップはエキサイティングな決勝...
ロボティック プロセス オートメーション (RPA) ソリューションは、人間が日常的に実行する多くの...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
病気の診断から交響曲の作曲、車の運転から道徳的な判断に至るまで、人間が行えるあらゆる作業を機械が実行...
誰かが本当にあなたの顔を真似して、顔認識システムを回避できるのです! 最近、スタンフォード大学の研究...
リアルタイムで実行され、単一の NVIDIA RTX 2080 TI GPU を使用して HD 60...
[[393467]]この記事はWeChatの公開アカウント「Shu Shixiong」から転載したも...
人工知能は急速に発展しています。データによると、2016年から2020年にかけて、中国の人工知能市場...