Cách sử dụng tất cả các lõi trên cpu Python

Tôi đang in bằng cốc từ libreoffice và máy tính chuẩn bị in rất lâu trước khi thực sự gửi nó đến máy in

Tôi thấy rằng nó sử dụng 100% của một lõi

Có cách nào để yêu cầu cốc [hoặc bất kỳ thứ gì khác] sử dụng nhiều lõi hơn để sử dụng ít thời gian hơn cho việc chuẩn bị in không?

Nhiều tác vụ tính toán tốn kém cho máy học có thể được thực hiện song song bằng cách chia nhỏ công việc trên nhiều lõi CPU, được gọi là xử lý đa lõi

Các tác vụ học máy phổ biến có thể được thực hiện song song bao gồm các mô hình đào tạo như tập hợp các cây quyết định, đánh giá các mô hình bằng cách sử dụng các quy trình lấy mẫu lại như xác thực chéo k-fold và điều chỉnh các siêu tham số mô hình, chẳng hạn như lưới và tìm kiếm ngẫu nhiên

Việc sử dụng nhiều lõi cho các tác vụ máy học thông thường có thể giảm đáng kể thời gian thực thi do số lượng lõi khả dụng trên hệ thống của bạn. Một máy tính xách tay và máy tính để bàn thông thường có thể có 2, 4 hoặc 8 lõi. Các hệ thống máy chủ lớn hơn có thể có sẵn 32, 64 hoặc nhiều lõi hơn, cho phép hoàn thành các tác vụ máy học mất hàng giờ để hoàn thành trong vài phút

Trong hướng dẫn này, bạn sẽ khám phá cách định cấu hình scikit-learning cho máy học đa lõi

Sau khi hoàn thành hướng dẫn này, bạn sẽ biết

  • Cách đào tạo các mô hình học máy bằng nhiều lõi
  • Cách thực hiện đánh giá các mô hình học máy song song
  • Cách sử dụng nhiều lõi để điều chỉnh siêu tham số mô hình máy học

Bắt đầu nào

Học máy đa lõi bằng Python với Scikit-Learn
Ảnh của ER Bauer, bảo lưu một số quyền.

Hướng dẫn tổng quan

Hướng dẫn này được chia thành năm phần;

  1. Scikit-Tìm hiểu đa lõi
  2. Đào tạo mô hình đa lõi
  3. Đánh giá mô hình đa lõi
  4. Điều chỉnh siêu tham số đa lõi
  5. khuyến nghị

Scikit-Tìm hiểu đa lõi

Học máy có thể tốn kém về mặt tính toán

Có ba trung tâm chính của chi phí tính toán này;

  • Đào tạo các mô hình học máy
  • Đánh giá các mô hình học máy
  • Mô hình học máy điều chỉnh siêu tham số

Tồi tệ hơn, những lo ngại này kết hợp

Ví dụ: đánh giá các mô hình học máy bằng kỹ thuật lấy mẫu lại như xác thực chéo k-fold yêu cầu quá trình đào tạo được lặp lại nhiều lần

  • Đánh giá yêu cầu đào tạo lặp đi lặp lại

Điều chỉnh siêu đường kính mô hình kết hợp điều này hơn nữa vì nó yêu cầu quy trình đánh giá được lặp lại cho mỗi tổ hợp siêu đường kính được thử nghiệm

  • Điều chỉnh yêu cầu đánh giá lặp lại

Hầu hết, nếu không muốn nói là tất cả, các máy tính hiện đại đều có CPU đa lõi. Điều này bao gồm máy trạm, máy tính xách tay của bạn, cũng như các máy chủ lớn hơn

Bạn có thể định cấu hình các mô hình máy học của mình để khai thác nhiều lõi của máy tính, tăng tốc đáng kể các hoạt động tính toán tốn kém

Thư viện máy học Python scikit-learning cung cấp khả năng này thông qua đối số n_jobs trên các tác vụ học máy chính, chẳng hạn như đào tạo mô hình, đánh giá mô hình và điều chỉnh siêu tham số

Đối số cấu hình này cho phép bạn chỉ định số lượng lõi sẽ sử dụng cho tác vụ. Mặc định là Không, sẽ sử dụng một lõi. Bạn cũng có thể chỉ định một số lõi dưới dạng số nguyên, chẳng hạn như 1 hoặc 2. Cuối cùng, bạn có thể chỉ định -1, trong trường hợp đó, tác vụ sẽ sử dụng tất cả các lõi có sẵn trên hệ thống của bạn

  • n_jobs. Chỉ định số lượng lõi sẽ sử dụng cho các tác vụ học máy chính

