Có thể sử dụng Python để xử lý song song không?

Tính toán song song là một kiến ​​trúc trong đó một số bộ xử lý thực thi hoặc xử lý một ứng dụng hoặc tính toán đồng thời. Điện toán song song giúp thực hiện các phép tính mở rộng bằng cách phân chia khối lượng công việc giữa nhiều bộ xử lý, tất cả đều hoạt động thông qua tính toán cùng một lúc. Mục tiêu chính của tính toán song song là tăng sức mạnh tính toán khả dụng để xử lý ứng dụng và giải quyết vấn đề nhanh hơn. Trong tính toán tuần tự, tất cả các hướng dẫn chạy lần lượt mà không chồng chéo, trong khi trong tính toán song song, các hướng dẫn chạy song song để hoàn thành tác vụ nhất định nhanh hơn

Các ứng dụng của tính toán song song

Sau đây là một số ứng dụng của tính toán song song

  1. Cơ sở dữ liệu và khai thác dữ liệu

  2. Xử lý đồ họa mở rộng như dành cho trò chơi điện tử và thực tế tăng cường

  3. Hình ảnh và chẩn đoán y tế

  4. Công cụ tìm kiếm web

  5. thiết kế mạch điện tử

Dask là một thư viện mã nguồn mở và miễn phí được sử dụng để đạt được tính toán song song trong Python. Nó hoạt động tốt với tất cả các thư viện Python phổ biến như Pandas, Numpy, scikit-learning, v.v. Với Pandas, chúng tôi không thể xử lý các tập dữ liệu rất lớn [trừ khi chúng tôi có nhiều RAM] vì chúng sử dụng nhiều bộ nhớ. Không thể sử dụng Pandas hoặc Numpy cho các tác vụ xử lý dữ liệu của chúng tôi khi dữ liệu của chúng tôi thay đổi quy mô. Chúng tôi có thể thử các thư viện máy tính phân tán khác như Apache Spark, nhưng những thư viện đó không được viết bằng Python nên chúng tôi sẽ không thể sử dụng Pandas, Numpy hoặc các thư viện máy học khác. Tuy nhiên, Dask cung cấp các khung dữ liệu có thể xử lý các tập dữ liệu lớn với các thay đổi mã tối thiểu. Khả năng mở rộng của nó với dữ liệu của chúng tôi về thời gian xử lý hoặc mức sử dụng bộ nhớ giúp nó có lợi thế hơn các thư viện khác. Dask giúp chúng tôi tận dụng sức mạnh của điện toán phân tán với sự tích hợp liền mạch với các thư viện khoa học dữ liệu khác như Pandas hoặc Numpy

So sánh với các Framework khác

  1. Dask vs Spark - Spark là một cái tên phổ biến trong lĩnh vực điện toán phân tán. So với Spark, Dask nhẹ và nhỏ hơn, đồng nghĩa với việc hạn chế về tính năng. Một điểm khác biệt chính là Spark được viết bằng Scala và hỗ trợ Python bằng thư viện trình bao bọc, trong khi Dask được viết bằng Python và kết hợp với hầu hết tất cả các thư viện Python để phân tích dữ liệu. Spark không hỗ trợ mảng đa chiều, trong khi Dask hỗ trợ mảng đa chiều có thể mở rộng. Cả hai quy mô từ một nút duy nhất đến cụm nghìn nút. Nếu bạn muốn viết dự án của mình bằng Python và đang tìm cách thêm máy học thì bạn có thể sử dụng Dask. Nếu bạn là nhà phát triển Scala hoặc SQL, làm việc trên cơ sở hạ tầng JVM và thực hiện hầu hết các phần ETL, thì bạn có thể sử dụng Spark. Về mặt dễ sử dụng, Dask dễ thực hiện hơn nhiều so với Spark

  2. Dask vs Ray vs Modin - Dask và Ray khác nhau về cơ chế lên lịch của chúng. Dask sử dụng bộ lập lịch tập trung xử lý tất cả các tác vụ cho một cụm. Ray được phân cấp, có nghĩa là mọi máy đều chạy bộ lập lịch của riêng mình, do đó các sự cố tác vụ theo lịch được xử lý ở cấp máy riêng lẻ, không phải ở cấp toàn bộ cụm. Dask có nhiều API bộ sưu tập cấp cao [e. g. , khung dữ liệu, mảng phân tán, v.v.], trong khi Ray thì không. Mặt khác, Modin chạy trên Dask hoặc Ray. Chúng tôi có thể dễ dàng mở rộng quy trình công việc Pandas của mình thông qua Modin bằng cách chỉ cần thêm một dòng mã import modin.pandas as pd. Dask DataFrame không mở rộng toàn bộ API Pandas nhưng Modin cố gắng song song hóa càng nhiều API Pandas càng tốt. Dask DataFrame có phân vùng dựa trên hàng, tương tự như Spark. Modin giống như một kho lưu trữ cột, mà chúng tôi được thừa hưởng từ các hệ thống cơ sở dữ liệu hiện đại. Trong số các nhà phát triển, Ray và Dask phổ biến hơn vì họ đã già và trưởng thành

