EDB Postgres AIยทApache Spark GPU ๊ฐ์ ๊ตฌ์ถ ๊ฐ์ด๋
์์ฑ์ผ: 2026๋ 3์ 16์ผ
์์ฑ์: Dunith Danushka
์ด ๊ธ์ EDB Postgres์์ GPU ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ ์ถ์ ๋ธ๋ก๊ทธ์ ํ์ ํธ์ฆ์จ ํํ ๋ฆฌ์ผ์ ๋๋ค. ์ฌ๊ธฐ์๋ NVIDIA RAPIDS Accelerator for Apache Spark๋ฅผ ์ฌ์ฉํด EDB Postgres ์ฟผ๋ฆฌ๋ฅผ GPU๋ก ๊ฐ์ํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํฉ๋๋ค. EDB Postgres AI์ Apache Spark ํด๋ฌ์คํฐ๋ฅผ ํตํฉํ๊ณ , CPU ์ ์ฉ ํ๊ฒฝ์์ ์ฐ๊ฒฐ์ ๊ฒ์ฆํ ๋ค NVIDIA Brev์ L40S GPU ํ๊ฒฝ์์ TPC-DS ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค. ๋ฐ์ดํฐ ์์ง๋์ด, ๋ฐ์ดํฐ ๊ณผํ์, ์๋ฃจ์ ์ํคํ ํธ๊ฐ ๊ณ ์ฑ๋ฅ ๋ถ์ ํ๊ฒฝ์ ์ง์ ๊ตฌ์ฑํ๋ ๋ฐ ํ์ํ ๋ช ๋ น์ด์ ์ค์ ์ ํ์ธํ ์ ์์ต๋๋ค.
์ค์ต์ ๋ฐ๋ก ์์ํ ์ ์๋๋ก ํ์ํ Docker Compose ์คํ๊ณผ ์ค์ ์ด ํฌํจ๋ GitHub ์ ์ฅ์๋ฅผ ํจ๊ป ์ ๊ณตํฉ๋๋ค.
๋ณธ ๊ฐ์ด๋๋ ๋ ๊ฐ์ง ์ฃผ์ ํํธ๋ก ๋๋ฉ๋๋ค.
- Part 1: CPU ์ ์ฉ ์คํ์ผ๋ก ๋ก์ปฌ ๊ฒ์ฆ: CPU๋ง์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ํ๊ฒฝ์์ ์ ์ฒด ์คํ์ ๊ตฌ์ฑํ๊ณ , ์ด์ ํ๊ฒฝ์ผ๋ก ์ฎ๊ธฐ๊ธฐ ์ ์๊ท๋ชจ TPC-DS ๋ฐ์ดํฐ์ (SF10)์ผ๋ก ์ฐ๊ฒฐ์ฑ์ ํ์ธํฉ๋๋ค.
- Part 2: NVIDIA Brev ํ๊ฒฝ์์ ์คํ: GPU ๊ฐ์ ์คํ์ ๋ฐฐํฌํฉ๋๋ค. NVIDIA L40S GPU๊ฐ ํ์ฌ๋ Brev VM์ ์ฌ์ฉํ์ฌ spark-rapids ๊ฐ์์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ์ง์ ํ์ธํฉ๋๋ค.
Part 1: CPU ์ ์ฉ ์คํ์ผ๋ก ๋ก์ปฌ ํ๊ฒฝ ๊ฒ์ฆํ๊ธฐ
Brev ํ๊ฒฝ์ NVIDIA L40S๋ก ํ์ฅํ๊ธฐ์ ์์, ๋ก์ปฌ ํ๊ฒฝ์์ ๊ตฌ์ฑ์ ๋จผ์ ๊ฒ์ฆํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ์ด โCPU ์ ์ฉ(CPU-only)โ ๋จ๊ณ์์๋ ํด๋ผ์ฐ๋ GPU ๋น์ฉ์ ๋ค์ด์ง ์๊ณ ๋ EDB Postgres AI์ OSS Apache Spark ํด๋ฌ์คํฐ ๊ฐ์ ์ฐ๊ฒฐ์ ์ถฉ๋ถํ ํ ์คํธํ ์ ์์ต๋๋ค.
์ปดํฌ๋ํธ ์ํคํ ์ฒ
์คํ์ ์คํํ๊ธฐ ์ ์ ๊ฐ ๊ตฌ์ฑ ์์๊ฐ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ Postgres๊ฐ ์ธํฐํ์ด์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , Apache Spark ํด๋ฌ์คํฐ๊ฐ ๊ณ ์ฑ๋ฅ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ โ์คํ ๋ฆฌ์ง์ ์ปดํจํ ์ ๋ถ๋ฆฌ(Separation of Storage and Compute)โ ๋ชจ๋ธ์ ๊ตฌ์ถํ ๊ฒ์ ๋๋ค.

