Từ Sổ tay đến quy trình Kubeflow với HP Tuning: Một hành trình khoa học dữ liệu
Thông tin về lớp học lập trình này
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 hướng đến việc triển khai quy trình công việc học máy (ML) trên Kubernetes đơn giản, di động và có thể mở rộng. Mục tiêu là đưa ra một cách thức đơn giản để triển khai các hệ thống nguồn mở tốt nhất dành cho công nghệ học máy cho nhiều cơ sở hạ tầng. |
Quá trình triển khai Kubeflow diễn ra như thế nào?
Triển khai Kubeflow:
- Di động – Hoạt động trên bất kỳ cụm Kubernetes nào, dù cụm đó nằm trên Google Cloud Platform (GCP), tại cơ sở hạ tầng riêng hay nhiều nhà cung cấp.
- Có thể mở rộng – Có thể sử dụng tài nguyên biến động và chỉ bị hạn chế do số lượng tài nguyên được phân bổ cho cụm Kubernetes.
- Thành phần 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 học máy hoàn chỉnh, trong số một tập hợp các khung và thư viện học máy được tuyển chọn.
Kubeflow mang đến cho bạn khả năng sắp xếp các dịch vụ vi mô có kết nối lỏng lẻo và tách biệt thành một đơn vị duy nhất và triển khai các dịch vụ này cho nhiều vị trí, bao gồm trên máy tính xách tay, tại cơ sở riêng hoặc trên đám mây.
Lớp học lập trình này sẽ hướng dẫn bạn cách tạo quy trình triển khai Kubeflow của riêng mình bằng MiniKF, sau đó chạy quy trình Quy trình Kubeflow với tính năng điều chỉnh siêu tham số để huấn luyện và phân phát mô hình. Bạn có thể làm tất cả những việc đó từ bên 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ẽ xây dựng 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 Quy trình Kubeflow mà không cần sử dụng lệnh CLI hoặc SDK nào. Bạn không cần phải có kiến thức về Kubernetes hoặc Docker. Sau khi hoàn thành, cơ sở hạ tầng của bạn sẽ có:
- Máy ảo MiniKF (Mini Kubeflow) tự động cài đặt:
- Kubernetes (sử dụng Minikube)
- Kubeflow
- Kale, một công cụ chuyển đổi Máy tính xách tay Jupyter đa năng sang quy trình làm việc của Kubeflow Pipelines ( GitHub)
- Arrikto Rok để tạo phiên bản và tái tạo dữ liệu
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 Quy trình Kubeflow mà không cần sử dụng lệnh CLI hoặc SDK nào
- Cách chạy Quy trình Kubeflow bằng tính năng điều chỉnh siêu tham số từ bên trong một sổ tay chỉ bằng một lần nhấp vào nút
- Cách tự động tạo phiên bản dữ liệu trong một sổ tay và trong từng bước quy trình
Bạn cần có
- Một dự án GCP đang hoạt động mà bạn có quyền Chủ sở hữu
Đây là 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à 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 che khuất và cung cấp cho bạn để sao chép và dán một cách dễ dàng.
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 một 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 GCP, hãy đảm bảo rằng dự án đó đáp ứng các yêu cầu tối thiểu được mô tả dưới đây. Bước đầu tiên là mở trình quản lý tài nguyên trong Bảng điều khiển của GCP.
Tạo dự án mới hoặc chọn dự án hiện có:
Hãy kiểm tra các yêu cầu tối thiểu sau:
- Hãy đảm bảo bạn có vai trò chủ sở hữu đối với dự án.
- Đảm bảo tính năng thanh toán được bật cho dự án của bạn.
- Nếu bạn đang sử dụng Cấp miễn phí GCP hoặc thời gian dùng thử 12 tháng với khoản tín dụng 300 đô la Mỹ, xin lưu ý rằng bạn không thể chạy quá trình cài đặt MiniKF mặc định của GCP vì cấp miễn phí này không cung cấp đủ tài nguyên. Bạn cần phải nâng cấp lên tài khoản có tính phí.
Để được trợ giúp thêm 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 phần hướng dẫn cài đặt MiniKF.
Mở dự án GCP được phân bổ trước
Để 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 rồi mở Bảng điều khiển chính 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ó khi được nhắc tạo trang tổng quan.
Nếu bạn chưa chọn dự án này, hãy nhấp vào Chọn dự án:
Chọn dự án của bạn. Bạn chỉ được có một:
3. Cài đặt MiniKF
Tạo một phiên bản Điện toán có MiniKF
Trong GCP Marketplace, hãy tìm " MiniKF".
Chọn máy ảo MiniKF của Arrikto:
Nhấp vào nút Khởi chạy rồi chọn dự án của bạn:
Trong phần Định cấu hình & Cửa sổ Triển khai, chọn tên và vùng cho thực thể MiniKF rồi giữ nguyên các lựa chọn mặc định. Sau đó nhấp vào nút Deploy (Triển khai):
Chờ phiên bản Điện toán MiniKF khởi động:
Đăng nhập vào MiniKF
Khi máy ảo MiniKF đang 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 quá trình triển khai Minikube, Kubeflow và Rok. Quá trình này sẽ mất vài phút để hoàn tất.
Đăng nhập vào Kubeflow
Khi quá trình cài đặt hoàn tất và tất cả các nhóm đã sẵn sàng, hãy truy cập vào trang tổng quan của MiniKF. Đăng nhập vào Kubeflow bằng tên người dùng và mật khẩu MiniKF:
Người dùng Chrome sẽ thấy màn hình này:
Người dùng Firefox sẽ thấy màn hình này:
Người dùng Safari sẽ thấy màn hình này:
Đă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ẻ. Nhấp vào Snapshots (Bản tổng quan nhanh) rồi đăng nhập vào Rok bằng tên người dùng và mật khẩu MiniKF.
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ã học máy, chạy Quy trình Kubeflow và sử dụng Rok để tạo phiên bản và tái tạo dữ liệu.
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 chó giống, một dự án trong Udacity AI Nanodegree. Khi có hình ảnh một chú chó, mô hình cuối cùng sẽ cung cấp số liệu ước tính về giống chó.
Tạo máy chủ sổ tay trong cụm Kubeflow
Chuyển đến đường liên kết Sổ tay trên trang tổng quan trung tâm của Kubeflow.
Nhấp vào New Server (Máy chủ mới).
Chỉ định tên cho máy chủ sổ tay của bạn.
Đảm bảo bạn đã chọn hình ảnh Docker sau đây (Lưu ý rằng thẻ hình ảnh có thể khác):
gcr.io/arrikto/jupyter-kale:f20978e
Thêm một ổ dữ liệu mới, trống có kích thước 5GB và đặt tên là data.
Nhấp vào Khởi chạy để tạo máy chủ sổ tay.
Khi máy chủ sổ tay đó hoạt động, hãy nhấp vào Kết nối để kết nối với máy chủ đó.
Tải dữ liệu và sổ tay xuống
Một thẻ mới có trang đích của JupyterLab sẽ mở ra. Tạo một thiết bị đầu cuối mới trong JupyterLab.
Trong cửa sổ dòng lệnh, hãy chạy các lệnh sau để chuyển đến thư mục data rồi tải sổ tay này cũng như dữ liệu bạn sẽ sử dụng cho phần còn lại của phòng thí nghiệm xuống:
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, trong đó có dữ liệu và các 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
.
Tìm hiểu mã ML của ví dụ về Nhận dạng giống chó
Hiện tại, khô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 chạy ví dụ này theo tiến độ của riêng mình tại nhà, vui lòng tải tập dữ liệu xuống.
Chạy ô imports
để nhập tất cả thư viện cần thiết. Lưu ý rằng mã không thành công do thiếu thư viện:
Thông thường, bạn nên tạo một hình ảnh Docker mới để có thể chạy Sổ tay này dưới dạng quy trình Kubeflow, để bao gồm các thư viện mới được cài đặt. May mắn thay, Rok và Kale đảm bảo rằng mọi thư viện mà bạn cài đặt trong quá trình phát triển đều sẽ chuyển đến quy trình của bạn, nhờ vào công nghệ chụp nhanh của Rok và Kale đã gắn những tệp được chụp nhanh đó vào các bước của quy trình.
Chạy ô tiếp theo để cài đặt thư viện bị thiếu:
Khởi động lại nhân của sổ tay bằng cách nhấp vào biểu tượng Khởi động lại:
Chạy lại ô imports
bằng đúng thư viện đã cài đặt và xem thành công.
Chuyển đổi sổ tay thành một quy trình trong Kubeflow Pipelines
Để bật Kale, hãy nhấp vào biểu tượng Kubeflow trong ngăn bên trái của sổ tay:
Bật Kale bằng cách nhấp vào thanh trượt trong Kale Deployment Panel:
Khám phá các phần phụ thuộc mỗi ô trong sổ tay. Xem cách nhiều ô trong sổ tay có thể là một phần trong một bước của quy trình, như được biểu thị bằng các thanh màu ở bên trái các ô, cũng như cách một bước trong quy trình có thể phụ thuộc vào các bước trước đó, được biểu thị bằng biểu tượng phụ thuộc vào các nhãn phía trên các ô. Ví dụ: hình ảnh bên dưới hiển thị nhiều ô thuộc cùng một bước của quy trình. Các thành phần này có cùng màu đỏ và phụ thuộc vào bước trước đó của quy trình.
Nhấp vào nút Compile and Run (Biên dịch và chạy):
Giờ đây, Kale sẽ tiếp quản và xây dựng sổ tay của bạn bằng cách chuyển đổi sổ tay đó thành quy trình Kubeflow Pipelines. Ngoài ra, vì Kale tích hợp với Rok để chụp nhanh lượng dữ liệu của sổ tay hiện tại, nên bạn có thể xem tiến trình tổng quan nhanh. Rok chịu trách nhiệm tạo 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ó một cỗ máy thời gian cho dữ liệu và mã của mình, đồng thời quy trình của bạn 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 các hình ảnh Docker mới.
Quy trình này đã được biên dịch và tải lên Kubeflow Pipelines. 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 quá trình chạy.
Giao diện người dùng Kubeflow Pipelines sẽ mở ra trong một thẻ mới. Chờ quá trình chạy kết thúc.
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 mình!
5. Chuyển đổi quá trình học 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ẻ Logs (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 thế nữa, bước này mất nhiều thời gian để hoàn thành.
Hãy xem nhật ký của bước cnn-vgg16. Ở bước này, bạn đã sử dụng phương pháp học chuyển tiếp 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 đó, nhưng chúng tôi vẫn có thể làm tốt hơn.
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 đổi 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 mà bạn sẽ sử dụng cho phần còn lại của lớp học lập trình này.
Điều chỉnh siêu tham số
Quay lại máy chủ của sổ tay trong giao diện người dùng Kubeflow rồi 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ố:
Trong ngăn bên trái của sổ tay, hãy bật tính năng Chỉnh sửa HP bằng Katib để chạy tính năng tinh chỉnh siêu tham số:
Sau đó, nhấp vào Thiết lập Katib Job để định cấu hình Katib:
Xác định không gian tìm kiếm cho từng thông số và xác định mục tiêu:
Nhấp vào nút Compile and Run Katib Job (Biên dịch và chạy công việc Katib):
Xem tiến trình thử nghiệm Katib:
Nhấp vào Xem để xem thử nghiệm Katib:
Nhấp vào Xong để xem các lần chạy trong Quy trình Kubeflow (KFP):
Trên trang thử nghiệm Katib, bạn sẽ thấy các phiên bản thử mới:
Và trong giao diện người dùng KFP, bạn sẽ thấy các lần chạy mới:
Hãy giải thích vấn đề vừa xảy ra. Trước đây, Kale đã tạo một quy trình chạy từ một sổ tay và giờ đây đang tạo nhiều lần chạy quy trình, trong đó mỗi lần chạy quy trình đượ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ó thực sự đang chạy (gọi là thử nghiệm trong biệt ngữ 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 Công việc đơn giản (tức là Nhóm) dưới dạng các chương trình thử nghiệm, nhưng Kale triển khai đoạn mã đệm để các phiên bản thử thực sự chạy quy trình trong Quy trình Kubeflow, sau đó thu thập các chỉ số từ các lần chạy quy trình.
Khi thử nghiệm Katib đang tạo các phiên bản thử, bạn sẽ thấy nhiều phiên bản thử hơn trong giao diện người dùng Katib:
Và nhiều tính năng khác chạy trong giao diện người dùng KFP:
Khi thử nghiệm Katib hoàn tất, bạn có thể xem tất cả các lượt thử trong giao diện người dùng Katib:
Và tất cả các lần chạy trong giao diện người dùng KFP:
Nếu quay lại Sổ tay, bạn sẽ thấy một nút thông tin ngay bên cạnh thử nghiệm Katib bên trong bảng điều khiển Kale:
Nhấp vào đó và bạn sẽ thấy kết quả tốt nhất cũng như các tham số tạo ra kết quả đó:
6. Dọn dẹp
Huỷ bỏ máy ảo MiniKF
Chuyển đến Deployment Manager (Trình quản lý triển khai) trong Bảng điều khiển GCP rồi xoá hoạt động 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 quy trình làm việc khoa học dữ liệu toàn diện bằng Kubeflow (MiniKF), Kale và Rok!
Tiếp theo là gì?
Tham gia Cộng đồng Kubeflow:
- github.com/kubeflow
- Slack Kubeflow
- kubeflow-discuss@googlegroups.com
- Cuộc gọi cộng đồng hằng tuần, Slack và các thông tin khác về cộng đồng