Các giá trị phổ biến là

  • n_jobs=Không có. Sử dụng lõi đơn hoặc cấu hình mặc định bởi thư viện phụ trợ của bạn
  • n_jobs=4. Sử dụng số lượng lõi được chỉ định, trong trường hợp này là 4
  • n_jobs=-1. Sử dụng tất cả các lõi có sẵn

lõi là gì?

Một CPU có thể có nhiều lõi CPU vật lý, về cơ bản giống như có nhiều CPU. Mỗi lõi cũng có thể có siêu phân luồng, một công nghệ trong nhiều trường hợp cho phép bạn nhân đôi số lượng lõi

Ví dụ: máy trạm của tôi có bốn lõi vật lý, được nhân đôi thành tám lõi do siêu phân luồng. Do đó, tôi có thể thử nghiệm với 1-8 lõi hoặc chỉ định -1 để sử dụng tất cả các lõi trên máy trạm của mình

Bây giờ chúng ta đã quen thuộc với khả năng hỗ trợ xử lý song song đa lõi cho máy học của thư viện scikit-learning, hãy xem qua một số ví dụ

Bạn sẽ nhận được các thời gian khác nhau cho tất cả các ví dụ trong hướng dẫn này; . Bạn cũng có thể cần thay đổi số lượng lõi để phù hợp với số lượng lõi trên hệ thống của mình

Ghi chú. Có, tôi biết về timeit API, nhưng đã chọn không sử dụng nó cho hướng dẫn này. Chúng tôi không định hình các ví dụ về mã; . Tôi muốn các ví dụ mã rõ ràng và dễ đọc, ngay cả đối với người mới bắt đầu. Tôi đặt nó làm tiện ích mở rộng để cập nhật tất cả các ví dụ nhằm sử dụng API timeit và nhận thời gian chính xác hơn. Chia sẻ kết quả của bạn trong phần bình luận

Đào tạo mô hình đa lõi

Nhiều thuật toán học máy hỗ trợ đào tạo đa lõi thông qua đối số n_jobs khi mô hình được xác định

Điều này không chỉ ảnh hưởng đến việc đào tạo mô hình mà còn ảnh hưởng đến việc sử dụng mô hình khi đưa ra dự đoán

Một ví dụ phổ biến là tập hợp các cây quyết định, chẳng hạn như cây quyết định đóng gói, rừng ngẫu nhiên và tăng cường độ dốc

Trong phần này, chúng ta sẽ khám phá việc tăng tốc đào tạo mô hình RandomForestClassifier bằng cách sử dụng nhiều lõi. Chúng tôi sẽ sử dụng một nhiệm vụ phân loại tổng hợp cho các thử nghiệm của chúng tôi

Trong trường hợp này, chúng tôi sẽ xác định mô hình rừng ngẫu nhiên với 500 cây và sử dụng một lõi đơn để đào tạo mô hình

1

2

3

.. .

# xác định mô hình

model = RandomForestClassifier[n_estimators=500, n_jobs=1]

Chúng ta có thể ghi lại thời gian trước và sau khi gọi hàm train[] bằng cách sử dụng hàm time[]. Sau đó, chúng tôi có thể trừ thời gian bắt đầu từ thời gian kết thúc và báo cáo thời gian thực hiện theo số giây

Ví dụ đầy đủ về việc đánh giá thời gian thực hiện đào tạo mô hình rừng ngẫu nhiên với một lõi đơn được liệt kê bên dưới

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# ví dụ về thời gian đào tạo mô hình rừng ngẫu nhiên trên một lõi

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. tập hợp nhập RandomForestClassifier

# xác định tập dữ liệu