๋ก์ปฌ์์ ์คํํ๋ Brev ํ๊ฒฝ์์ ์คํํ๋ ํต์ฌ ์ปดํฌ๋ํธ ์ํคํ ์ฒ๋ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค.
- EDB Postgres (๊ฒ์ดํธ์จ์ด): EDB Analytics Accelerator(AA) ํ์ฅ์ด ํฌํจ๋ ์ ์ฉ Postgres 17 ์ปจํ ์ด๋์ ๋๋ค. ๋ชจ๋ SQL ์ฟผ๋ฆฌ์ ์ง์ ์ (Entry point) ์ญํ ์ ํฉ๋๋ค.
- OSS Apache Spark Master: ์์ ๋ถ์ฐ์ ์กฐ์จํ๋ ์ปจํธ๋กค ํ๋ ์ธ(Control plane)์ ๋๋ค. ํ์ค OSS Apache Spark 3.5.6์ ์ฌ์ฉํ์ฌ PGAA๊ฐ ๊ด๋ฒ์ํ ๋ฐ์ดํฐ ์ํ๊ณ์ ์ผ๋ง๋ ์ํํ๊ฒ ํตํฉ๋๋์ง ์ฆ๋ช ํฉ๋๋ค.
- OSS Apache Spark Workers: ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ปค ๋ ธ๋์ ๋๋ค.
- Spark Connect (๋ธ๋ฆฟ์ง): Postgres์ Spark ํด๋ฌ์คํฐ ์ฌ์ด์ ์ธํฐํ์ด์ค ์ญํ ์ ํฉ๋๋ค. ์ต์ Spark Connect ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ ๋ฌํฉ๋๋ค.
ํ๊ฒฝ์ ๋ฐ๋ผ ํ ๋น๋ ๋ฆฌ์์ค๋ GPU ๊ฐ์ ์ฌ๋ถ์ ์ฐจ์ด๋ ์์ง๋ง, EDB Postgres, Spark Master, Spark Worker, Spark Connect๋ก ์ด์ด์ง๋ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๋ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค.
์ฌ์ ์ค๋น ์ฌํญ ๋ฐ ํ๊ฒฝ ์ ๊ฒ
์์ํ๊ธฐ ์ ์ ๋ก์ปฌ ํ๊ฒฝ์ด ๋ค์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ์ธ์. ๋ก์ปฌ GPU๊ฐ ์๋๋ผ๋ ๊ฑฑ์ ํ์ง ๋ง์ธ์. ๋ ธํธ๋ถ์์ ์ด๊ธฐ ๊ฐ๋ฐ ๋ฐ ๊ฒ์ฆ์ ์งํํ ํ, ์ค์ ๋๋ ์ฐ์ฐ ์์๋ง Brev ์ธ์คํด์ค๋ก ์ ํํ๋ฉด ๋ฉ๋๋ค.
- EDB Token: EDB Postgres Analytics Accelerator(PGAA) ํ์ฅ์ ๋ด๋ ค๋ฐ๊ธฐ ์ํด
EDB_TOKEN์ด ํ์ํฉ๋๋ค. [EDB ๊ณ์ ๋ฑ๋ก ํ์ด์ง]์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ผ์ธ์. - Docker Desktop: ๋ฒ์ 4.x ์ด์ (Docker Compose V2 ํฌํจ).
- ์์คํ
๋ฆฌ์์ค (๋ก์ปฌ): CPU: 4์ฝ์ด ์ด์.
- RAM: ์ต์ 16GB (TPC-DS SF10 ์ค์ต์ ์ํด 32GB ๊ถ์ฅ).
- ๋์คํฌ: ์ฌ์ ๊ณต๊ฐ 50GB ์ด์.
- Git ํด๋ผ์ด์ธํธ: ์ ์ฅ์ ํด๋ก ์ ์ํ Git ๋๊ตฌ.
- AWS CLI: TPC-DS SF10 ๋ฐ์ดํฐ์ ๋ค์ด๋ก๋๋ฅผ ์ํด ๋ก์ปฌ์ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ ํ๋ ค๋ฉด ๋ชจ๋ docker-compose ๋งค๋ํ์คํธ์ PGAA ์ค์ ์ด ํฌํจ๋ ์ค์ต์ฉ GitHub ์ ์ฅ์์ ์ ๊ทผํด์ผ ํฉ๋๋ค.
CPU ์ ์ฉ ์คํ ์คํ
๋ก์ปฌ ํ๊ฒฝ์ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๊ณ ๋ คํ์ฌ, ์ํํ ํ ์คํธ๋ฅผ ์ํด ์๋์ ์ผ๋ก ์์ ๋ฐ์ดํฐ์ ์ธ TPC-DS SF10์ ์ฌ์ฉํฉ๋๋ค.
ํฐ๋ฏธ๋์์ ํด๋ก ํ ์ ์ฅ์๋ก ์ด๋ํ์ฌ EDB_TOKEN์ ์ค์ ํ ๋ค, ํ๋ก์ ํธ ๋ก์ปฌ ๋๋ ํ ๋ฆฌ์ ๋ฐ์ดํฐ์
์ ๋ค์ด๋ก๋ํฉ๋๋ค.
Bash
# EDB ํ ํฐ ๋ด๋ณด๋ด๊ธฐ
export EDB_TOKEN=<๋ฐ๊ธ๋ฐ์_ํ ํฐ_์
๋ ฅ>
# ์ ์ฅ์ ํด๋ก ๋ฐ ์ด๋
git clone https://github.com/EnterpriseDB/spark-rapids-tutorial.git
cd spark-rapids-tutorial/cpu-only
# ๋ฐ์ดํฐ์
๋ค์ด๋ก๋
aws s3 cp s3://beacon-analytics-demo-data-us-east-1-prod/tpcds_sf_10 ./data/tpcds_sf_10 --recursive --no-sign-request
์ด์ ๋ค์ ๋ช ๋ น์ด๋ก ์คํ์ ์คํํฉ๋๋ค.
Bash
docker compose up -d --build
์ด ๋ช
๋ น์ EDB Postgres ์ปจํ
์ด๋๋ฅผ ๋น๋ํ๊ณ , Spark ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ OSS Apache Spark 3.5.6 ํด๋ฌ์คํฐ๋ฅผ ์์ํฉ๋๋ค. CPU ์ ์ฉ ๋ฒ์ ์ nvidia ๋ฐํ์๊ณผ spark-rapids jar ํ์ผ์ ์ ์ธํ๋ฉฐ, ํ์ค Spark CPU ์คํ ๋ฐฉ์์ ์์กดํฉ๋๋ค. ์ปจํ
์ด๋๊ฐ ๊ฐ๋๋๋ฉด docker ps๋ฅผ ์คํํ์ฌ postgres, spark-master, spark-worker-0, spark-connect ๋ฑ 4๊ฐ์ ์ปจํ
์ด๋๊ฐ ์ ์ ์๋ ์ค์ธ์ง ํ์ธํ์ธ์.
Postgres์์ Spark ์ฟผ๋ฆฌ ์คํ
์ด์ Postgres ์ปจํ
์ด๋๊ฐ Spark ํด๋ฌ์คํฐ์ ์ ์์ ์ผ๋ก ์ ๊ทผํ ์ ์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. Postgres ์ปจํ
์ด๋์ ์ ์ํ์ฌ psql ์
ธ์ ์คํํฉ๋๋ค.
Bash
docker compose exec postgres psql -U postgres
๋จผ์ EDB Postgres Analytics Accelerator(pgaa) ํ์ฅ์ ํ์ฑํํฉ๋๋ค.
SQL
CREATE EXTENSION IF NOT EXISTS pgaa CASCADE;
๊ทธ๋ค์ \dx ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด pgaa์ pgfs ํ์ฅ์ด ๋ชจ๋ ์ค์น๋์๋์ง ํ์ธํฉ๋๋ค. ์ด์ ์คํ ์์ง์ ๊ธฐ๋ณธ๊ฐ์ธ seafowl์์ spark-connect๋ก ๋ณ๊ฒฝํ๊ธฐ ์ํด ์๋์ GUC(Grand Unified Configuration) ์ค์ ์ ์คํํฉ๋๋ค.
SQL
SET pgaa.executor_engine = 'spark_connect';
SET pgaa.spark_connect_url = 'sc://spark-connect:15002';
pgaa.spark_connect_url ์ค์ ์ 15002 ํฌํธ์์ ์คํ ์ค์ธ spark-connect ์ปจํ
์ด๋์ ์ฐ๊ฒฐ URL์ ์ง์ ํ์ฌ Postgres์ Spark ํด๋ฌ์คํฐ ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ฐ๊ฒฐ์ด ์ ์์ ์ธ์ง Spark ๋ฒ์ ์ ์ฟผ๋ฆฌํ์ฌ ํ์ธํฉ๋๋ค.
SQL
SELECT pgaa.spark_sql('SELECT version()');
Spark ๋ฒ์ ์ด ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ค๋ฉด ์ฑ๊ณต์
๋๋ค. \q๋ฅผ ์
๋ ฅํด ์
ธ์ ๋น ์ ธ๋์ต๋๋ค.
๊ทธ๋ค์, TPC-DS ํ
์ด๋ธ์ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ธ ์ฐจ๋ก์
๋๋ค. ์ ์ฅ์์ ํฌํจ๋ create_tables_for_spark_sf10.sql ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ DDL ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค.
Bash
cat create_tables_for_spark_sf10.sql | docker exec -i postgres psql -U postgres -d postgres
์ด ์คํฌ๋ฆฝํธ๋ ๋ด๋ถ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํฉ๋๋ค.
- ์คํ ๋ฆฌ์ง ์์น ์์ฑ: ๋ค์ด๋ก๋ํ TPC-DS ๋ฐ์ดํฐ๊ฐ ์๋ ์์น๋ฅผ
pgfs๋ฅผ ํตํด ๋งคํํฉ๋๋ค.SELECT pgfs.create_storage_location('spark_sf10', 'file:///data/tpcds_data'); - ํ
์ด๋ธ ์์ฑ: ๊ฐ ํ
์ด๋ธ์
pgaa์ง์์ด๋ฅผ ํตํด Parquet ํ์์ ํ์ผ์ ๋ก๋ํ๋๋ก ์ค์ ๋ฉ๋๋ค.CREATE TABLE customer_address () USING PGAA WITH (pgaa.storage_location = 'spark_sf10', pgaa.path = 'customer_address', pgaa.format = 'parquet');
๋ง์ง๋ง์ผ๋ก, psql ํฐ๋ฏธ๋์์ ์ํ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ โCPU ๊ธฐ์ค ์ฑ๋ฅ(CPU Baseline)โ์ ์ธก์ ํฉ๋๋ค. ์ด ์์น๋ ๋์ค์ GPU ๊ฐ์ ํ๊ฒฝ์ผ๋ก ์ฎ๊ฒผ์ ๋ ์ฑ๋ฅ ํฅ์ ํญ์ ๋น๊ตํ๋ ์ค์ํ ๊ธฐ์ค์ ์ด ๋ฉ๋๋ค.
SQL
WITH customer_total_return AS (
SELECT
sr_customer_sk AS ctr_customer_sk,
sr_store_sk AS ctr_store_sk,
SUM(sr_return_amt) AS ctr_total_return
FROM store_returns, date_dim
WHERE sr_returned_date_sk = d_date_sk
AND d_year = 2000
GROUP BY sr_customer_sk, sr_store_sk
)
SELECT c_customer_id
FROM customer_total_return ctr1, store, customer
WHERE ctr1.ctr_total_return > (
SELECT AVG(ctr_total_return) * 1.2
FROM customer_total_return ctr2
WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk
)
AND s_store_sk = ctr1.ctr_store_sk
AND s_state = 'TN'
AND ctr1.ctr_customer_sk = c_customer_sk
ORDER BY c_customer_id
LIMIT 100;
CPU ์ ์ฉ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด Spark ํด๋ฌ์คํฐ๊ฐ ํ์ค Java ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. SF10 ๋ฐ์ดํฐ์ ์์๋ ์ด ์์ ์ ์ด๋ ์ ๋ ์๊ฐ์ด ์์๋ ๊ฒ์ ๋๋ค. ๋์ค์ L40S GPU ํ๊ฒฝ์์ ๊ฒฝํํ๊ฒ ๋ โ์ฆ๊ฐ์ ์ธโ ๊ฒฐ๊ณผ์ ๋น๊ตํ๊ธฐ ์ํด ์คํ ์๊ฐ์ ๋ฉ๋ชจํด ๋์ธ์.
Postgres์ Spark๊ฐ ์ฑ๊ณต์ ์ผ๋ก ํต์ ํ๋ ๊ฒ์ ํ์ธํ๋ค๋ฉด, ์ด์ spark-rapids์ ์ง์ ํ ์๋ ฅ์ ์ฒดํํ๊ธฐ ์ํด Part 2: Brev ํ๊ฒฝ ๋ฐฐํฌ ๋จ๊ณ๋ก ๋์ด๊ฐ ์ค๋น๊ฐ ๋์์ต๋๋ค.
Part 2: NVIDIA Brev ํ๊ฒฝ์์ ์คํํ๊ธฐ
๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ถ์์ ์ํด, ์ฐ๋ฆฌ๋ L40S GPU๊ฐ ํ์ฌ๋ NVIDIA Brev VM์ ์ฌ์ฉํฉ๋๋ค. NVIDIA Brev๋ ์จ๋๋งจ๋ GPU ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ ํด๋ผ์ฐ๋ ํ๋ซํผ์ ๋๋ค. ๊ฐ๋ ฅํ ๊ณ์ฐ ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ด ํ์์ ์ธ spark-rapids ์ํฌ๋ก๋๋ฅผ ์ํด, ๊ณ ์ฑ๋ฅ L40S GPU๋ฅผ ํ๋ก๋น์ ๋ํ์ฌ ์ค์ต์ ์งํํด ๋ณด๊ฒ ์ต๋๋ค.
1. Brev ์ธ์คํด์ค ํ๋ก๋น์ ๋
๊ฐ์ฅ ๋จผ์ , L40S ์ธ์คํด์ค๋ฅผ ์คํํ ์ ์๋ ์ถฉ๋ถํ ํฌ๋ ๋ง์ด Brev ๊ณ์ ์ ์๋์ง ํ์ธํ์ธ์. ๋ณธ ๊ฐ์ด๋์์ ๊ตฌ์ถํ๋ ์ธ์คํด์ค์ ๋น์ฉ์ ์๊ฐ๋น ์ฝ $2~$3์ ๋๋ค.
Brev ์ฝ์์ ๋ก๊ทธ์ธํ ๋ค, ์๋จ ๋ฉ๋ด์์ GPUs๋ฅผ ์ ํํ๊ณ Create Environment๋ฅผ ํด๋ฆญํ์ฌ ์๋ก์ด GPU ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.

