最初の機械学習APIをデプロイする

最初の機械学習APIをデプロイする

[[432622]]

【51CTO.com クイック翻訳】はじめに

このプロジェクトでは、簡単なコードを使用して機械学習モデル用のアプリケーション プログラミング インターフェイス (API) を構築およびデプロイする方法を学習します。 FastAPI を学習するのに 1 時間、Deta サーバーにデプロイする方法を学習するのに 5 分かかりました。また、Python Request を使用して、ローカル サーバーとリモート サーバーの両方で API をテストします。私たちのプロジェクトで使用するこれらのテクノロジーを詳しく見てみましょう。

[[432623]]

スパシー

実験と評価のためのよく知られた NLTK Python ライブラリと比較すると、spaCy はアプリケーションとデプロイメントに優れています。 spaCy には、強力で使いやすく、spaCy プロジェクトに実装できる、事前に構築された統計ニューラル ネットワーク NLP モデルが付属しています。非常にシンプルで小さな、事前に構築された英語モデルを使用して、テキストからエンティティを抽出します。

高速API

FastAPI は、Python で API を構築するための高速 Web フレームワークです。クエリ時間が短く、シンプルで、コードが最小限であるため、FastAPI を使用して最初の API を数分で設計できます。 FastAPI の仕組みと、事前に構築されたモデルを使用して英語のテキストからエンティティを取得する方法について学習します。

データ

API には Deta Micros サービスを使用し、Docker や YAML ファイルなしでプロジェクトをデプロイします。 Deta プラットフォームには、簡単に導入できる CLI、高いスケーラビリティ、安全な API 認証キー、サブドメインを変更するオプション、Web トラフィックのログ記録機能が備わっています。これらの機能は Deta では完全に無料でご利用いただけます。私たちのプロジェクトでは、Deta CLI を使用して、わずか数行のスクリプトで Fast API をデプロイします。

コード

この記事を書くきっかけとなった YouTube ビデオは、FastAPI を学習しているときに偶然見つけたものでした。 Sebastián Ramírez が、Fast API の仕組みとそれが最速の Python Web フレームワークである理由について説明します。 2 つの Python ファイルを作成します。1 つには機械学習モデルが含まれ、もう 1 つには API コードが含まれます。

必要

始める前に、requirements.txt ファイルを含む新しいディレクトリを作成する必要があります。以下に、これから使用するすべての必要なライブラリを示します。

  1. ファスタピ
  2. スペーシー
  3. ユービコーン
  4. https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.1.0/en_core_web_sm-3.1.0.tar.gz

1 つずつインストールすることも、以下を使用することもできます。

  1. $ pip インストール -r 要件.txt

このプロジェクトでは事前トレーニング済みの NLP モデルを使用するため、GitHub リポジトリからダウンロードする必要があります。または、要件ファイルを実行するだけで、自動的にダウンロードおよびインストールされます。

機械学習モデル

事前トレーニング済みの Spacy NLP モデルを使用して、テキストからエンティティを抽出します。 Jupyter ノートブックを使用している場合は、%%writefile を使用してディレクトリに Python ファイルを作成してみてください。

まず、NLP モデルをロードし、CBS ニュースの記事からエンティティを抽出します。わずか数行のコードで、最初の機械学習モデルを実行できます。同じ方法を使用して、トレーニング済みのモデルをロードすることもできます。

APIドキュメント

これはメイン ファイルであり、次の内容が含まれます。

1. read_main: GET を使用してリソースからデータを要求します。ウェルカム メッセージが表示されます。

2. クラス記事: pydantic BaseModel を使用して、API で使用されるオブジェクトと変数を定義します (helpmanual.io)。この例では、コンテンツを文字列として定義し、コメントを文字列のリストとして定義します。

3. analyze_article: ml ファイルから NLP オブジェクトを使用し、コメントが添付されたテキストのリストを取得し、インスタンスを表示します。

