Hỏi - đáp Nơi cung cấp thông tin nghề nghiệp và giải đáp những thắc mắc thường gặp của bạn

Sử dụng GPU cho Machine Learning với NVIDIA RAPIDS

Chào mừng đến với chuỗi bài viết về hệ sinh thái RAPIDS của NVIDIA! 

Trong phần mở đầu này, chúng ta sẽ khám phá trải nghiệm của chúng tôi sau khi sử dụng RAPIDS. Trong những bài viết tiếp theo, chúng ta sẽ tiếp tục khám phá những lợi ích về hiệu suất tiềm năng của việc áp dụng RAPIDS, cùng với các trường hợp sử dụng nâng cao hơn, mở ra một loạt ứng dụng mới của bộ thư viện này.

Sử dụng GPU cho Học máy với NVIDIA RAPIDS 

Trong những năm gần đây, GPU thường được đề cập đến vì khả năng sử dụng trong khai thác tiền điện tử. Trải qua nhiều biến động, việc sử dụng GPU cho những công nghệ tiên tiến đã không ngừng tăng trưởng và dần ổn định hơn.

Việc sử dụng GPU trong các quy trình Học máy (Machine Learning) và Trí tuệ nhân tạo (Artificial Intelligence) phức tạp, đòi hỏi khả năng tính toán cao, đã mang lại những lợi ích đáng kinh ngạc về hiệu năng. Tuy nhiên, do cách tiếp cận khác biệt trong việc xây dựng và sử dụng mô hình nên ứng dụng dùng GPU còn khá nhiều thách thức.

NVIDIA RAPIDS hướng đến việc cung cấp một bộ công cụ Học máy tương thích với GPU, giúp tạo ra quy trình Học máy và Trí tuệ nhân tạo tương tự như những công cụ thông thường và phổ biến khác như Pandas và Scikit-Learn. Trung tâm Khoa học Dữ liệu (Data Solutions Center) của TMA Solutions gần đây đã tiến hành nghiên cứu về bộ công cụ này nhằm đánh giá tính khả dụng và hiệu suất của chúng.

Mục tiêu dự án

Mục tiêu của nhóm là nghiên cứu và thử nghiệm các công cụ có sẵn trong framework RAPIDS, nhằm xác định những phần nào trong quy trình Học máy có thể được thay thế. Thư viện dữ liệu cuDF đã cung cấp một lựa chọn thay thế thích hợp cho Pandas, trong khi bộ công cụ cuML cũng cung cấp một loạt các thuật toán Học máy tương tự như những gì được cung cấp bởi Scikit-learn.

Được xây dựng trên định dạng dữ liệu cột Apache Arrow, thư viện cuDF cung cấp một API tương tự như Pandas, giúp dễ dàng chuyển đổi từ tính toán trên CPU sang tính toán dựa trên GPU. Điều này giúp cải thiện hiệu suất tính toán đáng kể, đồng thời cho phép thao tác dữ liệu trên GPU một cách thuận tiện và hiệu quả. Tương tự, thư viện cuML cung cấp một API tương tự như Scikit-learn, giúp người dùng tiếp cận và sử dụng các thuật toán Học máy trên GPU một cách dễ dàng và quen thuộc. Việc này cho phép chúng tôi tận dụng toàn bộ sức mạnh của GPU để tăng tốc đáng kể quá trình huấn luyện và dự đoán mô hình Học máy. Nhờ vào những tính năng và hiệu suất đáng kể của cuDF và cuML, chúng tôi tự tin rằng RAPIDS đem lại một sự thay đổi tích cực cho quy trình Học máy trên nền tảng GPU, và chúng tôi sẽ tiếp tục khám phá và áp dụng các ưu điểm của các thư viện này vào các dự án của chúng tôi.

Phân tích dữ liệu và chuyển đổi workflow

Để làm quen với framework RAPIDS, Nhóm đã quyết định triển khai một workflow Học máy hiện có bằng cách sử dụng cuDF và cuML. Workflow bao gồm phân tích dữ liệu trên một tập dữ liệu liên quan đến giá nhà đất, sau đó phát triển một mô hình dự đoán giá nhà đất bằng cách chọn lọc các đặc trưng và đánh giá hiệu suất mô hình.

Các giai đoạn đầu tiên của quá trình chuyển đổi đơn giản và dễ dàng được thực hiện. Sau khi cài đặt RAPIDS, gói cuDF có thể được nhập vào các tệp notebook và dữ liệu có thể được đọc và xử lý với một số thay đổi nhỏ so với code của Pandas.

Ảnh 1. Tải dữ liệu bằng Pandas

Ảnh 2. Tải dữ liệu bằng cuDF

Ảnh 1 và 2 cho thấy sự tương đồng về mã lệnh giữa Pandas và cuDF. Việc trực quan hóa dữ liệu cũng trở nên đơn giản khi sử dụng RAPIDS. Matplotlib và Seaborn có khả năng tương thích với cuDF bằng cách sử dụng hàm to_cupy của cuDF để chuyển đổi dataframe cuDF thành một mảng cuPy. Dưới đây là một ví dụ minh họa cho việc này.

Ảnh 3. Vẽ biểu đồ cuDF và cuPy

Một ví dụ khác về việc chuyển đổi từ Pandas sang cuDF là khi chúng ta muốn xác định các cột chứa dữ liệu thiếu và sắp xếp chúng theo thứ tự từ cao đến thấp dựa trên tỷ lệ. Trong hình ảnh dưới đây, bạn có thể thấy mã lệnh của Pandas thực hiện công việc này.

