Từ Sổ tay đến quy trình Kubeflow với HP Tuning: Một hành trình khoa học dữ liệu

1. Giới thiệu

Kubeflow là một bộ công cụ học máy dành cho Kubernetes. Dự án này nhằm mục đích giúp việc triển khai quy trình học máy (ML) trên Kubernetes trở nên đơn giản, linh hoạt và có khả năng mở rộng. Mục tiêu là cung cấp một cách đơn giản để triển khai các hệ thống nguồn mở tốt nhất cho học máy cho nhiều cơ sở hạ tầng.

Việc triển khai Kubeflow trông như thế nào?

Việc triển khai Kubeflow là:

  • Di động – Hoạt động trên mọi cụm Kubernetes, cho dù cụm đó nằm trên Google Cloud Platform (GCP), tại cơ sở hạ tầng riêng hay trên nhiều nhà cung cấp.
  • Có thể mở rộng – Có thể sử dụng các tài nguyên biến động và chỉ bị hạn chế bởi số lượng tài nguyên được phân bổ cho cụm Kubernetes.
  • Có thể kết hợp – Cho phép bạn định cấu hình các bước độc lập thành một quy trình công việc hoàn chỉnh về học máy, chọn trong số một nhóm khung và thư viện học máy được tuyển chọn.

Kubeflow cho phép bạn sắp xếp các vi dịch vụ được liên kết lỏng lẻo thành một đơn vị duy nhất và triển khai chúng ở nhiều vị trí, bao gồm cả trên máy tính xách tay, tại chỗ hoặc trên đám mây.

Trong lớp học lập trình này, bạn sẽ được hướng dẫn cách tạo bản triển khai Kubeflow của riêng mình bằng MiniKF, sau đó chạy quy trình Kubeflow Pipelines với tính năng điều chỉnh siêu tham số để huấn luyện và phân phát một mô hình. Bạn có thể làm tất cả những việc đó trong Sổ tay Jupyter.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ tạo một quy trình khoa học dữ liệu phức tạp với tính năng điều chỉnh siêu tham số trên Kubeflow Pipelines mà không cần dùng bất kỳ lệnh CLI hoặc SDK nào. Bạn không cần có kiến thức về Kubernetes hoặc Docker. Sau khi hoàn tất, cơ sở hạ tầng của bạn sẽ bao gồm:

  • Một VM MiniKF (Mini Kubeflow) tự động cài đặt:
  • Kubernetes (sử dụng Minikube)
  • Kubeflow
  • Kale, một công cụ để chuyển đổi Sổ tay Jupyter cho mục đích chung thành quy trình công việc Kubeflow Pipelines ( GitHub)
  • Arrikto Rok để kiểm soát phiên bản dữ liệu và khả năng tái tạo

Kiến thức bạn sẽ học được

  • Cách cài đặt Kubeflow bằng MiniKF
  • Cách chuyển đổi Sổ tay Jupyter sang Kubeflow Pipelines mà không cần dùng bất kỳ lệnh CLI hoặc SDK nào
  • Cách chạy Kubeflow Pipelines với tính năng điều chỉnh siêu tham số từ bên trong sổ tay chỉ bằng một nút nhấp
  • Cách tự động tạo phiên bản dữ liệu trong sổ tay và trong từng bước của quy trình

Bạn cần có

  • Một dự án GCP đang hoạt động mà bạn có quyền sở hữu

Đây là một lớp học lập trình nâng cao tập trung vào Kubeflow. Để biết thêm thông tin cơ bản và phần giới thiệu về nền tảng này, hãy xem tài liệu Giới thiệu về Kubeflow. Các khái niệm và khối mã không liên quan được tinh chỉnh và cung cấp cho bạn, chỉ cần sao chép và dán.

2. Thiết lập môi trường

Thiết lập dự án GCP

