Logo Zephyrnet

Cách tăng tốc đào tạo mô hình XGBoost

Ngày:

By Michael Galarnyk, Chuyên gia Khoa học Dữ liệu

Các thuật toán tăng cường Gradient được sử dụng rộng rãi trong học tập có giám sát. Mặc dù chúng rất mạnh mẽ nhưng chúng có thể mất nhiều thời gian để đào tạo. Tăng cường độ dốc cực cao, hoặc XGBoost, là một triển khai mã nguồn mở của tăng cường độ dốc được thiết kế cho tốc độ và hiệu suất. Tuy nhiên, ngay cả việc đào tạo XGBoost đôi khi cũng có thể chậm.

Có khá nhiều cách tiếp cận để đẩy nhanh quá trình này như:

Bài viết này sẽ xem xét những ưu điểm và nhược điểm của từng cách tiếp cận cũng như hướng dẫn cách bắt đầu.

Thay đổi thuật toán xây dựng cây của bạn

 
 
XGBoost's tree_method tham số cho phép bạn chỉ định thuật toán xây dựng cây mà bạn muốn sử dụng. Chọn một thuật toán xây dựng cây thích hợp (exactapproxhistgpu_histauto) cho vấn đề của bạn có thể giúp bạn tạo ra một mô hình tối ưu nhanh hơn. Bây giờ chúng ta hãy xem lại các thuật toán.

chính xác

Nó là một thuật toán chính xác, nhưng nó không có khả năng mở rộng nhiều vì trong mỗi quy trình tìm kiếm phân tách, nó lặp lại trên tất cả các mục nhập của dữ liệu đầu vào. Trong thực tế, điều này có nghĩa là thời gian đào tạo dài. Nó cũng không hỗ trợ đào tạo phân tán. Bạn có thể tìm hiểu thêm về thuật toán này trong bản gốc Giấy XGBoost.

xấp xỉ

Mặc dù thuật toán chính xác là chính xác, nhưng nó không hiệu quả khi dữ liệu không hoàn toàn vừa với bộ nhớ. Phương pháp cây gần đúng từ gốc Giấy XGBoost sử dụng phác thảo lượng tử và biểu đồ gradient.

hist

Phương pháp cây gần đúng được sử dụng trong ánh sángGBM với sự khác biệt nhỏ trong việc triển khai (sử dụng một số cải tiến hiệu suất như bộ nhớ đệm thùng) từ approx. Điều này thường nhanh hơn approx.

gpu_hist

Vì GPU rất quan trọng đối với nhiều ứng dụng học máy, XGBoost có một GPU triển khai thuật toán lịch sử gpu_hist) có hỗ trợ bộ nhớ ngoài. Nó nhanh hơn nhiều và sử dụng ít bộ nhớ hơn đáng kể so với lịch sử. Lưu ý rằng XGBoost không có hỗ trợ bản địa cho GPU trên một số hệ điều hành.

Hình
Tài liệu XGBoost

 

tự động

Đây là giá trị mặc định cho tham số. Dựa trên kích thước tập dữ liệu, XGBoost sẽ chọn “phương pháp nhanh nhất”. Đối với các tập dữ liệu nhỏ, chính xác sẽ được sử dụng. Đối với các bộ dữ liệu lớn hơn, khoảng cách sẽ được sử dụng. Lưu ý rằng hist và gpu_hist không được xem xét trong cách tiếp cận dựa trên heuristic này mặc dù chúng thường nhanh hơn.

Nếu bạn chạy cái này , bạn sẽ thấy các mô hình chạy bằng gpu_hist có thể tiết kiệm rất nhiều thời gian như thế nào. Trên một tập dữ liệu tương đối nhỏ (100,000 hàng, 1000 tính năng) trên máy tính của tôi, việc thay đổi từ hist sang gpu_hist đã giảm thời gian đào tạo đi khoảng 2.

Tận dụng điện toán đám mây

 
 