X, y = make_classification[n_samples=10000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

# xác định mô hình

model = RandomForestClassifier[n_estimators=500, n_jobs=1]

# ghi lại thời gian hiện tại

bắt đầu = thời gian[]

#phù hợp với mô hình

mô hình. phù hợp[X, y]

# ghi lại thời gian hiện tại

kết thúc = thời gian[]

# báo cáo thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['%. 3f giây' % kết quả]

Chạy ví dụ báo cáo thời gian cần thiết để đào tạo mô hình với một lõi

Trong trường hợp này, chúng ta có thể thấy rằng nó mất khoảng 10 giây

Hệ thống của bạn mất bao lâu?

1

10. 702 giây

Bây giờ chúng ta có thể thay đổi ví dụ để sử dụng tất cả các lõi vật lý trên hệ thống, trong trường hợp này là bốn lõi

1

2

3

.. .

# xác định mô hình

model = RandomForestClassifier[n_estimators=500, n_jobs=4]

Ví dụ hoàn chỉnh về đào tạo đa lõi của mô hình có bốn lõi được liệt kê bên dưới

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# ví dụ về thời gian đào tạo mô hình rừng ngẫu nhiên trên 4 lõi

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. tập hợp nhập RandomForestClassifier

# xác định tập dữ liệu

X, y = make_classification[n_samples=10000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

# xác định mô hình

model = RandomForestClassifier[n_estimators=500, n_jobs=4]

# ghi lại thời gian hiện tại

bắt đầu = thời gian[]

#phù hợp với mô hình

mô hình. phù hợp[X, y]

# ghi lại thời gian hiện tại

kết thúc = thời gian[]

# báo cáo thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['%. 3f giây' % kết quả]

Chạy ví dụ báo cáo thời gian cần thiết để đào tạo mô hình với một lõi

Trong trường hợp này, chúng ta có thể thấy rằng tốc độ thực thi giảm hơn một nửa xuống còn khoảng 3. 151 giây

Hệ thống của bạn mất bao lâu?

1

3. 151 giây

Bây giờ chúng ta có thể thay đổi số lượng lõi thành tám để giải thích cho siêu phân luồng được hỗ trợ bởi bốn lõi vật lý

1

2

3

.. .

# xác định mô hình

model = RandomForestClassifier[n_estimators=500, n_jobs=8]

Chúng ta có thể đạt được hiệu quả tương tự bằng cách đặt n_jobs thành -1 để tự động sử dụng tất cả các lõi;

1

2

3

.. .

# xác định mô hình

model = RandomForestClassifier[n_estimators=500, n_jobs=-1]

Hiện tại, chúng tôi sẽ chỉ định số lượng lõi theo cách thủ công

Ví dụ hoàn chỉnh về đào tạo đa lõi của mô hình có tám lõi được liệt kê bên dưới

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# ví dụ về thời gian đào tạo mô hình rừng ngẫu nhiên trên 8 lõi

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. tập hợp nhập RandomForestClassifier

# xác định tập dữ liệu

X, y = make_classification[n_samples=10000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

# xác định mô hình

model = RandomForestClassifier[n_estimators=500, n_jobs=8]

# ghi lại thời gian hiện tại

bắt đầu = thời gian[]

#phù hợp với mô hình

mô hình. phù hợp[X, y]

# ghi lại thời gian hiện tại

kết thúc = thời gian[]

# báo cáo thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['%. 3f giây' % kết quả]

Chạy ví dụ báo cáo thời gian cần thiết để đào tạo mô hình với một lõi

Trong trường hợp này, chúng ta có thể thấy rằng chúng ta đã giảm thêm một lần nữa tốc độ thực thi từ khoảng 3. 151 đến khoảng 2. 521 bằng cách sử dụng tất cả các lõi

Hệ thống của bạn mất bao lâu?

1

2. 521 giây

Chúng ta có thể làm cho mối quan hệ giữa số lượng lõi được sử dụng trong quá trình đào tạo và tốc độ thực thi trở nên cụ thể hơn bằng cách so sánh tất cả các giá trị từ một đến tám và vẽ kết quả

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# ví dụ so sánh số lượng lõi được sử dụng trong quá trình đào tạo với tốc độ thực thi

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. tập hợp nhập RandomForestClassifier

từ matplotlib nhập pyplot

# xác định tập dữ liệu

X, y = make_classification[n_samples=10000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

kết quả = danh sách[]

# so sánh thời gian cho số lượng lõi

n_cores = [1, 2, 3, 4, 5, 6, 7, 8]

cho n trong n_cores.

# nắm bắt thời gian hiện tại

bắt đầu = thời gian[]

# xác định mô hình

model = RandomForestClassifier[n_estimators=500, n_jobs=n]

#phù hợp với mô hình

mô hình. phù hợp[X, y]

# nắm bắt thời gian hiện tại

kết thúc = thời gian[]

# lưu trữ thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['>cores=%d. %. 3f giây' % [n, result]]

kết quả. chắp thêm[kết quả]

pyplot. cốt truyện[n_cores, kết quả]

pyplot. hiển thị[]

Chạy ví dụ đầu tiên sẽ báo cáo tốc độ thực thi cho từng số lõi được sử dụng trong quá trình đào tạo

Chúng ta có thể thấy tốc độ thực thi giảm dần từ một đến tám lõi, mặc dù những lợi ích đáng kể sẽ dừng lại sau bốn lõi vật lý

Hệ thống của bạn mất bao lâu?

1

2

3

4

5

6

7

8

>lõi=1. 10. 798 giây

>lõi=2. 5. 743 giây

>lõi=3. 3. 964 giây

>lõi=4. 3. 158 giây

>lõi=5. 2. 868 giây

>lõi=6. 2. 631 giây

>lõi=7. 2. 528 giây

>lõi=8. 2. 440 giây

Một biểu đồ cũng được tạo để hiển thị mối quan hệ giữa số lượng lõi được sử dụng trong quá trình đào tạo và tốc độ thực thi, cho thấy rằng chúng tôi tiếp tục thấy lợi ích cho đến tám lõi

Biểu đồ dòng của số lượng lõi được sử dụng trong quá trình đào tạo so với. Tốc độ thực hiện

Bây giờ chúng ta đã quen thuộc với lợi ích của việc đào tạo đa lõi của các mô hình máy học, hãy xem đánh giá mô hình đa lõi

Đánh giá mô hình đa lõi

Tiêu chuẩn vàng để đánh giá mô hình là xác thực chéo k-fold

Đây là quy trình lấy mẫu lại yêu cầu mô hình được đào tạo và đánh giá k lần trên các tập hợp con được phân vùng khác nhau của tập dữ liệu. Kết quả là ước tính hiệu suất của một mô hình khi đưa ra dự đoán trên dữ liệu không được sử dụng trong quá trình đào tạo có thể được sử dụng để so sánh và chọn một mô hình tốt hoặc tốt nhất cho tập dữ liệu

Ngoài ra, cũng nên lặp lại quá trình đánh giá này nhiều lần, được gọi là xác thực chéo k-fold lặp đi lặp lại

Quy trình đánh giá có thể được định cấu hình để sử dụng nhiều lõi, trong đó mỗi quá trình đào tạo và đánh giá mô hình diễn ra trên một lõi riêng biệt. Điều này có thể được thực hiện bằng cách đặt đối số n_jobs trên lệnh gọi hàm cross_val_score[];

Chúng ta có thể khám phá tác động của nhiều lõi đối với việc đánh giá mô hình

Trước tiên, hãy đánh giá mô hình bằng lõi đơn

1

2

3

.. .

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=1]

Chúng tôi sẽ đánh giá mô hình rừng ngẫu nhiên và sử dụng một lõi duy nhất trong quá trình đào tạo mô hình [hiện tại]

1

2

3

.. .

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=1]

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# ví dụ về đánh giá mô hình bằng cách sử dụng lõi đơn

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. model_selection nhập cross_val_score

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. tập hợp nhập RandomForestClassifier

# xác định tập dữ liệu

X, y = make_classification[n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=1]

# xác định quy trình đánh giá

cv = RepeatedStratifiedKFold[n_splits=10, n_repeats=3, random_state=1]

# ghi lại thời gian hiện tại

bắt đầu = thời gian[]

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=1]

# ghi lại thời gian hiện tại

kết thúc = thời gian[]

# báo cáo thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['%. 3f giây' % kết quả]

Chạy ví dụ đánh giá mô hình bằng cách sử dụng xác thực chéo 10 lần với ba lần lặp lại

Trong trường hợp này, chúng tôi thấy rằng việc đánh giá mô hình mất khoảng 6. 412 giây

Hệ thống của bạn mất bao lâu?

1

6. 412 giây

Chúng tôi có thể cập nhật ví dụ để sử dụng tất cả tám lõi của hệ thống và mong đợi một sự tăng tốc lớn

1

2

3

.. .

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=8]

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# ví dụ đánh giá mô hình sử dụng 8 lõi

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. model_selection nhập cross_val_score

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. tập hợp nhập RandomForestClassifier