๋ณธ ํํ ๋ฆฌ์ผ์ ์๋์ ๊ฐ์ ์ฌ์์ Brev ์ธ์คํด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ตฌ์ฑ๋์์ต๋๋ค.
- ์ธ์คํด์ค ๋ชจ๋ (Instance Mode): VM Mode
- GPU: 2x NVIDIA L40S (๊ฐ 48GB VRAM)
- ์ปดํจํ (Compute): 16 vCPUs
- ๋ฉ๋ชจ๋ฆฌ (Memory): 294 GiB RAM
- ์คํ ๋ฆฌ์ง (Storage): 1.94TB ๋์คํฌ (SF100 ๋ฐ์ดํฐ๋ฅผ ์ํด NVMe ๊ถ์ฅ)
์ต์ 1๊ฐ ์ด์์ GPU๊ฐ ์๋ Brev ์ธ์คํด์ค๋ผ๋ฉด ์ค์ต์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ง, ๊ฐ์ด๋์ ๋ค๋ฅธ ๊ตฌ์ฑ์ ์ฌ์ฉํ ๊ฒฝ์ฐ docker-compose.yml ํ์ผ์์ GPU ๊ฐ์ ์ค์ ์ ํด๋น ์ฌ์์ ๋ง๊ฒ ์์ ํด์ผ ํ๋ค๋ ์ ์ ์ ์ํ์ธ์.
VM ์ธ์คํด์ค ํ๋ก๋น์ ๋์๋ ์ฝ 2~3๋ถ์ด ์์๋ฉ๋๋ค. ๋๊ธฐํ๋ ๋์ ๋ก์ปฌ ๋จธ์ ์ Brev CLI๋ฅผ ์ค์นํ๊ณ , ์ฝ์์ Using Brev CLI (SSH) ์ง์นจ์ ๋ฐ๋ผ ์ค์ ์ ์๋ฃํ์ธ์. ๋ณธ ๊ฐ์ด๋์ ๋ชจ๋ ์ํธ์์ฉ์ ์ฃผ๋ก ์ด CLI๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.

2. ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ๋ฐ ๋๋ ํ ๋ฆฌ ๊ถํ ์ค์
ํ๋ก๋น์ ๋์ด ์๋ฃ๋๋ฉด CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ์ ์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ธ์คํด์ค ์ด๋ฆ์ tutorial์ด๋ผ๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
Bash
brev shell tutorial
์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์์ฑํ VM ์ธ์คํด์ค์ SSH ์ฐ๊ฒฐ์ด ํ์ฑํ๋์ด, ์๊ฒฉ ๋จธ์ ์์ ์ง์ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ ์ํํธ์จ์ด๋ฅผ ์ค์นํ ์ ์๋ ์ํ๊ฐ ๋ฉ๋๋ค.
๋ค์์ผ๋ก, nvtop๊ณผ AWS CLI๋ฅผ ์ค์นํฉ๋๋ค.
Bash
sudo apt install awscli nvtop
- nvtop: GPU ์ฌ์ฉ๋ฅ , ๋ฉ๋ชจ๋ฆฌ ์ ์ ๋, ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ค์๊ฐ์ผ๋ก ์๊ฐํํด ์ฃผ๋ ๊ฐ๋ฒผ์ด ๋ชจ๋ํฐ๋ง ๋๊ตฌ์ ๋๋ค. ๋ฒค์น๋งํฌ ์ฟผ๋ฆฌ ์คํ ์ GPU ์ฑ๋ฅ์ ๊ด์ฐฐํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- AWS CLI (awscli): ๋ค์ ๋จ๊ณ์์ ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ์ ์ ๋ค์ด๋ก๋ํ๊ธฐ ์ํด ํ์ํฉ๋๋ค.
๊ทธ ํ, Spark๊ฐ ์ฌ์ฉํ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
Bash
sudo mkdir /data
sudo mkdir /data/spark-app
sudo chmod 777 -R /data/spark-app
๋ง์ง๋ง์ผ๋ก, ํ๊ฒฝ ๋ณ์์ EDB_TOKEN์ ๋ด๋ณด๋
๋๋ค.
Bash
export EDB_TOKEN=<๋ฐ๊ธ๋ฐ์_ํ ํฐ_์
๋ ฅ>
3. ์ฝ๋ ๋ฐ ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ์ ๋ค์ด๋ก๋
VM์ ํ ํด๋(/home/ubuntu)์ ์ค์ต์ฉ GitHub ์ ์ฅ์๋ฅผ ํด๋ก ํฉ๋๋ค. ๋ก์ปฌ์์ ์คํํ๋ ๊ฒ๊ณผ ๋์ผํ ์ ์ฅ์์ด์ง๋ง, ์ด๋ฒ์๋ spark-rapids๊ฐ ํ์ฑํ๋ GPU ๊ธฐ๋ฐ Spark ํด๋ฌ์คํฐ๋ฅผ ์คํํ๊ฒ ๋ฉ๋๋ค.
Bash
cd /home/ubuntu
git clone https://github.com/dunithd/spark-rapids-tutorial.git
cd spark-rapids-tutorial/gpu-2xl40s
์ด์ Parquet ํ์์ TPC-DS ๋ฐ์ดํฐ์ ์ ๋ค์ด๋ก๋ํ ์ฐจ๋ก์ ๋๋ค. spark-rapids์ ์ง์ ํ ์๋ ฅ์ ํ์ธํ๊ธฐ ์ํด, ์์ถ ํ์๋ ์ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ฌํ๋ SF100(Scale Factor 100) ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ์
์ ์์ฉํ ์ ์๋ ์ถฉ๋ถํ ๊ณต๊ฐ์ ํ๋ณดํ๊ธฐ ์ํด ์ธ์คํด์ค์ /ephemeral ๋ณผ๋ฅจ์ ์ ์ฅํฉ๋๋ค. (df -h ๋ช
๋ น์ด๋ก ํ์ธํด ๋ณด๋ฉด ์ฝ 1TB์ ์ฌ์ ๊ณต๊ฐ์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.)
์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ์ ์ ๋ค์ด๋ก๋ํ์ธ์.
Bash
aws s3 cp s3://beacon-analytics-demo-data-us-east-1-prod/tpcds_sf_100 /ephemeral/tpcds_sf_100 --recursive --no-sign-request
ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ๊ณผ ๋ฐ์ดํฐ์ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋์์ต๋๋ค. ์ด์ Docker Compose ์คํ์ ์คํํ๊ณ ๋ณธ๊ฒฉ์ ์ธ GPU ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ์ค๋น๊ฐ ๋ชจ๋ ๋๋ฌ์ต๋๋ค.
spark-rapids ํตํฉ ์ํคํ ์ฒ ์์ธ ๋ถ์
GPU ๊ฐ์ ์คํ์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ฐ๋ํ๊ธฐ ์ ์, ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ตฌ์กฐ์ ์ผ๋ก๋ ์์ ์ดํด๋ณธ CPU ์คํ๊ณผ ๊ฑฐ์ ๋์ผํ์ง๋ง, spark-rapids ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋๊ณ ๊ทธ์ ๋ฐ๋ฅธ ๋ฆฌ์์ค ํ ๋น ๋ฐฉ์์ด ๋ฌ๋ผ์ง ๊ฒ์ด ํต์ฌ์ ๋๋ค.

