{"id":1786,"date":"2026-08-19T13:08:05","date_gmt":"2026-08-19T13:08:05","guid":{"rendered":"https:\/\/blog.openzeka.com\/en\/?p=1786"},"modified":"2026-08-19T13:08:05","modified_gmt":"2026-08-19T13:08:05","slug":"gpu-accelerated-data-science-and-machine-learning-on-dgx-spark","status":"publish","type":"post","link":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/","title":{"rendered":"GPU-Accelerated Data Science and Machine Learning on DGX Spark"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1331.2px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><p>In this tutorial, you will accelerate data science and machine learning workflows on a DGX Spark using its GPU.<\/p>\n<p>The Spark can be used as a standalone computer by connecting a monitor and keyboard, or as a remote server accessed from another computer. In this tutorial, we will connect to the Spark remotely and install the necessary software to run our workloads.<\/p>\n<p>We will use pandas as our data processing library and scikit-learn as our machine learning library. These two libraries are foundational to the data science and machine learning ecosystem. In this tutorial, we will accelerate their workflows on the GPU using CUDA-X.<\/p>\n<p>CUDA-X is the umbrella name for NVIDIA&#8217;s collection of GPU acceleration libraries. Within this collection, the set containing data science libraries is called RAPIDS. In this tutorial, we will use cuDF from the RAPIDS library suite to accelerate pandas, and cuML to accelerate scikit-learn.<\/p>\n<p>This tutorial consists of three parts:<\/p>\n<ul>\n<li><strong>Setup:<\/strong> Installing Miniconda, creating conda environments, and cloning the playbook repository<\/li>\n<li><strong>Running the Notebooks:<\/strong> Running two notebooks in both CPU and GPU environments<\/li>\n<li><strong>Comparison:<\/strong> Comparing CPU and GPU performance cell by cell<\/li>\n<\/ul>\n<hr \/>\n<h2>Setup<\/h2>\n<h3>Connecting to the Spark<\/h3>\n<p>If you are connecting to the Spark remotely for the first time, you need to find its IP address. Connect a monitor and keyboard to the Spark, log in, and run the following command in the terminal:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-1 > .CodeMirror, .fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-1 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_1\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_1\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_1\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">ip route get 1.1.1.1 | grep -oP &#8216;src KS+&#8217;<\/textarea><\/div><div class=\"fusion-text fusion-text-2\"><p>&nbsp;<\/p>\n<p>The command outputs the IP address of the Spark&#8217;s default network interface:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-2 > .CodeMirror, .fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-2 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_2\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_2\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_2\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">192.168.1.162<\/textarea><\/div><div class=\"fusion-text fusion-text-3\"><p>&nbsp;<\/p>\n<p>Note this address; you will use it in place of <code><\/code> throughout this tutorial. Alternatively, you can find the IP address by checking the NVIDIA Sync application.<\/p>\n<p>Make sure your computer is connected to the same network as the Spark. Then, open a terminal on your computer and connect to the Spark via SSH:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-3 > .CodeMirror, .fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-3 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_3\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_3\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_3\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">ssh nvidia@<\/textarea><\/div><div class=\"fusion-text fusion-text-4\"><p>&nbsp;<\/p>\n<p>On the first connection, you will see a fingerprint warning. Type <code>yes<\/code> and press Enter. Then, when prompted for a password, enter the Spark&#8217;s password:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-4 > .CodeMirror, .fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-4 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_4\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_4\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_4\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">The authenticity of host &#8216;192.168.1.162 (192.168.1.162)&#8217; can&#8217;t be established.\nED25519 key fingerprint is SHA256:S6EECYc6Pw2aLoLmhblFZ0QEoeVtJP41jJ5IYsdOmMM.\nThis key is not known by any other names\nAre you sure you want to continue connecting (yes\/no\/[fingerprint])? yes\nWarning: Permanently added &#8216;192.168.1.162&#8217; (ED25519) to the list of known hosts.\nnvidia@192.168.1.162&#8217;s password:\nWelcome to NVIDIA DGX Spark Version 7.5.0 (GNU\/Linux 6.17.0-1026-nvidia aarch64)<\/p>\n<p>System information as of Mon Aug 3 07:38:29 2026 UTC<\/p>\n<p>System load: 0.50 Temperature: 35.0 C\nUsage of \/: 27% of 3.67TB Processes: 575\nMemory usage: 3% Users logged in: 1\nSwap usage: 0% IPv4 address for enP7s7: 192.168.1.162<\/textarea><\/div><div class=\"fusion-text fusion-text-5\"><p>&nbsp;<\/p>\n<p>Once connected, the Spark will start accepting commands from this terminal. Throughout this tutorial, you will enter all commands in this terminal on your computer.<\/p>\n<hr \/>\n<h3>Installing Miniconda<\/h3>\n<p>Conda is a package manager that manages Python packages and environments. If conda is not installed on the Spark, you need to install Miniconda. Run the following commands:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-5 > .CodeMirror, .fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-5 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_5\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_5\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_5\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\nwget -q https:\/\/repo.anaconda.com\/miniconda\/Miniconda3-latest-Linux-aarch64.sh -O miniconda.sh\nbash miniconda.sh -b -p ~\/miniconda3\nrm miniconda.sh<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-6 > .CodeMirror, .fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-6 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_6\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_6\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_6\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">PREFIX=\/home\/nvidia\/miniconda3\nUnpacking bootstrapper&#8230;\nUnpacking payload&#8230;<\/p>\n<p>Installing base environment&#8230;<\/p>\n<p>Preparing transaction: &#8230;working&#8230; done\nExecuting transaction: &#8230;working&#8230; done\ninstallation finished.<\/textarea><\/div><div class=\"fusion-text fusion-text-6\"><p>&nbsp;<\/p>\n<p>Verify the installation:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-7 > .CodeMirror, .fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-7 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_7\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_7\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_7\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">~\/miniconda3\/bin\/conda &#8211;version<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-8 > .CodeMirror, .fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-8 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_8\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_8\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_8\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">conda 26.5.3<\/textarea><\/div><div class=\"fusion-text fusion-text-7\"><p>&nbsp;<\/p>\n<p>Add conda to your PATH:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-9 > .CodeMirror, .fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-9 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_9\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_9\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_9\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">echo &#8216;export PATH=&#8221;$HOME\/miniconda3\/bin:$PATH&#8221;&#8216; &gt;&gt; ~\/.bashrc\nsource ~\/.bashrc<\/textarea><\/div><div class=\"fusion-text fusion-text-8\"><hr \/>\n<h3>Creating Conda Environments<\/h3>\n<p>In this tutorial, we will use two separate conda environments on the Spark. The first contains standard data science packages \u2014 reflecting a typical setup you may already have. Let&#8217;s call this the CPU environment. The second contains the RAPIDS libraries. Let&#8217;s call this the GPU environment.<\/p>\n<p><strong>Create the CPU environment<\/strong> (standard data science packages, no RAPIDS):<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-10 > .CodeMirror, .fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-10 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_10\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_10\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_10\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">conda create -n cpu-baseline -c conda-forge python=3.12 jupyter pandas numpy scikit-learn hdbscan umap-learn kaggle matplotlib -y<\/textarea><\/div><div class=\"fusion-text fusion-text-9\"><p>&nbsp;<\/p>\n<p><strong>Create the GPU environment<\/strong> (includes RAPIDS libraries):<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-11 > .CodeMirror, .fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-11 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_11\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_11\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_11\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">conda create -n rapids-test -c rapidsai -c conda-forge -c nvidia rapids=26.06 python=3.12 &#8216;cuda-version=13.0&#8217; jupyter hdbscan umap-learn -y<\/textarea><\/div><div class=\"fusion-text fusion-text-10\"><p>&nbsp;<\/p>\n<p>This command installs the RAPIDS 26.06 package from the <code>rapidsai<\/code> channel, CUDA 13.0 runtime from the <code>nvidia<\/code> channel, and other packages from the <code>conda-forge<\/code> channel.<\/p>\n<p>After installation completes, verify the package versions:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-12 > .CodeMirror, .fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-12 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_12\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_12\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_12\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">conda run -n cpu-baseline python -c &#8220;import pandas, sklearn, hdbscan, umap; print(f&#8217;pandas {pandas.__version__}, scikit-learn {sklearn.__version__}, hdbscan OK, umap {umap.__version__}&#8217;)&#8221;<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-13 > .CodeMirror, .fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-13 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_13\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_13\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_13\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">pandas 3.0.5, scikit-learn 1.9.0, hdbscan OK, umap 0.5.12<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-14 > .CodeMirror, .fusion-syntax-highlighter-14 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-14 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_14\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_14\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_14\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">conda run -n rapids-test python -c &#8220;import cudf, cuml; print(f&#8217;cudf {cudf.__version__}, cuml {cuml.__version__}&#8217;)&#8221;<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-15 > .CodeMirror, .fusion-syntax-highlighter-15 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-15 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_15\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_15\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_15\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">cudf 26.06.01, cuml 26.06.00<\/textarea><\/div><div class=\"fusion-text fusion-text-11\"><hr \/>\n<h3>Cloning the Playbook Repository<\/h3>\n<p>NVIDIA shares its DGX Spark playbooks on its <strong><a style=\"color: #00bf5c;\" href=\"https:\/\/build.nvidia.com\/spark\/cuda-x-data-science\">website<\/a><\/strong> and <a href=\"https:\/\/github.com\/NVIDIA\/dgx-spark-playbooks\/tree\/main\/nvidia\/cuda-x-data-science\"><strong style=\"color: #00bf5c;\">GitHub repository<\/strong><\/a> . The CUDA-X Data Science playbook there contains the two notebooks we will use.<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-16 > .CodeMirror, .fusion-syntax-highlighter-16 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-16 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_16\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_16\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_16\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\ngit clone https:\/\/github.com\/NVIDIA\/dgx-spark-playbooks.git<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-17 > .CodeMirror, .fusion-syntax-highlighter-17 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-17 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_17\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_17\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_17\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">Cloning into &#8216;dgx-spark-playbooks&#8217;&#8230;<\/textarea><\/div><div class=\"fusion-text fusion-text-12\"><p>&nbsp;<\/p>\n<p>Let&#8217;s look at the directory containing the notebooks:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-18 > .CodeMirror, .fusion-syntax-highlighter-18 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-18 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_18\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_18\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_18\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">ls -la ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\/<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-19 > .CodeMirror, .fusion-syntax-highlighter-19 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-19 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_19\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_19\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_19\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">total 284\ndrwxrwxr-x 2 nvidia nvidia 4096 Aug 3 07:41 .\ndrwxrwxr-x 3 nvidia nvidia 4096 Aug 3 07:41 ..\n-rw-rw-r&#8211; 1 nvidia nvidia 36324 Aug 3 07:41 cudf_pandas_demo.ipynb\n-rw-rw-r&#8211; 1 nvidia nvidia 242100 Aug 3 07:41 cuml_sklearn_demo.ipynb<\/textarea><\/div><div class=\"fusion-text fusion-text-13\"><p>Two notebooks are available:<\/p>\n<ul>\n<li><strong><code>cudf_pandas_demo.ipynb<\/code><\/strong> \u2014 Accelerates pandas workflows with cuDF<\/li>\n<li><strong><code>cuml_sklearn_demo.ipynb<\/code> <\/strong>\u2014 Accelerates scikit-learn workflows with cuML<\/li>\n<\/ul>\n<hr \/>\n<h3>Kaggle API Key<\/h3>\n<p>The first notebook downloads a 4.76 GB dataset from Kaggle. To do this, you need a Kaggle API key (<code>kaggle.json<\/code>). If you don&#8217;t have a Kaggle account, sign up at <a style=\"color: #00bf5c;\" href=\"https:\/\/www.kaggle.com\">kaggle.com<\/a> and create an API key.<\/p>\n<p>Copy the <code>kaggle.json<\/code> file from your computer to the Spark. Open a <strong>separate terminal<\/strong> on your computer and run the following command:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-20 > .CodeMirror, .fusion-syntax-highlighter-20 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-20 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_20\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_20\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_20\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">scp ~\/Downloads\/kaggle.json nvidia@:~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\/<\/textarea><\/div><div class=\"fusion-text fusion-text-14\"><p>&nbsp;<\/p>\n<p>Then return to your SSH terminal and set the file permissions:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-21 > .CodeMirror, .fusion-syntax-highlighter-21 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-21 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_21\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_21\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_21\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">chmod 600 ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\/kaggle.json<\/textarea><\/div><div class=\"fusion-text fusion-text-15\"><hr \/>\n<h3>Preparing CPU Copies<\/h3>\n<p>To enable comparison, we will create a CPU copy of each notebook. The only difference in these copies is that the acceleration commands are commented out. All other code remains the same.<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-22 > .CodeMirror, .fusion-syntax-highlighter-22 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-22 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_22\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_22\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_22\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\ncp cudf_pandas_demo.ipynb cudf_pandas_demo_cpu.ipynb\ncp cuml_sklearn_demo.ipynb cuml_sklearn_demo_cpu.ipynb<\/textarea><\/div><div class=\"fusion-text fusion-text-16\"><p>&nbsp;<\/p>\n<p>Now comment out the <code>%load_ext<\/code> line in each copy:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-23 > .CodeMirror, .fusion-syntax-highlighter-23 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-23 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_23\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_23\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_23\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">sed -i &#8216;s\/%load_ext cudf.pandas\/# %load_ext cudf.pandas\/&#8217; cudf_pandas_demo_cpu.ipynb\nsed -i &#8216;s\/%load_ext cuml.accel\/# %load_ext cuml.accel\/&#8217; cuml_sklearn_demo_cpu.ipynb<\/textarea><\/div><div class=\"fusion-text fusion-text-17\"><hr \/>\n<h2>What Are cuDF and cuML?<\/h2>\n<p>In this section, before diving into the practical work, we will explain cuDF and cuML.<\/p>\n<h3>cuDF \u2014 pandas Acceleration<\/h3>\n<p>cuDF offers a &#8220;pandas accelerator mode&#8221; called <code>cudf.pandas<\/code>. This mode is activated by adding a single acceleration command to a Jupyter notebook:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-24 > .CodeMirror, .fusion-syntax-highlighter-24 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-24 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_24\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_24\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_24\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">%load_ext cudf.pandas<\/textarea><\/div><div class=\"fusion-text fusion-text-18\"><p>&nbsp;<\/p>\n<p>When this command is run, the <code>import pandas as pd<\/code> statement loads a &#8220;proxy module&#8221; instead of the normal pandas. This proxy attempts to run every pandas operation on the GPU (via cuDF) first; if the operation is not supported on the GPU, it automatically falls back to the CPU (pandas) and synchronizes the data in the background.<\/p>\n<p><strong>Important:<\/strong> This mechanism requires no changes to user code. All pandas commands such as <code>pd.read_csv()<\/code>, <code>df.merge()<\/code>, and <code>df.groupby()<\/code> work as-is \u2014 they just run on the GPU.<\/p>\n<h3>cuML \u2014 scikit-learn Acceleration<\/h3>\n<p>cuML offers a &#8220;scikit-learn accelerator mode&#8221; called <code>cuml.accel<\/code>. This mode is also activated with a single acceleration command:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-25 > .CodeMirror, .fusion-syntax-highlighter-25 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-25 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_25\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_25\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_25\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">%load_ext cuml.accel<\/textarea><\/div><div class=\"fusion-text fusion-text-19\"><p>&nbsp;<\/p>\n<p>This command intercepts the import operations of the <code>sklearn<\/code>, <code>umap-learn<\/code>, and <code>hdbscan<\/code> modules. When you create an estimator (e.g., <code>LinearSVC<\/code>), a &#8220;proxy estimator&#8221; is created instead of the actual estimator. If cuML has a GPU implementation for that algorithm, the operation is dispatched to the GPU; otherwise, it automatically falls back to the CPU (scikit-learn).<\/p>\n<hr \/>\n<h2>Notebook 1: Accelerating pandas with cuDF<\/h2>\n<p>&nbsp;<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"576\" title=\"nb1-overview\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-1024x576.webp\" alt class=\"img-responsive wp-image-1824\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-300x169.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-400x225.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-600x338.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-768x432.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-800x450.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-1024x576.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-1200x675.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview-1536x864.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-overview.webp 1920w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-20\"><p>&nbsp;<\/p>\n<p>This notebook contains pandas data processing operations: loading, string operations, and grouping.<\/p>\n<p>The cuDF accelerator mode (cudf.pandas) routes these operations to the GPU without requiring any code changes.<\/p>\n<h3>Running the Notebooks<\/h3>\n<p>We will run the notebooks in headless mode using jupyter nbconvert &#8211;execute. This method automatically runs all cells in the notebook and saves the outputs into the notebook file.<\/p>\n<p>Running on GPU (RAPIDS environment, acceleration command active):<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-26 > .CodeMirror, .fusion-syntax-highlighter-26 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-26 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_26\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_26\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_26\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\nconda run -n rapids-test jupyter nbconvert &#8211;execute &#8211;to notebook\n&#8211;output cudf_pandas_demo_gpu_executed.ipynb cudf_pandas_demo.ipynb<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-27 > .CodeMirror, .fusion-syntax-highlighter-27 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-27 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_27\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_27\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_27\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">[NbConvertApp] Converting notebook cudf_pandas_demo.ipynb to notebook[NbConvertApp] Writing 136623 bytes to cudf_pandas_demo_gpu_executed.ipynb<\/textarea><\/div><div class=\"fusion-text fusion-text-21\"><p>&nbsp;<\/p>\n<p><strong>Running on CPU<\/strong> (standard environment, acceleration command disabled):<\/p>\n<p>We are running the CPU copy we prepared in the &#8220;Preparing CPU Copies&#8221; section:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-28 > .CodeMirror, .fusion-syntax-highlighter-28 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-28 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_28\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_28\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_28\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\nconda run -n cpu-baseline jupyter nbconvert &#8211;execute &#8211;to notebook\n&#8211;output cudf_pandas_demo_cpu_executed.ipynb cudf_pandas_demo_cpu.ipynb<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-29 > .CodeMirror, .fusion-syntax-highlighter-29 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-29 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_29\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_29\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_29\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">[NbConvertApp] Converting notebook cudf_pandas_demo_cpu.ipynb to notebook[NbConvertApp] Writing 127995 bytes to cudf_pandas_demo_cpu_executed.ipynb<\/textarea><\/div><div class=\"fusion-text fusion-text-22\"><p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<h2>Notebook 2: Accelerating scikit-learn with cuML<\/h2>\n<p>&nbsp;<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-2 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"576\" title=\"nb2-overview\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-1024x576.webp\" alt class=\"img-responsive wp-image-1830\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-300x169.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-400x225.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-600x338.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-768x432.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-800x450.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-1024x576.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-1200x675.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview-1536x864.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-overview.webp 1920w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-23\"><p>&nbsp;<\/p>\n<p>This notebook contains various machine learning operations with scikit-learn: classification, clustering, and dimensionality reduction.<\/p>\n<p>The cuML accelerator mode (cuml.accel) routes these operations to the GPU without requiring any code changes.<\/p>\n<h3>Running<\/h3>\n<p><strong>Running on GPU:<\/strong><\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-30 > .CodeMirror, .fusion-syntax-highlighter-30 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-30 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_30\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_30\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_30\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\nconda run -n rapids-test jupyter nbconvert &#8211;execute &#8211;to notebook\n&#8211;output cuml_sklearn_demo_gpu_executed.ipynb cuml_sklearn_demo.ipynb<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-31 > .CodeMirror, .fusion-syntax-highlighter-31 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-31 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_31\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_31\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_31\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">[NbConvertApp] Converting notebook cuml_sklearn_demo.ipynb to notebook[NbConvertApp] Writing 358291 bytes to cuml_sklearn_demo_gpu_executed.ipynb<\/textarea><\/div><div class=\"fusion-text fusion-text-24\"><p><strong>Running on CPU:<\/strong><\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-32 > .CodeMirror, .fusion-syntax-highlighter-32 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-32 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_32\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_32\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_32\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\nconda run -n cpu-baseline jupyter nbconvert &#8211;execute &#8211;to notebook\n&#8211;output cuml_sklearn_demo_cpu_executed.ipynb cuml_sklearn_demo_cpu.ipynb<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-33 > .CodeMirror, .fusion-syntax-highlighter-33 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-33 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_33\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_33\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_33\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">[NbConvertApp] Converting notebook cuml_sklearn_demo_cpu.ipynb to notebook[NbConvertApp] Writing 353326 bytes to cuml_sklearn_demo_cpu_executed.ipynb<\/textarea><\/div><div class=\"fusion-text fusion-text-25\"><hr \/>\n<h2>Viewing Executed Notebooks with Jupyter<\/h2>\n<p>Executed notebooks have all cell outputs (timings, tables, charts) embedded within them. You can view them in your browser through a Jupyter server.<\/p>\n<p>Start a Jupyter server on the Spark:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-34 > .CodeMirror, .fusion-syntax-highlighter-34 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-34 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_34\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_34\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_34\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\nconda run -n cpu-baseline jupyter notebook &#8211;no-browser &#8211;ip=0.0.0.0 &#8211;port=8888<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-35 > .CodeMirror, .fusion-syntax-highlighter-35 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-35 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_35\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_35\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_35\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">[I 2026-08-03 07:56:01.000 ServerApp] jupyter_serverterminals | extension was successfully linked.[I 2026-08-03 07:56:01.000 ServerApp] jupyter_events | extension was successfully linked.[I 2026-08-03 07:56:01.000 ServerApp] jupyter_server | extension was successfully linked.[I 2026-08-03 07:56:02.000 ServerApp] Serving notebooks from local directory: \/home\/nvidia\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets[I 2026-08-03 07:56:02.000 ServerApp] Jupyter Server 2.16.0 is running at:[I 2026-08-03 07:56:02.000 ServerApp] http:\/\/192.168.1.162:8888\/tree?token=7c7ea2a440905886912cf036999d93409a8401990257ac97<\/textarea><\/div><div class=\"fusion-text fusion-text-26\"><p>Open the URL shown in the output (including the token) in your computer&#8217;s browser. In the file list on the left, you will see four executed notebooks:<\/p>\n<ul>\n<li><code>cudf_pandas_demo_gpu_executed.ipynb<\/code> \u2014 GPU run (cuDF)<\/li>\n<li><code>cudf_pandas_demo_cpu_executed.ipynb<\/code> \u2014 CPU run (cuDF)<\/li>\n<li><code>cuml_sklearn_demo_gpu_executed.ipynb<\/code> \u2014 GPU run (cuML)<\/li>\n<li><code>cuml_sklearn_demo_cpu_executed.ipynb<\/code> \u2014 CPU run (cuML)<\/li>\n<\/ul>\n<p>Click on any of them to view cell outputs, <code>%%time<\/code> timings, tables, and charts. You can open the CPU and GPU notebooks side by side in two browser tabs for comparison.<\/p>\n<hr \/>\n<h2>Comparison<\/h2>\n<p>In this section, we will compare important cells side by side and evaluate the results. In the screenshots, the CPU run is on the left and the GPU run is on the right.<\/p>\n<hr \/>\n<h3>Notebook 1: cuDF \/ pandas<\/h3>\n<h4>In[4] \u2014 Acceleration Command<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-3 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"248\" title=\"nb1-cell-in4\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-1024x248.webp\" alt class=\"img-responsive wp-image-1820\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-200x49.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-300x73.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-400x97.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-600x146.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-768x186.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-800x194.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-1024x248.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-1200x291.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4-1536x372.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in4.webp 1835w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-27\"><p>&nbsp;<\/p>\n<p>This cell is the only difference between the CPU and GPU runs. In the GPU notebook, the <strong><code>%load_ext cudf.pandas<\/code> <\/strong>command replaces pandas with a proxy module. In the CPU notebook, this line is commented out (<code># <strong>%load_ext cudf.pandas<\/strong><\/code>), so normal pandas is used.<\/p>\n<hr \/>\n<h4>In[6] \u2014 Data Loading (4.76 GB)<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-4 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"122\" title=\"nb1-cell-in6\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-1024x122.webp\" alt class=\"img-responsive wp-image-1821\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-200x24.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-300x36.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-400x48.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-600x72.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-768x92.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-800x96.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-1024x122.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-1200x143.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6-1536x184.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in6.webp 1833w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-28\"><p>&nbsp;<\/p>\n<p>Loads the 4.76 GB <code>job_summary.csv<\/code> file. This file contains the text summaries of 1.1 million LinkedIn job postings.<\/p>\n<table>\n<thead>\n<tr>\n<th>CPU<\/th>\n<th>GPU<\/th>\n<th>Speedup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>25.7s<\/td>\n<td>3.87s<\/td>\n<td><strong>6.6x<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>CPU pandas reads the dataset with a single thread, which is why it is slow. cuDF&#8217;s GPU CSV reader, on the other hand, loads the data in parallel into GPU memory. For a 4.76 GB file, the time difference is very significant.<\/p>\n<hr \/>\n<h4>In[7-8] \u2014 Data Loading + String Operation<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-5 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"258\" title=\"nb1-cell-in7-8\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-1024x258.webp\" alt class=\"img-responsive wp-image-1822\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-200x50.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-300x76.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-400x101.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-600x151.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-768x193.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-800x201.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-1024x258.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-1200x302.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8-1536x387.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in7-8.webp 1847w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-29\"><p>&nbsp;<\/p>\n<p>Loads two smaller CSV files (<code>job_skills.csv<\/code> 642 MB, <code>linkedin_job_postings.csv<\/code> 397 MB, totaling ~1 GB) and then calculates the length of 1.1 million strings. Calculating string length is a common operation when working with text data.<\/p>\n<p><strong>In[7] \u2014 Data loading (2 CSVs, ~1 GB):<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>CPU<\/th>\n<th>GPU<\/th>\n<th>Speedup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>6.46s<\/td>\n<td>252ms<\/td>\n<td><strong>25.6x<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>In[8] \u2014 String operation (<code>str.len()<\/code> on 1.1M strings):<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>CPU<\/th>\n<th>GPU<\/th>\n<th>Speedup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>246ms<\/td>\n<td>37.2ms<\/td>\n<td><strong>6.6x<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In string operations, the GPU processes thousands of strings simultaneously rather than calculating each string&#8217;s length one by one.<\/p>\n<hr \/>\n<h4>In[11] \u2014 Aggregation (groupby + sort)<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-6 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"434\" title=\"nb1-cell-in11\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-1024x434.webp\" alt class=\"img-responsive wp-image-1823\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-200x85.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-300x127.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-400x169.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-600x254.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-768x325.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-800x339.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-1024x434.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-1200x508.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11-1536x650.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb1-cell-in11.webp 1835w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-30\"><p>&nbsp;<\/p>\n<p>Groups 1.1 million rows by <code>job_title<\/code> and <code>job_location<\/code> columns, calculates the mean, and sorts by three columns.<\/p>\n<table>\n<thead>\n<tr>\n<th>CPU<\/th>\n<th>GPU<\/th>\n<th>Speedup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1.59s<\/td>\n<td>199ms<\/td>\n<td><strong>8.0x<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>The GPU is significantly faster in this operation.<\/p>\n<hr \/>\n<h3>Notebook 2: cuML \/ scikit-learn<\/h3>\n<h4>In[2] \u2014 Acceleration Command<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-7 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"202\" title=\"nb2-cell-in2\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-1024x202.webp\" alt class=\"img-responsive wp-image-1825\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-200x39.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-300x59.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-400x79.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-600x118.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-768x151.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-800x158.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-1024x202.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-1200x237.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2-1536x303.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in2.webp 1825w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-31\"><p>&nbsp;<\/p>\n<p>As in the previous notebook, this cell is the only difference between the CPU and GPU runs. In the GPU notebook, the <code>%load_ext cuml.accel<\/code> command intercepts scikit-learn\/umap-learn\/hdbscan imports.<\/p>\n<hr \/>\n<h4>In[7] \u2014 Classification: LinearSVC Training<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-8 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"222\" title=\"nb2-cell-in7\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-1024x222.webp\" alt class=\"img-responsive wp-image-1826\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-200x43.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-300x65.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-400x87.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-600x130.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-768x167.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-800x174.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-1024x222.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-1200x260.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7-1536x333.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in7.webp 1830w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-32\"><p>&nbsp;<\/p>\n<p>Trains a Linear Support Vector Classifier on the UCI Covertype dataset. The dataset contains 581 thousand samples and 55 features.<\/p>\n<table>\n<thead>\n<tr>\n<th>CPU<\/th>\n<th>GPU<\/th>\n<th>Speedup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>31.9s<\/td>\n<td>3.65s<\/td>\n<td><strong>8.7x<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Model training is the most time-consuming step in machine learning. The GPU performs LinearSVC&#8217;s matrix operations in parallel, significantly reducing training time. This is of great importance in scenarios where you need to train multiple models, such as hyperparameter search, which involve heavy computational workloads.<\/p>\n<hr \/>\n<h4>In[12] \u2014 CPU Fallback: KernelDensity<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-9 hover-type-none\"><img decoding=\"async\" width=\"878\" height=\"719\" title=\"nb2-cell-in12\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in12.webp\" alt class=\"img-responsive wp-image-1827\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in12-200x164.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in12-300x246.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in12-400x328.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in12-600x491.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in12-768x629.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in12-800x655.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in12.webp 878w\" sizes=\"(max-width: 640px) 100vw, 878px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-33\"><blockquote>\n<p>&nbsp;<\/p>\n<p><strong>Note:<\/strong> This screenshot is taken from the GPU notebook only (no side-by-side comparison).<\/p>\n<\/blockquote>\n<p>This cell is used to demonstrate cuML&#8217;s CPU fallback mechanism. The KernelDensity algorithm does not have a GPU implementation in cuML. The notebook deliberately calls this algorithm to show that unsupported operations gracefully fall back to the CPU.<\/p>\n<table>\n<thead>\n<tr>\n<th>CPU<\/th>\n<th>GPU<\/th>\n<th>Speedup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1.65ms<\/td>\n<td>9.74ms<\/td>\n<td>0.2x<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h4>In[16] \u2014 Clustering: HDBSCAN<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-10 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"237\" title=\"nb2-cell-in16\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-1024x237.webp\" alt class=\"img-responsive wp-image-1828\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-200x46.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-300x69.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-400x93.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-600x139.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-768x178.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-800x185.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-1024x237.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-1200x278.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16-1536x356.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in16.webp 1827w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-34\"><p>&nbsp;<\/p>\n<p>HDBSCAN is a density-based clustering algorithm. Here it runs on synthetic data (20 thousand samples, 100 features, 5 clusters).<\/p>\n<table>\n<thead>\n<tr>\n<th>CPU<\/th>\n<th>GPU<\/th>\n<th>Speedup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>15.9s<\/td>\n<td>216ms<\/td>\n<td><strong>73.6x<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This is the largest speedup recorded during this tutorial. HDBSCAN involves computationally intensive steps such as density calculations and minimum spanning tree construction. These steps can be accelerated dozens of times by leveraging the GPU&#8217;s parallel processing power.<\/p>\n<hr \/>\n<h4>In[25] \u2014 Dimensionality Reduction: UMAP<\/h4>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-11 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"179\" title=\"nb2-cell-in25\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-1024x179.webp\" alt class=\"img-responsive wp-image-1829\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-200x35.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-300x53.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-400x70.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-600x105.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-768x135.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-800x140.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-1024x179.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-1200x210.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25-1536x269.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/nb2-cell-in25.webp 1827w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-35\"><p>UMAP reduces high-dimensional data to a lower dimension (here, 561D \u2192 2D). The UCI HAR dataset (7,352 samples, 561 features) contains human activities recorded from smartphone sensors.<\/p>\n<table>\n<thead>\n<tr>\n<th>CPU<\/th>\n<th>GPU<\/th>\n<th>Speedup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>13.9s<\/td>\n<td>367ms<\/td>\n<td><strong>37.9x<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>UMAP involves building a k-NN graph and various optimization steps. These steps provide significant parallelization advantages on the GPU.<\/p>\n<hr \/>\n<h2>Conclusion<\/h2>\n<p>In this tutorial, we accelerated pandas and scikit-learn workflows on the DGX Spark using CUDA-X libraries (cuDF, cuML) on the GPU. We ran two notebooks in both CPU and GPU environments to make a real performance comparison.<\/p>\n<p>The results obtained:<\/p>\n<table>\n<thead>\n<tr>\n<th><strong>Operation Category<\/strong><\/th>\n<th><strong>Typical Speedup<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>CSV loading<\/strong><\/td>\n<td><strong>6-25x<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>String operations<\/strong><\/td>\n<td><strong>6x<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>groupby + sort<\/strong><\/td>\n<td><strong>8x<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>LinearSVC training<\/strong><\/td>\n<td><strong>8.7x<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>HDBSCAN clustering<\/strong><\/td>\n<td><strong>73.6x<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>UMAP dimensionality reduction<\/strong><\/td>\n<td><strong>37.9x<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>The most striking results were achieved with the HDBSCAN (73.6x) and UMAP (37.9x) algorithms. This is because these algorithms involve intensive mathematical computations, which is where the GPU&#8217;s parallel processing power provides a significant advantage.<\/p>\n<p>These results show that by adding a single command to your pandas and scikit-learn code running on the Spark, you can achieve significant speedups. We also recommend trying these notebooks on your own computer. This is because whether GPU acceleration is present or not, the performance of the DGX Spark&#8217;s 20-core ARM CPU may surprise you!<\/p>\n<hr \/>\n<h2>Shutdown<\/h2>\n<p>When you are done, stop the Jupyter server with <code>Ctrl+C<\/code>. The conda environments you created on the Spark (<code>cpu-baseline<\/code> and <code>rapids-test<\/code>), the executed notebooks, and the downloaded datasets remain on disk \u2014 nothing is deleted.<\/p>\n<p>To view the notebooks again, restart the Jupyter server:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-36 > .CodeMirror, .fusion-syntax-highlighter-36 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-36 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_36\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_36\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_36\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/dgx-spark-playbooks\/nvidia\/cuda-x-data-science\/assets\nconda run -n cpu-baseline jupyter notebook &#8211;no-browser &#8211;ip=0.0.0.0 &#8211;port=8888<\/textarea><\/div><div class=\"fusion-text fusion-text-36\"><p>&nbsp;<\/p>\n<p>When the server starts, open the URL containing the token shown in the terminal in your browser.<\/p>\n<\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":1927,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-1786","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-generative-ai"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.3.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>GPU-Accelerated Data Science and Machine Learning on DGX Spark - OpenZeka EN Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GPU-Accelerated Data Science and Machine Learning on DGX Spark\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/\" \/>\n<meta property=\"og:site_name\" content=\"OpenZeka EN Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61576911356211\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-19T13:08:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Enhar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Aetherixnl\" \/>\n<meta name=\"twitter:site\" content=\"@Aetherixnl\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Enhar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/\"},\"author\":{\"name\":\"Enhar\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/person\\\/62c964376839cf2c4b2eb682bf14d3cb\"},\"headline\":\"GPU-Accelerated Data Science and Machine Learning on DGX Spark\",\"datePublished\":\"2026-08-19T13:08:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/\"},\"wordCount\":4336,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp\",\"articleSection\":[\"Generative AI\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/\",\"name\":\"GPU-Accelerated Data Science and Machine Learning on DGX Spark - OpenZeka EN Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp\",\"datePublished\":\"2026-08-19T13:08:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp\",\"contentUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GPU-Accelerated Data Science and Machine Learning on DGX Spark\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\",\"name\":\"Aetherix B.V.\",\"description\":\"NVIDIA Jetson Developer Kits &amp;Edge Devices\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\",\"name\":\"Aetherix B.V.\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/aetherix-site-icon.webp\",\"contentUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/aetherix-site-icon.webp\",\"width\":421,\"height\":398,\"caption\":\"Aetherix B.V.\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61576911356211\",\"https:\\\/\\\/x.com\\\/Aetherixnl\",\"https:\\\/\\\/www.instagram.com\\\/aetherixnl\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@aetherixnl\"],\"description\":\"Aetherix provides a full range of NVIDIA Jetson-based edge AI solutions\u2014including Developer Kits, AI Kits, industrial-grade Carrier Boards, and fully integrated Boxed AI Systems.\",\"email\":\"info@aetherix.com\",\"legalName\":\"Aetherix B.V.\",\"vatID\":\"NL867727688B01\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/person\\\/62c964376839cf2c4b2eb682bf14d3cb\",\"name\":\"Enhar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"caption\":\"Enhar\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GPU-Accelerated Data Science and Machine Learning on DGX Spark - OpenZeka EN Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/","og_locale":"en_US","og_type":"article","og_title":"GPU-Accelerated Data Science and Machine Learning on DGX Spark","og_url":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/","og_site_name":"OpenZeka EN Blog","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61576911356211","article_published_time":"2026-08-19T13:08:05+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp","type":"image\/webp"}],"author":"Enhar","twitter_card":"summary_large_image","twitter_creator":"@Aetherixnl","twitter_site":"@Aetherixnl","twitter_misc":{"Written by":"Enhar","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/#article","isPartOf":{"@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/"},"author":{"name":"Enhar","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/person\/62c964376839cf2c4b2eb682bf14d3cb"},"headline":"GPU-Accelerated Data Science and Machine Learning on DGX Spark","datePublished":"2026-08-19T13:08:05+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/"},"wordCount":4336,"publisher":{"@id":"https:\/\/blog.openzeka.com\/en\/#organization"},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp","articleSection":["Generative AI"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/","url":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/","name":"GPU-Accelerated Data Science and Machine Learning on DGX Spark - OpenZeka EN Blog","isPartOf":{"@id":"https:\/\/blog.openzeka.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/#primaryimage"},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp","datePublished":"2026-08-19T13:08:05+00:00","breadcrumb":{"@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/#primaryimage","url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp","contentUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/CUDA-X-GPU-Accelerated-Data-Science-and-Machine-Learning-on-DGX-Spark.webp","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/blog.openzeka.com\/en\/gpu-accelerated-data-science-and-machine-learning-on-dgx-spark\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.openzeka.com\/en\/"},{"@type":"ListItem","position":2,"name":"GPU-Accelerated Data Science and Machine Learning on DGX Spark"}]},{"@type":"WebSite","@id":"https:\/\/blog.openzeka.com\/en\/#website","url":"https:\/\/blog.openzeka.com\/en\/","name":"Aetherix B.V.","description":"NVIDIA Jetson Developer Kits &amp;Edge Devices","publisher":{"@id":"https:\/\/blog.openzeka.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.openzeka.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blog.openzeka.com\/en\/#organization","name":"Aetherix B.V.","url":"https:\/\/blog.openzeka.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2025\/06\/aetherix-site-icon.webp","contentUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2025\/06\/aetherix-site-icon.webp","width":421,"height":398,"caption":"Aetherix B.V."},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61576911356211","https:\/\/x.com\/Aetherixnl","https:\/\/www.instagram.com\/aetherixnl\/","https:\/\/www.tiktok.com\/@aetherixnl"],"description":"Aetherix provides a full range of NVIDIA Jetson-based edge AI solutions\u2014including Developer Kits, AI Kits, industrial-grade Carrier Boards, and fully integrated Boxed AI Systems.","email":"info@aetherix.com","legalName":"Aetherix B.V.","vatID":"NL867727688B01"},{"@type":"Person","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/person\/62c964376839cf2c4b2eb682bf14d3cb","name":"Enhar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","caption":"Enhar"}}]}},"_links":{"self":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1786","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/comments?post=1786"}],"version-history":[{"count":10,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1786\/revisions"}],"predecessor-version":[{"id":1918,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1786\/revisions\/1918"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/media\/1927"}],"wp:attachment":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/media?parent=1786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/categories?post=1786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/tags?post=1786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}