heterodb/pg-strom

[VTJ-JP] CUDA 12.2 Update 1 + heterodb-extra 5.2 + PostgreSQL 16 won't start

Closed this issue · 9 comments

Install the new heterodb-extra.

[cloud-user@kujira src]$ sudo make install
Makefile:39: warning: ignoring prerequisites on suffix rule definition
mkdir -p /usr/include /usr/bin /usr/lib64
install -m 0755 heterodb_extra.so /usr/lib64/heterodb_extra.so.5.2
ln -sf heterodb_extra.so.5.2 /usr/lib64/heterodb_extra.so
install -m 0755 ssd2gpu_test /usr/bin

systemct status postgresql-16

░░ The job identifier is 2392.
Dec 18 04:49:38 kujira.vtj postgres[29662]: 2023-12-18 04:49:38.360 UTC [29662] LOG:  HeteroDB Extra module loaded [api_version=20231105,cufile=on,nvme_strom=off,githash=HEAD]
Dec 18 04:49:38 kujira.vtj postgres[29662]: 2023-12-18 04:49:38.360 UTC [29662] LOG:  HeteroDB License: { "version" : 2, "serial_nr" : "VTJ-TRIAL-KUJIRA", "issued_at" : "2023-01->
Dec 18 04:49:38 kujira.vtj postgres[29662]: 2023-12-18 04:49:38.360 UTC [29662] LOG:  PG-Strom version 5.0.1 built for PostgreSQL 16 (githash: 972441dbafed6679af86af40bc8613be2d7>
Dec 18 04:49:38 kujira.vtj postgres[29663]: (gpu_devattrs.h:121) failed on cuDeviceGetAttribute(HANDLE_TYPE_FABRIC_SUPPORTED): CUDA_ERROR_INVALID_VALUE
Dec 18 04:49:39 kujira.vtj postgres[29662]: 2023-12-18 04:49:39.027 UTC [29662] FATAL:  GPU device attribute collector exited with 1
Dec 18 04:49:39 kujira.vtj postgres[29662]: 2023-12-18 04:49:39.027 UTC [29662] LOG:  database system is shut down
Dec 18 04:49:39 kujira.vtj systemd[1]: postgresql-16.service: Main process exited, code=exited, status=1/FAILURE

Installed software:

  • RHEL 9.2
  • CUDA 12.2 Update 1
  • MLNX_OFED_LINUX-23.10-1.1.9.0
  • PostgreSQL 16.1

手元環境では確認していないのですが、1e93779f23030ea53c49c4609f7c7e645e25938a ではどうでしょうかね?
CUDA12.3環境でビルドしたバイナリを、CUDA12.2の環境で動かす、といったケースを想定です。

インストールとPostgreSQL16のサービス起動はしますが、PG-StromのGPUサービスが起動しませんでした。nvidia-smiを実行してもプロセスが表示されていません。

testdb=# CREATE EXTENSION pg_strom;
CREATE EXTENSION
testdb=# IMPORT FOREIGN SCHEMA apacheloggen
       FROM SERVER arrow_fdw
       INTO PUBLIC OPTIONS (dir '/opt/nvme/apacheloggen');
IMPORT FOREIGN SCHEMA

testdb=# SELECT count(*) FROM apacheloggen;
ERROR:  failed on connect('.pg_strom.33313.gpu0.sock'): No such file or directory

ログに次のメッセージが大量に出ています。

ERROR:  failed on cuLinkAddFile('/usr/pgsql-16/share/pg_strom/xpu_common.fatbin'): CUDA_ERROR_NO_BINARY_FOR_GPU
LOG:  background worker "PG-Strom GPU Service" (PID 34601) exited with exit code 1

うーん。これはやはりビルドした環境のCUDA + NVIDIA Driverバージョンに縛られてしまうのか…。

当面は実行環境と同じCUDA + NVIDIA Driverでビルドするようにしてください。対策は考えます。

いや、この問題はPG-Stromを動かしたい環境でビルドした結果がその様になってしまうというはなしです。
rpmパッケージではなくて、各環境でmake installをしています。ビルド前に前のビルドは消すようにしているので問題ないと思います。

sudo make uninstall PG_CONFIG=/usr/pgsql-16/bin/pg_config
make clean PG_CONFIG=/usr/pgsql-16/bin/pg_config

その環境で make した時に nvcc に渡っているオプションって出せますか?

↓こういうの

/usr/local/cuda/bin/nvcc  -I /usr/local/pgsql-15/include/server --fatbin --maxrregcount=128 --gpu-architecture=compute_60 --gpu-code=sm_60,sm_61,sm_70,sm_75,sm_80,sm_86 --threads 6 --source-in-ptx -DHAVE_FLOAT2 --relocatable-device-code=true -lineinfo -o cuda_gpupreagg.fatbin cuda_gpupreagg.cu

添付しました。

Make1219.log

--gpu-architecture=compute_60 --gpu-code=sm_60,sm_61,sm_70,sm_75,sm_80,sm_86 はきちんと付いてますね...。(;´・ω・)

ちょっとこちらも、RPMで入れたPostgreSQL 16相手で試してみます。

こちらでは再現せず、です。

ちょっと当該マシンで調べさせてもらえますか?

1e93779 で正常に動作しました。
後半は環境固有の問題でした。GPUとしてP100を使っている環境で、一部パッケージがCUDA 12.3 Update1とCUDA 12.2 Update1の混在している状況が原因でした。CUDA 12.2 Update1だけにしてGPU-Direct SQLまで動作を確認したので本件はクローズします。