Các trường hợp sử dụng của Dask

Các trường hợp sử dụng Dask được chia thành hai phần -

  1. Lập lịch tác vụ động - giúp chúng tôi tối ưu hóa các tính toán của mình

  2. Các bộ sưu tập “Dữ liệu lớn” - như các mảng và khung dữ liệu song song để xử lý các tập dữ liệu lớn

Các bộ sưu tập Dask được sử dụng để tạo một Task Graph, đây là biểu diễn trực quan về cấu trúc của các tác vụ xử lý dữ liệu của chúng tôi. Bộ lập lịch Dask thực thi biểu đồ nhiệm vụ này

Dask sử dụng lập trình song song để thực thi các tác vụ. Lập trình song song có nghĩa là thực hiện nhiều tác vụ cùng một lúc. Bằng cách này, chúng tôi có thể sử dụng hợp lý tài nguyên của mình và hoàn thành nhiều bước cùng một lúc

Hãy xem một số bộ sưu tập dữ liệu được cung cấp bởi Dask

  1. dask.array - Nó sử dụng giao diện Numpy và cắt mảng lớn thành những mảng nhỏ hơn để chúng tôi có thể tính toán trên các mảng lớn hơn bộ nhớ hệ thống của chúng tôi

  2. dask.bag - Nó cung cấp các thao tác như ánh xạ, lọc, gấp và nhóm theo bộ sưu tập các đối tượng Python chung

  3. dask.dataframe - Phân phối khung dữ liệu như Pandas. Nó là một khung dữ liệu song song lớn được tạo thành từ nhiều khung dữ liệu nhỏ hơn

Cài đặt

Dask có thể được cài đặt bằng lệnh sau -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import time
import random

def profit[x, y]:
  time.sleep[random.random[]]
return x + y

def loss[x, y]:
  time.sleep[random.random[]]
return x - y

def total[x, y]:
  time.sleep[random.random[]]
return x + y

  %
  % time
x = profit[45, 10]
y = loss[20, 15]
z = total[x, y]
z
0

Hãy xem một số ví dụ về tính toán song song bằng thư viện này.

1
2
3
4
CPU times: user 1.33 ms, sys: 2.16 ms, total: 3.49 ms
Wall time: 1.29 s

60
0 được sử dụng để đạt được tính song song trong mã của chúng tôi. Nó trì hoãn các cuộc gọi chức năng vào một biểu đồ nhiệm vụ với các phụ thuộc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import time
import random

def profit[x, y]:
  time.sleep[random.random[]]
return x + y

def loss[x, y]:
  time.sleep[random.random[]]
return x - y

def total[x, y]:
  time.sleep[random.random[]]
return x + y

  %
  % time
x = profit[45, 10]
y = loss[20, 15]
z = total[x, y]
z

Đầu ra sẽ là -

1
2
3
4
CPU times: user 1.33 ms, sys: 2.16 ms, total: 3.49 ms
Wall time: 1.29 s

60

Các chức năng này sẽ chạy tuần tự lần lượt, mặc dù chúng không phụ thuộc vào nhau. Vì vậy, chúng tôi có thể chạy chúng song song để tiết kiệm thời gian

1
2
3
4
5
6
7
8
9
10
11
import dask
profit = dask.delayed[profit]
loss = dask.delayed[loss]
total = dask.delayed[total]

  %
  % time
x = profit[45, 10]
y = loss[20, 15]
z = total[x, y]
z

Đầu ra sẽ là -

1
2
3
4
CPU times: user 903 µs, sys: 0 ns, total: 903 µs
Wall time: 557 µs

Delayed['total-b0bcbf09-79e4-4dfb-9b91-0f69af46f759']

Ngay cả trong ví dụ nhỏ này, chúng ta có thể thấy sự cải thiện về thời gian chạy. Chúng ta cũng có thể hình dung biểu đồ nhiệm vụ như thế này -

Ngôn ngữ lập trình nào là tốt nhất để xử lý song song?

Các ngôn ngữ lập trình, chẳng hạn như C và C++ , đã phát triển để giúp sử dụng nhiều luồng và xử lý sự phức tạp này dễ dàng hơn. Cả C và C++ hiện bao gồm các thư viện luồng. C ++ hiện đại, đặc biệt, đã đi một chặng đường dài để lập trình song song dễ dàng hơn. C ++ 11 bao gồm một thư viện luồng tiêu chuẩn.

NumPy có sử dụng xử lý song song không?

NumPy không chạy song song . Mặt khác, Numba sử dụng đầy đủ khả năng thực thi song song của máy tính của bạn. Các chức năng NumPy sẽ không sử dụng nhiều lõi CPU, đừng bận tâm đến GPU.

Luồng Python song song hay đồng thời?

Trên thực tế, một quy trình Python không thể chạy các luồng song song nhưng nó có thể chạy chúng đồng thời thông qua chuyển ngữ cảnh trong các hoạt động liên kết I/O . Hạn chế này thực sự được thi hành bởi GIL. Khóa phiên dịch toàn cầu Python [GIL] ngăn các luồng trong cùng một quy trình được thực thi cùng một lúc.

Chủ Đề