Databricks Certified Machine Learning Associate 無料問題 10 / 10 ・ 分野4: Model Deployment
MLflow で記録した学習済みのモデルで、毎晩の表全体のスコアリングと、届き続けるイベントの Structured Streaming でのスコアリングの両方を行いたい。MLflow のモデルの使い方として、Databricks の文書に合うものはどれか。
- バッチは mlflow.pyfunc.spark_udf の UDF を使い、ストリーミングはモデルをエンドポイントに置いて各行から REST で呼ぶ
- mlflow.pyfunc.spark_udf の UDF はバッチの DataFrame 専用なので、ストリーミングには pandas UDF を書き直して使う
- mlflow.pyfunc.spark_udf でモデルを Spark の UDF にし、その UDF をバッチのジョブにもストリーミングのジョブにも使う
- バッチは mlflow.pyfunc.load_model で読み込み、ストリーミングはマイクロバッチごとにドライバで load_model し直す
正解と解説を見る
正解: C
正解の理由
「Log, load, and register MLflow models」の API の説明は、モデルを Apache Spark の UDF として書き出し、Spark のクラスタでスコアに使えるとし、その使い方を「バッチのジョブとしても、リアルタイムの Spark Streaming のジョブとしても」と書いている。例は spark.table で読んだ DataFrame に mlflow.pyfunc.spark_udf(spark, model_path) で作った UDF を withColumn でかける形である。同じ UDF を、ストリーミングで読んだ DataFrame にもかけられる。
違う選択肢
「バッチは mlflow.pyfunc.spark_udf の UDF を使い、ストリーミングはモデルをエンドポイントに置いて各行から REST で呼ぶ」… ストリーミングでもモデルを Spark の UDF としてクラスタの上で使えると書かれているので、ストリーミングだけをエンドポイントへ回す必要は無い。各行から REST で呼ぶと、行ごとに往復の通信が増える。
「バッチは mlflow.pyfunc.load_model で読み込み、ストリーミングはマイクロバッチごとにドライバで load_model し直す」… load_model で読み込んだモデルは predict に pandas などの入力を渡して使うもので、ドライバの上の1台で動く。マイクロバッチごとに読み直すと読み込みの時間が毎回かかり、ストリーミングの用途として文書が示す形でもない。
「mlflow.pyfunc.spark_udf の UDF はバッチの DataFrame 専用なので、ストリーミングには pandas UDF を書き直して使う」… spark_udf をバッチ専用とする記述は無く、文書は Spark Streaming のジョブにも使えると書く。pandas UDF を自分で書き直す必要は無い。
押さえどころ
MLflow のモデルの形式は、同じモデルを Apache Spark のバッチ推論にも REST のリアルタイムのサービングにも使えるように決められた共通の形である。どの推論の方式を選んでも、モデルを作り直さずに済むのがこの形式の利点になる。
Databricks Certified Machine Learning Associateの演習アプリ(無料10問・全問は解錠で)へ