🔰
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_fn → predict_fn → output_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