システム管理
MPSデーモンの利用
PostgreSQLのようにマルチプロセス環境でGPUを使用する場合、GPU側コンテキストスイッチの低減やデバイス管理に必要なリソースの低減を目的として、MPS(Multi-Process Service)を使用する事が一般的なソリューションです。
https://docs.nvidia.com/deploy/mps/index.html
PG-StromにおいてもMPSの利用を推奨していますが、下記の制限事項に対して注意が必要です。
1個のMPSデーモンがサービスを提供可能なクライアントの数は最大48個(Pascal世代以前は16個)に制限されています。 そのため、GPUを使用するPostgreSQLプロセス(CPU並列処理におけるバックグラウンドワーカを含む)の数が常に48個以下(Pascal世代以前は16個以下)である事を、運用上担保する必要があります。
MPSはDynamic Parallelismを利用するGPUプログラムに対応していません。 SQLから自動生成されたGPUプログラムが当該機能を利用する事はありませんが、PL/CUDAユーザ定義関数がCUDAデバイスランタイムをリンクし、サブカーネルを呼び出すなどDynamic Parallelismの機能を利用する場合には当該制限に抵触します。 そのため、PL/CUDA関数の呼び出しにおいてはMPSを利用しません。
MPSのドキュメントにはGPUの動作モードをEXCLUSIVE_PROCESS
に変更する事が推奨されていますが、PG-Stromを実行する場合はDEFAULT
動作モードで動作させてください。
上記のPL/CUDAを含む、いくつかの処理では明示的にMPSの利用を無効化してCUDA APIを呼び出しているため、MPSデーモン以外のプロセスがGPUデバイスを利用可能である必要があります。
MPSデーモンを起動するには以下の手順でコマンドを実行します。<UID>
はPostgreSQLプロセスのユーザIDに置き換えてください。
$ nvidia-cuda-mps-control -d
$ echo start_server -uid <UID> | nvidia-cuda-mps-control
nvidia-smi
コマンドによって、MPSデーモンがGPUデバイスを使用している事が分かります。
$ nvidia-smi
Sat Nov 3 12:22:26 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48 Driver Version: 410.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-PCIE... Off | 00000000:02:00.0 Off | 0 |
| N/A 45C P0 38W / 250W | 40MiB / 16130MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 11080 C nvidia-cuda-mps-server 29MiB |
+-----------------------------------------------------------------------------+
ナレッジベース
PG-Stromプロジェクトのwikiサイトには、ノートと呼ばれる詳細な技術情報が公開されています。