248 Views
March 18, 24
スライド概要
2024年3月15日に 東京・大崎で開催した『 「GPUを活用したビッグデータ分析基盤を構築しよう」PG-Strom v5リリース記念』イベントでの 表記発表資料です。
イベントURL:
https://bakusokudb.connpass.com/event/311268/
「GPUを活用したビッグデータ分析基盤を構築しよう」 PG-Strom v5リリース記念イベント PG-Stromの性能評価レポート ~ Star Schema Benchmark を例に~ 2024/03/15 有限会社アートライ 坂井 恵
3 PG-Strom(イメージ)
自己紹介 • 坂井 恵(さかいけい) • 有限会社アートライ • 日本仮想化技術株式会社「爆速DB Powered by PG-Strom 」チームに参画中 爆速DBのアイキャッチ欲しいよね 「データベース」で「爆速」なイメー ジで、そうそう「PostgreSQL」のエク ステンションなのでぞうさんも! by Sak-AI 「爆速DBイメージキャラクタ-(非公認)」
この時間のお話 PG-Strom基礎知識 スタースキーマベンチマーク(ssb) ssbの理解 PG-Strom使用時のssb計測結果紹介
PG-Strom基礎知識(キーポイント) 概要は、この前のセッションで宮原さんが 詳細は、この後のセッションで海外さんが 説明してくれるので、私からはざっくりと説明すると: • 数千コアを持つGPUの能力を活用した並列処理による高速化 • 内部のデータ転送バスを効率よく活用しての高速化 • Apache Arrowファイルを使用可能 • 地理空間情報(GIS)データの検索も高速
PG-Stromを使ってほしい人(私見) • 大量のデータを持っていて、集計処理等をしたい人 • データ件数 数億件~ • データサイズ GBの後半からTB級~ • 特に 統計家 の人 にマッチしていると考えています
ベンチマーク実施の紹介
Star Schema Benchmark 概要 • OLAPでのDBMS性能測定ベンチマーク(DWH) • 売上データを中心として、周辺テーブルと結合するクエリを実施 • 数億件単位からのデータ量で測定実施される事が多い印象(私見)
Star Schema Benchmarkのテーブル • lineorderテーブルを中心としたスタースキーマ型のテーブル群 • 5つのテーブルからなる
Star Schema Benchmarkのテーブル customer --------------------------c_custkey | numeric c_name | character varying(25) c_address | character varying(25) c_city | character(10) c_nation | character(15) c_region | character(12) c_phone | character(15) c_mktsegment | character(10) part --------------------------p_partkey | integer p_name | character varying(22) p_mfgr | character(6) p_category | character(7) p_brand1 | character(9) p_color | character varying(11) p_type | character varying(25) p_size | numeric p_container | character(10) lineorder --------------------------lo_orderkey | numeric lo_linenumber | integer lo_custkey | numeric lo_partkey | integer lo_suppkey | numeric lo_orderdate | integer lo_orderpriority | character(15) lo_shippriority | character(1) lo_quantity | numeric lo_extendedprice | numeric lo_ordertotalprice | numeric lo_discount | numeric lo_revenue | numeric lo_supplycost | numeric lo_tax | numeric lo_commit_date | character(8) lo_shipmode | character(10) supplier --------------------------s_suppkey | numeric s_name | character(25) s_address | character varying(25) s_city | character(10) s_nation | character(15) s_region | character(12) s_phone | character(15) date1 --------------------------d_datekey | integer d_date | character(18) d_dayofweek | character(12) d_month | character(9) d_year | integer d_yearmonthnum | numeric d_yearmonth | character(7) d_daynuminweek | numeric d_daynuminmonth | numeric d_daynuminyear | numeric d_monthnuminyear | numeric d_weeknuminyear | numeric d_sellingseason | character(12) d_lastdayinweekfl | character(1) d_lastdayinmonthfl | character(1) d_holidayfl | character(1) d_weekdayfl | character(1)
Star Schema Benchmarkのクエリ • Q1~Q4 の4パート、計13個のクエリ • 各パートの特徴(一部) • Q1ではグルーピングなしで2テーブル結合での抽出 • Q2からQ4は4~5テーブル結合で、様々なグルーピング
Star Schema Benchmark のクエリ(参考)
データ件数 (参考)ssbデータ生成時の与パラメタと件数の対応 TABLE s10 s20 300,000 600,000 1,500,000 2,556 2,556 part 800,000 supplier 100,000 customer date1 lineorder s50 s100 s200 s400 3,000,000 6,000,000 12,000,000 2,556 2,556 2,556 2,556 1,000,000 1,200,000 1,400,000 1,600,000 1,800,000 200,000 500,000 1,000,000 2,000,000 4,000,000 59,986,052 119,994,608 300,005,811 600,037,902 1,200,018,434 2,400,012,063 lineorder生成時間 約30分 約65分 lineorderサイズ(¥d+) 175GB 350GB
データ件数 (参考)ssbデータ生成時の与パラメタと件数の対応 TABLE s10 s20 300,000 600,000 1,500,000 2,556 2,556 part 800,000 supplier 100,000 customer date1 lineorder s50 s100 s200 s400 3,000,000 6,000,000 12,000,000 2,556 2,556 2,556 2,556 1,000,000 1,200,000 1,400,000 1,600,000 1,800,000 200,000 500,000 1,000,000 2,000,000 4,000,000 59,986,052 119,994,608 300,005,811 600,037,902 1,200,018,434 2,400,012,063
Star Schema Benchmark 概要まとめ • lineorderテーブルを中心とする 5つのテーブル • Q1_1 から Q4_3 までの13個のクエリ • データ生成時のパラメタで件数を調整できるが、 今回は、lineorderが24億件のデータセットで実施
今回の Star Schema Benchmark実施条件 • CPU: AMD EPYC 7443 24-Core Processor (24 cores/48 Processsors) • OS : Red Hat Enterprise Linux release 8.8 (Ootpa) • Memory : 131,330,728 kB • GPU : NVIDIA A100 80GB PCIe (6,912 Cuda cores) • CUDA Version : 12.3 • PostgreSQL Version : 16.1
Star Schema Benchmark実施結果 (s=400) PG-Strom async=18 (sec) ssbm処理時間 s=400 CPU(青) vs GPU(橙) (async=18) 90 x3.30 x3.29 x3.28 x3.15 x2.54 x2.89 x2.31 x3.25 x3.26 x3.22 x4.62 x3.49 Q4_1 Q4_2 x3.71 80 70 60 50 40 30 20 10 0 Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_1 Q3_2 Q3_3 Q3_4 Q4_3
Star Schema Benchmark • 前のページの結果はPG-Stromのpg_strom.max_async_task パラ メタの値を "18" に設定して実施したもの(これが最適値だった) • pg_strom.max_async_task パラメタ値により速度は変化(環境に依存) • 例として pg_strom.max_async_task = 12 で実施した結果を次 ページに示す
Star Schema Benchmark実施結果 (s=400) PG-Strom async=12 (sec) ssbm s=400 90 x2.39 x2.40 x2.40 x2.18 x1.93 x2.15 x2.15 x2.26 x2.38 x2.38 x3.27 x2.86 x2.89 80 70 60 50 40 30 20 10 0 Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_1 CPU GPU avg. avg. Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3
再掲 Star Schema Benchmark実施結果 (s=400) (sec) PG-Strom async=18 90 ssbm s=400 CPU vs GPU(async=18) x3.30 x3.29 x3.28 x3.15 x2.54 x2.89 x2.31 x3.25 x3.26 x3.22 x4.62 x3.49 x3.71 80 70 60 50 40 30 20 10 0 Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_1 Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3
(参考) s10~s400 results (処理時間) (unit. ms) ssbm on Shachi s=10 4,000 3,000 ssbm on Shachi s=20 5,000 12,000 4,000 10,000 8,000 3,000 2,000 6,000 2,000 1,000 4,000 1,000 0 2,000 0 CPU GPU avg. avg. 0 ssbm on Shachi s=100 20,000 15,000 10,000 5,000 0 ssbm on Shachi s=50 CPU GPU CPU GPU avg. avg. avg. avg. ssbm on Shachi s=200 ssbm on Shachi s=400 50,000 100,000 40,000 80,000 30,000 60,000 20,000 40,000 10,000 20,000 0 0 CPU GPU CPU GPU CPU GPU avg. avg. avg. avg. avg. avg.
件数増大に伴うCPU/GPU処理時間変化 s=10での実施結果を 1.0 とした場合の処理時間の比率 データサイズごとの処理時間比(CPU) (sec) (横軸:sパラメタ値) データサイズごとの処理時間比(GPU) (sec) 70 45 40 60 35 50 30 40 25 30 20 15 20 10 10 0 5 0 50 100 150 200 250 300 350 Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3 400 Q3_1 450 0 0 50 100 150 200 250 300 350 Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3 400 Q3_1 → ssb計測に於いて、PG-Strom(GPU)では、件数の増大に伴う処理 時間がリニアとなる 450
(付録)PG-Stromパッケージを使用したssb実施方法 • PG-Stromのソースコードを取得 • https://github.com/heterodb/pg-strom • pg-strom/test/ssbm に移動し、データ生成ツールを make • → dbgen-ssbm ツールの実行ファイルが生成される • PostgreSQL上に ssb DBとテーブル群を作成 • $ createdb -Upostgres ssb --tablespace=XXXX • $ psql -Upostgres ssb -f ./ssbm-ddl.sql • データを生成 time time time time time echo echo echo echo echo "¥¥copy "¥¥copy "¥¥copy "¥¥copy "¥¥copy customer date1 part supplier lineorder • ベンチマーク実行 FROM FROM FROM FROM FROM PROGRAM PROGRAM PROGRAM PROGRAM PROGRAM './dbgen-ssbm './dbgen-ssbm './dbgen-ssbm './dbgen-ssbm './dbgen-ssbm -Tc -Td -Tp -Ts -Tl -X -X -X -X -X -s -s -s -s -s 100' 100' 100' 100' 100' DELIMITER DELIMITER DELIMITER DELIMITER DELIMITER '|';" '|';" '|';" '|';" '|';" | | | | | psql psql psql psql psql -Upostgres -Upostgres -Upostgres -Upostgres -Upostgres ssb ssb ssb ssb ssb • $ ./run-ssbm.sh ssb またはユーザ名を指定する場合は、 • $ ./run-ssbm.sh "-Upostgres ssb" • 結果ログ確認 • ~/ssbm-logs/ に出力されたログを確認する • explain の結果とクエリ実施結果が出力されます ログファイル例: log_strom_*_20240315a.txt log_strom_*_20240315b.txt log_strom_*_20240315c.txt log_pgsql_*_20240315a.txt log_pgsql_*_20240315b.txt log_pgsql_*_20240315c.txt
今日のおはなし(まとめ) • PG-Stromの概要概要を紹介しました。GPU+内部転送速度 • ベンチマーク手法のひとつである Star Schema Benchmark(ssb) がどのようなものかを紹介しました • PG-Stromを用いたssbベンチマーク結果を紹介しました • PG-Stromを用いたssbベンチマーク実施方法を紹介しました
お問い合わせ先 メールにて [email protected] 評価したい等々、 お気軽にお問い合わせください