GPU ๊ฐ์ ์คํ์ ํต์ฌ ๊ตฌ์ฑ ์์
./gpu-2xl40s/docker-compose.yml ํ์ผ์ ํฌ๊ฒ ๋ค ๊ฐ์ง ๋
ผ๋ฆฌ์ ๋จ์๋ฅผ ์ ์ํฉ๋๋ค.
- EDB Postgres (๊ฒ์ดํธ์จ์ด): EDB Analytics Accelerator(AA) ํ์ฅ์ด ํ์ฌ๋ ์ ์ฉ Postgres 17 ์ปจํ ์ด๋์ ๋๋ค. SQL ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์๋ค์ด๋ ์ง์ ์ ์ ๋๋ค.
- OSS Apache Spark Master: ํ์คํฌ ๋ถ์ฐ์ ์กฐ์จํ๋ ์ปจํธ๋กค ํ๋ ์ธ์ ๋๋ค.
- OSS Apache Spark Workers: nvidia ๋ฐํ์์ผ๋ก ์ค์ ๋์ด L40S ํ๋์จ์ด์ ์ง์ ์ ๊ทผํ์ฌ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
- Spark Connect (๋ธ๋ฆฟ์ง): Postgres์ Spark ํด๋ฌ์คํฐ ์ฌ์ด์ ์ธํฐํ์ด์ค์ ๋๋ค.
์ค์ โ๋ง๋ฒโ์ด ์ผ์ด๋๋ ๋ถ๋ถ์ compose ํ์ผ ๋ด์ spark-connect ์ค์ ์น์ ์ ๋๋ค.
YAML
spark-connect:
<<: *spark-common
container_name: spark-connect
depends_on: ["spark-master"]
ports: ["4040:4040", "15002:15002"]
command: >
/opt/spark/sbin/start-connect-server.sh --master spark://spark-master:7077
--packages "org.apache.spark:spark-connect_2.12:3.5.6,com.nvidia:rapids-4-spark_2.12:25.10.0,io.delta:delta-spark_2.12:3.3.1,org.apache.hadoop:hadoop-aws:3.3.4"
--conf "spark.executor.extraClassPath=/data/spark-app/jars/com.nvidia_rapids-4-spark_2.12-25.10.0.jar"
--conf "spark.plugins=com.nvidia.spark.SQLPlugin"
--conf "spark.rapids.memory.pinnedPool.size=8g"
--conf "spark.rapids.sql.concurrentGpuTasks=3"
--conf "spark.shuffle.manager=com.nvidia.spark.rapids.spark356.RapidsShuffleManager"
# ... (๊ธฐํ ์ธ๋ถ ์ค์ ์๋ต)
์ฐ๋ฆฌ๋ ๋จ์ํ Spark๋ฅผ ์คํํ๋ ๊ฒ์ด ์๋๋ผ, ๋ค์ ์ธ ๊ฐ์ง ์ค์ํ ๊ณ์ธต์ ํตํด Spark ์์ง์ NVIDIA spark-rapids ๊ฐ์๊ธฐ๋ฅผ ์ฃผ์ ํฉ๋๋ค.
1. Spark RAPIDS ํ๋ฌ๊ทธ์ธ ์ฃผ์
spark.plugins=com.nvidia.spark.SQLPlugin ์ค์ ์ ํตํด Spark๊ฐ ํ์ค CPU ์ฟผ๋ฆฌ ๊ณํ์ ๊ฐ๋ก์ฑ๋๋ก ํฉ๋๋ค. Join์ด๋ Aggregate์ ๊ฐ์ ์ฐ์ฐ์ด spark-rapids์์ ์ง์๋๋ ๊ฒฝ์ฐ, Spark๋ CPU ๋ฒ์ ๋์ ๊ณ ๋๋ก ๋ณ๋ ฌํ๋ GPU ์ปค๋๋ก ์ฐ์ฐ์ ๊ต์ฒดํฉ๋๋ค.
2. ์ง๋ฅํ GPU ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
TPC-DS SF100๊ณผ ๊ฐ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ GPU ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ ํฉ๋๋ค. ์์ ์ฑ์ ์ํด ๋ค์ ์ค์ ์ ํ๋ํ์ต๋๋ค.
spark.rapids.memory.pinnedPool.size=8g: ์์คํ RAM๊ณผ GPU VRAM ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก ์๋๋ฅผ ๋น์ฝ์ ์ผ๋ก ๋์ฌ์ฃผ๋ โPinnedโ ํธ์คํธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํฉ๋๋ค.spark.rapids.sql.concurrentGpuTasks=3: ์ฌ๋ฌ ํ์คํฌ๊ฐ ํ๋์ GPU๋ฅผ ๊ณต์ ํ ์ ์๊ฒ ํ์ฌ L40S์ ๋ฐฉ๋ํ ์ฝ์ด ํ์ฉ๋ฅ ์ ๊ทน๋ํํฉ๋๋ค.
3. GPU ๊ฐ์ ์ ํ
Spark์์ ์์ปค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ํค๋ โ์
ํ(Shuffling)โ์ ๊ฐ์ฅ ํฐ ๋ณ๋ชฉ ๊ตฌ๊ฐ์
๋๋ค. RapidsShuffleManager๋ฅผ ์ฌ์ฉํ๋ฉด GPU๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์์ถํ๊ณ ์ด๋์ํค๋ฏ๋ก I/O ๋๊ธฐ ์๊ฐ์ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค.
GPU ๊ฐ์ ์คํ ์คํ ๋ฐ ํ์ธ
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋น์ค๋ฅผ ์์ํฉ๋๋ค.
Bash
docker compose up -d --build
์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ ์ Spark๊ฐ L40S ํ๋์จ์ด๋ฅผ ์ ์์ ์ผ๋ก ์ธ์ํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋จผ์ ํธ์คํธ์์ nvidia-smi๋ฅผ ์คํํ์ฌ 48GB VRAM์ ๊ฐ์ง L40S GPU 2๊ฐ๊ฐ ํ์๋๋์ง ํ์ธํ์ธ์.

