tác giả:
(1) Iason Ofeidis, Khoa Kỹ thuật Điện và Viện Khoa học Mạng Yale, Đại học Yale, New Haven {Đóng góp ngang bằng};
(2) Diego Kiedanski, Khoa Kỹ thuật Điện và Viện Khoa học Mạng Yale, Đại học Yale, New Haven {Đóng góp ngang bằng};
(3) Leandros TassiulasLevon Ghukasyan, Activeloop, Mountain View, CA, USA, Khoa Kỹ thuật Điện và Viện Khoa học Mạng Yale, Đại học Yale, New Haven.
Trong quá trình đào tạo mô hình Deep Learning, tập dữ liệu cần được đọc từ bộ nhớ và xử lý trước trước khi có thể chuyển làm đầu vào cho mô hình. Hoạt động này yêu cầu tải tất cả dữ liệu vào bộ nhớ cùng một lúc. Trong hầu hết các trường hợp và đặc biệt là với các tập dữ liệu lớn, tình trạng thiếu bộ nhớ sẽ phát sinh do số lượng bộ nhớ có sẵn trong hệ thống có hạn, điều này cũng làm giảm thời gian phản hồi của hệ thống. Nút thắt cổ chai này thường được khắc phục trong các thư viện deep learning bằng cách sử dụng cái gọi là trình tải dữ liệu. Cấu trúc này cung cấp một cách lặp lại tập dữ liệu bằng cách tận dụng quá trình xử lý song song, tìm nạp trước, phân khối và các kỹ thuật khác để giảm thời gian tải dữ liệu và chi phí bộ nhớ nhiều nhất có thể (Paszke và cộng sự, 2019).
Mục tiêu chính của trình tải dữ liệu là thực hiện các hành động chịu trách nhiệm chuyển các mẫu dữ liệu từ vị trí lưu trữ sang bộ nhớ cùng vị trí với các đơn vị xử lý để đào tạo nhằm tạo thành một loạt mẫu được đưa vào mô hình. Những hành động này bị hạn chế bởi băng thông của hệ thống lưu trữ và đặc biệt là hiệu suất I/O của nó. Do đó, tùy thuộc vào thông số kỹ thuật phần cứng của hệ thống, hệ thống tệp phục vụ nó và thông lượng của liên kết với các đơn vị máy tính, nó có thể có ảnh hưởng to lớn đến tổng lượng thời gian cần thiết để hoàn thành quá trình đào tạo.
Thông số kỹ thuật sau đây của thành phần bộ nạp dữ liệu chủ yếu tập trung vào PyTorch (torch.DataLoader() (Nhóm lõi PyTorch)), trong khi đối tác TensorFlow của nó (tf.Dataset() (Abadi et al., 2015)), mặc dù không giống nhau, mang những điểm tương đồng lớn.
Khi sử dụng trình tải dữ liệu, ngoài việc cung cấp tập dữ liệu cho đầu vào, người dùng còn có tùy chọn định cấu hình một số siêu tham số, phù hợp với nhu cầu và tài nguyên của họ. Một điểm chung có sẵn trong tất cả các trình tải dữ liệu là kích thước lô, như đã đề cập trước đó, xác định số lượng mẫu sẽ được sử dụng trước khi cập nhật các tham số mô hình nội bộ. Tham số này về bản chất được liên kết với khái niệm “mini-batch” trong quá trình giảm độ dốc ngẫu nhiên (Hinton và cộng sự, 2012) và do đó, đây là một trong những tham số đầu tiên thường được tinh chỉnh khi cần đạt được kết quả huấn luyện tốt hơn .
Thứ hai, người dùng có thể xác định phương pháp lấy mẫu, xác định chiến lược lấy mẫu từ tập dữ liệu và chèn chúng vào một lô. Điều này có thể bao gồm việc chọn mẫu dựa trên tiêu chí cụ thể cũng như phân bố xác suất. Ở bước này tồn tại tùy chọn xáo trộn, trong đó các mẫu có thể được sắp xếp lại trước mỗi lần lặp lại tập dữ liệu, với mục tiêu thường là cải thiện tính tổng quát của mô hình đào tạo. Một tham số khác là hàm đối chiếu/đệm, về cơ bản chỉ định quá trình liên kết tất cả các mẫu riêng lẻ trong một lô (nghĩ đến việc xếp các vectơ thành một tensor), để tạo thành một phần tử duy nhất được cung cấp làm đầu vào cho mô hình huấn luyện . Hơn nữa, trình tải dữ liệu có thể được cấu hình để tự động lưu trữ các mẫu dữ liệu đã tìm nạp trong bộ nhớ được ghim (khóa trang), do đó cho phép truyền dữ liệu nhanh hơn đến các thiết bị hỗ trợ CUDA.
Trình tải dữ liệu đi kèm với một thành phần được gọi là công nhân, mục đích của nó là tối ưu hóa quá trình truyền dữ liệu này. Công nhân được định nghĩa là các quy trình phụ chịu trách nhiệm thực hiện tải dữ liệu theo kiểu không đồng bộ. Khi tạo một phiên bản của trình tải dữ liệu, người dùng có tùy chọn chỉ định số lượng công nhân sẽ được sinh ra và sẽ kiểm soát hoạt động này. Nếu số lượng công nhân bằng 0 thì sẽ không có quy trình con nào được tạo, điều này có nghĩa là việc tìm nạp dữ liệu diễn ra đồng bộ trong cùng một quy trình và do đó, các đơn vị tính toán (GPU) phải chờ tải dữ liệu sẽ được hoàn thành (Nhóm cốt lõi PyTorch). Ngược lại, sẽ có các quy trình con được tạo ra bằng số lượng công nhân, điều này sẽ ngăn chặn việc chặn mã tính toán khi tải dữ liệu. Điều này được thực hiện bằng cách tìm nạp trước các lô trong tương lai để sẵn sàng khi cần.
Bài viết này có sẵn trên arxiv theo giấy phép CC 4.0.