Từ Notebook đến quy trình Kubeflow với MiniKF và Kale

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ó khả năng 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 – Được tăng cường bằng các worker dịch vụ để hoạt động khi không có mạng hoặc trên các mạng có chất lượng thấp.

Đây là một phương tiệ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í, cho dù đó là máy tính xách tay hay đám mây.

Lớp học lập trình này sẽ hướng dẫn bạn cách tạo bản triển khai Kubeflow của riêng mình bằng MiniKF và chạy quy trình Kubeflow Pipelines từ bên trong Jupyter Notebook.

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 bằng 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 từ bên trong một 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

Đặt mã dự án và tên cụm GCP

Để tìm mã dự án, hãy truy cập vào bảng điều khiển Trang chủ của GCP 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.

Mở Bảng điều khiển của GCP

3fdc4329995406a0.png

Nếu dự án chưa được chọ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

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 Chạy trên Compute Engine rồi chọn dự án của bạn.

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.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

Sau 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. Chuyển đến Snapshot Store và đăng nhập vào Rok bằng tên người dùng và mật khẩu MiniKF.

a683198ac4ba900d.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 và chạy Kubeflow Pipelines. Sử dụng Rok để kiểm soát phiên bản dữ liệu và 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ề Titanic, một cuộc thi trên Kaggle dự đoán những hành khách sống sót sau vụ đắm tàu Titanic.

Tạo một Máy chủ sổ tay

Chuyển đến đường liên kết Máy chủ sổ tay trên trang tổng quan trung tâm Kubeflow.

4115cac8d8474d73.png

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

f9303c0a182e47f5.png

Chỉ định tên cho Notebook Server.

a2343f30bc9522ab.png

Đảm bảo bạn đã chọn hình ảnh này:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Thêm một Ổ đĩa dữ liệu mới, trống 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ủ đó.

2f06041475f45d3.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 Terminal mới trong JupyterLab.

2482011174f7bc75.png

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

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

Kho lưu trữ này chứa một loạt ví dụ được tuyển chọn có dữ liệu và Sổ tay được chú thích. Chuyển đến thư mục data/examples/titanic-ml-dataset/ trong thanh bên rồi mở sổ tay titanic_dataset_ml.ipynb.

c85baf68b36c63b2.png

Khám phá mã học máy của thử thách Titanic

Chạy sổ tay từng bước. Xin lưu ý rằng mã này không hoạt động do thiếu một thư viện.

bf2451fd7407e334.png

Quay lại Terminal và cài đặt thư viện bị thiếu.

pip3 install --user seaborn

d90593b21425dd12.png

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

a21f5f563b36ce4d.png

Chạy lại ô với các thư viện chính xác đã cài đặt và xem ô đó thành công.

Chuyển đổi sổ tay của bạn thành một Kubeflow Pipeline

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

3f4f9c93b187b105.png

Khám phá các phần phụ thuộc theo ô. Xem cách nhiều ô có thể là một phần của một bước trong quy trình và cách một bước trong quy trình có thể phụ thuộc vào các bước trước đó.

15cca32444c1f12e.png

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

bde5cef34f00e258.png

Theo dõi tiến trình tạo ảnh chụp nhanh.

9408f46abb2493f5.png

Theo dõi tiến trình của Lần chạy quy trình.

9edbde68032f5e4b.png

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.

a81646a22584e1b9.png

Chờ quá trình này hoàn tất.

44bee7dc0d24ec21.png

d377b6d574a4970.png

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

5. Khả năng tái tạo bằng ảnh chụp nhanh ổ đĩa

Kiểm tra kết quả

Xem nhật ký cho bước thứ hai từ cuối cùng của quy trình Results (Kết quả). Xin lưu ý rằng tất cả các yếu tố dự đoán đều cho thấy điểm số là 100%. Một nhà khoa học dữ liệu giàu kinh nghiệm sẽ ngay lập tức nhận thấy điều này là đáng ngờ. Đây là một dấu hiệu cho thấy các mô hình của chúng tôi không khái quát hoá mà thay vào đó là điều chỉnh quá mức trên tập dữ liệu huấn luyện. Nguyên nhân có thể là do dữ liệu mà các mô hình sử dụng có vấn đề.

2a594032c2dd6ff6.png

Tái tạo trạng thái trước đó

Rất may, Rok sẽ xử lý 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 sẽ có một "cỗ máy thời gian" cho dữ liệu và mã của mình. Vì vậy, hãy tiếp tục trạng thái của quy trình trước khi huấn luyện một trong các mô hình và xem điều gì đang xảy ra. Xem bước randomforest, sau đó nhấp vào Artifacts (Hiện vật).

4f25ca4560711b23.png

Làm theo các bước trong Markdown, tức là xem ảnh chụp nhanh trong giao diện người dùng Rok bằng cách nhấp vào đường liên kết tương ứng.

e533bc781da9355a.png

Sao chép URL của Rok.

d155d19731b5cedd.png

Chuyển đến đường liên kết Máy chủ sổ tay.

aafeab01f3ef0863.png

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

f2265a64e8f9d094.png

Dán URL Rok mà bạn đã sao chép trước đó rồi nhấp vào nút Tự động điền.

9ba4d4128a3bdeea.png

Đặt tên cho sổ tay của bạn.

7685c3bf35fc74b2.png

Đảm bảo bạn đã chọn hình ảnh này:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

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ủ đó.

34955a64ae316de1.png

Xin lưu ý rằng sổ tay sẽ mở ở chính xác ô của bước trong quy trình mà bạn đã tạo.

a1f7c81f349e0364.png

Trong nền, Kale đã khôi phục trạng thái của Sổ tay bằng cách nhập tất cả các thư viện và tải các biến từ các bước trước.

Gỡ lỗi trạng thái trước đó

Thêm lệnh in vào ô này:

print(acc_random_forest)

Chạy ô đang hoạt động bằng cách nhấn tổ hợp phím Shift + Return để huấn luyện lại rừng ngẫu nhiên và in điểm số. Đó là 100.

e2a8a3b5465fcb5d.png

Giờ là lúc xem có điều gì bất thường trong dữ liệu huấn luyện hay không. Để khám phá và khắc phục vấn đề này, hãy thêm một ô phía trên ô Markdown Random Forest bằng cách chọn ô trước đó rồi nhấp vào biểu tượng dấu cộng (+).

d1077f32dff9620f.png

Thêm văn bản sau và thực thi ô để in tập dữ liệu huấn luyện.

train_df

2854798ff01aed4e.png

Rất tiếc! Cột có nhãn huấn luyện ("Survived") đã bị đưa vào nhầm dưới dạng các đặc điểm đầu vào! Mô hình đã học được cách tập trung vào tính năng "Survived" (Đã sống sót) và bỏ qua những tính năng còn lại, làm ô nhiễm dữ liệu đầu vào. Cột này hoàn toàn khớp với mục tiêu của mô hình và không xuất hiện trong quá trình dự đoán, vì vậy, bạn cần xoá cột này khỏi tập dữ liệu huấn luyện để mô hình học từ các đặc điểm khác.

Thêm bản sửa lỗi

Để xoá cột này, hãy chỉnh sửa ô để thêm lệnh sau:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Bật Kale và đảm bảo rằng ô loại bỏ nhãn Survived nằm trong bước quy trình featureengineering (ô này phải có cùng màu viền).

Chạy lại quy trình bằng cách nhấp vào nút Compile and Run (Biên dịch và chạ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.

Chờ bước results (kết quả) hoàn tất và xem nhật ký để biết kết quả cuối cùng. Giờ đây, bạn đã có điểm dự đoán thực tế!

8c6a9676b49e5be8.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-1.

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