๊ทธ๋ค์, ์์ปค ์ปจํ ์ด๋ ๋ด๋ถ์์๋ GPU๊ฐ ๋ณด์ด๋์ง ํ์ธํฉ๋๋ค.
Bash
docker exec -it spark-worker-0 nvidia-smi
์ปจํ
์ด๋ ๋ด๋ถ์์๋ ๋์ผํ GPU ์ํ ํ
์ด๋ธ์ด ๋ํ๋์ผ ํฉ๋๋ค. ๋ํ spark-connect ๋ก๊ทธ๋ฅผ ํตํด ๊ฐ์๊ธฐ๊ฐ ํ์ฑํ๋์๋์ง ์ต์ข
ํ์ธํฉ๋๋ค.
Bash
docker compose logs spark-connect | grep -i "RAPIDS Accelerator"
# ์ถ๋ ฅ ๊ฒฐ๊ณผ์ "RAPIDS Accelerator 25.10.0: enabled"๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ก์ปฌ ํฐ๋ฏธ๋์์ ํฌํธ ํฌ์๋ฉ์ ์ค์ ํ์ฌ 4040 ํฌํธ๋ก Spark UI์ ์ ์ํ ์ ์๋๋ก ํฉ๋๋ค.
Bash
brev port-forward tutorial -p 8080:8080 -p 4040:4040
์ด์ ์น ๋ธ๋ผ์ฐ์ ์์ http://localhost:4040์ผ๋ก ์ ์ํ์ฌ Spark UI๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
GPU ๊ฐ์ ์ฟผ๋ฆฌ ์คํ
์ด์ ๋ชจ๋ ์ค๋น๊ฐ ๋๋ฌ์ต๋๋ค. TPC-DS SF100์ฉ ํ ์ด๋ธ์ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
Bash
cat create_tables_for_spark_sf100.sql | docker exec -i postgres psql -U postgres -d postgres
์ด์ ์ค์ ์ฟผ๋ฆฌ๋ฅผ ๋์ ธ๋ณผ ์ฐจ๋ก์
๋๋ค. ์๋ก์ด ํฐ๋ฏธ๋ ์ธ์
์์ nvtop์ ์คํํ์ฌ GPU ์ฌ์ฉ๋์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ฉด์, ๊ธฐ์กด ํฐ๋ฏธ๋์ psql์์ ์๋์ ๋ณต์กํ TPC-DS ์ฟผ๋ฆฌ๋ฅผ ์คํํด ๋ณด์ธ์.
SQL
WITH customer_total_return AS (
SELECT
sr_customer_sk AS ctr_customer_sk,
sr_store_sk AS ctr_store_sk,
SUM(sr_return_amt) AS ctr_total_return
FROM store_returns, date_dim
WHERE sr_returned_date_sk = d_date_sk
AND d_year = 2000
GROUP BY sr_customer_sk, sr_store_sk
)
SELECT c_customer_id
FROM customer_total_return ctr1, store, customer
WHERE ctr1.ctr_total_return > (
SELECT AVG(ctr_total_return) * 1.2
FROM customer_total_return ctr2
WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk
)
AND s_store_sk = ctr1.ctr_store_sk
AND s_state = 'TN'
AND ctr1.ctr_customer_sk = c_customer_sk
ORDER BY c_customer_id
LIMIT 100;
์ด ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก GPU ์ฑ๋ฅ ํ ์คํธ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
- ๋ณต์กํ ์กฐ์ธ(Complex Joins): 4๊ฐ ์ด์์ ๋ํ ํ ์ด๋ธ์ ์กฐ์ธํฉ๋๋ค.
- ๊ณตํต ํ ์ด๋ธ ํํ์(CTE): Spark๊ฐ ํด๋ฌ์คํฐ ์ ์ฒด์์ ์ต์ ํํด์ผ ํ๋ ์์ ๋ทฐ๋ฅผ ์์ฑํฉ๋๋ค.
- ์๋ธ์ฟผ๋ฆฌ:
AVG(...) * 1.2๊ณ์ฐ์ ์ํ ๋ธ๋ก๋์บ์คํธ ๋๋ ์ ํ ์กฐ์ธ์ด ๋ฐ์ํ๋ฉฐ, ์ฌ๊ธฐ์ RAPIDS Shuffle Manager์ ์ฑ๋ฅ์ด ๋น์ ๋ฐํฉ๋๋ค.
์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ๋์ nvtop์ ๋ณด๋ฉด ๋ ๊ฐ์ GPU ์ฌ์ฉ๋์ด ์น์๋ ๊ฒ์ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.