Hãy làm theo các bước bên dưới để tạo dự án GCP hoặc định cấu hình dự án GCP hiện có. Nếu bạn dự định sử dụng một dự án hiện có trên Google Cloud Platform, hãy đảm bảo rằng dự án đó đáp ứng các yêu cầu tối thiểu như mô tả bên dưới. Bước đầu tiên là mở trình quản lý tài nguyên trong Bảng điều khiển GCP.

Tạo dự án mới hoặc chọn một dự án hiện có:

99b103929d928576.png

Kiểm tra các yêu cầu tối thiểu sau:

Để biết thêm thông tin trợ giúp về cách thiết lập dự án GCP, hãy xem tài liệu về GCP.

Sau khi thiết lập dự án GCP, hãy chuyển thẳng đến hướng dẫn cài đặt MiniKF.

Mở dự án đã phân bổ trước của bạn trên Google Cloud Platform

Để mở dự án GCP được phân bổ trước, hãy nhấp vào nút bên dưới để truy cập vào Bảng điều khiển GCP và mở bảng điều khiển Trang chủ trong trình đơn ba đường kẻ ở trên cùng bên trái. Nếu màn hình trống, hãy nhấp vào Có tại lời nhắc để tạo một trang tổng quan.

3fdc4329995406a0.png

Nếu bạn chưa chọn dự án, hãy nhấp vào Chọn một dự án:

e8952c0b96067dea.png

Chọn dự án của bạn. Bạn chỉ nên có một:

fe25c1925487142.png

3. Cài đặt MiniKF

Tạo một phiên bản Compute bao gồm MiniKF

Trong GCP Marketplace, hãy tìm "MiniKF".

Chọn máy ảo MiniKF của Arrikto:

d6b423c1911ea85a.png

Nhấp vào nút RA MẮT rồi chọn dự án của bạn:

7d07439db939b61c.png

Trong cửa sổ Configure & Deploy (Định cấu hình và triển khai), hãy chọn tênkhu vực cho phiên bản MiniKF của bạn và giữ nguyên các lựa chọn mặc định. Sau đó, nhấp vào nút Triển khai:

7d5f7d17a80a1930.png

Chờ phiên bản Compute MiniKF khởi động:

5228086caadc44c6.png

Đăng nhập vào MiniKF

Khi máy ảo MiniKF hoạt động, hãy kết nối và đăng nhập bằng cách nhấp vào nút SSH. Làm theo hướng dẫn trên màn hình để chạy lệnh minikf. Lệnh này sẽ bắt đầu triển khai Minikube, Kubeflow và Rok. Quá trình này sẽ mất vài phút để hoàn tất.

774e83c3e96cf7b3.png

Đăng nhập vào Kubeflow

Khi quá trình cài đặt hoàn tất và tất cả các pod đều sẵn sàng, hãy truy cập vào trang tổng quan MiniKF. Đăng nhập vào Kubeflow bằng tên người dùng và mật khẩu MiniKF:

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Người dùng Chrome sẽ thấy màn hình sau:

6258e0f09e46a6c2.png

Người dùng Firefox sẽ thấy màn hình sau:

8cff90ce2f0670bd.png

Người dùng Safari sẽ thấy màn hình sau:

1c6fd768d71c0a92.png

Đăng nhập vào Rok

Sau khi đăng nhập vào Kubeflow, hãy mở trình đơn bên trái bằng cách nhấp vào biểu tượng ba đường kẻ ngang. Nhấp vào Snapshots (Ảnh chụp nhanh) rồi đăng nhập vào Rok bằng tên người dùng và mật khẩu MiniKF.

16171f35a935a9af.png

80aad6ba5d298a7e.png

Xin chúc mừng! Bạn đã triển khai thành công MiniKF trên GCP. Giờ đây, bạn có thể tạo sổ tay, viết mã ML, chạy Kubeflow Pipelines và sử dụng Rok để kiểm soát phiên bản dữ liệu cũng như khả năng tái tạo.

4. Chạy một quy trình từ bên trong sổ tay

