システム管理

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サイトには、ノートと呼ばれる詳細な技術情報が公開されています。

https://github.com/heterodb/pg-strom/wiki