少しわかりにくいかと思いますので、理解しやすいように細かい部分に分けてみましょう。

  1. %% 書き込みファイル FastAPI-ML-Project/main.py
  2.  
  3. fastapiからFastAPIをインポートする
  4. mlからnlpをインポート
  5. pydanticからBaseModel をインポート
  6. スターレットを輸入
  7. 入力からインポートリスト

壊す

FastAPI オブジェクトを作成し、@app.get("/") を使用して関数のデコレータとして使用します。

  • @appはFastAPIオブジェクトのデコレータです
  • .get または .post: データを返したり入力を処理したりするために使用される HTTP メソッド
  • ("/") は Web サーバー上の場所 (この場合はホームページ) です。別のディレクトリを追加したい場合は、("/ /”()

メイン ページにメッセージを表示するためのシンプルな read_main 関数を作成しました。

  1. アプリ = FastAPI()
  2.  
  3. @app.get( "/" )は、
  4. read_main() を定義します:
  5. 戻り値: { "メッセージ" : "ようこそ" }

ここで、BaseModel から関数と変数を継承する Article クラスを作成します。この関数は、POST メソッドで使用するパラメータ タイプを作成するのに役立ちます。この例では、コンテンツを文字列変数として作成し、コメントを文字列のリストとして作成します。

  1. クラス Article(BaseModel):
  2. コンテンツ: str
  3. コメント: List[str] = []

前のセクションでは、API の POST メソッド (「/article/」) を作成しました。これは、パラメータを入力として受け取り、処理後に結果を返す新しいセクションを作成することを意味します。

  • パラメーターとしての記事クラス: 記事リストを使用して記事パラメーターを作成し、複数のテキスト項目を追加できるようにします。
  • 記事からデータを抽出する: 記事リストからデータ、次にコメント リストからデータを抽出するループを作成します。また、配列にコメントを追加します。
  • NLP モデルへのテキストの読み込み: コンテンツを NLP 事前トレーニング済みモデルに読み込みます。
  • エンティティの抽出: nlp オブジェクトからエンティティを抽出し、ents 配列に追加します。これにより結果が積み重ねられます。
  • 表示: この関数はエンティティとコメントのリストを返します。
  1. @app.post( "/記事/" )
  2. def analyze_article(articles: リスト[Article]):
  3. ents = []
  4. コメント = []
  5. 記事内の記事の場合:
  6. 記事コメント:
  7. コメント.append(コメント.upper ())
  8. doc = nlp(記事.コンテンツ)
  9.  
  10. doc.entsentの場合:
  11. ents.append({ "テキスト" : ent.text, "ラベル" : ent.label_})
  12. 戻り値: { "ents" : ents, "comments" : コメント}

テスト

Fast API は Uvicorn 上に構築されているため、サーバーも Uvicorn 上で実行されます。 Jupyter ノートブックでは、次のコードを使用してアプリケーションを実行するか、ターミナルで uvicorn に続けて main.txt と入力します。この場合、FastAPI オブジェクトは app です。

  1. !cd / work /FastAPI-ML-Project && uvicorn main:app
  2. 2021-08-04 17:08:56.673584: W tensorflow/stream_executor/platform/ default /dso_loader.cc:60]できませでした 負荷 動的ライブラリ'libcudart.so.11.0' ; dlerror: libcudart.so.11.0:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません
  3. 2021-08-04 17:08:56.673627: I tensorflow/stream_executor/cuda/cudart_stub.cc:29]マシンGPUが設定されてない場合は、上記の cudart dlerror を無視してください
  4. 中国GPE
  5. 北京GPE
  6. 情報: サーバープロセスを開始しました [928]
  7. 情報: アプリケーションの起動待機しています
  8. 情報: アプリケーションの起動が完了しました。
  9. 情報: Uvicorn は http://127.0.0.1:8000実行されています (終了するにはCTRL+C を押してください)
  10. 情報: 127.0.0.1:51874 - "GET / HTTP/1.1" 200 OK
  11. 情報: 127.0.0.1:51876 - "POST /article/ HTTP/1.1" 200 OK
  12. 情報: 127.0.0.1:53028 - "POST /article/ HTTP/1.1" 200 OK
  13. KernelInterrupted: Jupyter カーネルによって実行が中断されました。

