🔰

SageMaker における input_fn の役割と使い方を整理する(PyTorch)

に公開

はじめに

前回の記事では、SageMaker における推論処理の全体像と、model_fn の役割について整理しました。
今回はその続きとして、推論時のリクエストをどう扱うかを担当する input_fn に焦点を当ててみます。

まだ理解が浅い部分もありますが、「現時点での気づきや仮理解」を備忘録として残しておきます。

input_fn とは?

input_fn は、リクエストとして送られてきたデータを、推論処理に渡す形式へ変換する関数です。

def input_fn(request_body, content_type):
    # 例:JSON形式のデータをTensorに変換
    if content_type == 'application/json':
        data = json.loads(request_body)
        return torch.tensor(data)
    else:
        raise ValueError(f"Unsupported content type: {content_type}")

例えば、リクエストとして送られてきた JSON データを PyTorch の Tensor に変換する、といった処理を行います。

どのタイミングで呼ばれる?

推論処理の流れの中で、モデルが model_fn で読み込まれたあと、
リクエストを受けるたびに input_fnpredict_fnoutput_fn の順で呼び出される仕組みになっています。

model_fn は1回しか呼ばれませんが、input_fn は毎リクエストごとに実行される、というのがポイントです。

注意点・設計のコツ

  • content_type に応じて処理を分ける(JSON, CSV など)
  • 不正なデータ形式のチェックinput_fn で行うのが自然
  • 必要に応じて前処理(正規化、型変換など)をここで行う
  • 学習時と同じ形状のデータを用意することが重要

今の時点での自分の理解(仮)

  • input_fn は、リクエストデータを推論処理で使える形式に変換する役割を担う
  • content_type パラメータでデータ形式を判別し、適切にTensorなどへ変換する
  • 複数のデータ形式に対応できるよう、content_type に応じた処理分岐を実装しておくと良い
  • 実際にどのようなリクエストが来るのかについては、まだ確認できていない

おわりに

input_fn は、リクエストボディをモデルが扱える形式に変換する、重要な処理です。

SageMakerに触れはじめたばかりのため、まだ理解が浅い部分も多くあります。
ただ、自分の中で「どこで何をしているのか」を切り分けて整理していくことで、
少しずつ全体の輪郭が見えてきたように感じています。

次回は predict_fn の役割について整理してみようと思います。


🔗 関連記事

SageMaker の推論処理を理解する:4つの関数の役割まとめ(PyTorch)
推論時に使われる4つの関数(model_fn / input_fn / predict_fn / output_fn)の全体像をざっくりまとめています。

Discussion