heterodb/pg-strom

[v5.1] 実行環境に合わせたfatbinの生成

Closed this issue · 2 comments

#695 の派生問題。

最新のCUDA(12.3U1)でビルドしたバイナリが、CUDA12.2の環境ではバイナリ非互換で怒られる。
⇒GPUコードのビルド済み配布って難しくない?

  • CUDAのバージョン
  • NVIDIAドライバのバージョン
  • PostgreSQLのバージョン
  • OSの種類(RHEL、Ubuntu)

で別々に作らねばならないのは大変。
⇒PostgreSQL(PG-Strom)のインストール時や起動時にデバイスコードをビルドできるようにする。

/usr/local/pgsql-15/share/pg_strom の配下に、cuda_common.<CUDA_VERSION>_<DRIVER_VERSION>_<CHECKSUM>.fatbin みたいなファイルを放り込んで、存在しなければビルドする。

a151fd3c5b86a378ea3dde0a724b1d7345d3f170 にて対応。

PostgreSQLの初回起動時に $PGDATA/.pgstrom_fatbin ディレクトリ配下の fatbin ファイルを探る。
もしCUDAバージョンが違ったりすれば、再度ビルドを行って、実行環境に適合するものを作る。
これで、CUDAバージョンミスマッチによる不具合は回避できるはずだが…。

$ ls -l /opt/pgdata16/.pgstrom_fatbin/
total 5008
-rw-r--r--. 1 kaigai users 5120792 Mar  1 18:03 pgstrom-gpucode-V012020-979aca880b0e4a6f5095384688ee8516.fatbin
-rw-------. 1 kaigai users    2880 Mar  1 18:03 pgstrom-gpucode-V012020-979aca880b0e4a6f5095384688ee8516.fatbin.log

この変更はpg_strom-PG15-5.0-4.el8.x86_64には含まれていますか?

$ rpm -q pg_strom-PG15
pg_strom-PG15-5.0-4.el8.x86_64

CUDA 12.4環境でrpm版をテストしたら、「このPG-StromモジュールバイナリがビルドされたCUDAバージョン(12.2)は、このプラットフォーム上のCUDAランタイムバージョン(12.4)よりも新しいものです。予期せぬ動作を引き起こす可能性があるため、CUDAツールキットのアップグレードを推奨します。」と言われました。

LOG:  PG-Strom binary built for CUDA 12.2 (CUDA runtime 12.4, nvidia kmod: 550.54.14, nvidia-fs kmod: 2.19.6)
WARNING:  The CUDA version where this PG-Strom module binary was built for (12.2) is newer than the CUDA runtime version on this platform (12.4). It may lead unexpected behavior, and upgrade of CUDA toolkit is recommended.