サーバーはスムーズに動作しているので、request.get メソッドを使用してアクセスしてみましょう。 API はホームページに「ようこそ」メッセージを表示し、すべてが正常に動作していることを示します。

  1. 輸入リクエスト
  2.  
  3. レスポンス = リクエスト.get( "http://127.0.0.1:8000" )
  4. 応答テキストを印刷します
  5. { "メッセージ" : "ようこそ" }

次に、個々のテキストとコメントを辞書としてリストに追加します。 NLP モデル関数にアクセスするには、POST リクエスト メソッドと /article/ を使用します。データを簡単に抽出できるように、出力を .json() に変換します。

辞書のキーは次のとおりです: ['ents', 'comments']

  1. params = [{ "content" : "1992年のクリケットワールドカップはパキスタンが優勝しました" ,
  2. 「コメント」 :[ 「わお」 「悪くない」 ]}]
  3. 記事 = リクエスト.post(f "http://127.0.0.1:8000/article/",json=params )
  4.  
  5. data_dict = article.json()
  6. data_dict.keys()

全体の出力がどのようになるか見てみましょう。ラベル付きのエンティティとエンティティのリストがあるようです。コメントキーについても同様です。

  1. print( "出力: " , article.text)
  2. 出力: { "ents" :[{ "text" : "1992" , "label" : "DATE" },{ "text" : "クリケットワールドカップ" , "label" : "EVENT" },{ "text" : "パキスタン" , "label" : "GPE" }], "comments" :[ "WAOOO" , "NOT BAD" ]}

ここで、単一のエンティティとそのテキストを抽出して、出力の柔軟性を確認しましょう。この例では、出力から 2 番目のエンティティを抽出します。

結果は完璧でした。

  1. print( "ラベル: " ,list(data_dict[ "ents" ][1] .values ​​())[1])
  2. print( "テキスト: " ,list(data_dict[ "ents" ][1] .values ​​())[0])
  3. レーベル: イベント
  4. テキスト: クリケットワールドカップ

展開する

ターミナルに入力するか、Jupyter ノートブック セルで同じ手順を実行しますが、スクリプトの前に「!」を追加します。まず、cd を使用して、main.py ファイルと ml.py ファイルが配置されているディレクトリにアクセスします。

  1. cd ~”/FastAPI-ML-プロジェクト”

Deta に必要な 3 つの主なファイルは、ml.py、main.py、requirements.txt です。

Windows を使用している場合は、PowerShell で以下のコマンドを使用して Deta CLI をダウンロードしてインストールします。

  1. https://get.deta.dev/cli.ps1 -useb を実行します | iex

Linux を使用している場合:

  1. curl -fsSL https://get.deta.dev/cli.sh | sh

次に、deta ログインを使用します。これにより、ブラウザが開き、ユーザー名とパスワードの入力を求められます。すでにログインしている場合は、確認に数秒かかります。

  1. データログイン

データ検証 | deta

ターミナルのこの 2 つの単語は魔法の言葉であり、2 分以内にファイルをアップロードしてアプリケーションをデプロイします。

  1. 詳細新規