๋ํ Spark UI(http://localhost:4040)์ SQL ํญ์์ ์คํ ์ค์ธ ์ฟผ๋ฆฌ๋ฅผ ํด๋ฆญํด ๋ณด์ธ์.
- โGpuโ ๋
ธ๋ ํ์ธ: ์คํ ๊ณํ(Physical Plan)์์ ๊ธฐ์กด ๋
ธ๋๋ค์ด
GpuHashJoin,GpuHashAggregate,GpuColumnarExchange๋ฑ GPU ๋ฒ์ ์ผ๋ก ๊ต์ฒด๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. - ์ ํ ๋
ธ๋: ๋ฐ์ดํฐ๊ฐ ๋ก๋๋ ๋์
GpuRowToColumnar์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ ๋์GpuColumnarToRow๋ ธ๋๋ ํ์ธํ ์ ์์ต๋๋ค.

EDB Postgres AI์ Apache Spark GPU ๊ฐ์ ์ค์ต ์์ฝ
์ด ํํ ๋ฆฌ์ผ์ ํตํด CPU ์ ์ฉ ๊ธฐ์ค์ (Baseline) ์๋ฆฝ๋ถํฐ NVIDIA Brev VM ์์์์ ์๋ฒฝํ GPU ๊ฐ์ EDB Postgres AI ๋ฐ Apache Spark ํด๋ฌ์คํฐ ๋ฐฐํฌ๊น์ง ์ ๊ณผ์ ์ ๋ง์ณค์ต๋๋ค.
์ฐ๋ฆฌ๋ EDB Analytics Accelerator์ Spark์ ์ํํ ํตํฉ์ ํ์ธํ์ผ๋ฉฐ, ๋ณต์กํ ์ฟผ๋ฆฌ ๊ณํ์ด GPU ์ปค๋๋ก ์คํ๋ก๋๋๋ ๊ณผ์ ์ ๊ฒ์ฆํ์ต๋๋ค. ํนํ TPC-DS SF100๊ณผ ๊ฐ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ RAPIDS Shuffle Manager์ L40S GPU๊ฐ ์ ๊ณตํ๋ ์๋์ ์ธ ์ฑ๋ฅ ํฅ์์ ๋ชฉ๊ฒฉํ์ต๋๋ค.
์ด๋ฒ ์ค๋ฌด ๊ฒฝํ์ ์ฌ๋ฌ๋ถ์ ์ด์ ํ๊ฒฝ์ GPU ๊ฐ์ ๋ถ์์ ๋์ ํ๋ ๋ฐ ๊ฐ๋ ฅํ ํ ๋๊ฐ ๋ ๊ฒ์ ๋๋ค. ๋ ์์ธํ ์ค์ ์ต์ ๊ณผ ๊ณ ๊ธ ํ๋ ๊ฐ์ด๋๋ EDB ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํด ์ฃผ์ธ์.
EDB Postgres์ Spark GPU ๊ฐ์ FAQ
๋ก์ปฌ GPU๊ฐ ์์ด๋ ์ด ํํ ๋ฆฌ์ผ์ ์งํํ ์ ์๋์?
๋ค. Part 1์ CPU ์ ์ฉ Docker Compose ์คํ์ผ๋ก ๊ตฌ์ฑ๋์ด ๋ก์ปฌ GPU ์์ด๋ EDB Postgres AI์ Apache Spark ๊ฐ ์ฐ๊ฒฐ์ ๊ฒ์ฆํ ์ ์์ต๋๋ค. GPU ๊ฐ์ ํ์ธ์ Part 2์ NVIDIA Brev ํ๊ฒฝ์์ ์งํํฉ๋๋ค.
EDB Postgres์ Apache Spark๋ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋์?
EDB Postgres๋ SQL ์ฟผ๋ฆฌ์ ์ง์ ์ ์ญํ ์ ํ๊ณ , Spark Connect๊ฐ Postgres์ Spark ํด๋ฌ์คํฐ ์ฌ์ด์์ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ ๋ฌํฉ๋๋ค. ์คํ ์์ง์ pgaa.executor_engine ์ค์ ์ spark_connect๋ก ์ง์ ํฉ๋๋ค.
CPU์ GPU ํ๊ฒฝ์์ ์ฌ์ฉํ๋ TPC-DS ๋ฐ์ดํฐ์ ์ ๋ฌด์์ธ๊ฐ์?
๋ก์ปฌ CPU ๊ฒ์ฆ์๋ ๋น๊ต์ ์์ TPC-DS SF10 ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํฉ๋๋ค. NVIDIA Brev์ GPU ๊ฐ์ ์ค์ต์์๋ Parquet ํ์์ TPC-DS SF100 ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
Spark RAPIDS ๊ฐ์์ด ํ์ฑํ๋์๋์ง ์ด๋ป๊ฒ ํ์ธํ๋์?
ํธ์คํธ์ Spark ์์ปค ์ปจํ ์ด๋์์ nvidia-smi๋ฅผ ์คํํด GPU ์ธ์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค. spark-connect ๋ก๊ทธ์ โRAPIDS Accelerator 25.10.0: enabledโ ๋ฉ์์ง์ Spark UI์ GpuHashJoin, GpuHashAggregate ๋ฑ์ ์คํ ๊ณํ ๋ ธ๋๋ ํ์ธํ ์ ์์ต๋๋ค.
์ด ์ค์ต์ ์ฌ์ฉ๋ NVIDIA Brev ์ธ์คํด์ค ์ฌ์์ ๋ฌด์์ธ๊ฐ์?
๊ฐ์ด๋๋ 48GB VRAM์ ๊ฐ์ถ NVIDIA L40S GPU 2๊ฐ, 16 vCPU, 294GiB RAM, 1.94TB ๋์คํฌ๋ก ๊ตฌ์ฑ๋ VM Mode ์ธ์คํด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค. GPU๊ฐ 1๊ฐ ์ด์์ธ ๋ค๋ฅธ ์ธ์คํด์ค๋ ์ฌ์ฉํ ์ ์์ง๋ง docker-compose.yml์ GPU ๊ฐ์ ์ค์ ์ ์ฌ์์ ๋ง๊ฒ ์์ ํด์ผ ํฉ๋๋ค.
๋ฉ์ผ: salesinquiry@enterprisedb.com