Trong phần này, bạn sẽ chạy ví dụ về Nhận dạng giống chó, một dự án trong chương trình Nanodegree về AI của Udacity. Với hình ảnh về một chú chó, mô hình cuối cùng sẽ đưa ra thông tin ước tính về giống chó.

Tạo một máy chủ sổ tay trong cụm Kubeflow

Chuyển đến đường liên kết Notebooks (Sổ tay) trên trang tổng quan trung tâm Kubeflow.

60825e935fd0f39b.png

Nhấp vào Máy chủ mới.

f9303c0a182e47f5.png

Chỉ định tên cho máy chủ sổ tay của bạn.

a2343f30bc9522ab.png

Đảm bảo bạn đã chọn hình ảnh Docker sau đây (Xin lưu ý rằng thẻ hình ảnh có thể khác):

gcr.io/arrikto/jupyter-kale:f20978e

Thêm một ổ đĩa dữ liệu trống mới có kích thước 5 GB và đặt tên là data.

8544d9b05826b316.png

Nhấp vào Chạy để tạo máy chủ sổ tay.

28c024bcc55cc70a.png

Khi máy chủ sổ tay có sẵn, hãy nhấp vào Kết nối để kết nối với máy chủ đó.

52f1f8234988ceaa.png

Tải dữ liệu và sổ tay xuống

Một thẻ mới sẽ mở ra cùng với trang đích của JupyterLab. Tạo một thiết bị đầu cuối mới trong JupyterLab.

ab9ac96f1a1f0d09.png

Trong cửa sổ dòng lệnh, hãy chạy các lệnh sau để chuyển đến thư mục data và tải sổ tay cũng như dữ liệu mà bạn sẽ dùng cho phần còn lại của phòng thí nghiệm:

cd data/
git clone https://github.com/kubeflow-kale/kale

Kho lưu trữ được sao chép chứa một loạt ví dụ được tuyển chọn có dữ liệu và sổ tay được chú thích.

Trong thanh bên, hãy chuyển đến thư mục data/kale/examples/dog-breed-classification/ rồi mở sổ tay dog-breed.ipynb.

2bc436465522f65b.png

Khám phá mã học máy của ví dụ về tính năng Nhận dạng giống chó

Tạm thời, đừng chạy các ô tải tập dữ liệu xuống, vì bạn sẽ sử dụng một số tập dữ liệu nhỏ hơn có trong kho lưu trữ mà bạn vừa sao chép. Nếu bạn đang tự chạy ví dụ này tại nhà, hãy tải các tập dữ liệu xuống.

Chạy ô imports để nhập tất cả các thư viện cần thiết. Lưu ý rằng mã này không hoạt động vì thiếu một thư viện:

5e2b97ab2512f139.png

Thông thường, bạn nên tạo một hình ảnh Docker mới để có thể chạy Notebook này dưới dạng một quy trình Kubeflow, bao gồm cả các thư viện mới cài đặt. Rất may, Rok và Kale đảm bảo rằng mọi thư viện bạn cài đặt trong quá trình phát triển sẽ được đưa vào quy trình của bạn, nhờ công nghệ chụp nhanh của Rok và Kale gắn các ổ đĩa được chụp nhanh đó vào các bước trong quy trình.

Chạy ô tiếp theo để cài đặt thư viện bị thiếu:

c483da77943a6f01.png

Khởi động lại nhân sổ tay bằng cách nhấp vào biểu tượng Khởi động lại:

376b5203209c2c91.png

Chạy lại ô imports khi đã cài đặt đúng các thư viện và xem kết quả thành công.

Chuyển đổi sổ tay thành một quy trình trong Kubeflow Pipelines

Bật Kale bằng cách nhấp vào biểu tượng Kubeflow trong ngăn bên trái của sổ tay:

7b96241f2ab6c389.png

Bật Kale bằng cách nhấp vào thanh trượt trong Bảng triển khai Kale:

