From 2ad956c7204280a8a429bd2818a4d30e07893f48 Mon Sep 17 00:00:00 2001 From: liyuan Date: Thu, 18 Jul 2024 16:47:23 +0800 Subject: [PATCH 1/5] add hashjoin benchmark Signed-off-by: liyuan --- docs/img/guides/microbm.png | Bin 24317 -> 75893 bytes .../notebooks/micro-benchmarks-cpu.ipynb | 34 +++++++++++++++- .../notebooks/micro-benchmarks-gpu.ipynb | 38 ++++++++++++++++-- 3 files changed, 67 insertions(+), 5 deletions(-) diff --git a/docs/img/guides/microbm.png b/docs/img/guides/microbm.png index e04553b37ef9030b31126261b67fe4c4849f1701..581c395438cae6f34f9722d3a6bbd2ed13af662b 100644 GIT binary patch literal 75893 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 O>$Hi5@hd}I*uMdc#drn) literal 24317 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 diff --git a/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb b/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb index ce5c5a797..c84506f57 100644 --- a/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb +++ b/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb @@ -529,6 +529,36 @@ "runMicroBenchmark(spark,\"Crossjoin\",query ,1)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "6caa0aec-b580-4b41-adee-e35ef440750e", + "metadata": {}, + "outputs": [], + "source": [ + "### HashJoin\n", + "This is a microbenchmark for a HashJoin. The query on GPU will be more than 10x times faster than CPU based on the cluster in the readme." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "040603c9-a96f-4017-bcdb-5f93e12996a4", + "metadata": {}, + "outputs": [], + "source": [ + "spark.read.parquet(dataRoot + \"/store_sales\").createOrReplaceTempView(\"store_sales\")\n", + "spark.read.parquet(dataRoot + \"/store_returns\").createOrReplaceTempView(\"store_returns\")\n", + "\n", + "print(\"-\"*50)\n", + "query = '''\n", + "select sum(store_sales.ss_ext_wholesale_cost)\n", + "from store_sales\n", + "join store_returns on (ss_item_sk = sr_item_sk) and (ss_addr_sk=sr_addr_sk)\n", + "'''\n", + "runMicroBenchmark(spark,\"HashJoin\",query,1)" + ] + }, { "cell_type": "code", "execution_count": 24, @@ -550,7 +580,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -564,7 +594,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb b/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb index 099b047a4..f0fc1c833 100644 --- a/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb +++ b/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb @@ -541,18 +541,50 @@ "runMicroBenchmark(spark,\"Crossjoin\",query,2)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8783a58-e3ee-4735-b8d0-6426e7cc16fe", + "metadata": {}, + "outputs": [], + "source": [ + "### HashJoin\n", + "This is a microbenchmark for a HashJoin. The query on GPU will be more than 10x times faster than CPU based on the cluster in the readme." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "191d0c9a-2d3a-40f4-89aa-f61dab5caa90", + "metadata": {}, + "outputs": [], + "source": [ + "spark.read.parquet(dataRoot + \"/store_sales\").createOrReplaceTempView(\"store_sales\")\n", + "spark.read.parquet(dataRoot + \"/store_returns\").createOrReplaceTempView(\"store_returns\")\n", + "\n", + "print(\"-\"*50)\n", + "query = '''\n", + "select sum(store_sales.ss_ext_wholesale_cost)\n", + "from store_sales\n", + "join store_returns on (ss_item_sk = sr_item_sk) and (ss_addr_sk=sr_addr_sk)\n", + "'''\n", + "runMicroBenchmark(spark,\"HashJoin\",query,1)" + ] + }, { "cell_type": "code", "execution_count": null, "id": "fc2092e8", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "spark.stop()" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -566,7 +598,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.12.3" } }, "nbformat": 4, From 9dd726f6d99be6ec9be5500505c393b26bd0e54c Mon Sep 17 00:00:00 2001 From: liyuan Date: Thu, 18 Jul 2024 16:50:32 +0800 Subject: [PATCH 2/5] fix the dead link Signed-off-by: liyuan --- .../xgboost-examples/prepare-package-data/preparation-python.md | 2 +- .../xgboost-examples/prepare-package-data/preparation-scala.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/xgboost-examples/prepare-package-data/preparation-python.md b/docs/get-started/xgboost-examples/prepare-package-data/preparation-python.md index e34e0557d..c498a1d15 100644 --- a/docs/get-started/xgboost-examples/prepare-package-data/preparation-python.md +++ b/docs/get-started/xgboost-examples/prepare-package-data/preparation-python.md @@ -16,4 +16,4 @@ Following this [guide](/docs/get-started/xgboost-examples/building-sample-apps/p You need to copy the dataset to `/opt/xgboost`. Use the following links to download the data. 1. [Mortgage dataset](/docs/get-started/xgboost-examples/dataset/mortgage.md) 2. [Taxi dataset](https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page) -3. [Agaricus dataset](https://gust.dev/r/xgboost-agaricus) +3. [Agaricus dataset](https://github.com/dmlc/xgboost/tree/master/demo/data) diff --git a/docs/get-started/xgboost-examples/prepare-package-data/preparation-scala.md b/docs/get-started/xgboost-examples/prepare-package-data/preparation-scala.md index 5fc42d603..4e12a8342 100644 --- a/docs/get-started/xgboost-examples/prepare-package-data/preparation-scala.md +++ b/docs/get-started/xgboost-examples/prepare-package-data/preparation-scala.md @@ -16,4 +16,4 @@ Following this [guide](/docs/get-started/xgboost-examples/building-sample-apps/s You need to copy the dataset to `/opt/xgboost`. Use the following links to download the data. 1. [Mortgage dataset](/docs/get-started/xgboost-examples/dataset/mortgage.md) 2. [Taxi dataset](https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page) -3. [Agaricus dataset](https://gust.dev/r/xgboost-agaricus) +3. [Agaricus dataset](https://github.com/dmlc/xgboost/tree/master/demo/data) From a2a76c3f80bf70f0ac30032b5abda7ffd92ac71c Mon Sep 17 00:00:00 2001 From: liyuan Date: Fri, 19 Jul 2024 13:58:25 +0800 Subject: [PATCH 3/5] update the code cell to markdown cell Signed-off-by: liyuan --- .../micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb | 6 ++---- .../micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb b/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb index c84506f57..c3707ee8d 100644 --- a/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb +++ b/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-cpu.ipynb @@ -530,11 +530,9 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "6caa0aec-b580-4b41-adee-e35ef440750e", + "cell_type": "markdown", + "id": "56f915c2-9b9a-4982-8c4e-5b570c17bfeb", "metadata": {}, - "outputs": [], "source": [ "### HashJoin\n", "This is a microbenchmark for a HashJoin. The query on GPU will be more than 10x times faster than CPU based on the cluster in the readme." diff --git a/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb b/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb index f0fc1c833..0777594f3 100644 --- a/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb +++ b/examples/SQL+DF-Examples/micro-benchmarks/notebooks/micro-benchmarks-gpu.ipynb @@ -542,11 +542,9 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "d8783a58-e3ee-4735-b8d0-6426e7cc16fe", + "cell_type": "markdown", + "id": "06b351e6-b7bd-4063-a20b-fe4fd71221f9", "metadata": {}, - "outputs": [], "source": [ "### HashJoin\n", "This is a microbenchmark for a HashJoin. The query on GPU will be more than 10x times faster than CPU based on the cluster in the readme." From 14b7b0445768384c79506e5ad7f2dbf12251bac9 Mon Sep 17 00:00:00 2001 From: liyuan Date: Fri, 19 Jul 2024 14:03:13 +0800 Subject: [PATCH 4/5] update the readme doc Signed-off-by: liyuan --- examples/SQL+DF-Examples/micro-benchmarks/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/SQL+DF-Examples/micro-benchmarks/README.md b/examples/SQL+DF-Examples/micro-benchmarks/README.md index 29a17061e..5c142af20 100644 --- a/examples/SQL+DF-Examples/micro-benchmarks/README.md +++ b/examples/SQL+DF-Examples/micro-benchmarks/README.md @@ -3,7 +3,7 @@ Standard industry benchmarks are a great way to measure performance over a period of time but another barometer to measure performance is to measure performance of common operators that are used in the data preprocessing stage or in data analytics. -The microbenchmark notebook in this repo uses four such queries in the chart shown below: +The microbenchmark notebook in this repo uses five such queries in the chart shown below: - **Count Distinct**: a function used to estimate the number of unique page views or unique customers visiting an e-commerce site. @@ -11,6 +11,7 @@ The microbenchmark notebook in this repo uses four such queries in the chart sho timestamped event data in marketing or financial industry. - **Intersect**: an operator used to remove duplicates in a dataframe. - **Cross-join**: A common use for a cross join is to obtain all combinations of items. +- **Hash-join**: A common use for a hash join is to obtain all combinations of items. These queries were run on a standard eight-nodes CPU cluster with 2 CPU (128 cores), 512GB memory and 1xA100 GPUs per node. The dataset used was of size 3TB with multiple different data types. From 4111b0fa6c04b29065bb401c9e88664b21c579c5 Mon Sep 17 00:00:00 2001 From: liyuan Date: Mon, 22 Jul 2024 11:04:54 +0800 Subject: [PATCH 5/5] fix description issue Signed-off-by: liyuan --- examples/SQL+DF-Examples/micro-benchmarks/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/SQL+DF-Examples/micro-benchmarks/README.md b/examples/SQL+DF-Examples/micro-benchmarks/README.md index 5c142af20..e135ff239 100644 --- a/examples/SQL+DF-Examples/micro-benchmarks/README.md +++ b/examples/SQL+DF-Examples/micro-benchmarks/README.md @@ -11,7 +11,7 @@ The microbenchmark notebook in this repo uses five such queries in the chart sho timestamped event data in marketing or financial industry. - **Intersect**: an operator used to remove duplicates in a dataframe. - **Cross-join**: A common use for a cross join is to obtain all combinations of items. -- **Hash-join**: A common use for a hash join is to obtain all combinations of items. +- **Hash-join**: Joining two tables together by matching rows based on a common column. These queries were run on a standard eight-nodes CPU cluster with 2 CPU (128 cores), 512GB memory and 1xA100 GPUs per node. The dataset used was of size 3TB with multiple different data types.