Hình
Điện toán đám mây cho phép bạn không chỉ sử dụng nhiều lõi và bộ nhớ hơn máy cục bộ mà còn có thể cho phép bạn truy cập vào các tài nguyên chuyên biệt như GPU.

 

Phần cuối cùng chủ yếu là về việc chọn các thuật toán hiệu quả hơn để sử dụng tốt hơn các tài nguyên tính toán có sẵn. Tuy nhiên, đôi khi các tài nguyên tính toán có sẵn là không đủ và bạn chỉ đơn giản là cần thêm. Ví dụ, chiếc MacBook được hiển thị trong hình dưới đây chỉ có 4 lõi và bộ nhớ 16GB. Hơn nữa, nó chạy trên MacOS mà tại thời điểm viết bài này, XGBoost không có hỗ trợ GPU.

Hình
Với mục đích của bài đăng này, bạn có thể coi MacBook ở trên là một nút duy nhất với 4 lõi.

 

Một cách giải quyết vấn đề này là sử dụng nhiều tài nguyên hơn trên đám mây. Việc sử dụng các nhà cung cấp dịch vụ đám mây không miễn phí, nhưng họ thường cho phép bạn sử dụng nhiều lõi và bộ nhớ hơn máy cục bộ của bạn. Ngoài ra, nếu XGBoost không có hỗ trợ cho máy cục bộ của bạn, bạn có thể dễ dàng chọn loại phiên bản mà XGBoost có hỗ trợ GPU.

Nếu bạn muốn thử tăng tốc quá trình đào tạo của mình trên đám mây, dưới đây là tổng quan về các bước từ Bài viết của Jason Brownlee về cách đào tạo mô hình XGBoost trên phiên bản AWS EC2:

1. Thiết lập tài khoản AWS (nếu cần)

2. Khởi chạy Phiên bản AWS

3. Đăng nhập và chạy mã

4. Đào tạo mô hình XGBoost

5. Đóng Phiên bản AWS (chỉ trả tiền cho phiên bản khi bạn đang sử dụng)

Nếu bạn chọn một phiên bản mạnh mẽ hơn những gì bạn có cục bộ, bạn có thể sẽ thấy rằng đào tạo trên đám mây nhanh hơn. Lưu ý rằng đào tạo đa GPU với XGBoost thực sự yêu cầu đào tạo phân tán, có nghĩa là bạn cần nhiều hơn một nút / phiên bản duy nhất để thực hiện điều này.

Đào tạo XGBoost phân tán với Ray

 
 
Cho đến nay, hướng dẫn này đã đề cập đến việc tăng tốc đào tạo bằng cách thay đổi thuật toán xây dựng cây và bằng cách tăng tài nguyên máy tính thông qua điện toán đám mây. Một giải pháp khác là phân phối đào tạo mô hình XGBoost với XGBoost-Ray đòn bẩy của Ray.

Ray là gì?

 
cá đuối là một khung thực thi phân tán nhanh, đơn giản giúp dễ dàng mở rộng ứng dụng của bạn và tận dụng các thư viện máy học hiện đại. Sử dụng Ray, bạn có thể lấy mã Python chạy tuần tự và với những thay đổi mã tối thiểu, biến nó thành một ứng dụng phân tán. Nếu bạn muốn tìm hiểu về Ray và người mẫu diễn viên, bạn có thể tìm hiểu về nó Ở đây.

Hình
Trong khi hướng dẫn này khám phá cách Ray giúp dễ dàng song song hóa và phân phối mã XGBoost, điều quan trọng cần lưu ý là Ray và hệ sinh thái của nó cũng giúp dễ dàng phân phối mã Python thuần túy cũng như các thư viện hiện có như học hỏiánh sángGBMKim tự tháp, Và nhiều hơn nữa.

Cách bắt đầu với XGBoost-Ray

 
Để bắt đầu với XGBoost-Ray, trước tiên bạn cần cài đặt nó.

pip install "xgboost_ray"