# xác định tập dữ liệu

X, y = make_classification[n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=1]

# xác định quy trình đánh giá

cv = RepeatedStratifiedKFold[n_splits=10, n_repeats=3, random_state=1]

# ghi lại thời gian hiện tại

bắt đầu = thời gian[]

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=8]

# ghi lại thời gian hiện tại

kết thúc = thời gian[]

# báo cáo thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['%. 3f giây' % kết quả]

Chạy ví dụ đánh giá mô hình bằng nhiều lõi

Trong trường hợp này, chúng ta có thể thấy thời gian thực hiện giảm từ 6. 412 giây đến khoảng 2. 371 giây, tăng tốc đáng hoan nghênh

Hệ thống của bạn mất bao lâu?

1

2. 371 giây

Như chúng ta đã làm trong phần trước, chúng ta có thể định thời gian cho tốc độ thực thi cho từng số lõi từ một đến tám để biết được mối quan hệ

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# so sánh tốc độ thực thi để đánh giá mô hình so với số lượng lõi cpu

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. model_selection nhập cross_val_score

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. tập hợp nhập RandomForestClassifier

từ matplotlib nhập pyplot

# xác định tập dữ liệu

X, y = make_classification[n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

kết quả = danh sách[]

# so sánh thời gian cho số lượng lõi

n_cores = [1, 2, 3, 4, 5, 6, 7, 8]

cho n trong n_cores.

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=1]