804cfbf9d76b7e23.png

Khám phá các phần phụ thuộc theo ô trong sổ tay. Xem cách nhiều ô sổ tay có thể là một phần của một bước trong quy trình duy nhất, như được biểu thị bằng các thanh màu ở bên trái của các ô và cách một bước trong quy trình có thể phụ thuộc vào các bước trước đó, như được biểu thị bằng nhãn phụ thuộc vào phía trên các ô. Ví dụ: hình ảnh bên dưới cho thấy nhiều ô thuộc cùng một bước trong quy trình. Chúng có cùng màu đỏ và phụ thuộc vào một bước trước đó trong quy trình.

fcd0fb351cdfb359.png

Nhấp vào nút Compile and Run (Biên dịch và chạy):

18f2f6f0e12393d5.png

Giờ đây, Kale sẽ tiếp quản và tạo sổ tay của bạn bằng cách chuyển đổi sổ tay đó thành một quy trình Kubeflow Pipelines. Ngoài ra, vì Kale tích hợp với Rok để chụp nhanh khối lượng dữ liệu của sổ tay hiện tại, nên bạn có thể theo dõi tiến trình chụp nhanh. Rok đảm nhiệm việc quản lý phiên bản dữ liệu và tái tạo toàn bộ môi trường như khi bạn nhấp vào nút Compile and Run (Biên dịch và chạy). Bằng cách này, bạn có thể quay lại thời điểm bất kỳ cho dữ liệu và mã của mình, đồng thời quy trình sẽ chạy trong cùng một môi trường nơi bạn đã phát triển mã mà không cần tạo hình ảnh docker mới.

de1b88af76df1a9a.png

Quy trình này đã được biên dịch và tải lên Kubeflow Pipelines. Bây giờ, hãy nhấp vào đường liên kết để chuyển đến giao diện người dùng Kubeflow Pipelines và xem lượt chạy.

e0b467e2e7034b5d.png

Giao diện người dùng Kubeflow Pipelines sẽ mở ra trong một thẻ mới. Chờ quá trình chạy hoàn tất.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

Xin chúc mừng! Bạn vừa chạy một quy trình toàn diện trong Kubeflow Pipelines, bắt đầu từ sổ tay của bạn!

5. Học chuyển giao bằng cách điều chỉnh siêu tham số

Kiểm tra kết quả

Hãy xem nhật ký của bước cnn-from-scratch. (Nhấp vào bước trong biểu đồ trên giao diện người dùng Kubeflow Pipelines, sau đó nhấp vào thẻ Nhật ký.) Đây là bước mà bạn đã huấn luyện một mạng nơ-ron tích chập (CNN) từ đầu. Lưu ý rằng mô hình đã huấn luyện có độ chính xác rất thấp và hơn nữa, bước này mất nhiều thời gian để hoàn tất.

62bf0835e9896c67.png

Hãy xem nhật ký của bước cnn-vgg16. Trong bước này, bạn đã sử dụng phương pháp học chuyển giao trên mô hình VGG-16 được huấn luyện trước – một mạng nơ-ron do Nhóm hình học trực quan (VGG) huấn luyện. Độ chính xác cao hơn nhiều so với mô hình trước đây, nhưng chúng ta vẫn có thể làm tốt hơn nữa.

2b45072da65e20ae.png

Bây giờ, hãy xem nhật ký của bước cnn-resnet50. Trong bước này, bạn đã sử dụng phương pháp học chuyển giao trên mô hình ResNet-50 được huấn luyện trước. Độ chính xác cao hơn nhiều. Do đó, đây là mô hình bạn sẽ sử dụng trong phần còn lại của lớp học lập trình này.

a1dc84ea48a87820.png

Điều chỉnh siêu tham số

