2017-05-07 11 views
3

Algorithmiaで詳細な学習機能を呼び出し、結果に対して後処理を行い、その後いくつかのデータを返すAWSラムダ関数があります。 Algorithmiaは私が使用しているpython clientを提供しています。それは、Algorithmiaプラットフォーム上のアルゴリズムに要求を送信するのを少し簡単にします。AWS Lambda long running HTTPリクエスト

問題は次のとおりです。Algorithmia関数がしばらく呼び出されていないときに、アンロードされ、それをウォームアップ(コールドスタート)する最初の呼び出しに30秒かかることがあります。私のラムダ関数が、非常に高価で無駄になるであろうコールドスタートからAlgorithmia関数をトリガーしているときはいつでも、応答のために30秒待つことになります。

ラムダでHTTPリクエストを送信する方法はありますか?リクエストが終了すると、結果が新しいラムダ関数にパイプされ、ラムダ関数が時間を費やしてリソースを無駄にする必要はありません。私はそれが実際にどのように機能するのか分からないので、私は期待しません。誰かが、応答のためにしばらく待つのを避け、ラムダのリソースを無駄にしないように他のアイディアを持っていますか?

編集:ほとんどのケースで(Algorithmiaアルゴリズムは、コールドスタートからロードするために時間がかかり、明らかにするものを除く)のレイテンシが問題であると私はAlgorithmiaでいくつかの問題を回避する方法を行うことで、待ち時間を増加する余裕がありませんそれはS3への応答(例えば)を書いてからラムダ関数をトリガーする関数です。

+0

これはどのような環境で実行されていますか?デスクトップ?ウェブサーバー? Linux? Windows? – wallyk

+0

申し訳ありませんが、私はあなたが何を意味するか分からない。あなたが求めているのであれば、AlgorithmiaはホステッドクラウドMLサービスです。 – abagshaw

+0

私はラムダがAlgorithmaを操作するのと同じトリガーを持つVM(ワーカーマシン)を使用する以外に、結果を処理するか、後処理のためにラムダをトリガーするキューに渡します。 – johni

答えて

0

ラムダ関数を作成して、Algorithmia APIを呼び出すことができます。これは、メイン処理関数で「暖かく保つ」ためのものです。あなたはこのためにラムダのスケジュールされたイベントを使用することができます。

+0

私は@joarleymoraesに同意します。これは私がping関数と呼ぶものです。それは必ずしも別個のラムダ関数である必要はなく、特定のペイロードが渡されたときにその機能を既存の関数に追加することができます。クラウドウォッチイベント(ラムダのスケジューリングメカニズム)では、ペイロードを関数に渡すことを指定します。{"ping":True}のように、ラムダ関数ではいつでもイベントを取得して暖かく保つためにAlgorithmiaを呼び出します。必要に応じて、毎分まで実行するようにスケジュールできます。 – alanwill

+0

これはいくつかのケースでは実行可能ですが、「暖かく保つ」ように頻繁に呼び出さなければならないことについて、多くの保証はありません。ラムダを30秒間稼動させるコストに敏感であれば、その機能に常にpingをかけるコストに敏感かもしれないと思います。 (編集:私はオリジナルの質問の "コスト感度"を誤解しているようです) – anowell

1

ファイルを出力する多くのAlgorithmia関数では、出力場所を指定できます(多くの場合、入力JSONのoutputパラメータ)。その仮定があなたのケースに当てはまるならば、Algorithmia関数にS3バケットに直接書き込ませ、S3に別のラムダ関数をトリガさせることができます。あなたのAlgorithmiaアカウントに

  • Add an S3 data source、および必要に応じて権限を設定:プロセスは次のようになります。

  • アルゴリズムを呼び出すときは、S3データソースを使用するように出力パラメータを設定します。 "output": "s3://algorithm-name/sample-0001.png"

  • 出力を無視するように、Algorithmiaのpythonクライアントを設定します。これは、要求が代わりに完了するの機能を待つのですぐに復帰するために発生します

from Algorithmia.algorithm import OutputType 

client.algo("username/algoname") 
    .set_options(output=OutputType.void) 
    .pipe(input) 
+1

あなたの考えに感謝しますが、私の記事の編集を見ると、この種の解決策は私のニーズにはおそらくうまくいかないでしょう。すべてのmsがS3にファイルを数えて書き込んだ後、ラムダ関数をトリガすると、少なくとも数百ms(またはおそらく数秒 - 私はどれくらい速いか分かりません)のコストがかかります。 – abagshaw

+0

ああ...私はレイテンシーではなく価格設定の問題として「高価」と誤解していました。 @joarleymoraesで述べられているように定期的にサービスにpingをかけることは今日の選択肢です。 – anowell