# xác định quy trình đánh giá

cv = RepeatedStratifiedKFold[n_splits=10, n_repeats=3, random_state=1]

# ghi lại thời gian hiện tại

bắt đầu = thời gian[]

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=n]

# ghi lại thời gian hiện tại

kết thúc = thời gian[]

# lưu trữ thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['>cores=%d. %. 3f giây' % [n, result]]

kết quả. chắp thêm[kết quả]

pyplot. cốt truyện[n_cores, kết quả]

pyplot. hiển thị[]

Chạy ví dụ đầu tiên báo cáo thời gian thực hiện tính bằng giây cho mỗi số lõi để đánh giá mô hình

Chúng ta có thể thấy rằng không có sự cải thiện đáng kể nào trên bốn lõi vật lý

Chúng ta cũng có thể thấy sự khác biệt ở đây khi đào tạo với tám lõi từ thử nghiệm trước. Trong trường hợp này, đánh giá hiệu suất mất 1. 492 giây trong khi trường hợp độc lập mất khoảng 2. 371 giây

Điều này làm nổi bật hạn chế của phương pháp đánh giá mà chúng tôi đang sử dụng khi chúng tôi đang báo cáo hiệu suất của một lần chạy thay vì các lần chạy lặp lại. Cần có một số thời gian quay vòng để tải các lớp vào bộ nhớ và thực hiện bất kỳ tối ưu hóa JIT nào

Bất kể độ chính xác của hồ sơ mỏng manh của chúng tôi là bao nhiêu, chúng tôi thấy quá trình đánh giá mô hình tăng tốc quen thuộc với việc tăng số lõi được sử dụng trong quá trình

Hệ thống của bạn mất bao lâu?

1

2

3

4

5

6

7

8

>lõi=1. 6. 339 giây

>lõi=2. 3. 765 giây

>lõi=3. 2. 404 giây

>lõi=4. 1. 826 giây

>lõi=5. 1. 806 giây

>lõi=6. 1. 686 giây

>lõi=7. 1. 587 giây

>lõi=8. 1. 492 giây

Một biểu đồ về mối quan hệ giữa số lượng lõi và tốc độ thực thi cũng được tạo ra

Biểu đồ dòng của số lượng lõi được sử dụng trong quá trình đánh giá so với. Tốc độ thực hiện

Chúng tôi cũng có thể làm cho quá trình đào tạo mô hình song song trong quy trình đánh giá mô hình

Mặc dù điều này là có thể, chúng ta nên?

Để khám phá câu hỏi này, trước tiên hãy xem xét trường hợp đào tạo mô hình sử dụng tất cả các lõi và đánh giá mô hình sử dụng một lõi.

1

2

3

4

5

6

.. .

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=8]

.. .

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=1]

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# ví dụ về việc sử dụng nhiều lõi để đào tạo mô hình nhưng không đánh giá mô hình

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. model_selection nhập cross_val_score

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. tập hợp nhập RandomForestClassifier

# xác định tập dữ liệu

X, y = make_classification[n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=8]

# xác định quy trình đánh giá

cv = RepeatedStratifiedKFold[n_splits=10, n_repeats=3, random_state=1]

# ghi lại thời gian hiện tại

bắt đầu = thời gian[]

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=1]

# ghi lại thời gian hiện tại

kết thúc = thời gian[]

# báo cáo thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['%. 3f giây' % kết quả]

Chạy ví dụ đánh giá mô hình bằng một lõi, nhưng mỗi mô hình được đào tạo sử dụng một lõi

