- vừa được xem lúc

[GPU in AI] Bài 3: RAPIDS trong việc xử lí data

0 0 7

Người đăng: CisMine

Theo Viblo Asia

Ở bài 2 chúng ta đã đề cập đến việc xử dụng RAPIDS trong việc xử lí và phân tích data bằng GPU thì ở bài viết này mình sẽ hướng dẫn cách dùng

cuDF

cuDF: hay còn gọi là cuda dataframe - dùng để xử lí data bằng cuda nhưng 1 điều tuyệt vời là syntax của cuDF hoàn toàn giống với pandas nhưng về mặt hiệu suất lại nhanh gấp 10-400 lần

Cách hoạt động của cuDF

Có thể hiểu đơn giản là khi bạn call cudf.pandas thì việc import pandas (hoặc bất kì sub-module nào của nó ) sẽ không thực sự hoạt động như 1 thư viện pandas bình thường mà thay vào đó là gọi proxy module (module thay thế/tạm thời) có chức năng thay thế tạm thời cho các thành phần trong pandas. Điều này cho phép tận dụng sức mạnh của GPU để xử lý dữ liệu mà vẫn giữ syntax giống pandas

  1. Đầu tiên khi chúng ta load cudf.pandas nó sẽ "giả lập (spoof)" module của pandas, nghiã là khi bạn gọi pandas nhưng thực tế là bạn đang dùng cudf.pandas
  2. Code của bạn hoặc các thư viện bên thứ ba có sử dụng pandas đều sẽ được hoạt động thông qua cudf.pandas

Ví dụ:

%load_ext cudf.pandas import pandas as pd import seaborn as sns df = pd.DataFrame({ 'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50]
}) df['C'] = df['A'] + df['B']
print(df) sns.barplot(x='A', y='B', data=df) 

Thì ở đây df['A'] + df['B'] sẽ được thực hiện ở GPU (thông qua cudf.pandas) và việc dùng seaborn (như 1 thư viện bên thứ ba có sử dụng pandas) thì plot cũng sẽ được thực thi ở GPU

Các thư viện thứ 3 khác hỗ trợ cudf

image.png

  1. Khi chúng ta gọi các hàm của pandas thì cudf.pandas sẽ xử lý thay thế nếu có các hàm tương ứng trong cudf.

  2. Nếu không có các hàm tương ứng trong cudf thì dữ liệu sẽ được copy về lại CPU để dùng phiên bản gốc của pandas. Sau khi xử lí xong có thể copy về lại GPU nếu cần thiết hoặc in kết quả

Ở đây chúng ta có 2 cách sử dụng cudf.pandas:

  1. Load trực tiếp cudf.pandas rồi xử dụng
  2. import pandas rồi convert từ pandas sang cudf.pandas

Code

Trên Notebook

%load_ext cudf.pandas
import pandas as pd
%%cudf.pandas.profile
df = pd.DataFrame({'a': [0, 1, 2], 'b': [3, 4, 3]}) df.min(axis=1)
out = df.groupby('a').filter( lambda group: len(group) > 1
) 

image.png

%%cudf.pandas.line_profile
df = pd.DataFrame({'a': [0, 1, 2], 'b': [3, 4, 3]}) df.min(axis=1)
out = df.groupby('a').filter( lambda group: len(group) > 1
) 

image.png

Trên Local

import pandas as pd df = pd.DataFrame({'a': [0, 1, 2], 'b': [3, 4, 3]}) df.min(axis=1)
out = df.groupby('a').filter( lambda group: len(group) > 1
)

chạy command để sử dụng cudf.pandas

$python3 -m cudf.pandas <tên file>.py

-m cudf.pandas hoạt động giống như %load_ext cudf.pandas

Và để profile thì dùng câu lệnh này:

$python3 -m cudf.pandas --profile <tên file>.py

image.png

$python3 -m cudf.pandas --line-profile <tên file>.py

image.png

Qua đoạn code demo ta có thể thấy "DataFrameGroupBy.Filter" không hỗ trợ trên GPU nên đã được sử dụng trên CPU 1 cách tự động nên ở bài viết sau mình sẽ hướng dẫn cách tự viết các kernel để hỗ trợ cho GPU để tối ưu 1 cách tối đa

Câu hỏi

Qua các bức ảnh trên tại sao total time không bằng tổng time của CPU và GPU ?

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hành trình AI của một sinh viên tồi

Mình ngồi gõ những dòng này vào lúc 2h sáng (chính xác là 2h 2 phút), quả là một đêm khó ngủ. Có lẽ vì lúc chiều đã uống cốc nâu đá mà giờ mắt mình tỉnh như sáo, cũng có thể là vì những trăn trở về lý thuyết chồng chất ánh xạ mình đọc ban sáng khiến không tài nào chợp mắt được hoặc cũng có thể do mì

0 0 148

- vừa được xem lúc

[Deep Learning] Key Information Extraction from document using Graph Convolution Network - Bài toán trích rút thông tin từ hóa đơn với Graph Convolution Network

Các nội dung sẽ được đề cập trong bài blog lần này. . Tổng quan về GNN, GCN. Bài toán Key Information Extraction, trích rút thông tin trong văn bản từ ảnh.

0 0 219

- vừa được xem lúc

Tìm hiểu về YOLO trong bài toán real-time object detection

1.Yolo là gì. . Họ các mô hình RCNN ( Region-Based Convolutional Neural Networks) để giải quyết các bài toán về định vị và nhận diện vật thể.

0 0 285

- vừa được xem lúc

Encoding categorical features in Machine learning

Khi tiếp cận với một bài toán machine learning, khả năng cao là chúng ta sẽ phải đối mặt với dữ liệu dạng phân loại (categorical data). Khác với các dữ liệu dạng số, máy tính sẽ không thể hiểu và làm việc trực tiếp với categorical variable.

0 0 259

- vừa được xem lúc

TF Lite with Android Mobile

Như các bạn đã biết việc đưa ứng dụng đến với người sử dụng thực tế là một thành công lớn trong Machine Learning.Việc làm AI nó không chỉ dừng lại ở mức nghiên cứu, tìm ra giải pháp, chứng minh một giải pháp mới,... mà quan trọng là đưa được những nghiên cứu đó vào ứng dụng thực tế, được sử dụng để

0 0 72

- vừa được xem lúc

Xây dựng hệ thống Real-time Multi-person Tracking với YOLOv3 và DeepSORT

Trong bài này chúng ta sẽ xây dựng một hệ thống sử dụng YOLOv3 kết hợp với DeepSORT để tracking được các đối tượng trên camera, YOLO là một thuật toán deep learning ra đời vào tháng 5 năm 2016 và nó nhanh chóng trở nên phổ biến vì nó quá nhanh so với thuật toán deep learning trước đó, sử dụng YOLO t

0 0 316