[GPU in AI] Bài 6: Parquet format cho bài toán ML

0 0 0

Người đăng: CisMine

Theo Viblo Asia

Một trong những vấn đề khi chúng ta sử dụng GPU là OOM ( out of memory ) vậy nên ở bài này mình sẽ chỉ các bạn 1 tip để giảm thiểu khả năng bị OOM

Code thì chỉ có 1 dòng, nếu bạn muốn xem code thì có thể kéo xuống phía dưới cùng

Nguyên lý hoạt động của bộ nhớ

Trước khi đi vào bài thì chúng ta phải hiểu nguyên lý hoạt động của bộ nhớ, cách mà bộ nhớ của chúng ta lưu trữ và truy cập data.

Dưới góc nhìn của coder chúng ta ( hay còn gọi là logical view ) thì dữ liệu của chúng ta có thể tồn tại dưới dạng 1D, 2D, 3D,.. nhưng đối với máy tính thì chỉ là 1 dãy dài liên tục

Ví dụ: int a[3][3] thì chúng ta nhìn thấy nó là 1 ma trận gồm 3 hàng 3 cột nhưng bộ nhớ máy tính lại lưu trữ thành 1 dãy dài liên tục a[9]

Và ở đây máy tính có 3 cách phổ biến để lưu trữ dữ liệu đa chiều:

  • Row-wise: dữ liệu sẽ được lưu trữ theo hàng
  • Columnar: dữ liệu sẽ được lưu trữ theo cột
  • Hybrid: dữ liệu không được lưu toàn bộ theo hàng hay theo cột, mà được chia thành từng block nhỏ

Ở đây mình sẽ không đi sâu vào Hybrid mà chỉ tập trung vào row -column

Phương pháp nào là tốt nhất cho ML

Đối với các bài toán ML thì dữ liệu chúng ta thường gặp là dữ liệu dạng bảng và khi xử lí chúng ta thường sẽ xử lí theo cột ( theo các features ) vậy nên columnar sẽ là lựa chọn phù hợp cho bài toán ML hơn là row.

Ở đây chúng ta sẽ phân tích sâu hơn tại sao columnar lại tốt hơn

Data sparsity

image.png

Trong hình minh họa có hai cách lưu trữ dữ liệu (màu đỏ và màu đen).

  • Ở màu đỏ, dữ liệu được lưu liên tiếp nhau.

  • Ở màu đen, dữ liệu được lưu cách nhau một khoảng.

Bài toán đặt ra là khi ta cần truy cập vào dữ liệu đỏ/đen:

  • Với trường hợp dữ liệu nằm liên tiếp → CPU/GPU có thể nạp cả một chunk (khối) vào cache, nên rất hiệu quả.

  • Với trường hợp dữ liệu bị cách quãng, mặc dù ta chỉ cần một vài phần tử, nhưng CPU/GPU buộc phải nạp toàn bộ các chunk chứa chúng. Nghĩa là thay vì lấy đúng 4 giá trị, bộ nhớ phải tải nhiều dữ liệu dư thừa → gây tốn băng thông và cache

  • Nếu dữ liệu nằm ngẫu nhiên → bộ nhớ phải truy cập rời rạc, hiệu năng rất kém.

Quay lại với bài toán của chúng ta, nếu chúng ta lưu trữ dữ liệu ở dạng column thì khi xử lí các cột sẽ tối ưu và tốt hơn khi lưu trữ ở dạng row

CSV không còn phù hợp

CSV sẽ lưu dữ liệu ở dạng hàng nên sẽ không phù hợp với bài toán ML của chúng ta nên thay vào đó hãy chuyển sang Parquet - 1 định dạng file lưu trữ dữ liệu ở dạng cột. Ngoài việc lưu trữ ở dạng cột, Parquet còn có cơ chế compression và encoding thông minh hơn và file parquet thường bé hơn rất nhiều so với CSV

image.png

image.png

Như hình các bạn có thể thấy chỉ với thay đổi định dạng file ( các thông tin không bị thay đổi ) mà dung lượng đã giảm đáng kể chỉ với 1 dòng code

import pandas as pd df = pd.read_csv("data.csv") df.to_parquet("data.parquet") 

Chúng ta sẽ kết hợp parquet này vào GPU

image.png

image.png

Cùng 1 độ chính xác nhưng bộ nhớ lại được cải thiện đáng kể.

Bình luận

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

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

Các thuật toán cơ bản trong AI - Phân biệt Best First Search và Uniform Cost Search (UCS)

Nếu bạn từng đọc các thuật toán trong AI (Artificial Intelligence - Trí tuệ nhân tạo), rất có thể bạn từng nghe qua về các thuật toán tìm kiếm cơ bản: UCS (thuộc chiến lược tìm kiếm mù) và Best First Search (thuộc chiến lược tìm kiếm kinh nghiệm). Khác nhau rõ từ khâu phân loại rồi, thế nhưng hai th

0 0 195

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

Con đường AI của tôi

Gần đây, khá nhiều bạn nhắn tin hỏi mình những câu hỏi đại loại như: có nên học AI, bắt đầu học AI như nào, làm sao tự học cho đúng, cho nhanh, học không bị nản, lộ trình học AI như nào... Sau nhiều lần trả lời, mình nghĩ rằng nên viết hẳn một bài để trả lời chi tiết hơn, cũng như để các bạn sau này

0 0 176

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

[ChatterBot] Thư viện chatbot hay ho dành cho Python| phần 3

Trong bài trước mình đã trình bày về Training data cho chatbot và tiền xử lý dữ liệu. Trong phần này sẽ trình bày với các bạn về logic adapter.

0 0 83

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

[Deep Learning] Kỹ thuật Dropout (Bỏ học) trong Deep Learning

. Trong bài viết này, mình xin phép giới thiệu về Dropout (Bỏ học) trong mạng Neural, sau đó là mình sẽ có 1 số đoạn code để xem Dropout ảnh hưởng thế nào đến hiệu suất của mạng Neural. 1.1. Dropout trong mạng Neural là gì.

0 0 85

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

Kỹ thuật Dropout (Bỏ học) trong Deep Learning

Trong bài viết này, mình xin phép giới thiệu về Dropout (Bỏ học) trong mạng Neural, sau đó là mình sẽ có 1 số đoạn code để xem Dropout ảnh hưởng thế nào đến hiệu suất của mạng Neural. 1.

0 1 104

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

Blockchain dưới con mắt làng Vũ Đại 4.0

Mở bài. Hey nhô các bạn, lại là mình đây .

0 0 65