Trong trường hợp này, chúng ta có thể thấy rằng quá trình đánh giá mô hình mất hơn 10 giây, lâu hơn nhiều so với 1 hoặc 2 giây khi chúng ta sử dụng một lõi đơn để đào tạo và tất cả các lõi để đánh giá mô hình song song

Hệ thống của bạn mất bao lâu?

1

10. 461 giây

Điều gì sẽ xảy ra nếu chúng ta chia số lượng lõi giữa quy trình đào tạo và đánh giá?

1

2

3

4

5

6

.. .

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=4]

.. .

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=4]

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# ví dụ về việc sử dụng nhiều lõi để đào tạo và đánh giá mô hình

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. model_selection nhập cross_val_score

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. tập hợp nhập RandomForestClassifier

# xác định tập dữ liệu

X, y = make_classification[n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=8]

# xác định quy trình đánh giá

cv = RepeatedStratifiedKFold[n_splits=10, n_repeats=3, random_state=4]

# ghi lại thời gian hiện tại

bắt đầu = thời gian[]

# đánh giá mô hình

n_scores = cross_val_score[model, X, y, scoring='accuracy', cv=cv, n_jobs=4]

# ghi lại thời gian hiện tại

kết thúc = thời gian[]

# báo cáo thời gian thực hiện

kết quả = kết thúc - bắt đầu

in['%. 3f giây' % kết quả]

Chạy ví dụ đánh giá mô hình bằng bốn lõi và mỗi mô hình được đào tạo bằng bốn lõi khác nhau

Chúng ta có thể thấy sự cải thiện so với đào tạo với tất cả các lõi và đánh giá bằng một lõi, nhưng ít nhất đối với mô hình này trên bộ dữ liệu này, sẽ hiệu quả hơn khi sử dụng tất cả các lõi để đánh giá mô hình và một lõi duy nhất để đào tạo mô hình

Hệ thống của bạn mất bao lâu?

1

3. 434 giây

Điều chỉnh siêu tham số đa lõi

Người ta thường điều chỉnh các siêu tham số của mô hình học máy bằng cách sử dụng tìm kiếm dạng lưới hoặc tìm kiếm ngẫu nhiên

Thư viện scikit-learning cung cấp các khả năng này thông qua các lớp GridSearchCV và RandomizedSearchCV tương ứng

Cả hai quy trình tìm kiếm này có thể được thực hiện song song bằng cách đặt đối số n_jobs, gán từng cấu hình siêu tham số cho một lõi để đánh giá

Bản thân việc đánh giá mô hình cũng có thể là đa lõi, như chúng ta đã thấy trong phần trước và việc đào tạo mô hình cho một đánh giá nhất định cũng có thể được đào tạo như chúng ta đã thấy trong phần thứ hai trước đó. Do đó, chồng các quy trình đa lõi có khả năng bắt đầu gặp khó khăn trong việc định cấu hình

Trong triển khai cụ thể này, chúng tôi có thể thực hiện đào tạo mô hình song song, nhưng chúng tôi không có quyền kiểm soát cách mỗi siêu tham số mô hình và cách đánh giá từng mô hình được thực hiện đa lõi. Tài liệu không rõ ràng tại thời điểm viết, nhưng tôi đoán rằng mỗi đánh giá mô hình sử dụng cấu hình siêu tham số lõi đơn được chia thành các công việc

Hãy cùng khám phá những lợi ích của việc thực hiện điều chỉnh siêu tham số mô hình bằng cách sử dụng nhiều lõi

Trước tiên, hãy đánh giá một lưới gồm các cấu hình khác nhau của thuật toán rừng ngẫu nhiên bằng cách sử dụng một lõi

1

2

3

.. .

# xác định tìm kiếm lưới

search = GridSearchCV[model, grid, n_jobs=1, cv=cv]

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

# ví dụ về điều chỉnh siêu tham số mô hình với một lõi

từ thời gian nhập thời gian

từ sklearn. bộ dữ liệu nhập make_classification

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. tập hợp nhập RandomForestClassifier

từ sklearn. model_selection nhập GridSearchCV

# xác định tập dữ liệu

X, y = make_classification[n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3]

# xác định mô hình

model = RandomForestClassifier[n_estimators=100, n_jobs=1]

# xác định quy trình đánh giá

cv = RepeatedStratifiedKFold[n_splits=10, n_repeats=3, random_state=1]

# xác định lưới

lưới = dict[]

lưới['max_features'] =

Chủ Đề