From e4cd5e0eb42f616024c64da2bc10451559bed5f4 Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Wed, 3 Aug 2022 11:47:48 -0700 Subject: [PATCH 01/12] Add 22.08 Doc Signed-off-by: Hao Zhu <9665750+viadea@users.noreply.github.com> --- docs/FAQ.md | 2 +- docs/compatibility.md | 10 ++--- .../Databricks/generate-init-script.ipynb | 2 +- docs/download.md | 41 +++++++++++++++++++ .../get-started/getting-started-databricks.md | 2 +- .../gpu_dataproc_packages_ubuntu_sample.sh | 2 +- 6 files changed, 50 insertions(+), 9 deletions(-) diff --git a/docs/FAQ.md b/docs/FAQ.md index 3edac177fbb..65fc2311324 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -10,7 +10,7 @@ nav_order: 12 ### What versions of Apache Spark does the RAPIDS Accelerator for Apache Spark support? -The RAPIDS Accelerator for Apache Spark requires version 3.1.1, 3.1.2, 3.1.3, 3.2.0, 3.2.1 or 3.3.0 of +The RAPIDS Accelerator for Apache Spark requires version 3.1.2, 3.1.3, 3.2.0, 3.2.1 or 3.3.0 of Apache Spark. Because the plugin replaces parts of the physical plan that Apache Spark considers to be internal the code for those plans can change even between bug fix releases. As a part of our process, we try to stay on top of these changes and release updates as quickly as possible. diff --git a/docs/compatibility.md b/docs/compatibility.md index 37bb882fc20..7640eb993b7 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -65,7 +65,7 @@ conditions within the computation itself the result may not be the same each tim run. This is inherent in how the plugin speeds up the calculations and cannot be "fixed." If a query joins on a floating point value, which is not wise to do anyways, and the value is the result of a floating point aggregation then the join may fail to work properly with the plugin but would have -worked with plain Spark. As of 22.06 this is behavior is enabled by default but can be disabled with +worked with plain Spark. Starting from 22.06 this is behavior is enabled by default but can be disabled with the config [`spark.rapids.sql.variableFloatAgg.enabled`](configs.md#sql.variableFloatAgg.enabled). @@ -807,7 +807,7 @@ leads to restrictions: * Float values cannot be larger than `1e18` or smaller than `-1e18` after conversion. * The results produced by GPU slightly differ from the default results of Spark. -As of 22.06 this conf is enabled, to disable this operation on the GPU when using Spark 3.1.0 or +Starting from 22.06 this conf is enabled, to disable this operation on the GPU when using Spark 3.1.0 or later, set [`spark.rapids.sql.castFloatToDecimal.enabled`](configs.md#sql.castFloatToDecimal.enabled) to `false` @@ -819,7 +819,7 @@ Spark 3.1.0 the MIN and MAX values were floating-point values such as `Int.MaxVa starting with 3.1.0 these are now integral types such as `Int.MaxValue` so this has slightly affected the valid range of values and now differs slightly from the behavior on GPU in some cases. -As of 22.06 this conf is enabled, to disable this operation on the GPU when using Spark 3.1.0 or later, set +Starting from 22.06 this conf is enabled, to disable this operation on the GPU when using Spark 3.1.0 or later, set [`spark.rapids.sql.castFloatToIntegralTypes.enabled`](configs.md#sql.castFloatToIntegralTypes.enabled) to `false`. @@ -831,7 +831,7 @@ The GPU will use different precision than Java's toString method when converting types to strings. The GPU uses a lowercase `e` prefix for an exponent while Spark uses uppercase `E`. As a result the computed string can differ from the default behavior in Spark. -As of 22.06 this conf is enabled by default, to disable this operation on the GPU, set +Starting from 22.06 this conf is enabled by default, to disable this operation on the GPU, set [`spark.rapids.sql.castFloatToString.enabled`](configs.md#sql.castFloatToString.enabled) to `false`. ### String to Float @@ -845,7 +845,7 @@ default behavior in Apache Spark is to return `+Infinity` and `-Infinity`, respe Also, the GPU does not support casting from strings containing hex values. -As of 22.06 this conf is enabled by default, to enable this operation on the GPU, set +Starting from 22.06 this conf is enabled by default, to enable this operation on the GPU, set [`spark.rapids.sql.castStringToFloat.enabled`](configs.md#sql.castStringToFloat.enabled) to `false`. ### String to Date diff --git a/docs/demo/Databricks/generate-init-script.ipynb b/docs/demo/Databricks/generate-init-script.ipynb index 03232f98590..12b845f3d35 100644 --- a/docs/demo/Databricks/generate-init-script.ipynb +++ b/docs/demo/Databricks/generate-init-script.ipynb @@ -3,7 +3,7 @@ { "cell_type":"code", "source":[ - "dbutils.fs.mkdirs(\"dbfs:/databricks/init_scripts/\")\n \ndbutils.fs.put(\"/databricks/init_scripts/init.sh\",\"\"\"\n#!/bin/bash\nsudo wget -O /databricks/jars/rapids-4-spark_2.12-22.06.0-cuda11.jar https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/22.06.0/rapids-4-spark_2.12-22.06.0-cuda11.jar\n\"\"\", True)" + "dbutils.fs.mkdirs(\"dbfs:/databricks/init_scripts/\")\n \ndbutils.fs.put(\"/databricks/init_scripts/init.sh\",\"\"\"\n#!/bin/bash\nsudo wget -O /databricks/jars/rapids-4-spark_2.12-22.08.0.jar https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/22.08.0/rapids-4-spark_2.12-22.08.0.jar\n\"\"\", True)" ], "metadata":{ diff --git a/docs/download.md b/docs/download.md index fd2abbb7c55..2df18b686a5 100644 --- a/docs/download.md +++ b/docs/download.md @@ -18,6 +18,47 @@ cuDF jar, that is either preinstalled in the Spark classpath on all nodes or sub that uses the RAPIDS Accelerator For Apache Spark. See the [getting-started guide](https://nvidia.github.io/spark-rapids/Getting-Started/) for more details. +## Release v22.08.0 +Hardware Requirements: + +The plugin is tested on the following architectures: + + GPU Models: NVIDIA V100, T4 and A2/A10/A30/A100 GPUs + +Software Requirements: + + OS: Ubuntu 18.04, Ubuntu 20.04 or CentOS 7, Rocky Linux 8 + + CUDA & NVIDIA Drivers*: 11.x & v450.80.02+ + + Apache Spark 3.1.2, 3.1.3, 3.2.0, 3.2.1, 3.3.0, Databricks 9.1 ML LTS or 10.4 ML LTS Runtime and GCP Dataproc 2.0 + + Python 3.6+, Scala 2.12, Java 8 + +*Some hardware may have a minimum driver version greater than v450.80.02+. Check the GPU spec sheet +for your hardware's minimum driver version. + +*For Cloudera and EMR support, please refer to the +[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. + +### Release Notes +New functionality and performance improvements for this release include: +* Rocky Linux 8 support +* Ability to build Spark RAPIDS jar using JDK 11 +* ZSTD parquet read support +* Binary read support from parquet +* Apache iceberg 0.14 support +* Array function support: array_intersect, array_union, array_except and arrays_overlap +* Function from_json support +* Support nth_value, first and last in windowing function +* Alluxio auto mount for AWS S3 buckets +* Qualification tool: + * SQL level qualification + * Add application details view + +For a detailed list of changes, please refer to the +[CHANGELOG](https://github.com/NVIDIA/spark-rapids/blob/main/CHANGELOG.md). + ## Release v22.06.0 Hardware Requirements: diff --git a/docs/get-started/getting-started-databricks.md b/docs/get-started/getting-started-databricks.md index 7985a596acd..1107202cf62 100644 --- a/docs/get-started/getting-started-databricks.md +++ b/docs/get-started/getting-started-databricks.md @@ -162,7 +162,7 @@ cluster. ```bash spark.rapids.sql.python.gpu.enabled true spark.python.daemon.module rapids.daemon_databricks - spark.executorEnv.PYTHONPATH /databricks/jars/rapids-4-spark_2.12-22.06.0.jar:/databricks/spark/python + spark.executorEnv.PYTHONPATH /databricks/jars/rapids-4-spark_2.12-22.08.0.jar:/databricks/spark/python ``` 7. Once you’ve added the Spark config, click “Confirm and Restart”. diff --git a/docs/get-started/gpu_dataproc_packages_ubuntu_sample.sh b/docs/get-started/gpu_dataproc_packages_ubuntu_sample.sh index 5645a91a12f..6029a6978e5 100644 --- a/docs/get-started/gpu_dataproc_packages_ubuntu_sample.sh +++ b/docs/get-started/gpu_dataproc_packages_ubuntu_sample.sh @@ -139,7 +139,7 @@ EOF systemctl start dataproc-cgroup-device-permissions } -readonly DEFAULT_SPARK_RAPIDS_VERSION="22.06.0" +readonly DEFAULT_SPARK_RAPIDS_VERSION="22.08.0" readonly DEFAULT_CUDA_VERSION="11.0" readonly DEFAULT_XGBOOST_VERSION="1.6.1" readonly SPARK_VERSION="3.0" From 40f6eae0e2f26e9898af9c4a28c8ba31dccbc816 Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Wed, 3 Aug 2022 11:58:29 -0700 Subject: [PATCH 02/12] Add Spark 3.1.1 support back Signed-off-by: Hao Zhu <9665750+viadea@users.noreply.github.com> --- docs/FAQ.md | 2 +- docs/download.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/FAQ.md b/docs/FAQ.md index 65fc2311324..3edac177fbb 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -10,7 +10,7 @@ nav_order: 12 ### What versions of Apache Spark does the RAPIDS Accelerator for Apache Spark support? -The RAPIDS Accelerator for Apache Spark requires version 3.1.2, 3.1.3, 3.2.0, 3.2.1 or 3.3.0 of +The RAPIDS Accelerator for Apache Spark requires version 3.1.1, 3.1.2, 3.1.3, 3.2.0, 3.2.1 or 3.3.0 of Apache Spark. Because the plugin replaces parts of the physical plan that Apache Spark considers to be internal the code for those plans can change even between bug fix releases. As a part of our process, we try to stay on top of these changes and release updates as quickly as possible. diff --git a/docs/download.md b/docs/download.md index 2df18b686a5..9845e0e0c18 100644 --- a/docs/download.md +++ b/docs/download.md @@ -31,7 +31,7 @@ Software Requirements: CUDA & NVIDIA Drivers*: 11.x & v450.80.02+ - Apache Spark 3.1.2, 3.1.3, 3.2.0, 3.2.1, 3.3.0, Databricks 9.1 ML LTS or 10.4 ML LTS Runtime and GCP Dataproc 2.0 + Apache Spark 3.1.1, 3.1.2, 3.1.3, 3.2.0, 3.2.1, 3.3.0, Databricks 9.1 ML LTS or 10.4 ML LTS Runtime and GCP Dataproc 2.0 Python 3.6+, Scala 2.12, Java 8 From 69e96dfe27f085be6c47e64d824f1a4ab87eb1ae Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Wed, 3 Aug 2022 13:22:50 -0700 Subject: [PATCH 03/12] Update docs/download.md Co-authored-by: Jason Lowe --- docs/download.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/download.md b/docs/download.md index 9845e0e0c18..e75109940cf 100644 --- a/docs/download.md +++ b/docs/download.md @@ -47,7 +47,7 @@ New functionality and performance improvements for this release include: * Ability to build Spark RAPIDS jar using JDK 11 * ZSTD parquet read support * Binary read support from parquet -* Apache iceberg 0.14 support +* Apache Iceberg 0.13 support * Array function support: array_intersect, array_union, array_except and arrays_overlap * Function from_json support * Support nth_value, first and last in windowing function From 379fd149dce0a032ebca73cc64f6c9428d22d4ca Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Wed, 3 Aug 2022 13:24:43 -0700 Subject: [PATCH 04/12] Replace the image from Spark 3.0 to 3.x Signed-off-by: Hao Zhu <9665750+viadea@users.noreply.github.com> --- docs/img/spark3cluster.png | Bin 46767 -> 26493 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/spark3cluster.png b/docs/img/spark3cluster.png index 73050c63451bc4ebc1a8a99b9ff9656c67256c61..8f3a3e807349c1f1262cf754ed8a7199e26da03c 100644 GIT binary patch literal 26493 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%0Dx&bcp8L3An3TO&Eu!+(jo`qF# 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 mGug^gSJRJG`2VDNcYS` Date: Thu, 4 Aug 2022 11:42:52 -0700 Subject: [PATCH 05/12] Update docs/download.md Co-authored-by: Sameer Raheja --- docs/download.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/download.md b/docs/download.md index e75109940cf..75196ce78dd 100644 --- a/docs/download.md +++ b/docs/download.md @@ -45,7 +45,7 @@ for your hardware's minimum driver version. New functionality and performance improvements for this release include: * Rocky Linux 8 support * Ability to build Spark RAPIDS jar using JDK 11 -* ZSTD parquet read support +* Zstandard Parquet and ORC read support * Binary read support from parquet * Apache Iceberg 0.13 support * Array function support: array_intersect, array_union, array_except and arrays_overlap From 7abcf87398ee3030f13a75baeee1ecf585859061 Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Thu, 4 Aug 2022 11:43:02 -0700 Subject: [PATCH 06/12] Update docs/download.md Co-authored-by: Sameer Raheja --- docs/download.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/download.md b/docs/download.md index 75196ce78dd..d16a9c3f672 100644 --- a/docs/download.md +++ b/docs/download.md @@ -44,7 +44,7 @@ for your hardware's minimum driver version. ### Release Notes New functionality and performance improvements for this release include: * Rocky Linux 8 support -* Ability to build Spark RAPIDS jar using JDK 11 +* Ability to build Spark RAPIDS jars for Java versions 9+ * Zstandard Parquet and ORC read support * Binary read support from parquet * Apache Iceberg 0.13 support From 364e85250608b9046d3980ee410941f999c3fa81 Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Thu, 4 Aug 2022 11:43:29 -0700 Subject: [PATCH 07/12] Update docs/download.md Co-authored-by: Sameer Raheja --- docs/download.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/download.md b/docs/download.md index d16a9c3f672..de84e3c0df8 100644 --- a/docs/download.md +++ b/docs/download.md @@ -31,7 +31,7 @@ Software Requirements: CUDA & NVIDIA Drivers*: 11.x & v450.80.02+ - Apache Spark 3.1.1, 3.1.2, 3.1.3, 3.2.0, 3.2.1, 3.3.0, Databricks 9.1 ML LTS or 10.4 ML LTS Runtime and GCP Dataproc 2.0 + Apache Spark 3.1.1, 3.1.2, 3.1.3, 3.2.0, 3.2.1, 3.2.2, 3.3.0, Databricks 9.1 ML LTS or 10.4 ML LTS Runtime and GCP Dataproc 2.0 Python 3.6+, Scala 2.12, Java 8 From 6c73c0b299376f8886300cd0ff6986f253556246 Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Thu, 4 Aug 2022 11:45:25 -0700 Subject: [PATCH 08/12] Updated the version to include 3.2.2 Signed-off-by: Hao Zhu <9665750+viadea@users.noreply.github.com> --- docs/FAQ.md | 2 +- docs/download.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/FAQ.md b/docs/FAQ.md index 3edac177fbb..55d0f1de5af 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -10,7 +10,7 @@ nav_order: 12 ### What versions of Apache Spark does the RAPIDS Accelerator for Apache Spark support? -The RAPIDS Accelerator for Apache Spark requires version 3.1.1, 3.1.2, 3.1.3, 3.2.0, 3.2.1 or 3.3.0 of +The RAPIDS Accelerator for Apache Spark requires version 3.1.1, 3.1.2, 3.1.3, 3.2.0, 3.2.1, 3.2.2 or 3.3.0 of Apache Spark. Because the plugin replaces parts of the physical plan that Apache Spark considers to be internal the code for those plans can change even between bug fix releases. As a part of our process, we try to stay on top of these changes and release updates as quickly as possible. diff --git a/docs/download.md b/docs/download.md index de84e3c0df8..5bcbbbc31af 100644 --- a/docs/download.md +++ b/docs/download.md @@ -49,7 +49,6 @@ New functionality and performance improvements for this release include: * Binary read support from parquet * Apache Iceberg 0.13 support * Array function support: array_intersect, array_union, array_except and arrays_overlap -* Function from_json support * Support nth_value, first and last in windowing function * Alluxio auto mount for AWS S3 buckets * Qualification tool: From 4e1eba743656ab29120a5557f0e641af637e4ef0 Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Thu, 4 Aug 2022 11:52:19 -0700 Subject: [PATCH 09/12] Minor format change Signed-off-by: Hao Zhu <9665750+viadea@users.noreply.github.com> --- docs/compatibility.md | 1 + docs/spark-profiling-tool.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/compatibility.md b/docs/compatibility.md index 7640eb993b7..c63bdd47e02 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -370,6 +370,7 @@ INTERVAL HOUR TO SECOND | INTERVAL '10:30:40.999999' HOUR TO SECOND | 10:30:40.9 INTERVAL MINUTE | INTERVAL '30' MINUTE | 30| INTERVAL MINUTE TO SECOND | INTERVAL '30:40.999999' MINUTE TO SECOND | 30:40.999999| INTERVAL SECOND | INTERVAL '40.999999' SECOND | 40.999999| + Currently, the RAPIDS Accelerator only supports the ANSI style. ## ORC diff --git a/docs/spark-profiling-tool.md b/docs/spark-profiling-tool.md index e21f1684fc7..7a87b36a6ee 100644 --- a/docs/spark-profiling-tool.md +++ b/docs/spark-profiling-tool.md @@ -1,9 +1,9 @@ --- layout: page -title: Profiling tool +title: Profiling Tool nav_order: 9 --- -# Profiling tool +# Profiling Tool The Profiling tool analyzes both CPU or GPU generated event logs and generates information which can be used for debugging and profiling Apache Spark applications. From a1e721a5a3b2dd9186e147ab551f1d0ded68e71d Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Thu, 4 Aug 2022 12:30:49 -0700 Subject: [PATCH 10/12] Modify the spark.rapids.sql.incompatibleOps.enabled=true in configs.md Signed-off-by: Hao Zhu <9665750+viadea@users.noreply.github.com> --- docs/configs.md | 6 +++--- .../src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala | 6 +++--- .../src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/configs.md b/docs/configs.md index 34cde38f785..cc29610128b 100644 --- a/docs/configs.md +++ b/docs/configs.md @@ -10,15 +10,15 @@ The following is the list of options that `rapids-plugin-4-spark` supports. On startup use: `--conf [conf key]=[conf value]`. For example: ``` -${SPARK_HOME}/bin/spark --jars rapids-4-spark_2.12-22.08.0-SNAPSHOT-cuda11.jar \ +${SPARK_HOME}/bin/spark-shell --jars rapids-4-spark_2.12-22.08.0-SNAPSHOT-cuda11.jar \ --conf spark.plugins=com.nvidia.spark.SQLPlugin \ ---conf spark.rapids.sql.incompatibleOps.enabled=true +--conf spark.rapids.sql.concurrentGpuTasks=2 ``` At runtime use: `spark.conf.set("[conf key]", [conf value])`. For example: ``` -scala> spark.conf.set("spark.rapids.sql.incompatibleOps.enabled", true) +scala> spark.conf.set("spark.rapids.sql.concurrentGpuTasks", 2) ``` All configs can be set on startup, but some configs, especially for shuffle, will not diff --git a/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala b/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala index 7f394e3f97c..db844362027 100644 --- a/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala +++ b/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala @@ -1460,15 +1460,15 @@ object RapidsConf { |On startup use: `--conf [conf key]=[conf value]`. For example: | |``` - |$SPARK_HOME/bin/spark --jars 'rapids-4-spark_2.12-22.08.0-SNAPSHOT.jar,cudf-22.08.0-SNAPSHOT-cuda11.jar' \ + |$SPARK_HOME/bin/spark-shell --jars 'rapids-4-spark_2.12-22.08.0-SNAPSHOT.jar,cudf-22.08.0-SNAPSHOT-cuda11.jar' \ |--conf spark.plugins=com.nvidia.spark.SQLPlugin \ - |--conf spark.rapids.sql.incompatibleOps.enabled=true + |--conf spark.rapids.sql.concurrentGpuTasks=2 |``` | |At runtime use: `spark.conf.set("[conf key]", [conf value])`. For example: | |``` - |scala> spark.conf.set("spark.rapids.sql.incompatibleOps.enabled", true) + |scala> spark.conf.set("spark.rapids.sql.concurrentGpuTasks", 2) |``` | | All configs can be set on startup, but some configs, especially for shuffle, will not diff --git a/sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala b/sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala index 09ed723c791..8ddf269a22b 100644 --- a/sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala +++ b/sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala @@ -1546,15 +1546,15 @@ object RapidsConf { |On startup use: `--conf [conf key]=[conf value]`. For example: | |``` - |${SPARK_HOME}/bin/spark --jars rapids-4-spark_2.12-22.08.0-SNAPSHOT-cuda11.jar \ + |${SPARK_HOME}/bin/spark-shell --jars rapids-4-spark_2.12-22.08.0-SNAPSHOT-cuda11.jar \ |--conf spark.plugins=com.nvidia.spark.SQLPlugin \ - |--conf spark.rapids.sql.incompatibleOps.enabled=true + |--conf spark.rapids.sql.concurrentGpuTasks=2 |``` | |At runtime use: `spark.conf.set("[conf key]", [conf value])`. For example: | |``` - |scala> spark.conf.set("spark.rapids.sql.incompatibleOps.enabled", true) + |scala> spark.conf.set("spark.rapids.sql.concurrentGpuTasks", 2) |``` | | All configs can be set on startup, but some configs, especially for shuffle, will not From d676428ef92c1ef7b702cf6c52ceef78ac26a51e Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Thu, 4 Aug 2022 12:59:40 -0700 Subject: [PATCH 11/12] Rollback changes in spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala Signed-off-by: Hao Zhu <9665750+viadea@users.noreply.github.com> --- .../src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala b/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala index db844362027..529e3cc170d 100644 --- a/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala +++ b/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala @@ -1460,15 +1460,15 @@ object RapidsConf { |On startup use: `--conf [conf key]=[conf value]`. For example: | |``` - |$SPARK_HOME/bin/spark-shell --jars 'rapids-4-spark_2.12-22.08.0-SNAPSHOT.jar,cudf-22.08.0-SNAPSHOT-cuda11.jar' \ + |$SPARK_HOME/bin/spark --jars 'rapids-4-spark_2.12-22.08.0-SNAPSHOT.jar,cudf-22.08.0-SNAPSHOT-cuda11.jar' \ |--conf spark.plugins=com.nvidia.spark.SQLPlugin \ - |--conf spark.rapids.sql.concurrentGpuTasks=2 + |--conf spark.rapids.sql.incompatibleOps.enabled=true |``` | |At runtime use: `spark.conf.set("[conf key]", [conf value])`. For example: | |``` - |scala> spark.conf.set("spark.rapids.sql.concurrentGpuTasks", 2) + |scala> spark.conf.set("spark.rapids.sql.incompatibleOps.enabled", true) |``` | | All configs can be set on startup, but some configs, especially for shuffle, will not From fb6deb3b233f4ee1291a75346950c471380461e9 Mon Sep 17 00:00:00 2001 From: Hao Zhu <9665750+viadea@users.noreply.github.com> Date: Thu, 4 Aug 2022 13:01:18 -0700 Subject: [PATCH 12/12] Rollback again Signed-off-by: Hao Zhu <9665750+viadea@users.noreply.github.com> --- .../src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala b/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala index 529e3cc170d..7f394e3f97c 100644 --- a/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala +++ b/spark2-sql-plugin/src/main/scala/com/nvidia/spark/rapids/RapidsConf.scala @@ -1462,7 +1462,7 @@ object RapidsConf { |``` |$SPARK_HOME/bin/spark --jars 'rapids-4-spark_2.12-22.08.0-SNAPSHOT.jar,cudf-22.08.0-SNAPSHOT-cuda11.jar' \ |--conf spark.plugins=com.nvidia.spark.SQLPlugin \ - |--conf spark.rapids.sql.incompatibleOps.enabled=true + |--conf spark.rapids.sql.incompatibleOps.enabled=true |``` | |At runtime use: `spark.conf.set("[conf key]", [conf value])`. For example: