paint-brush
Deep Lake, một Lakehouse cho Deep Learning: Định dạng lưu trữ Tensortừ tác giả@dataology
105 lượt đọc

Deep Lake, một Lakehouse cho Deep Learning: Định dạng lưu trữ Tensor

dài quá đọc không nổi

Các nhà nghiên cứu giới thiệu Deep Lake, một Lakehouse nguồn mở để học sâu, tối ưu hóa việc lưu trữ và truyền phát dữ liệu phức tạp cho các khung học sâu.
featured image - Deep Lake, một Lakehouse cho Deep Learning: Định dạng lưu trữ Tensor
Dataology: Study of Data in Computer Science HackerNoon profile picture
0-item

tác giả:

(1) Sasun Hambardzumyan, Activeloop, Mountain View, CA, USA;

(2) Abhinav Tuli, Activeloop, Mountain View, CA, USA;

(3) Levon Ghukasyan, Activeloop, Mountain View, CA, USA;

(4) Fariz Rahman, Activeloop, Mountain View, CA, USA;.

(5) Hrant Topchyan, Activeloop, Mountain View, CA, USA;

(6) David Isayan, Activeloop, Mountain View, CA, USA;

(7) Mark McQuade, Activeloop, Mountain View, CA, USA;

(8) Mikayel Harutyunyan, Activeloop, Mountain View, CA, USA;

(9) Tatevik Hakobyan, Activeloop, Mountain View, CA, USA;

(10) Ivo Stranic, Activeloop, Mountain View, CA, USA;

(11) Davit Buniatyan, Activeloop, Mountain View, CA, USA.

Bảng liên kết

3. ĐỊNH DẠNG LƯU TRỮ TENSOR

Các bộ dữ liệu của Deep Lake tuân theo kiến trúc lưu trữ dạng cột, với các tensor là các cột, như trong Hình 3. Mỗi tensor là một tập hợp các khối - các đốm màu nhị phân chứa các mẫu dữ liệu. Bản đồ chỉ mục được liên kết với mỗi tenxơ giúp tìm đúng đoạn và chỉ mục của mẫu trong đoạn đó cho một chỉ mục mẫu nhất định.

3.1 Bộ dữ liệu

Một mẫu trong tập dữ liệu biểu thị một hàng duy nhất được lập chỉ mục trên các tensor song song. Ngược lại với định dạng lưu trữ tài liệu, các phần tử mẫu độc lập về mặt logic, cho phép truy cập một phần vào các mẫu để chạy các truy vấn hiệu suất hoặc truyền trực tuyến các tensor đã chọn qua mạng tới các phiên bản đào tạo GPU. Nhiều tensor có thể được nhóm lại. Các nhóm thực hiện lồng cú pháp và xác định cách các tensor có liên quan với nhau. Lồng ghép cú pháp tránh sự phức tạp về định dạng cho bố cục bộ nhớ phân cấp. Các thay đổi đối với lược đồ của tập dữ liệu cũng được theo dõi theo thời gian bằng tính năng kiểm soát phiên bản, tương tự như các thay đổi về nội dung của tập dữ liệu.

3.2 Tenxơ

Các tensor được gõ và có thể được thêm vào hoặc sửa đổi tại chỗ. Quyền truy cập mặc định vào một chỉ mục hoặc một tập hợp các chỉ mục trả về dữ liệu dưới dạng mảng NumPy [55]. Thay vì lưu trữ dữ liệu 1-D như trong Parquet [79] hoặc chuỗi trong Arrow [13], tensor có thể chứa dữ liệu n chiều, trong đó chiều thứ nhất thường tương ứng với thứ nguyên chỉ mục hoặc lô. Các tensor có thể chứa các mảng có hình dạng động, còn được gọi là tensor rời rạc, trái ngược với các định dạng mảng phân đoạn tĩnh khác như Zarr [52].

3.3 Các loại

Htype xác định các kỳ vọng đối với các mẫu trong một tenxơ chẳng hạn như kiểu dữ liệu (dtype như được thấy trong NumPy [55]), hình dạng, số lượng kích thước hoặc độ nén. Các tensor được định kiểu giúp việc tương tác với các khung học sâu trở nên đơn giản, đồng thời cho phép kiểm tra độ chính xác và bố trí bộ nhớ hiệu quả. Bằng cách kế thừa từ một tensor htype chung, chúng ta có thể xây dựng các loại như hình ảnh, video, âm thanh, bbox, dicom và các loại khác. Ví dụ: một tenxơ có hình ảnh htype sẽ yêu cầu các mẫu được thêm vào nó có dtype là uint8 và chiều dài hình dạng là 3 (tức là chiều rộng, chiều cao và số lượng kênh). Chúng tôi tiếp tục mở rộng khái niệm về htype cho phép các loại meta hỗ trợ lưu trữ chuỗi hình ảnh trong tensor (sequence[image]), tham chiếu đến các hình ảnh được lưu trữ từ xa, trong khi vẫn duy trì hành vi thường xuyên của tensor hình ảnh (link[image]) hoặc thậm chí có thể hỗ trợ định dạng chéo.


Hình 3: Cách mỗi mẫu (hàng) được lưu trữ trong một tập hợp các tensor cột với các khối có kích thước động

3.4 Bố cục bộ nhớ

Tập dữ liệu Deep Lake chứa tệp xuất xứ ở định dạng JSON và các thư mục trên mỗi tensor. Một tensor chứa các đoạn, bộ mã hóa chunk, bộ mã hóa ô và siêu dữ liệu tensor. Tensors có thể được ẩn tùy ý. Ví dụ: các tensor ẩn có thể được sử dụng để duy trì các phiên bản lấy mẫu thấp của hình ảnh hoặc lưu giữ thông tin hình dạng cho các truy vấn nhanh.


Tensors được lưu trữ theo khối ở cấp độ lưu trữ. Mặc dù phân đoạn có hình dạng tĩnh (suy ra) tránh duy trì bảng bản đồ khối, nhưng nó gây ra chi phí đáng kể cho người dùng trong quá trình xác định đặc tả của tenxơ, các giới hạn sử dụng nén tùy chỉnh, bộ nhớ không được sử dụng đúng mức cho các tenxơ có hình dạng động và sự kém hiệu quả trong quá trình xử lý hậu kỳ. Các khối Deep Lake được xây dựng dựa trên giới hạn dưới và trên của kích thước khối để phù hợp với một số lượng mẫu hạn chế. Điều này đi kèm với sự đánh đổi là có bản đồ chỉ mục nén để duy trì chỉ mục mẫu thành ánh xạ id đoạn trên mỗi tensor trong khi cho phép kích thước đoạn trong phạm vi tối ưu để phát trực tuyến trong khi chứa các mẫu có hình dạng hỗn hợp. Người ta có thể coi cách tiếp cận được thực hiện trong bài viết này như một sự đánh đổi được tối ưu hóa giữa bản đồ trang của hệ thống tệp và hệ thống lưu trữ mảng không có bản đồ được xác định bằng máy tính. Vì lý do thực tế, một bộ mã hóa đoạn đơn có thể được chia tỷ lệ thành hàng tỷ hình ảnh trong khi vẫn duy trì bộ mã hóa đoạn 150MB trên mỗi dữ liệu tensor 1PB. Có thể mở rộng quy mô hơn nữa bằng cách bảo vệ bộ mã hóa chunk. Các khối chứa thông tin tiêu đề như phạm vi byte, hình dạng của mẫu và chính dữ liệu mẫu. Nếu một mẫu lớn hơn kích thước khối giới hạn trên, đó là trường hợp đối với các hình ảnh trên không hoặc kính hiển vi lớn, thì mẫu sẽ được xếp thành các khối theo các chiều không gian. Ngoại lệ duy nhất đối với việc xếp lát là video. Video được giữ nguyên nhờ ánh xạ khung hình hiệu quả tới các chỉ mục, giải nén chỉ khung hình chính và các yêu cầu dựa trên phạm vi trong khi phát trực tuyến.

3.5 Mẫu truy cập

Định dạng lưu trữ tensor được tối ưu hóa cho việc đào tạo và suy luận deep learning, bao gồm truy cập tuần tự và ngẫu nhiên. Truy cập tuần tự được sử dụng để chạy các truy vấn quét, chuyển đổi các tensor thành các tensor khác hoặc chạy suy luận. Các trường hợp sử dụng truy cập ngẫu nhiên bao gồm nhiều chú thích ghi nhãn cho cùng một hình ảnh hoặc các mô hình lưu trữ dự đoán ngược cùng với tập dữ liệu. Trong khi chế độ nghiêm ngặt bị vô hiệu hóa, các chỉ số ngoài giới hạn của một tensor có thể được chỉ định, do đó hỗ trợ các tensor thưa thớt. Tuy nhiên, việc phân bổ ngẫu nhiên theo thời gian sẽ tạo ra các khối dữ liệu được lưu trữ không hiệu quả. Để sửa bố cục dữ liệu, chúng tôi triển khai thuật toán phân chia lại nhanh chóng để tối ưu hóa bố cục dữ liệu. Một trong những mô hình truy cập chính của Deep Lake là truy cập luồng ngẫu nhiên cho các mô hình học máy đào tạo. Nó yêu cầu truy cập thứ tự ngẫu nhiên hoặc tùy chỉnh trong khi truyền các phần vào quá trình đào tạo. Điều này đạt được bằng cách liên quan đến các yêu cầu dựa trên phạm vi để truy cập các phần tử phụ bên trong các khối, chạy các truy vấn phức tạp trước khi đào tạo để xác định thứ tự và duy trì bộ đệm đệm của dữ liệu đã tìm nạp và chưa được sử dụng. Điều này tránh việc có một cụm tính toán riêng để chạy thuật toán xáo trộn [50].


Mỗi tensor có các đoạn riêng và kích thước đoạn mặc định là 8MB. Một đoạn đơn bao gồm dữ liệu từ nhiều chỉ mục khi các điểm dữ liệu riêng lẻ (hình ảnh, nhãn, chú thích, v.v.) nhỏ hơn kích thước khối. Ngược lại, khi các điểm dữ liệu riêng lẻ lớn hơn kích thước khối, dữ liệu sẽ được chia thành nhiều khối (xếp kề). Các ngoại lệ đối với logic phân đoạn là dữ liệu video.


Định dạng Deep Lake được tối ưu hóa để tối đa hóa thông lượng xử lý GPU. Nó bao gồm việc tìm nạp trước CPU, giải nén hoặc giải mã, chuyển đổi và truyền bộ nhớ GPU trong bố cục dự kiến của khung học sâu.

3.6 Nhà cung cấp lưu trữ

Deep Lake có thể được cắm vào bất kỳ nhà cung cấp lưu trữ nào, bao gồm các kho lưu trữ đối tượng như AWS S3 [1], Google Cloud Storage (GCS) [3], hệ thống tệp tương thích POSIX hoặc bộ nhớ trong bộ nhớ cục bộ. Ngoài ra, nó còn xây dựng bộ nhớ đệm bộ nhớ bằng cách liên kết các nhà cung cấp dịch vụ lưu trữ khác nhau lại với nhau, chẳng hạn như - bộ nhớ đệm Ít được sử dụng gần đây nhất (LRU) của bộ lưu trữ S3 từ xa với dữ liệu trong bộ nhớ cục bộ.


Bài viết này có sẵn trên arxiv theo giấy phép CC 4.0.