Tìm hiểu về Dask.org (nguyên lý hệ điều hành)

29 9 1
Tìm hiểu về Dask.org (nguyên lý hệ điều hành)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

PHẦN I: PARALLEL COMPUTING 6 1. Khái niệm 6 2. Đặc trưng 6 3. So sánh với các giải pháp tương tự khác 7 PHẦN II: HTTPS:WWW.DASK.ORG 10 1. Giới thiệu 10 2. Môi trường có thể sử dụng 10 3. Cài đặt 10 4. Công dụng 11 PHẦN III: MỘT SỐ TÍNH NĂNG TIÊU BIỂU CỦA DASK.ORG 13 1. Dask Collections: 13 2. Dask Delayed: 13 3. Dask Distributed: 13 4. Dask Scheduler: 13 5. Tích hợp với các công cụ và thư viện khác: 13 PHẦN IV: VÍ DỤ MINH HỌA CHO CÁC TÍNH NĂNG CỦA DASK.ORG 13 1. Dask Collections: 13 2. Dask Delayed: 19 3. Dask Distributed: 19 PHẦN V: SO SÁNH VỚI MỘT SỐ ỨNG DỤNG CÓ TÍNH NĂNG TƯƠNG TỰ KHÁC 19 PHẦN VI: KẾT LUẬN 19 1. Ưu điểm 19 2. Hạn chế 21 TÀI LIỆU THAM KHẢO 22

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nhóm 19 Nguyễn Ngọc Cường Nguyễn Hữu Hồng Đề tài: Tìm hiểu cách thức https://www.dask.org hỗ trợ parallel computing (khái niệm, đặc trưng, demo số tính tiêu biểu, so sánh đánh giá ) BÀI TẬP CUỐI KÌ MƠN NGUN LÝ HỆ ĐIỀU HÀNH Ngành: Cơng nghệ thơng tin HÀ NỘI - 2023 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Ngọc Cường Nguyễn Hữu Hồng Đề tài: Tìm hiểu cách thức https://www.dask.org hỗ trợ parallel computing (khái niệm, đặc trưng, demo số tính tiêu biểu, so sánh đánh giá ) DỰ ÁN CUỐI KÌ MƠN CƠNG NGHỆ PHẦN MỀM Ngành: Cơng nghệ thông tin Giảng viên hướng dẫn: Nguyễn Thị Hậu Nhóm thực hiện: Nhóm 19 HÀ NỘI - 2023 THÀNH VIÊN NHĨM 20 & PHÂN CHIA CƠNG VIỆC STT Tên thành viên MSV Công việc Nguyễn Ngọc Cường 21020285 ● Demo code ví dụ minh họa cho việc dask.org hỗ trợ parallel computing ● Quay video thuyết trình ● Viết báo cáo ● Tìm hiểu chức dask.org ● So sánh với công cụ hỗ trợ parallel computing khác Python (thời gian, nhớ hỗ trợ, ) ● Cài đặt, hướng dẫn sử dụng thư viện dask.org Nguyễn Hữu Hồng 19021286 ● Tìm hiểu tổng quan parallel computing ● Quay video thuyết trình ● Viết báo cáo ● Làm powerpoint thuyết trình MỤC LỤC PHẦN I: PARALLEL COMPUTING Khái niệm Đặc trưng So sánh với giải pháp tương tự khác PHẦN II: HTTPS://WWW.DASK.ORG Giới thiệu Mơi trường sử dụng Cài đặt Công dụng PHẦN III: MỘT SỐ TÍNH NĂNG TIÊU BIỂU CỦA DASK.ORG Dask Collections: Dask Delayed: Dask Distributed: Dask Scheduler: Tích hợp với công cụ thư viện khác: PHẦN IV: VÍ DỤ MINH HỌA CHO CÁC TÍNH NĂNG CỦA DASK.ORG Dask Collections: Dask Delayed: Dask Distributed: PHẦN V: SO SÁNH VỚI MỘT SỐ ỨNG DỤNG CĨ TÍNH NĂNG TƯƠNG TỰ KHÁC PHẦN VI: KẾT LUẬN Ưu điểm Hạn chế TÀI LIỆU THAM KHẢO LỜI CAM ĐOAN Nhóm 19 xin cam đoan kết báo cáo tập cuối kỳ môn học Nguyên lý hệ điều hành chúng em Những mơ hình sơ đồ sử dụng báo cáo chúng em thực Trường Đại học Công nghệ - ĐHQGHN sau cô Nguyễn Thị Hậu giảng dạy kiến thức liên quan Sản phẩm thực nghiệm chúng em chúng em thực khơng chép nguồn khác Chúng em hoàn toàn chịu trách nhiệm trước giáo viên môn học cam đoan Hà Nội, 2023 Nhóm sinh viên thực Nhóm 19 PHẦN I: PARALLEL COMPUTING Khái niệm Parallel computing mơ hình tính tốn nhiều tác vụ tính tốn thực lúc Thay thực tác vụ theo trình tự, tính tốn truyền thống, parallel computing giúp tận dụng hiệu suất nhiều tài nguyên tính tốn đồng thời Trong parallel computing, cơng việc lớn thường chia thành công việc nhỏ thực đồng thời Các loại parallel computing bao gồm: Parallel Task Execution: Các tác vụ thực đồng thời nhiều lõi máy tính khác Data Parallelism: Dữ liệu chia thành phần nhỏ, phần xử lý đồng thời lõi tính tốn khác Pipeline Parallelism: Các tác vụ chia thành giai đoạn, giai đoạn xử lý đồng thời Parallel computing đặc biệt quan trọng ứng dụng địi hỏi sức mạnh tính tốn lớn, mơ khoa học, tính tốn đồ họa, xử lý ảnh video, ứng dụng học máy/học sâu (machine learning/deep learning) nơi mà việc xử lý lượng liệu lớn tăng cường cách sử dụng nhiều tài ngun tính tốn đồng thời Đặc trưng Performance: Một đặc điểm parallel computing khả cải thiện hiệu suất đáng kể Bằng cách chia nhiệm vụ thành công việc nhỏ xử lý chúng đồng thời, parallel computing cung cấp kết nhanh chóng so với xử lý (đơn nhân - luồng) Scalability: Hệ thống parallel computing thường có khả mở rộng, có nghĩa chúng xử lý khối công việc lớn cách thêm đơn vị xử lý nút tính toán khác Sự mở rộng cho phép hệ thống thích ứng với u cầu tính tốn ngày tăng Efficiency with dataset: Parallel computing đặc biệt hiệu việc xử lý liệu lớn Bằng cách sử dụng song song liệu, phần khác liệu xử lý đồng thời, hệ thống parallel computing quản lý phân tích liệu lớn cách hiệu Resource Utilization: Parallel computing xuất sắc việc sử dụng tài ngun tính tốn có sẵn cách hiệu Thay có xử lý khơng hoạt động chờ đợi nhiệm vụ hoàn thành, nhiều nhiệm vụ thực đồng thời, tận dụng tốt phần cứng Distributed Memory and Computation: Nhiều kiến trúc parallel computing bao gồm việc phân tán nhớ xử lý, xử lý khác có nhớ cục riêng Điều cho phép hệ thống parallel computing làm việc với phần khác vấn đề cách độc lập, giao tiếp cần Task Decomposition: Parallel computing liên quan đến việc phân chia vấn đề lớn thành công việc nhỏ hơn, dễ quản lý thực đồng thời Phân giải nhiệm vụ cho phép tiếp cận cách có tổ chức module hóa q trình giải vấn đề Fault Tolerance: Một số hệ thống parallel computing thiết kế để có khả dự phịng lỗi Nếu xử lý nút gặp cố, hệ thống tổng thể tiếp tục hoạt động cách sử dụng xử lý cịn lại, tăng cường tính đáng tin cậy Parallel Algorithms: Thuật toán thiết kế đặc biệt cho parallel computing Các thuật toán tạo để tận dụng hiệu khả kiến trúc parallel computing, đảm bảo nhiệm vụ chia giải đồng thời Concurrency Management: Xử lý việc thực đồng thời nhiệm vụ đòi hỏi quản lý đồng thời hiệu Hệ thống parallel computing tích hợp chế để đồng phối hợp nhiệm vụ, đảm bảo chúng thực mà không gặp xung đột Wide Range of Applications: Parallel computing áp dụng rộng rãi nhiều lĩnh vực, bao gồm mô khoa học, phân tích liệu, học máy, xử lý hình ảnh, nhiều lĩnh vực khác Sự đa dạng làm cho trở thành cơng cụ quan trọng lĩnh vực nơi cần thực tính tốn quy mơ lớn So sánh với giải pháp tương tự khác Distributed computing: Trong mơ hình này, tác vụ phân phối nhiều máy tính độc lập kết nối với qua mạng Mỗi máy tính chạy phần chương trình làm việc để giải vấn đề Một lợi ích lớn distributed computing so với parallel computing khả mở rộng linh hoạt, bạn thêm vào nhiều máy tính cần Tuy nhiên, việc phân phối liệu xử lý nhiều máy tính tạo vấn đề bảo mật chia sẻ liệu Ưu điểm: ● Hiệu suất: Giống parallel computing, distributed computing cho phép thực song song tác vụ Một hệ thống phân tán cung cấp hiệu suất cải thiện thời gian thực thi nhanh cách thực tác vụ nhiều node ● Linh hoạt: Trong distributed computing, bạn thêm vào nhiều node (máy tính) cần Nhược điểm: ● Quản lý tài nguyên: Việc phân bổ tài nguyên cân tải đặt thách thức cho hệ thống distributed computing Các nút có mức độ sức mạnh tính tốn, lưu trữ nhớ khác Điều dẫn đến vấn đề hiệu suất, chẳng hạn tăng độ trễ Điều ảnh hưởng đến khả phản hồi hệ thống phân tán, đặc biệt với tác vụ yêu cầu giao tiếp nút thường xuyên ● Bảo mật chia sẻ liệu: Là vấn đề hệ thống phân tán tính chất hệ thống mở Vector computing: Đây dạng parallel computing, hướng dẫn cho phép thực thao tác nhiều liệu lúc Điều hữu ích thực phép tốn đại số tuyến tính thường sử dụng ứng dụng khoa học kỹ thuật Ưu điểm: ● Linh hoạt: Cloud computing cung cấp khả truy cập vào nguồn tài ngun tính tốn mạnh mẽ linh hoạt thông qua internet, điều cho phép bạn mở rộng thu nhỏ tài nguyên theo yêu cầu, giúp tối ưu hóa hiệu suất chi phí ● Tiết kiệm: Điều đặc biệt hữu ích cho tổ chức nhỏ vừa, họ tận dụng sức mạnh parallel computing mà không cần phải đầu tư vào hạ tầng phần cứng Nhược điểm: ● Tính hiệu quả: Vector computing thực thao tác nhiều liệu lúc, điều làm khiến hiệu số trường hợp cụ thể ● Độ phức tạp: Việc lập trình cho vector computing phức tạp hơn, địi hỏi hướng dẫn phức tạp để thực thao tác nhiều liệu lúc Cloud computing: Cloud computing cung cấp khả truy cập vào nguồn tài ngun tính tốn mạnh mẽ linh hoạt thông qua internet Điều cho phép bạn mở rộng thu nhỏ tài nguyên theo yêu cầu, giúp tối ưu hóa hiệu suất chi phí Ưu điểm: ● Tiết kiệm chi phí: Cloud computing giúp tiết kiệm chi phí đáng kể khơng cần đầu tư vào phần cứng vật lý hay nhân lực để trì hệ thống Mọi mua sắm quản lý thiết bị nhà cung cấp dịch vụ cloud thực ● Triển khai nhanh chóng: Cloud computing cho phép triển khai dịch vụ nhanh chóng với vài cú nhấp chuột Điều cho phép bạn có nguồn tài nguyên cần thiết cho hệ thống vịng vài phút Nhược điểm: ● Giới hạn quyền kiểm sốt: Khi sử dụng cloud computing, bạn cảm thấy việc kiểm soát liệu ứng dụng bị giới hạn việc quản lý hệ thống giao cho nhà cung cấp dịch vụ cloud ● Rủi ro bảo mật mới: Mặc dù nhà cung cấp dịch vụ cloud thường có biện pháp bảo mật mạnh mẽ, việc lưu trữ liệu cloud tạo số rủi ro bảo mật Ví dụ, nhà cung cấp dịch vụ cloud mục tiêu lý tưởng cho công mạng, việc dễ dàng truy cập liệu từ nơi tạo rủi ro cho việc truy cập trái phép vào liệu hệ thống ● Tốc độ hiệu suất: Việc sử dụng cloud computing gặp phải vấn đề tốc độ hiệu suất, đặc biệt mạng internet bạn không ổn định chậm PHẦN IV: VÍ DỤ MINH HỌA CHO CÁC TÍNH NĂNG CỦA DASK.ORG Dask Collections: a Dask Arrays n ● Yêu cầu đề bài: Tính ∑ ❑n 2❑ với n=108 i=1 Không sử dụng Dask: import numpy as np import time # Bắt đầu đo thời gian start_time = time.time() # Tạo mảng NumPy với 10 triệu phần tử từ đến 99999999 x = np.arange(100000000) # Thực phép tính bình phương cho phần tử mảng result = (x ** 2).sum() # Kết thúc đo thời gian end_time = time.time() # In thời gian chạy kết cuối elapsed_time = end_time - start_time print(f"Thời gian chạy: {elapsed_time} giây") print(f"Kết cuối cùng: {result}") Sử dụng dask hỗ trợ parallel computing với biến số chunks=2∗107 tức chia mảng thành phần: import dask.array as da import time # Bắt đầu đo thời gian start_time = time.time() # Tạo mảng Dask với 10 triệu phần tử từ đến 99,999,999 chia mảng thành phần x = da.arange(100000000, chunks=20000000) # Chia mảng thành phần # Thực phép tính đơn giản: bình phương phần tử mảng result = (x ** 2).sum() # Kết thúc đo thời gian end_time = time.time() # In thời gian chạy số lượng phần elapsed_time = end_time - start_time print(f"Thời gian chạy: {elapsed_time} giây") num_chunks = len(x.dask) print(f"Số lượng phần: {num_chunks}") print(f"Kết cuối cùng: {result.compute()}") Bảng so sánh: Thuộc tính Kết Thời gian chạy (giây) Thông số Không dùng Dask 1.1063129901885986 Dask : chunks=2∗107 0.004679203033447266 662921401752298880 Dask : chunks=107 Dask: chunks=10 0.005662202835083008 0.1348721981048584 Lưu ý, thời gian chạy có thay đổi không đáng kể n ● Yêu cầu đề bài: Tính ∑ ❑n 4❑với n n=108 i=1 b Dask DataFrames Sử dụng dask.dataframe khi: Dữ liệu đủ lớn (có thể lớn kích cỡ RAM máy) Sử dụng dask hỗ trợ parallel computing với biến số npartitions = tức chia mảng thành phần cho liệu có 10000000 phần tử với liệu đủ lớn nên tạo liệu giả định gổm cột: Name, Age, Salary cách: # @title DataFrame với npartitions=5 tức chia thành phần với liệu lớn (n = 10000000) import dask.dataframe as dd import pandas as pd import time import random import numpy as np # Số lượng phần tử bạn muốn tạo num_elements = 10000000 # Bắt đầu đo thời gian start_time = time.time() data = { 'Name': np.random.choice(['Alice', 'Bob', 'Charlie', 'David', 'Emily'], size=num_elements), 'Age': np.random.randint(18, 30, size=num_elements), 'Salary': np.random.randint(30000, 100000, size=num_elements) } dask_df = dd.from_pandas(pd.DataFrame(data), npartitions=5) # Thực số phép tính Dask DataFrame average_salary = dask_df['Salary'].mean() average_age = dask_df['Age'].mean() # Tính toán kết average_salary_result = average_salary.compute() average_age_result = average_age.compute() # Kết thúc đo thời gian end_time = time.time() # In thời gian chạy kết elapsed_time = end_time - start_time print(f"Thời gian chạy: {elapsed_time} giây") print(f"Trung bình lương: {average_salary_result}") print(f"Trung bình tuổi: {average_age_result}") Kết chạy: Thời gian chạy: 2.837203025817871 giây Trung bình lương: 65001.2064416 Trung bình tuổi: 23.5004236 Tính tốn liệu có 10000000 phần tử mà khơng sử dụng dask hỗ trợ với liệu đủ lớn nên tạo liệu giả định gổm cột: Name, Age, Salary cách: import random import time import numpy as np # Bắt đầu đo thời gian start_time = time.time() # Số lượng phần tử bạn muốn tạo num_elements = 10000000 # Tạo liệu ngẫu nhiên data = { 'Name': np.random.choice(['Alice', 'Bob', 'Charlie', 'David', 'Emily'], size=num_elements), 'Age': [random.randint(18, 65) for _ in range(num_elements)], 'Salary': [random.randint(30000, 100000) for _ in range(num_elements)] } names = data['Name'] ages = data['Age'] salaries = data['Salary'] # Thực số phép tính average_salary = sum(salaries) / len(salaries) average_age = sum(ages) / len(ages) # Kết thúc đo thời gian end_time = time.time() # In thời gian chạy kết elapsed_time = end_time - start_time print(f"Thời gian chạy: {elapsed_time} giây") print(f"Trung bình lương: {average_salary}") print(f"Trung bình: {average_age}") Kết chạy: Thời gian chạy: 18.78279948234558 giây Trung bình lương: 65003.1372753 Trung bình: 41.4996263 Thuộc tính Thời gian chạy (giây) Sử dụng Không dùng Dask 18.78279948234558 Dask : npartitions=5 2.837203025817871 c Dask Bags Lây liệu: pip install mimesis Để chạy os.makedirs('data', exist_ok=True) import dask

Ngày đăng: 11/12/2023, 00:39

Tài liệu cùng người dùng

Tài liệu liên quan