私は機械学習モデルをローカルに開発し、Azure関数を使用してWebサービスとして展開したかったのです。Azure関数を使用したPythonマシン学習モデルのデプロイ
最初のモデルでは、pickleモジュールを使用してバイナリに保存してから、Azure Function(Python言語、http-triggerサービス)インスタンスに関連付けられたBLOBストレージにアップロードしました。 predict_probaトレーニングとSCSのために使用される訓練されたモデルの方法であって
import json
import pickle
import time
postreqdata = json.loads(open(os.environ['req']).read())
with open('D:/home/site/wwwroot/functionName/model_test.pkl', 'rb') as txt:
mod = txt.read()
txt.close()
model = pickle.loads(mod)
scs= [[postreqdata['var_1'],postreqdata['var_2']]]
prediciton = model.predict_proba(scs)[0][1]
response = open(os.environ['res'], 'w')
response.write(str(prediciton))
response.close()
:
そして、すべての必要なモジュールをインストールした後、次のコードは、サンプルデータにpredicitionを作製するために使用しました。変数は、POST要求から特定の値(モデルの変数の値)を抽出するために定義されます。
全体コードは正常に動作し、予測は応答として送信されますが、値は正しいですが、要求を送信した後の実行は150秒間続きます! (ローカルでは1秒未満です)。さらに、コードのどの部分が長くかかるかを測定しようとすると、10行目(pickle.loads(mod))になります。
なぜこのような膨大な時間がかかるのですか?モデルサイズは非常に小さい(数kB)。
おかげ
私のコードでAMLを呼び出すのではないことに注意してください。単純なHTTPトリガAzure関数です。 unpickling部分だけが非常に遅いです。 –
@a_kord申し訳ありません。この問題は、https://github.com/Azure/azure-webjobs-sdk-script/issues/1626を参照してください。多分あなたは手がかりを得ることができます。 –