Giám sát và quản lý bộ nhớ

Lập trình song song trong R

Nabeel Imam

Data Scientist

Hàng đợi và không gian

Ba giao dịch viên phục vụ khách tại ngân hàng, một số khách đang chờ.

Lập trình song song trong R

Luồng xử lý song song

Sơ đồ song song: một tác vụ được chia thành nhiều tác vụ nhỏ. Các lõi khác nhau xử lý và ghép kết quả.

Lập trình song song trong R

Luồng xử lý song song

Quy trình song song chạy trong bộ nhớ truy cập ngẫu nhiên (RAM).

Lập trình song song trong R

Dữ liệu births

print(ls_files)
 [1] "./births/AK.csv"
 [2] "./births/AL.csv"
 [3] "./births/AR.csv"
 [4] "./births/AZ.csv"
 [5] "./births/CA.csv"
 [6] "./births/CO.csv"
 [7] "./births/CT.csv"
 [8] "./births/DC.csv"
 [9] "./births/DE.csv"
 [10] "./births/FL.csv"
...
Lập trình song song trong R

Map với futures

plan(multisession, workers = 2)

ls_df <- future_map(ls_files, read.csv)
plan(sequential)
print(ls_df)
[[1]]
   state month plurality weight_gain_pounds mother_age
      AK     1         1                 30         43
   ...
[[2]]
   state month plurality weight_gain_pounds mother_age
      AL    10         1                 60         33
   ...
...
Lập trình song song trong R

Profiling với 2 worker

profvis({
  plan(multisession, workers = 2)
  ls_df <- future_map(ls_files, read.csv)
  plan(sequential)
})

Kết quả profiling từ hàm profvis. Đọc các tệp CSV song song với hai worker bằng future_map dùng 1,6 MB bộ nhớ; các dòng khác không ghi nhận sử dụng.

Lập trình song song trong R

Profiling với 4 worker

profvis({
  plan(multisession, workers = 4)
  ls_df <- future_map(ls_files, read.csv)
  plan(sequential)
})

Kết quả profiling từ hàm profvis. Đọc các tệp CSV song song với bốn worker bằng future_map dùng 3,1 MB bộ nhớ; bước plan multisession dùng 0,3 MB.

Lập trình song song trong R

Hậu trường hoạt động

Bản đồ Hoa Kỳ chia thành 4 vùng: Tây, Trung Tây, Nam, Đông Bắc. Mỗi vùng tương ứng với danh sách tệp CSV dữ liệu cho từng bang.

Lập trình song song trong R

Quản lý bộ nhớ bằng chia lô

config <- furrr_options(chunk_size = 26)

plan(multisession, workers = 4) ls_df <- future_map(ls_files, read.csv,
.options = config) plan(sequential)
Lập trình song song trong R

Quản lý bộ nhớ bằng chia lô

profvis({
  config <- furrr_options(chunk_size = 26)
  plan(multisession, workers = 4)
  ls_df <- future_map(ls_files, read.csv,
             .options = config)
  plan(sequential)
})

Kết quả profiling từ hàm profvis. Đọc các tệp CSV song song với bốn worker bằng future_map dùng 2,5 MB bộ nhớ khi chunk size = 26.

Lập trình song song trong R

Chia lô với parallel

cl <- makeCluster(4)


ls_df <- parLapply(cl, ls_files, read.csv)
stopCluster(cl)

Đọc các tệp CSV song song bằng parLapply dùng 2,4 MB bộ nhớ, toàn bộ tại lệnh parLapply.

Lập trình song song trong R

Chia lô với parallel

cl <- makeCluster(4)
ls_df <- parLapply(cl, ls_files, read.csv,

chunk.size = 26)
stopCluster(cl)

Đọc CSV song song bằng parLapply chỉ dùng 1 MB bộ nhớ khi chunk size = 26.

Lập trình song song trong R

Khi nào nên chia lô?

  • Mặc định đã tối ưu chia lô
  • Với đối tượng dữ liệu lớn và gần hết bộ nhớ
    • Hãy thử dùng ít lõi hơn nếu có thể
    • Thử vài kích thước lô để tìm mức tối ưu
Lập trình song song trong R

Ayo berlatih!

Lập trình song song trong R

Preparing Video For Download...