この記事は公開アカウント「Reading Core Technique」(ID: AI_Discovery)から転載したものです。 優れた機械学習モデルを開発するのは難しいですが、作業はそこで終わりません。展開されるまでは役に立たず、他の人が簡単にアクセスできるようになります。 モデルをデプロイする方法は多数ありますが、ここでは基本的な MVP に有効な非常にシンプルなソリューションについてお話ししたいと思います。Flask を使用してモデルの API を作成し、ソフトウェア サーバーに Gunicorn を使用し、Web サイト サーバーに Nginx を使用し、それを Docker でラップして他のマシン (特に AWS と GCP) へのデプロイを容易にします。
サーバーの設定 私は、個人または仕事用のハードウェアを使用するのではなく、この目的のために特別にレンタルしたサーバーを使用して新しい構成を実験することを好みます。そうすれば、何かがひどく損傷したとしても、問題にはなりません。 したがって、Linode の使用をお勧めします。私は個人的に実験に使用していますが、そのハードウェアは使い心地が良いです。 Ubuntu 18.04 LTS を使用している限り、他の必要なサービスも使用できます。 この部分はLinidesを使用する人に適しています。 Linodes に移動し、「Linode の追加」をクリックします。記入しなければならない事項がいくつかあります。ディストリビューションバージョンでは、Ubuntu 18.04 LTS イメージを選択することをお勧めします。
次に、「作成」をクリックします。数分ほど経つと、「ネットワーク」に移動し、SSH 経由でサーバーにアクセスするための情報を確認できます。 次のステップは、サーバーに接続し、sudo 権限を持つ非 root ユーザーを作成することです。この背後にあるロジックは非常に単純です。サーバー上ですべてを root として実行したくないのです。そうすると、物事を壊すのがはるかに簡単だからです。
最後に、新しいユーザーに切り替えます。
アプリケーションコンテナを作成する システム全体の構成は、アプリケーション コンテナー (Flask + Gunicorn) と Web コンテナー (Nginx Web サーバー) の 2 つの部分に分かれています。 (1)ステップ0 - DockerとDocker Composeをインストールする Docker と Docker-compose のインストールは非常に簡単で、それぞれ 4 行と 2 行で実行できます。 (2)ステップ1 - FlaskAppとWSGIエントリポイントを作成する ホームディレクトリに flask アプリディレクトリを作成し、次のファイルを配置します。
これは、ほとんど機能のない最も基本的な Flask アプリケーションです。モデルをロードせず、GET / POST リクエストやコンテンツ (以下に表示されます) を追加しません。現在、「helloworld」と書かれたホームページを持つアプリケーションがあります。 この部分は非常に簡単です。Gunicorn をポート 8000 で実行するための別のファイルを作成するだけです。 (3)ステップ2 - Flask用のDockerイメージを作成する ここで、これらのファイルを取得して後で実行できるイメージを作成する Dockerfile を作成する必要があります。
Docker に詳しくない人のために、このスクリプトが行うことを説明します。
次に、RUN コマンドを使用して必要なすべてのパッケージがインストールされ、最後にすべてのファイルが flaskdir からコンテナー内の usrscrflask アプリケーションにコピーされます。次に、このファイルを同じ flask_app ディレクトリに配置し、requirements.txt を追加します。
ディレクトリと内容について混乱した場合は、記事の最後にある完全なプロジェクト構造を確認するか、GitHub リポジトリにアクセスしてください。 (4)ステップ3 - Nginxファイルを作成する Nginx を実行するには、いくつかの設定が必要です。ただし、次の手順に進む前に、ホーム ディレクトリ内 (flask_app と同じレベル) に nginx ディレクトリを作成してください。その後、最初に必要なファイルは nginx.conf です。このファイルには、ほぼすべての基本的な Nginx 情報と変数が含まれています。 基本的な Nginx 設定を見てみましょう。
2 番目のファイル - アプリケーション固有の構成。これを行うには、2 つの一般的な方法があります。
注意すべき点がいくつかあります。まず、アプリケーションが実行されるポートを指定する listen80 を確認します。デフォルトのポートとして、80 を選択します。次に、サーバー名です。 Linode から取得した IP アドレスを指定することも、Docker イメージ名を使用することもできます。 最後に、proxy pass コマンドは、Nginx 構成を flask プロジェクトにポイントする必要があります。 Flask コンテナの名前は flask_app (後ほど紹介します) なので、コンテナの名前と Flask プロジェクトで指定したポートだけを使用すれば大丈夫です。 (5)ステップ4 — Nginx用のDockerイメージの作成 この特定の Docker イメージは非常にシンプルです。 Flask と同様に、わずか 5 行で構成され、次の 2 つのことだけを実行します。
nginx イメージをインポートし、ファイルをコピーして、デフォルトのファイルに置き換えます。 (6)ステップ5 — Dockerfilesとdocker-composeを組み合わせる 現在、2 つの Dockerfile があります。
今度は、それらを相互作用させてシステム全体を実行させます。これを実現するには、docker-compose が使用されます。ホームディレクトリに docker-compose.yml ファイルを作成するだけです。
これがどのように機能するかを理解するために、いくつかの重要な問題について考えてみましょう。
また、この Docker セットアップを簡単に実行できるようにするために、もう 1 つ追加する必要があるものがあります。それが run_docker.sh ファイルです。
セットアップは docker-compose up を実行するのと同じくらい簡単ですが、まずこの時点で古い docker プロセスがアクティブになっていないことを確認してください。 (7)ステップ6 - すべてをまとめる 現在のプロジェクト構造は次のようになります。
すべての準備が整ったことを確認したら、Docker を実行できます。
Linode から取得した IP に移動し、ブラウザでメイン ページを表示します。 (8)ステップ7 - 結果が得られない場合はどうすればいいですか? まず Linode でサーバーをレンタルし、docker と docker-compose をインストールし、git リポジトリをクローンして bash run_docker.sh を実行します。 正常に実行されることを確認したら、変更を開始します。何かが失敗するまで、Flask、Dockerfiles、または docker-compose を使用してみてください。その後、問題を特定し、解決に取り組みます。 (9)ステップ8 - 次は何ですか? 次に追加するのは、FlaskApp での POST リクエストのサポートです。この方法では、モデルにリクエストを送信し、応答を受け取ることができます。 必要なのは、リクエストを処理できるモデルと、POST リクエストが自立できることの 2 つです。
便宜上、この場合、モデルはカラー リストの i 番目の要素のみを返します。しかし、実際にはどのモデルを実行するかは重要ではなく、すべてのメソッド (server = Flask(__name__) がある場所) でモデルのインスタンスを作成するだけで、準備は完了です。 ここで、IP アドレスに移動すると、「モデルは起動して実行中です。POST リクエストを送信しています」というメッセージが表示されます。これは、IP に移動するだけで GET リクエストとして扱われるためです。 ただし、モデル インデックスを含む json ファイルを使用して POST リクエストを送信してみましょう。私は Postman を使用していますが、好みに応じて何でも使用できます (例: Curl)。 うまくいきました! これで、GET / POST リクエストを受信するための他のルートを追加できます。このアイデアの背後にある理由は、複数のモデルをロードすることで、URL に基づいて特定のモデルにリクエストを送信できるためです。 (10)ステップ9 - さらに進むには? 実は、もう 1 つ重要なステップがあります。この Docker セットアップを迅速に展開するには、クラウド スペースに展開することをお勧めします。このアプローチの主な利点は、AWS がクラスター管理インフラストラクチャを提供することです。 学びましたか? |
<<: 人工知能技術は将来のネットワークセキュリティの起爆点と原動力となるかもしれない
>>: 2020 年に最も注目される人工知能 (AI) アプリケーション トップ 10
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
データの処理と分析は基本的かつ広範囲にわたります。アルゴリズムはデータの処理と分析において重要な役割...
音声は本質的に即時の信号です。音声で伝えられる情報要素は、複数の時間スケールで進化します。空気圧の影...
[51CTO.com からのオリジナル記事] インターネットの継続的な更新と反復により、ネットワーク...
安価な高速インターネット、安全なクラウド ストレージ、モバイル ソリューション、低コストのデバイスの...
翻訳者 |ブガッティレビュー | Chonglou先週、 OpenAIチームは、物理世界の基本的な側...
人工知能は、コンピューターが人間と同様のレベルの知能を発揮できるようにするさまざまな技術を網羅する幅...
AIの力は、医療紛争、化学合成、犯罪者識別、自動運転などの応用分野で拡大しています。 AI は現在何...
人工知能の誕生により、モバイル アプリケーションに大きな可能性をもたらすまったく新しい時代が到来しま...