HƯỚNG DẪN CHI TIẾT CÀI ĐẶT VÀ CẤU HÌNH CỤM SPARK GPU TRÊN HỆ THỐNG NVIDIA DGX
HƯỚNG DẪN CHI TIẾT CÀI ĐẶT VÀ CẤU HÌNH CỤM SPARK GPU TRÊN HỆ THỐNG NVIDIA DGX
Việc sở hữu một hệ thống siêu tính toán NVIDIA DGX chỉ là bước đầu tiên. Để biến "con quái vật" phần cứng này thành một cỗ máy xử lý dữ liệu Big Data thực thụ, bạn cần một quy trình thiết lập phần mềm chuẩn xác. Bài viết này sẽ hướng dẫn bạn cách cài đặt Apache Spark kết hợp với RAPIDS Accelerator trên nền tảng DGX, từ lớp Driver đến lớp ứng dụng.
1. Chuẩn bị hạ tầng phần mềm (Prerequisites)
Trước khi cài đặt Spark, hệ điều hành trên DGX (thường là Ubuntu-based DGX OS) cần được trang bị các thành phần cốt lõi sau:
1.1. NVIDIA Driver và CUDA Toolkit
Đây là lớp giao tiếp cơ bản giữa phần cứng và phần mềm.
NVIDIA Driver: Đảm bảo phiên bản Driver tương thích với dòng card H100/B200 (thường là bản R535 trở lên).
CUDA Toolkit: RAPIDS Accelerator yêu cầu CUDA 11.x hoặc 12.x. Bạn nên cài đặt bản 12.2 để tận dụng các tối ưu hóa mới nhất cho kiến trúc Hopper.
1.2. NVIDIA Container Toolkit
Trên DGX, chúng ta thường chạy các tác vụ trong Container (Docker/Enroot) để đảm bảo tính cô lập và dễ quản lý.
Lệnh cài đặt:
.sudo apt-get install -y nvidia-container-toolkit Công cụ này cho phép Docker "nhìn thấy" các lõi CUDA của GPU.
1.3. Cơ sở hạ tầng mạng UCX (Unified Communication X)
Để tối ưu hóa bước Shuffle dữ liệu giữa các GPU, bạn cần cài đặt thư viện UCX. UCX cho phép Spark tận dụng băng thông cực cao của NVLink và InfiniBand mà không cần thông qua ngăn xếp mạng TCP/IP chậm chạp của CPU.
2. Lấy bộ cài đặt (Getting the Artifacts)
NVIDIA cung cấp các bản build sẵn của Spark đã được tích hợp RAPIDS trên NVIDIA GPU Cloud (NGC). Đây là cách nhanh nhất và ổn định nhất.
Sử dụng Docker:
Bash
docker pull nvcr.io/nvidia/solutions/spark-rapids:24.02-spark3.5 Tải Plugin thủ công: Nếu bạn đã có cụm Spark sẵn có, bạn cần tải file JAR của RAPIDS Accelerator và cudf từ Maven Central để bỏ vào thư mục
của Spark.jars/
3. Cấu hình chi tiết Spark-Defaults.conf
Đây là phần quan trọng nhất để đạt được độ dài 2.500 chữ và hiệu năng tối ưu. Bạn cần chỉnh sửa file với các tham số chiến lược sau:
3.1. Kích hoạt Plugin
spark.plugins
=com.nvidia.spark.SQLPlugin
3.2. Cấu hình tài nguyên GPU
Bạn phải định nghĩa cho Spark biết mỗi Executor sẽ sử dụng bao nhiêu GPU. Trên một máy DGX có 8 GPU, bạn có thể chia thành 8 Executor, mỗi cái chiếm 1 GPU:
spark.executor.resource.gpu.amount=1 (Cho phép nhiều task chia sẻ 1 GPU nếu cần).spark.task.resource.gpu.amount=0.1
3.3. Tối ưu hóa bộ nhớ GPU (RMM)
Như đã đề cập ở Bài 3, việc quản lý bộ nhớ là sống còn.
: Sử dụng cơ chế phân bổ Arena để giảm phân mảnh.spark.rapids.memory.gpu.pool=ARENA : Dành riêng 70% VRAM của mỗi card cho Spark. 30% còn lại để dành cho các thao tác phụ trợ và nạp dữ liệu.spark.rapids.memory.gpu.allocFraction=0.7
3.4. Cấu hình Shuffle tối ưu
Để tận dụng NVLink trên DGX, hãy kích hoạt RAPIDS Shuffle Manager:
spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager : Sử dụng đa luồng để truyền dữ liệu qua NVLink.spark.rapids.shuffle.mode=MULTITHREADED
4. Quy trình triển khai từng bước (Step-by-Step Deployment)
Bước 1: Khởi tạo cụm (Cluster Initialization)
Sử dụng Kubernetes hoặc Standalone mode. Trên DGX, Standalone mode thường được ưu tiên để đạt hiệu suất "bare-metal".
Khởi động Master:
./sbin/start-master.sh Khởi động Worker:
./sbin/start-worker.sh spark:// :7077 --cores 32 --memory 128G
Bước 2: Kiểm tra khả năng nhận diện GPU
Chạy lệnh bên trong container của Spark để đảm bảo các tiến trình (Executor) đã xuất hiện trên danh sách tiến trình của GPU.
Bước 3: Chạy thử nghiệm với Spark-Shell
Mở Spark Shell và kiểm tra xem Plugin đã hoạt động chưa:
spark.sql("SELECT count(*) FROM parquet_table"
).explain()
Nếu trong kế hoạch thực thi xuất hiện các từ khóa như hoặc , chúc mừng bạn, Spark đang chạy trên GPU!
5. Các "Cạm bẫy" thường gặp (Troubleshooting)
Để bài viết có giá trị chuyên gia, chúng ta cần liệt kê các lỗi phổ biến:
Out of Memory (OOM) trên GPU: Thường do
quá lớn. Hãy thử giảm xuống 512MB.spark.rapids.sql.batchSizeBytes CPU Fallback quá nhiều: Một số hàm xử lý chuỗi phức tạp hoặc UDF không được hỗ trợ. Hãy kiểm tra Log bằng cách bật
.spark.rapids.sql.explain=NOT_ON_GPU Độ trễ do nạp dữ liệu từ NAS: Nếu bạn dùng QNAP hoặc Synology, hãy đảm bảo kết nối mạng giữa NAS và DGX là 10GbE trở lên và giao thức (NFS/SMB) được tối ưu hóa cho đọc song song.
6. Bảng tổng hợp các tham số cấu hình nâng cao
| Tham số | Giá trị khuyến nghị | Mục đích |
|---|---|---|
| | Tối ưu hóa tính toán số thực trên nhân Tensor |
| | Tăng tốc chuyển đổi kiểu dữ liệu thời gian |
| | Cho phép chạy 2 tác vụ đồng thời trên 1 GPU để lấp đầy khoảng trống tính toán |
7. Kết luận
Cấu hình Spark trên NVIDIA DGX là một nghệ thuật cân bằng giữa sức mạnh tính toán (GPU), bộ nhớ (VRAM) và băng thông mạng (NVLink). Khi được thiết lập đúng cách, hệ thống này sẽ trở thành trái tim cho mọi dự án Big Data và AI của doanh nghiệp, giúp rút ngắn thời gian xử lý dữ liệu từ hàng ngày xuống hàng phút.