目次
I.はじめに
LLM の関連知識については前に紹介しましたが、サンプルの読み込みとモデルの読み込みから、その後のモデルのトレーニングとモデルの推論に至るまで、LLM LoRA の微調整と推論のプロセス全体を経験しました。前回の事前トレーニング モデルに基づいて、FastAPI を使用してインターフェイス サービスを構築してみます。この記事では主に、最も基本的な FastAPI の get および post の使用法を紹介し、その後、完全なサーバーのデプロイメントを紹介します。
2. FastAPIサーバー構築
次に、2 つのメソッドを含む API サービスを構築します。
◆ read_items - items 配列の要素を出力します。
◆ create_item - items 配列に要素を追加します。
1.get - read_items
get メソッドは HTTP リクエストの一種で、通常はサーバーからデータを取得するために使用されます。read_itemsメソッドはサーバーからitems配列を取得するため、getリクエストに相当します。通常、Get リクエストにはリクエスト本文がなく、すべてのパラメータが URL のクエリ文字列に配置されるため、特定のセキュリティ上の問題があります。
# -*- coding: utf-8 -*-
from fastapi import FastAPI, Form
app = FastAPI()
# 示例数据
items = []
# GET 请求
@app.get("/items")
async def read_items():
return items
2.post - アイテムの作成
post メソッドは get とは異なるもう 1 つの HTTP リクエスト タイプで、通常はデータをサーバーに送信するために使用されます。通常、Post にはリクエスト本文が含まれます。送信されるパラメータは、「?」を通じてリクエストされた URL に明示的に反映する必要はありませんが、JSON オブジェクトを通じて渡すことができ、get メソッドよりも安全です。get と比較すると、post 操作は冪等ではなく、実行するたびに異なる結果が得られる可能性があります。一般に get 操作は冪等であると考えられており、get を複数回実行して得られる結果は同じである必要があります。
# POST 请求
@app.post("/items")
async def create_item(item: str = Form(None)):
items.append(item)
return {"message": "Item created successfully: {}".format(str(item))}
ここでは、Post リクエストが成功すると、成功を示すプロンプトが表示され、正常に追加された項目が出力されます。
3.uvicorn - run_app
uvicorn.run(app, host="192.XXX.XXX", port=8001) メソッドは、uvicorn のコマンド ライン インターフェイスです。このうち、app は実行したいアプリケーション オブジェクトで、上記の FastAPI の get メソッドと post メソッドに対応し、host と port はサービスがリッスンする IP アドレスとポートです。このメソッドは ASGI サーバーを起動し、指定されたホストとポートでアプリケーションにサービスを提供します。後続の HTTP リクエストの URL も、上記のホストとポートに基づきます。次に、このマシン上で FastAPI サービスを開始します。
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host='0.0.0.0', port=7788)
main 関数を実行した後、次のプロンプトが表示されます。これは、サーバーが正常に起動したことを意味します。その後の対応する HTTP リクエスト URL は、図 http://0.0.0.0:7788 の青いリンクです。
3.郵便配達員のリクエスト
上記で構築した HTTP サービスでは、表示された postman などのアプリを通じて get および post リクエストを行うことができます。
1.post - アイテムの作成
postman を開き、POST コマンドを選択し、対応する URL + 関数に対応するパスを入力します。上記の get および post リクエストに対応するパスは URL + アイテムです。追加するアイテムを対応するフォームデータに渡します。ここのキーは関数定義と同じである必要があります。パラメータ名は正確に一致する必要があり、そうでない場合はエラーが報告されます。送信ボタンを実行してHTTPリクエストを送信すると、返されたBodyから項目リストにPythonが正常に追加されたことがわかります。その後、値を「java」と「c++」に変更し、ポスト命令を順番に送信します。
サーバー側でも各リクエストに特定の情報が必要です。status_code == 200 はリクエストが成功したことを意味します。
2.get - read_items
リクエストモードをGETに切り替えます。getコマンドはパラメータを渡さないため、対応するアドレスSendを直接入力してリクエストを送信できます。返された結果には、上で追加した 3 つの要素 (Python、Java、C++) が含まれています。サーバー側は、対応する取得リクエスト ログも追加します。
4. お願い
上記では、Postman は明示的なページ メソッドを使用して HTTP リクエストをサーバーに送信し、結果を取得しますが、より一般的なアプローチは、リクエスト ライブラリを使用してコードを使用してリクエストを送信し、返された結果を処理することです。
1.post - アイテムの作成
def post(text):
url = 'http://0.0.0.0:7788/items'
# 构建请求数据
data = {
'item': text
}
# 发送 post 请求
response = requests.post(url=url, data=data, timeout=10)
# 检查响应状态
if response.status_code == 200:
print('请求成功')
print(response.json())
else:
print('请求失败,状态码:', response.status_code)
request.post は、対応する URL とデータを追加します。データはマップの形式であり、post 関数に対応するキーが含まれています。最後に、status_code を使用してリクエストが成功したかどうかを判断します。サーバー ログから、今回も create_item が正常に実行されたことがわかります。
2.get - read_items
def get():
url = 'http://0.0.0.0:7788/items'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
print('成功获取,返回:', data)
else:
print('请求失败,状态码:', response.status_code)
request.get は、対応する URL を直接渡して、対応する情報を取得できます。
サーバー側の次のログは、この取得リクエストの成功を表します。
5. まとめ
上記では、FastAPI を使用して単純なサーバー デモを構築し、この方法に基づいて LLM サーバーを構築する方法について説明しました。