Quay lại máy chủ sổ tay trong giao diện người dùng Kubeflow và mở sổ tay có tên dog-breed-katib.ipynb (tại đường dẫn data/kale/examples/dog-breed-classification/). Trong sổ tay này, bạn sẽ chạy một số thử nghiệm điều chỉnh siêu tham số trên mô hình ResNet-50 bằng Katib. Lưu ý rằng bạn có một ô ở đầu sổ tay để khai báo các tham số:

87b9f6c98dc1823e.png

Trong ngăn bên trái của sổ tay, hãy bật HP Tuning with Katib để chạy quy trình điều chỉnh siêu tham số:

a518eba74d341139.png

Sau đó, nhấp vào Thiết lập Katib Job để định cấu hình Katib:

f4e34fff6a93aa60.png

Xác định không gian tìm kiếm cho từng tham số và xác định mục tiêu:

cfc6b7bcdc685a02.png

Nhấp vào nút Compile and Run Katib Job (Biên dịch và chạy công việc Katib):

f9c1ab0a6a3c5e8d.png

Theo dõi tiến trình của thử nghiệm Katib:

f3514011876564db.png

Nhấp vào Xem để xem thử nghiệm Katib:

ab2f5a5edd48e8dc.png

Nhấp vào Xong để xem các lần chạy trong Kubeflow Pipelines (KFP):

410a843b6f044a4b.png

Trong trang thử nghiệm Katib, bạn sẽ thấy các thử nghiệm mới:

a511dca519580133.png

Và trong giao diện người dùng KFP, bạn sẽ thấy các lần chạy mới:

43dd34ee2b75018d.png

Hãy cùng xem xét những gì vừa xảy ra. Trước đây, Kale tạo một lần chạy quy trình từ một sổ tay và giờ đây, công cụ này đang tạo nhiều lần chạy quy trình, trong đó mỗi lần chạy được cung cấp một tổ hợp đối số khác nhau.

Katib là thành phần của Kubeflow để chạy các công việc điều chỉnh siêu tham số cho mục đích chung. Katib không biết gì về các công việc mà nó đang chạy (gọi là thử nghiệm trong thuật ngữ của Katib). Tất cả những gì Kale quan tâm là không gian tìm kiếm, thuật toán tối ưu hoá và mục tiêu. Katib hỗ trợ chạy các Job đơn giản (tức là Pod) dưới dạng các thử nghiệm, nhưng Kale triển khai một shim để các thử nghiệm thực sự chạy pipeline trong Kubeflow Pipelines, sau đó thu thập các chỉ số từ các lần chạy pipeline.

Khi thử nghiệm Katib đang tạo ra các thử nghiệm, bạn sẽ thấy nhiều thử nghiệm hơn trong giao diện người dùng Katib:

3e854d3d4bb766c.png

Và nhiều lượt chạy khác trong giao diện người dùng KFP:

ffd30dcefa739962.png

Khi thử nghiệm Katib hoàn tất, bạn có thể xem tất cả các thử nghiệm trong giao diện người dùng Katib:

9096ae9caa77e42a.png

Và tất cả các lần chạy trong giao diện người dùng KFP:

7acc64dfee4f35a3.png

Nếu quay lại Notebook, bạn sẽ thấy một nút xem thông tin ngay bên cạnh thử nghiệm Katib trong bảng điều khiển Kale:

95b092180d71dc80.png

Nhấp vào kết quả đó, bạn sẽ thấy kết quả phù hợp nhất và các thông số tạo ra kết quả đó:

3b0ce47e548e5afb.png

6. Dọn dẹp

Huỷ VM MiniKF

Chuyển đến Deployment Manager trong Bảng điều khiển của GCP rồi xoá chế độ triển khai minikf-on-gcp.

7. Xin chúc mừng

Xin chúc mừng, bạn đã chạy thành công một quy trình khoa học dữ liệu toàn diện bằng cách sử dụng Kubeflow (MiniKF), Kale và Rok!

Tiếp theo là gì?

Tham gia cộng đồng Kubeflow:

Tài liệu đọc thêm