0

私は、ユーザが送信するすべてのメッセージをベクトルに変換する必要があるチャットボットを構築しています(他のML関連の作業の場合)。私はこれを行うには、事前に訓練されたWord2Vecモデルを使用しています。 Word2VecモデルはGensimライブラリを使用して作成され、ディスクに600MBのファイルとして保存され、Django/Python Webアプリケーションで使用されています。MLモデルを使用する多数のリクエストの処理

新しいメッセージがAPIリクエストとして受け取られるたびに、関数はword2Vecモデルを読み込み、そのオブジェクトを使用してメッセージのベクトルを生成します。これはリアルタイムで発生する必要があります。私は、新しいメッセージが受信されるたびに、アプリケーションがWord2Vecモデルのインスタンスをロードすることが心配です。同時に要求が多すぎるとメモリの問題が発生します(Word2Vecモデルのインスタンスが複数存在するためその時点でRAMに存在する)。あまりにも多くのメモリを使用しないようにメモリを効率的に処理するにはどうすればよいですか?

答えて

0

「ベクトル」を生成してすぐにユーザーに返す必要がありますか?そうでない場合は、celery workerにリクエストを渡すことを検討できます。

処理キューに割り当てるワーカーの数を選択して、メモリ使用量を管理可能なレベルに制限することができます。

+0

はいこれは即座に生成する必要があります。つまり、これはリアルタイムで発生します。 – Vinay

+1

[キューイング理論](https://en.wikipedia.org/wiki/Queueing_theory)を見ると、各タスクがすぐに対処されることを保証する唯一の方法は、タスクが到着すると期待するよりも多くの労働者を確保することです。これは、各作業者がモデルを実行できるように、十分なメモリが利用可能であることを意味します。それがあまりにも多くのメモリであれば、残念ながらタスクをキューに入れてセロリを処理する必要があります。 [Django Channels](https://channels.readthedocs.io/ja/latest/)のような電子メールを介してタスクの完了をユーザーに警告することができます。 –

関連する問題