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.

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

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

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.

Nhấp vào nút Chạy trên Compute Engine rồi chọn dự án của bạn.

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.

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

Đă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.

Đă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.


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

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

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

Đă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.


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.

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

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

Đả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.

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

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

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.

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.

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.

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

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.

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.

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

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

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

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

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ờ quá trình này hoàn tất.


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 đề.

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

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.

Sao chép URL của Rok.

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

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

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

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

Đả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.

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

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.

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.

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 (+).

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

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

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ế!

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:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Cuộc gọi cộng đồng vào thứ Ba