Vì nó hoàn toàn tương thích với API XGBoost cốt lõi, tất cả những gì bạn cần là một vài thay đổi mã để mở rộng quy mô đào tạo XGBoost từ một máy thành một cụm với hàng trăm nút.

Hình
XGBoost-Ray hỗ trợ đào tạo đa nút / đa GPU. Trên máy tính, GPU giao tiếp độ dốc thông qua NCCL2. Giữa các nút, họ sử dụng Rabit để thay thế (tìm hiểu thêm).

 

Như bạn có thể thấy trong đoạn mã bên dưới, API rất giống với XGBoost. Các phần được đánh dấu là nơi mã khác với API XGBoost bình thường.

từ xgboost_ray nhập RayXGBClassifier, RayParams từ sklearn.datasets nhập load_breast_cancer từ sklearn.model_selection nhập train_test_split seed = 42 X, y = load_breast_cancer (return_X_y = True) X_train, X_test, y_trainate, y_sptest = train_test = 0.25) clf = RayXGBClassifier (n_jobs = 42, # Trong XGBoost-Ray, n_jobs đặt số lượng tác nhân là random_state = seed) # scikit-learning API sẽ tự động chuyển đổi dữ liệu # sang định dạng RayDMatrix nếu cần. # Bạn cũng có thể chuyển X dưới dạng RayDMatrix, trong trường hợp này, # y sẽ bị bỏ qua. clf.fit (X_train, y_train) pred_ray = clf.p Dự đoán (X_test) in (pred_ray) pred_proba_ray = clf.p Dự đoán_proba (X_test) in (pred_proba_ray)

Đoạn mã trên cho thấy bạn cần ít thay đổi mã của mình như thế nào để sử dụng XGBoost-Ray. Mặc dù bạn không cần XGboost-Ray để đào tạo tập dữ liệu về ung thư vú, một bài trước đã chạy các điểm chuẩn trên một số kích thước tập dữ liệu (~ 1.5 triệu đến ~ 12 triệu hàng) trên số lượng công nhân khác nhau (1 đến 8) để cho thấy nó hoạt động như thế nào trên các tập dữ liệu lớn hơn trên một nút duy nhất.

Hình
Thời gian đào tạo cho các điểm chuẩn của nút đơn (càng thấp càng tốt). XGBoost-Ray và XGBoost-Dask đạt được hiệu suất tương tự trên một phiên bản AWS m5.4xlarge duy nhất với 16 lõi và bộ nhớ 64 GB.

 

XGBoost-Ray cũng hoạt động hiệu quả trong cài đặt đa nút (phân tán) như hình ảnh bên dưới cho thấy.

Hình
Thời gian đào tạo nhiều nút trên một số kích thước tập dữ liệu tổng hợp khác nhau, từ ~ 400k đến ~ 2B hàng (nếu thấp hơn thì tốt hơn). XGBoost-Ray và XGBoost-Spark đạt được hiệu suất tương tự.

 

Nếu bạn muốn tìm hiểu thêm về XGBoost Ray, xem bài đăng này trên XGBoost-Ray.

Kết luận

 
 
Bài đăng này đã giới thiệu một số cách tiếp cận mà bạn có thể sử dụng để tăng tốc quá trình đào tạo mô hình XGBoost như thay đổi phương pháp xây dựng cây, tận dụng điện toán đám mây và phân phối XGBoost trên Ray. Nếu bạn có bất kỳ câu hỏi hoặc suy nghĩ nào về XGBoost trên Ray, vui lòng tham gia cộng đồng của chúng tôi thông qua Đàm luận or Slack. Nếu bạn muốn cập nhật mọi thứ về Ray, cân nhắc theo dõi @raydistributed trên twitter và đăng ký nhận bản tin Ray.

 
Tiểu sử: Michael Galarnyk là Chuyên gia Khoa học Dữ liệu và làm việc trong lĩnh vực Quan hệ nhà phát triển tại Anyscale.

Nguyên. Đăng lại với sự cho phép.

Nguồn: https://www.kdnuggets.com/2021/12/speed-xgboost-model-training.html

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?