アプリケーションはエンドポイント リンク (この場合は https://93t2gn.deta.dev/) にアップロードされます。

  1. 新しいマイクロ {" name ": "FastAPI-ML-Project","runtime": "python3.7","endpoint": "https://93t2gn.deta.dev/","visor": "enabled","http_auth": "disable"} を正常に作成しました。依存関係を追加しています…fastapi を収集しています…正常にインストールされました……

エラーが見つかった場合は、deta ログを使用してログを確認し、変更を加えてから、deta deploy を使用して変更を更新します。

ご覧のとおり、アプリケーションは Deta サーバーにデプロイされ、実行されています。

プロジェクト概要 |

Deta が提供しているリンクにアクセスして、自分で確認することができます。

Web API のテスト

最後に、Deta プラットフォーム上のマイクロサービスとしてリモート API をテストしてみましょう。今回は、ローカル IP を追加する代わりに、データ エンドポイント リンクを追加します。 API 認証が有効になっていないため、ヘッダーなしで実行することも可能です。 Deta は、認証を有効にすると無料の API キーも提供します。つまり、あなたまたはあなたの API キーを持つユーザーだけが Web サーバーにアクセスできます。認証とサブドメインの詳細については、ドキュメントを確認することをお勧めします。

同じ結果を得るために同じパラメータと同じコードを追加すると、なんと、うまく機能します。 API はオンラインであり、リンクを使用して簡単にアクセスできます。

  1. ヘッダー = { "accept" : "application/json" "Content-Type" : "application/json" }
  2.  
  3. パラメータ = [
  4. {
  5. 「コンテンツ」 : 「1992年クリケットワールドカップはパキスタンが優勝した」
  6. 「コメント」 : [ 「わお」 「悪くない」 ]、
  7. }
  8. ]
  9.  
  10. article = リクエスト.post( "https://93t2gn.deta.dev/article/" 、headers=ヘッダー、json=パラメータ)

結論は

FastAPI を学んだ後、次に何をするかを考えていたところ、ある日、オンラインで偶然 Deta を見つけ、興味をそそられました。 Deta CLI をインストールし、リモート サーバーに API をデプロイするのに数分かかりました。 Deta のサブドメインと無料 API キー機能に感銘を受けました。このサービスがどのように機能し、将来のプロジェクトでどのように使用するかをすぐに理解できました。

いくつかの機械学習モデルを学習した後、私たちは皆、次のような疑問を抱きます。

モデルをトレーニングして予測を得る方法はわかっていますが、次のステップは何ですか? 他のユーザーが私が構築したものを確認し、プロジェクトでこれらの機能を使用できるように、モデルを他のユーザーと共有するにはどうすればよいですか?

ここで Heroku、Google、Azure などのクラウド プラットフォームが役立ちますが、これらのプラットフォームは少し複雑で、Docker ファイルのコードを記述する方法を学ぶ必要があるため、イライラすることがあります。 Deta は、アプリケーションを数秒でデプロイして実行できる簡単な 2 語のスクリプトですべての問題を解決します。

原題: 初めての機械学習 API の導入、著者: Abid Ali Awan

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  GANは音声を使って画像を生成できるようになった

>>:  Yandexとロシア郵便が配達ロボットサービスを開始

ブログ    
ブログ    

推薦する

エコノミスト誌の新たな見解:ロボットの数が増えても人間の雇用機会は減らないが、雇用数は増える

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

...

...

ワークステーションはクライアント側の大規模モデルの「幸せな家」です

MacでSiriを呼び出したことがありますか?とにかく一度も合格していない。 AIの世界では「ベテラ...

...

2018 年の画期的なテクノロジー トップ 10: AI と知覚都市

2017年、MITテクノロジーレビューは、強化学習、自動運転トラック、360度セルフィー、顔認証決済...

機械学習のアルゴリズム(2) - サポートベクターマシン(SVM)の基礎

SVM に関する論文や書籍は数多くあります。Qiang 兄弟の言葉を引用すると、「SVM は応用数学...

職場におけるAIとARの進化

[[434145]]職場における支援/拡張現実 (AR) と人工知能 (AI) の可能性を最大限に引...

市場動向 | 人工知能が光接続の需要を急増させる

世界のデジタル経済が急速に発展するにつれ、クラウド コンピューティングによってデータ転送速度に対する...

...

チューリング賞受賞者のヤン・ルカン氏への最新インタビュー: AI は世界を支配するだろうが、人類を征服することはない!

かつての共同研究者であるジェフリー・ヒントン氏とヨシュア・ベンジオ氏がAIの絶滅を宣言したとき、ルカ...

...

ByteDanceがCowClipをオープンソース化:推奨モデルのシングルカードトレーニングを最大72倍高速化可能

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...