ユーザーが直面するコンポーネントを持つNatural Language Processingアプリケーションを開発しようとしています。ユーザーはAPIを介してモデルを呼び出し、結果を戻すことができます。 モデルはTheanoでKerasを使用して事前に訓練されています。 GPUを使用してトレーニングをスピードアップします。しかし、GPUを使用することで予測は大幅にスピードアップします。現在、2つのGPUを持つマシンがあります。しかし、実行時(例えば、ユーザがビットを向いている場合)には、CUDAを介してGPUを共有する複数のPythonプロセスが並列処理を高速化するようには見えないという問題があります。 libgpuarray(pygpu)、TheanoとKerasでnvidia-dockerを使用しています。 GPUはまだほとんどアイドルですが、Pythonワーカーを増やしても処理速度が向上しません。高負荷ストリームの予測時にCUDA GPUを使用する
APIの背後にあるGPUモデルを実行する際の問題を解決するには、どのような方法が適していますか?理想的には、新しいGPUを購入する前に、既存のGPUをより効率的に利用することができます。
HTTPコールごとにロックを要求するのではなく、GPUに送信する前に何らかのバッファを必要とすると思いますか?
正しく理解していれば、複数の異なるカーネル/プロセスが1つのGPUで同時に実行されることがありますか? AfaikのGPUは、少なくとも、すべてのカーネルが特定の数のスレッドブロックで起動されているときに、これをうまく利用できません。 – Shadow
これは実際には非常に広い質問です.CUDAの観点か、Pythonフレームワークのどこに関わっているのかを尋ねているかどうかはわかりません。 NVIDIAは、複数のプロセスがGPUに同時にアクセスする必要のあるMPIなどのユースケース向けのMPSという製品を配布しています。助けてくれますか? – talonmies
私はtalonmiesが問題を指摘し、解決策を提供したと信じています。異なるプロセスからのカーネルは別々のGPUコンテキストで実行され、[別々のコンテキストからのカーネルは同時に実行されません](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#concurrent-kernel -実行)。解決策は、他のプロセスに代わってカーネルを実行する "プロキシ"プロセスを使用して、すべてが同じコンテキストを共有することです。これはまさに[MPS](https://docs.nvidia.com/deploy/pdf/CUDA_Multi_Process_Service_Overview.pdf)と同じものです。 – tera