Ảnh 4. Phân tích dữ liệu thiếu bằng Pandas

Trong ảnh 5, chúng ta có thể thấy một phân tích về giá trị thiếu được thực hiện bằng cách sử dụng cuDF. Chỉ có một điểm cần được điều chỉnh từ mã lệnh của Pandas, đó là phần trích xuất kiểu dữ liệu cho mỗi cột.

Ảnh 5. Phân tích dữ liệu thiếu bằng cuDF

Lựa chọn và xây dựng đặc trưng

Hầu hết các hoạt động lựa chọn và xây dựng đặc trưng cũng rất dễ dàng để chuyển đổi từ thư viện cũ. Quá trình chia tập dữ liệu thành các tập train và test cũng tuân theo cùng quy trình như khi sử dụng Pandas, như được minh họa trong hình dưới đây.

Ảnh 6. Chia tập train và test

Một số khởi tạo yêu cầu một số bước bổ sung. Ví dụ, khi thực hiện MinMax scaling bằng MinMaxScaler của cuML, dữ liệu đầu ra có định dạng mảng và cần được chuyển đổi lại thành dataframe để tiếp tục xử lý. Nhóm chúng tôi đã chỉnh tỷ lệ các biến phân loại để tìm ra mối quan hệ độc lập giữa một số biến và biến mục tiêu (giá nhà đất). Trong trường hợp này, việc chuyển đổi từ Pandas sang cuDF yêu cầu một số thay đổi nhỏ, như được minh họa bằng màu đỏ trong Ảnh 7, 8 và 9 dưới đây.

Ảnh 7. Chỉnh tỷ lệ MinMax

Ảnh 8. Biến phân loại với Pandas

Ảnh 9. Biến phân loại với cuDF

Thư viện cuML cung cấp một bộ công cụ đa dạng và phong phú, có thể được sử dụng trong quá trình biến đổi các đặc trưng. Chúng tôi đã tiến hành đánh giá tác động của việc sử dụng biến đổi Yeo-Johnson bằng cách vẽ đồ thị phân phối của các biến liên tục trong tập dữ liệu trước và sau khi áp dụng biến đổi. 

Mã lệnh dưới đây được sử dụng để thực hiện biến đổi trong ví dụ.

Ảnh 10. Biến đổi Yeo-Johnson với cuML

Huấn luyện và đánh giá hiệu suất Mô Hình

Chúng tôi đã huấn luyện một mô hình hồi quy tuyến tính (Lasso) để dự đoán giá nhà đất. Việc huấn luyện mô hình có vẻ  đơn giản và cài đặt cũng tương tự như khi sử dụng Scikit-learn.

Ảnh 11. Huấn luyện model với cuML

Để đánh giá mô hình, chúng tôi đã cần phải cập nhật code ban đầu. Dữ liệu cần phải được chuyển đổi từ định dạng cuDF sang định dạng mảng cuPy trước khi tính giá trị MSE và R^2. Điều này có thể được thấy trong ảnh 12.

Ảnh 12. Đánh giá mô hình

Tổng thể, quá trình huấn luyện và đánh giá model cho tập dữ liệu dường như đơn giản và hiệu quả hơn nhiều.

Khi đánh giá mô hình  được thể hiện trong ảnh 12. Team tính được RMSE là 28123 và giá trị R2 là 0,855. Team  đã vẽ các giá trị dự đoán của giá nhà đất so với các giá trị thực tế như được thấy trong ảnh 13 dưới đây.

Ảnh 13. Giá nhà đất dự đoán vs. giá thực tế

Chúng tôi  đã vẽ đồ thị phân phối của các sai số và thấy chúng có phân phối gần như chuẩn, như được thấy trong ảnh 14. Chúng tôi thấy rằng cuPy hoàn toàn tương thích với cả Matplotlib và Seaborn, và không gặp bất kỳ trở ngại  đáng kể nào so với việc sử dụng các công cụ vẽ đồ thị này với các thư viện Numpy và Pandas.

Ảnh 14. Phân phối sai số

Kết Luận

RAPIDS là một framework hữu ích và hiệu quả cho phân tích dữ liệu và học máy. cuDF cung cấp một API tương tự như Pandas, vì vậy người dùng đã quen thuộc với Pandas có thể dễ dàng chuyển sang sử dụng cuDF. Như trong bài viết này, các quy trình làm việc với Pandas hiện có cũng có thể được chuyển đổi dễ dàng sang cuDF. cuDF cũng hoạt động hiệu quả hơn so với Pandas khi làm việc với các tập dữ liệu lớn.

Trung tâm Khoa học dữ liệu (Data Solutions Center) của TMA Solutions tin rằng RAPIDS có thể cung cấp một bộ công cụ hữu ích và hiệu quả để phát triển đột phá với các công nghệ AI, ML của khách hàng. Chúng tôi sẽ tiếp tục nghiên cứu việc sử dụng RAPIDS cho các workflow và pipelines ML phức tạp hơn và mong muốn giúp đối tác phát triển kinh doanh của họ bằng cách sử dụng bộ công cụ AI và ML tiên tiến hơn. Bài viết tiếp theo trong loạt bài này sẽ tập trung vào các thử nghiệm đo hiệu năng để so sánh hiệu suất của cuML và Scikit-learn cho các công việc như phân cụm K-means, phân loại Random Forest, và mã hóa đặc trưng VLAD.

Xin gửi lời cảm ơn tới đối tác của chúng tôi - NVIDIA đã hỗ trợ trong quá trình thực hiện bài blog này.