0 / 0
資料の 英語版 に戻る
デプロイ可能な Python 関数を作成する
最終更新: 2024年12月05日
デプロイ可能な Python 関数を作成する

Python関数を書いて、それをアセットとして保存し、モデルをデプロイする方法を学びます。

デプロイ可能な関数の一般要件のリストについては、 デプロイ可能関数の一般要件を参照してください。 関数のデプロイメント中に何が発生するかについては、 関数のデプロイメント・プロセス を参照してください

デプロイ可能関数の一般要件

正常にデプロイするには、関数が以下の要件を満たす必要があります:

  • インポート時の Python 関数ファイルには、そのスコープの一部として score 関数オブジェクトが含まれている必要があります。 スコア関数の要件 を参照してください
  • 評価入力ペイロードは、 入力要件のスコアリング にリストされている要件を満たしている必要があります。
  • score の出力として予期される出力ペイロードには、状況コード 200 の score_response 変数のスキーマが含まれている必要があります。 score 出力では、JSON オブジェクトの配列を値とする prediction パラメーターが必須であることに注意してください。
  • Python クライアントを使用して、外部関数への参照を含む Python 関数を保存すると、外部関数のスコープ内のコード (ネストされた関数を含む) のみが保存されます。 したがって、外部関数の有効範囲外のコードは保存されないため、関数をデプロイするときに使用できません。

スコア関数の要件

  • score 関数オブジェクトを追加するには、次の 2 つの方法があります。
    • 明示的にユーザーが追加する方法と、
    • Python関数をアセットとしてwatsonx.aiRuntime リポジトリに保存する際に使用されるメソッドによって、暗黙的に保存されます
  • score関数は、1つのJSON入力パラメータ、または2つのパラメータ(ペイロードとベアラートークン)を受け取ることができる。
  • score 関数が JSON 直列化可能オブジェクトを返す必要があります (例: ディクショナリーまたはリスト)。

スコアリング入力要件

  • スコアリング入力ペイロードには、このサンプル・スキーマに示すように、 valuesという名前の配列が含まれている必要があります。 ペイロードでは input_data パラメーターは必須です。 input_data パラメーターには、追加の名前と値のペアを含めることもできます。

    {"input_data": [{
       "values": [["Hello world!"]]
                   }]
    }
    
  • 得点入力ペイロードは、'score の入力パラメータ値として渡されなければならない。 この方法により、 score 入力パラメーターの値が score内で適切に処理されるようにすることができます。

  • スコアリング入力ペイロードは、当該の Python 関数の入力要件に一致する必要があります。

  • スコアリング入力ペイロードには、 入力データ・スキーマの例と一致する配列が含まれている必要があります。

入力データ・スキーマの例

 {"input_data": [{
    "values": [["Hello, world!"]]
                }]
 }

Pythonコード例(ペイロードとトークン)

#wml_python_function
def my_deployable_function():

    def score(payload, token):

        message_from_input_payload = payload.get("input_data")[0].get("values")[0][0]
        response_message = "Received message - {0}".format(message_from_input_payload)

        # Score using the pre-defined model
        score_response = {
            'predictions': [{'fields': ['Response_message_field'],
                             'values': [[response_message]]
                            }]
        }
        return score_response

    return score

score = my_deployable_function()

Python関数のテスト

Python関数をテストする方法を紹介します:

input_data = { "input_data": [{ "fields": [ "message" ],
                                "values": [[ "Hello, world!" ]]
                               }
                              ]
             }
function_result = score( input_data )
print( function_result )

Hello, world!"というメッセージを返す。

機能のデプロイメント・プロセス

The Python code of your Function asset gets loaded as a Python module by the watsonx.ai Runtime engine by using an import statement. これは、コードが 1 回だけ実行されることを意味します (機能がデプロイされるとき、または対応するポッドが再始動されるたびに)。 その後、関数資産によって定義された score 関数が、すべての予測要求で呼び出されます。

デプロイ可能な関数を処理する

以下のいずれかの方法を使用して、デプロイ可能な Python 関数を作成します:

始める前に

APIキーを生成して、タスクの認証情報を設定する必要があります。 詳細については、タスク資格情報の管理を参照のこと。

REST API を使用したデプロイ可能な関数を作成する

REST API の場合、 Python 関数はファイルを介して直接アップロードされるため、このファイルには既に score 関数が含まれている必要があります。 score 関数内で後で使用するために実行する必要がある 1 回限りのインポートは、ファイルのグローバル・スコープ内で実行できます。 このファイルを Python 関数としてデプロイすると、グローバル・スコープで使用可能な一回限りのインポートがデプロイメント中に実行され、後ですべての予測要求で再利用されます。

重要:

関数アーカイブは .gz ファイルでなければなりません。

score 関数ファイルの例:

Score function.py
---------------------
def score(input_data):
    return {'predictions': [{'values': [['Just a test']]}]}

一回限りのインポートを使用する score 関数の例:

import subprocess
subprocess.check_output('pip install gensim --user', shell=True)
import gensim

def score(input_data):
    return {'predictions': [{'fields': ['gensim_version'], 'values': [[gensim.__version__]]}]}

Python クライアントを使用したデプロイ可能な関数を作成する

Python 関数をアセットとして永続化するために、 Python クライアントは wml_client.repository.store_function メソッドを使用します。 Python関数を永続化するには2つの方法があります:

Python 関数を含むファイルを使用した関数の永続化

このメソッドは、REST API を介して Python 関数ファイルを永続化するのと同じです (scoreは、 Python ソース・ファイルの有効範囲内で定義する必要があります)。 詳しくは、 REST API を使用したデプロイ可能な関数の作成を参照してください。

重要:

wml_client.repository.store_function メソッドを呼び出す場合は、ファイル名を最初の引数として渡します。

関数オブジェクトを介して関数を永続化にします

scoreという名前のネストされた関数を使用して Python Closures を作成することにより、 Python 関数オブジェクトを永続化することができます。 score 関数は、呼び出されたときに、関数オブジェクトとして保管されている外部関数によって戻されます。 この score 関数は、 デプロイ可能関数の一般要件にリストされている要件を満たしている必要があります。 この場合、1 回限りのインポートと初期セットアップ・ロジックを外部のネストされた関数に追加して、デプロイメント中に実行され、 score 関数内で使用されるようにする必要があります。 prediction 要求中に繰り返し必要になるロジックは、ネストされた score 関数内に追加する必要があります。

Python クライアントを使用して保存するサンプル Python 関数:

def my_deployable_function():

    import subprocess
    subprocess.check_output('pip install gensim', shell=True)
    import gensim

    def score(input_data):
        import
        message_from_input_payload = payload.get("input_data")[0].get("values")[0][0]
        response_message = "Received message - {0}".format(message_from_input_payload)

        # Score using the pre-defined model
        score_response = {
            'predictions': [{'fields': ['Response_message_field', 'installed_lib_version'],
                             'values': [[response_message, gensim.__version__]]
                            }]
        }
        return score_response

    return score

function_meta = {
    client.repository.FunctionMetaNames.NAME:"test_function",
    client.repository.FunctionMetaNames.SOFTWARE_SPEC_ID: sw_spec_id
}
func_details = client.repository.store_function(my_deployable_function, function_meta)

このシナリオでは、Python関数が 'score関数を含むPythonファイルを作成し、その関数ファイルをwatsonx.aiRuntime リポジトリにアセットとして保存します:

score = my_deployable_function()

もっと見る

親トピック: Python 関数をデプロイする

生成 AI の検索と回答
これらの回答は、製品資料の内容に基づいて、 watsonx.ai のラージ言語モデルによって生成されます。 詳細