Chuyển đến nội dung chính

Hướng dẫn CI/CD cho Machine Learning dành cho người mới bắt đầu

Học cách tự động hóa huấn luyện, đánh giá, quản lý phiên bản và triển khai mô hình bằng GitHub Actions với hướng dẫn MLOps dễ nhất hiện có trên mạng.
Đã cập nhật 5 thg 10, 2026  · 15 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Tích hợp liên tục (CI) và Triển khai liên tục (CD) là những thực hành thường dùng trong phát triển phần mềm để tự động hóa việc tích hợp thay đổi mã, kiểm thử và nhanh chóng triển khai ứng dụng đã cập nhật. Ban đầu, các thực hành này được phát triển cho ứng dụng phần mềm truyền thống, nhưng hiện nay cũng ngày càng phù hợp với các dự án machine learning (ML).

Trong hướng dẫn toàn diện này, chúng ta sẽ xem xét CI/CD cho ML và học cách xây dựng pipeline machine learning của riêng mình để tự động hóa quy trình huấn luyện, đánh giá và triển khai mô hình.

Hướng dẫn này trình bày một dự án đơn giản chỉ sử dụng GitHub Actions để tự động hóa toàn bộ quy trình. Hầu hết nội dung chúng ta bàn đến đều quen thuộc với kỹ sư machine learning và nhà khoa học dữ liệu. Điểm mới ở đây là cách dùng GitHub Actions, Makefile, CML và Hugging Face CLI.

Đăng ký khóa học MLOps Concepts để học cách đưa mô hình machine learning từ notebook cục bộ lên môi trường sản xuất tạo ra giá trị kinh doanh.

Vì sao cần CI/CD cho Machine Learning?

CI/CD là bước ngoặt khi hiện thực hóa mô hình của bạn và dùng nó để phát triển sản phẩm. Chuẩn hóa quy trình tự động hóa mang lại giải pháp không lỗi, nhanh và có khả năng mở rộng cho dự án ML của bạn, giúp bạn tập trung cải thiện mô hình thay vì quản lý và triển khai giải pháp.

Cụ thể, CI/CD cho machine learning hỗ trợ các điểm sau:

1. Tự động hóa pipeline huấn luyện

Với CI/CD, bạn có thể tự động huấn luyện lại mô hình trên dữ liệu mới theo lịch định kỳ, tiết kiệm thời gian so với kích hoạt thủ công.

2. Phát hiện lỗi sớm

Công cụ CI chạy kiểm thử và kiểm tra cho mỗi lần commit, giúp phát hiện lỗi, vấn đề tích hợp và suy giảm hiệu năng mô hình.

3. Tái lập kết quả

CI/CD giúp đảm bảo mô hình có thể được dựng lại và huấn luyện lại đúng cách, cho phép tái lập kết quả. Môi trường, quản lý phiên bản mô hình và dữ liệu, cùng cấu hình đều được mã hóa.

4. Kiểm thử và giám sát

CI/CD cho phép kiểm thử tự động mô hình mới trước khi triển khai để phát hiện vấn đề. Nó cũng hỗ trợ giám sát mô hình sau triển khai thông qua tích hợp với các công cụ theo dõi.

5. Lặp nhanh hơn

Các phiên bản mô hình mới hoặc thí nghiệm có thể được huấn luyện, kiểm thử và triển khai nhanh chóng theo cách tự động với CI/CD. Điều này tăng tốc phát triển và cải thiện hệ thống ML.

6. Khả năng mở rộng

Khi dự án ML tăng về quy mô và độ phức tạp, quản lý toàn bộ vòng đời thủ công trở nên bất khả thi. Pipeline CI/CD mang lại giải pháp có thể mở rộng để xử lý khối lượng dữ liệu lớn, nhiều mô hình và phụ thuộc đa dạng mà vẫn đảm bảo hiệu quả và tin cậy.

Mô tả dự án

Trong hướng dẫn này, chúng ta sẽ đi qua quy trình thiết lập tài khoản và môi trường, tạo pipeline CI/CD và tối ưu hóa toàn bộ quy trình.

Chúng ta sẽ dùng pipeline scikit-learn để huấn luyện thuật toán rừng ngẫu nhiên và xây dựng bộ phân loại thuốc. Sau khi huấn luyện, chúng ta sẽ tự động hóa quá trình đánh giá bằng CML. Cuối cùng, chúng ta sẽ xây dựng và triển khai ứng dụng web lên Hugging Face Hub.

Từ huấn luyện đến đánh giá, toàn bộ quy trình sẽ được tự động hóa bằng GitHub Actions. Tất cả những gì bạn cần làm là đẩy mã lên kho GitHub, và trong vòng hai phút, mô hình sẽ được cập nhật trên Hugging Face cùng ứng dụng, mô hình và kết quả mới nhất.

CI/CD pipeline

Nếu bạn muốn học thêm qua bài tập tương tác, hãy thử khóa CI/CD for Machine Learning của DataCamp để nâng tầm phát triển machine learning với GitHub Actions và Data Version Control.

Thiết lập ban đầu

Trong phần này, chúng ta sẽ tạo kho GitHub, các tệp và thư mục cần thiết, cùng một Space trên Hugging Face.

Kho GitHub

Nhấp nút “+” ở góc trên bên phải trang chính GitHub và chọn “New repository”.

Thêm tên và mô tả kho, chọn tệp README và đặt .gitignore là Python.

image22.png

Sau khi tạo kho, chúng ta cần sao chép URL của nó. Sau đó, mở terminal hoặc bash và điều hướng đến thư mục nơi bạn muốn lưu thư mục dự án.

Cuối cùng, nhân bản kho bằng cách chạy lệnh sau:

git clone https://github.com/kingabzpro/CICD-for-Machine-Learning.git

Để bắt đầu, hãy dùng IDE ưa thích để mở kho cục bộ. Chúng tôi khuyến nghị dùng VSCode cho dự án này. Khi khởi chạy IDE, bạn sẽ thấy không gian làm việc VSCode chứa các tệp như README và LICENSE.

Hugging Face Spaces

Hãy tạo một Hugging Face Space mà chúng ta sẽ dùng để triển khai ứng dụng kèm tệp mô hình.

1. Nhấp vào ảnh đại diện và chọn "New Space".

image20.png

2. Thêm tên Space, giấy phép, loại SDK và tạo Space.

image21.png

3. Để chỉnh sửa tệp README.md, nhấp vào ba chấm ở góc trên bên trái, chọn Files và thực hiện các chỉnh sửa cần thiết.

image3.png

4. Chúng ta sẽ sao chép metadata từ tệp README của Space và dán vào tệp README cục bộ sẽ nằm trong thư mục App.

Các tệp thiết yếu

Chúng ta cần tạo sẵn thư mục và tệp cần thiết trước khi thử nghiệm và xây dựng pipeline. Điều này sẽ giúp giữ không gian làm việc gọn gàng về lâu dài.

Tạo thư mục

  1. App: để thêm tệp bộ phân loại ứng dụng web, tệp README của app kèm metadata và requirement.txt để cài đặt các gói cần thiết.
  2. Data: cho tất cả tệp CSV.
  3. Model: cho các tệp mô hình đã huấn luyện.
  4. Results: để lưu metric và kết quả thành tệp PNG.

Thư mục App

Tạo tệp Python tên drug_app.py, cùng tệp README.md và requirements.txt, rồi chuyển tất cả vào thư mục App. Điều này giúp tổ chức tốt hơn các tệp cần thiết để chạy ứng dụng.

Tiếp theo, hãy chỉnh sửa tệp README.md trong thư mục App và đảm bảo tất cả metadata về phiên bản đã được cập nhật phù hợp. Nhờ vậy bạn có thể dễ dàng trỏ đến vị trí tệp ứng dụng, thay đổi màu sắc, đặt phiên bản SDK và thêm thông tin giấy phép.

---
title: Drug Classification
emoji: 💊
colorFrom: yellow
colorTo: red
sdk: gradio
sdk_version: 4.16.0
app_file: drug_app.py
pinned: false
license: apache-2.0
---

Chỉnh sửa tệp requirement.txt trong thư mục App bằng cách bổ sung các gói Python còn thiếu:

scikit-learn
skops

Lưu ý: các tệp requirement và README sẽ khác nhau giữa kho GitHub và Hugging Face Space.

Thư mục Data

Tải bộ dữ liệu Drug Classification từ Kaggle, giải nén tệp CSV và chuyển vào thư mục Data.

Thư mục Model và Results

Cả hai thư mục Model và Results sẽ để trống vì chúng sẽ được điền bởi script Python chúng ta chạy.

Các tệp trong kho

  1. Tạo Makefile để đơn giản hóa việc chạy script trong workflow GitHub Action.
  2. Tạo Jupyter Notebook tên notebook.ipynb. Trong notebook này, chúng ta sẽ thử nghiệm thuật toán và pipeline xử lý.
  3. Tạo tệp requirements.txt. Tệp này dùng để thiết lập môi trường khi chạy các job CI.
  4. Tạo tệp train.py. Tệp này chứa mã Python để nạp và xử lý dữ liệu, cũng như huấn luyện, đánh giá, và lưu mô hình cùng các chỉ số hiệu năng.

Thư mục dự án của chúng ta sẽ trông như sau:

image6.png

Huấn luyện và đánh giá mô hình phân loại thuốc

Ở phần này, chúng ta sẽ thử nghiệm viết mã Python để xử lý dữ liệu và huấn luyện mô hình bằng pipeline scikit-learn. Sau đó, chúng ta sẽ đánh giá và lưu kết quả cùng mô hình.

Nạp bộ dữ liệu

Chúng ta sẽ dùng pandas để nạp tệp CSV, xáo trộn bằng hàm sample và hiển thị ba dòng đầu.

import pandas as pd

drug_df = pd.read_csv("Data/drug.csv")
drug_df = drug_df.sample(frac=1)
drug_df.head(3)

image24.png

Chia tập train và test

Tạo biến phụ thuộc và biến độc lập. Sau đó chia thành tập huấn luyện và kiểm thử. Điều này giúp bạn đánh giá hiệu năng mô hình.

from sklearn.model_selection import train_test_split

X = drug_df.drop("Drug", axis=1).values
y = drug_df.Drug.values

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=125
)

Pipeline Machine Learning

Chúng ta sẽ xây dựng pipeline xử lý bằng ColumnTransformer, chuyển giá trị phân loại thành số, điền giá trị khuyết và chuẩn hóa các cột số.

Sau đó, chúng ta sẽ tạo pipeline huấn luyện để lấy dữ liệu đã biến đổi và huấn luyện bộ phân loại rừng ngẫu nhiên.

Cuối cùng, chúng ta sẽ huấn luyện mô hình.

Nhờ dùng pipeline, chúng ta đảm bảo được khả năng tái lập, tính mô-đun và sự rõ ràng trong mã.

from sklearn.compose import ColumnTransformer
from sklearn.ensemble import RandomForestClassifier
from sklearn.impute import SimpleImputer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OrdinalEncoder, StandardScaler

cat_col = [1,2,3]
num_col = [0,4]

transform = ColumnTransformer(
    [
        ("encoder", OrdinalEncoder(), cat_col),
        ("num_imputer", SimpleImputer(strategy="median"), num_col),
        ("num_scaler", StandardScaler(), num_col),
    ]
)
pipe = Pipeline(
    steps=[
        ("preprocessing", transform),
        ("model", RandomForestClassifier(n_estimators=100, random_state=125)),
    ]
)
pipe.fit(X_train, y_train)

image7.png

Đánh giá mô hình

Đánh giá hiệu năng mô hình bằng cách tính cả độ chính xác và điểm F1.

from sklearn.metrics import accuracy_score, f1_score

predictions = pipe.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
f1 = f1_score(y_test, predictions, average="macro")

print("Accuracy:", str(round(accuracy, 2) * 100) + "%", "F1:", round(f1, 2))

Mô hình của chúng ta hoạt động rất tốt.

Accuracy: 95.0% F1: 0.91

Tạo tệp chỉ số và lưu vào thư mục Results.

with open("Results/metrics.txt", "w") as outfile:
    outfile.write(f"\nAccuracy = {accuracy.round(2)}, F1 Score = {f1.round(2)}.")

Tiếp theo, chúng ta sẽ tạo ma trận nhầm lẫn và lưu ảnh vào thư mục Results.

import matplotlib.pyplot as plt
from sklearn.metrics import ConfusionMatrixDisplay, confusion_matrix

cm = confusion_matrix(y_test, predictions, labels=pipe.classes_)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=pipe.classes_)
disp.plot()
plt.savefig("Results/model_results.png", dpi=120)

image15.png

Lưu mô hình

Bây giờ, chúng ta sẽ lưu mô hình bằng gói Python skops. Điều này giúp lưu cả pipeline và mô hình scikit-learn.

import skops.io as sio

sio.dump(pipe, "Model/drug_pipeline.skops")

Bạn có thể chỉ cần nạp toàn bộ pipeline và nó sẽ hoạt động ngay mà không cần xử lý dữ liệu hay chỉnh sửa mã.

sio.load("Model/drug_pipeline.skops", trusted=True)

image7.png

Sao chép và dán toàn bộ mã vào tệp 'train.py'. Đây sẽ là script huấn luyện chuẩn hóa chạy trong workflow CI mỗi khi có thay đổi về dữ liệu hoặc mã.

Trước khi bắt đầu sự nghiệp kỹ sư MLOps, hãy đọc MLOps Roadmap: A Complete Career Guide.

Các bước xây dựng pipeline Tích hợp liên tục

Trong phần này, chúng ta sẽ tìm hiểu CML, Makefile và thiết lập workflow GitHub Actions để tự động hóa huấn luyện, đánh giá và quản lý phiên bản cho dự án.

CI Pipeline

CI Pipeline

CML

Continuous Machine Learning (CML) là thư viện mã nguồn mở cho phép bạn triển khai tích hợp liên tục trong dự án machine learning. Chúng ta sẽ sử dụng GitHub Action "iterative/setup-cml" dùng các hàm CML trong workflow để tự động sinh báo cáo đánh giá mô hình.

Điều này có nghĩa là gì? Mỗi khi bạn đẩy thay đổi lên GitHub, hệ thống sẽ tạo báo cáo dưới phần commit và gửi email cho bạn với các chỉ số hiệu năng và ma trận nhầm lẫn.

Makefile

Makefile là tệp gồm tập hợp chỉ dẫn được lệnh make dùng để tự động hóa các tác vụ như biên dịch mã, chạy kiểm thử, thiết lập môi trường, tiền xử lý dữ liệu, huấn luyện và đánh giá mô hình, cũng như triển khai mô hình.

Chúng ta có thể dùng lệnh make để chạy nhiều script nhằm giúp tệp workflow CI gọn gàng và đơn giản. Makefile chứa tên tập lệnh và script để chạy các lệnh đó.

Đây là Makefile của chúng ta:

install:
    pip install --upgrade pip &&\
        pip install -r requirements.txt

format:
    black *.py

train:
    python train.py

eval:
    echo "## Model Metrics" > report.md
    cat ./Results/metrics.txt >> report.md
   
    echo '\n## Confusion Matrix Plot' >> report.md
    echo '![Confusion Matrix](./Results/model_results.png)' >> report.md
   
    cml comment create report.md

Chúng ta có các lệnh để cài đặt gói Python (install), định dạng mã (format), chạy huấn luyện (train) và tạo báo cáo CML (eval).

image23.png

Sau đó, chúng ta sẽ thêm thay đổi, tạo commit và đẩy thay đổi lên máy chủ từ xa của GitHub.

git commit -am "new changes"
git push origin main

GitHub Actions

Để tự động hóa huấn luyện và đánh giá, chúng ta cần tạo workflow GitHub Action. Để làm điều này, điều hướng đến thẻ “Actions” trên kho kingabzpro/CICD-for-Machine-Learning và nhấp vào dòng chữ màu xanh “set up a workflow yourself.”

image28.png

Đổi tên tệp .yml thành “ci” và bắt đầu thêm lệnh GitHub Action.

  1. Thêm tên workflow.
  2. Đặt trigger để workflow chạy khi có push hoặc pull request vào nhánh main hoặc chạy thủ công.
  3. Xây dựng môi trường cho job. Chúng ta sẽ tải máy chủ Linux mới nhất.
  4. Kích hoạt các GitHub Actions sẽ dùng trong workflow.
  5. Bắt đầu thêm các bước chạy khác nhau bằng các lệnh make.
  6. Kích hoạt workflow bằng cách commit thay đổi. GitHub Action sẽ chạy tất cả bước trong pipeline lần lượt.

image10.png

Bạn sẽ gặp lỗi trong lúc tìm hiểu lỗi và cú pháp, vì vậy điều quan trọng là đọc Workflow syntax for GitHub Actions trước khi bắt tay vào GitHub Action.

image12.png

Chúng ta đã khắc phục thành công mọi lỗi và vấn đề của workflow, và giờ đã có phiên bản cuối của tệp `ci.yml` chạy trơn tru.

Như bạn thấy, workflow sẽ thiết lập môi trường và tải các action cần thiết trước. Sau đó, chúng ta chạy từng bước một bằng lệnh make, lệnh này sẽ gọi nhiều script Python và Bash ở hậu trường.

Tuy nhiên, có hai điều quan trọng khi làm việc với CML actions. Thứ nhất, chúng ta cần đặt quyền ghi ngay từ đầu. Thứ hai, cung cấp GitHub token cho job CML, có thể truy cập qua secrets.

name: Continuous Integration
on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  workflow_dispatch:
  
permissions: write-all
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: iterative/setup-cml@v2
      - name: Install Packages
        run: make install
      - name: Format
        run: make format
      - name: Train
        run: make train
      - name: Evaluation
        env:
          REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: make eval

Các chỉ số và kết quả hiển thị dưới phần thông điệp commit.

image2.png

Bạn cũng sẽ nhận email với kết quả.

image27.png

Lưu kết quả vào nhánh mới

Chúng ta đang tạo báo cáo đánh giá, nhưng chưa quản lý phiên bản mô hình và kết quả. Để lưu thay đổi, chúng ta sẽ tạo nhánh mới tên "update" và đẩy mô hình cùng kết quả cập nhật lên đó.

Tạo nhánh "update" bằng cách nhấp vào nút nhánh main, gõ "update" cho tên nhánh, rồi chọn "create branch update from main".

image1.png

Tạo Repository Secret

Để commit và đẩy thay đổi bằng lệnh Git, chúng ta cần cung cấp tên người dùng và email. Bạn có thể thêm trực tiếp, nhưng dùng GitHub secrets là lựa chọn tốt hơn. Thực hiện như sau:

  1. Vào settings và nhấp "Secrets and variables".
  2. Chọn "Actions" và nhấp nút xanh "New repository secret."
  3. Thêm tên và giá trị. Tương tự thiết lập biến môi trường trên máy cục bộ.

Vậy là xong!

image25.png

Cập nhật Makefile và ci.yml

Để tự động lưu thay đổi vào nhánh mới, chúng ta cần cập nhật Makefile và ci.yml.

Makefile:

Chúng ta cấu hình tên người dùng và email, commit thay đổi và lưu vào nhánh update.

update-branch:
	git config --global user.name $(USER_NAME)
	git config --global user.email $(USER_EMAIL)
	git commit -am "Update with new results"
	git push --force origin HEAD:update

ci.yml:

Makefile đang dùng biến môi trường để chạy script. Vì vậy, trước tiên chúng ta phải lấy giá trị biến môi trường từ secrets, sau đó đặt biến môi trường ở cuối lệnh make.

    - name: Update Branch
        env:
          NAME: ${{ secrets.USER_NAME }}
          EMAIL: ${{ secrets.USER_EMAIL }}
        run: make update-branch USER_NAME=$NAME USER_EMAIL=$EMAIL

Khi bạn đã cập nhật các tệp và đẩy thay đổi lên nhánh main, bạn sẽ thấy “phép màu” diễn ra theo thời gian thực. Một báo cáo phân tích sẽ được tạo, cùng mô hình cập nhật có thể triển khai lên Hugging Face ở phần triển khai liên tục.

Các bước xây dựng pipeline Triển khai liên tục

Trong phần Triển khai liên tục, chúng ta sẽ tìm hiểu cách tự động hóa việc triển khai cả mô hình và ứng dụng. Quy trình gồm kéo mô hình và tệp ứng dụng đã cập nhật từ nhánh `update`, đăng nhập Hugging Face CLI bằng token, đẩy tệp mô hình và ứng dụng, và cuối cùng triển khai ứng dụng.

CD Pipeline

Xây dựng ứng dụng Gradio

Để triển khai và truy cập mô hình, chúng ta cần tạo một ứng dụng Gradio. Ứng dụng này sẽ bao gồm:

  1. Nạp pipeline và mô hình scikit-learn.
  2. Một hàm Python để dự đoán nhãn thuốc dựa trên đầu vào của người dùng.
  3. Tạo giao diện nhập liệu với thanh trượt Gradio cho giá trị float và Gradio radio cho giá trị phân loại.
  4. Tạo dữ liệu mẫu để kiểm thử mô hình dễ dàng.
  5. Cung cấp tiêu đề ứng dụng, mô tả ngắn về tính năng và chức năng, cùng phần chân trang chứa thông tin liên quan.
  6. Chúng ta sẽ truyền tất cả biến này và hàm dự đoán vào hàm Interface của Gradio và khởi chạy.
  7. Để ứng dụng web trông hiện đại, chúng ta sẽ dùng chủ đề mềm mặc định.
import gradio as gr
import skops.io as sio

pipe = sio.load("./Model/drug_pipeline.skops", trusted=True)


def predict_drug(age, sex, blood_pressure, cholesterol, na_to_k_ratio):
    ""Predict drugs based on patient features.

    Args:
        age (int): Age of patient
        sex (str): Sex of patient 
        blood_pressure (str): Blood pressure level
        cholesterol (str): Cholesterol level
        na_to_k_ratio (float): Ratio of sodium to potassium in blood

    Returns:
        str: Predicted drug label
    """
    features = [age, sex, blood_pressure, cholesterol, na_to_k_ratio]
    predicted_drug = pipe.predict([features])[0]

    label = f"Predicted Drug: {predicted_drug}"
    return label


inputs = [
    gr.Slider(15, 74, step=1, label="Age"),
    gr.Radio(["M", "F"], label="Sex"),
    gr.Radio(["HIGH", "LOW", "NORMAL"], label="Blood Pressure"),
    gr.Radio(["HIGH", "NORMAL"], label="Cholesterol"),
    gr.Slider(6.2, 38.2, step=0.1, label="Na_to_K"),
]
outputs = [gr.Label(num_top_classes=5)]

examples = [
    [30, "M", "HIGH", "NORMAL", 15.4],
    [35, "F", "LOW", "NORMAL", 8],
    [50, "M", "HIGH", "HIGH", 34],
]


title = "Drug Classification"
description = "Enter the details to correctly identify Drug type?"
article = "This app is a part of the Beginner's Guide to CI/CD for Machine Learning. It teaches how to automate training, evaluation, and deployment of models to Hugging Face using GitHub Actions."


gr.Interface(
    fn=predict_drug,
    inputs=inputs,
    outputs=outputs,
    examples=examples,
    title=title,
    description=description,
    article=article,
    theme=gr.themes.Soft(),
).launch()

Mở terminal và chạy ứng dụng cục bộ để sửa lỗi trước khi đẩy thay đổi lên kho từ xa.

python ./App/drug_app.py 
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

Thiết lập token Hugging Face

Chúng ta sẽ tạo token Hugging Face và cung cấp cho script Makefile. Tuy nhiên, cần đảm bảo token được giữ bí mật và không bị lộ. Để làm vậy, chúng ta sẽ dùng GitHub secrets.

Trước hết, nhấp vào ảnh hồ sơ trên Hugging Face và chọn cài đặt. Tiếp theo, chọn mục "Access Tokens" và nhấp nút "New Token" để tạo token. Khi tạo token, đảm bảo nó có quyền ghi.

image11.png

Sao chép token và tạo Repository secret, tương tự như chúng ta đã làm với tên người dùng và email.

image14.png

CD workflow

Trong phần này, chúng ta sẽ thêm ba lệnh mới để tạo tệp và tạo một workflow GitHub khác tên "Continuous Deployment". Workflow này sẽ giúp tự động hóa việc kéo và triển khai tệp.

Makefile

  • Kéo mô hình và tệp kết quả đã cập nhật từ nhánh update và chuyển sang nhánh update.
  • Trước khi đăng nhập, cần cài Hugging Face CLI rồi đăng nhập bằng token.
  • Chúng ta sẽ đẩy thư mục App lên thư mục gốc của Space để có tệp Python, README và requirement.txt nhằm dựng môi trường và chạy ứng dụng.
  • Chúng ta cũng sẽ tải lên thư mục Model và Results.
  • Lệnh deploy sẽ chạy hf-login trước rồi đến push-hub.
hf-login:
    git pull origin update
    git switch update
    pip install -U "huggingface_hub[cli]"
    huggingface-cli login --token $(HF) --add-to-git-credential

push-hub:
    huggingface-cli upload kingabzpro/Drug-Classification ./App --repo-type=space --commit-message="Sync App files"
    huggingface-cli upload kingabzpro/Drug-Classification ./Model /Model --repo-type=space --commit-message="Sync Model"
    huggingface-cli upload kingabzpro/Drug-Classification ./Results /Metrics --repo-type=space --commit-message="Sync Model"

deploy: hf-login push-hub

Ứng dụng của chúng ta sẽ truy cập được mô hình, tệp ứng dụng và kết quả mới nhất, cho phép theo dõi thay đổi trong Space trên Hugging Face.

cd.yml

Để workflow thực sự là CI/CD, chúng ta cần tạo thêm tệp cd.yml tương tự ci.yml . Khi pipeline CI hoàn tất, nó sẽ kích hoạt workflow cd.yml bằng tham số on với workflow_run.

Workflow này sẽ dựng môi trường và thực thi lệnh make deploy bằng token Hugging Face để triển khai thay đổi mới nhất lên Hugging Face Hub.

name: Continuous Deployment
on:
  workflow_run:
    workflows: ["Continuous Integration"]
    types:
      - completed

  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Deployment To Hugging Face
        env:
          HF: ${{ secrets.HF }}
        run: make deploy HF=$HF

Khi chúng ta đẩy thay đổi lên nhánh main, nó sẽ bắt đầu với workflow CI.

image13.png

Sau khi workflow CI hoàn tất, workflow CD sẽ bắt đầu như bên dưới.

image5.png

Chúng ta có thể quan sát nhật ký trực tiếp của từng chức năng bằng cách chọn phần chạy trong bản dựng workflow. Các tệp đã được tải lên máy chủ Hugging Face thành công.

image4.png

Sau khi nhận tệp cập nhật, Hugging Face Space sẽ bắt đầu dựng môi trường và ứng dụng sẽ chạy trong vài giây.

image8.png

Ứng dụng Drug Classification của chúng ta chạy mượt mà và có giao diện đẹp mắt.

Hãy thử nhập các dữ liệu khác nhau để trải nghiệm hiệu năng của mô hình.

image26.png

Hình ảnh Nguồn

Kết luận

Hướng dẫn này phác thảo cách chúng ta đã tự động hóa quy trình huấn luyện, đánh giá, quản lý phiên bản và triển khai, đảm bảo mọi thay đổi về dữ liệu hoặc thuật toán sẽ tự động kích hoạt quy trình này mà không xảy ra lỗi. Cách tiếp cận này giúp xây dựng ứng dụng nhanh, có khả năng mở rộng và sẵn sàng cho sản xuất.

Lưu ý rằng trong các dự án thực tế, chúng ta dùng nhiều công cụ MLOps để điều phối, quản lý phiên bản, triển khai và giám sát ứng dụng machine learning. Để tìm hiểu thêm, hãy xem Top MLOps Tools You Need to Know, tổng hợp các công nghệ phổ biến mà các công ty công nghệ lớn dùng để tinh gọn ứng dụng machine learning của họ.

Để tối ưu pipeline CI/CD, điều quan trọng là học các công cụ như Docker, Kubernetes, Azure Cloud và các công nghệ MLOps khác. Hãy theo dõi hướng dẫn Machine Learning, Pipelines, Deployment, and MLOps để làm quen với thực tiễn chuẩn ngành và thực hiện các dự án nâng cao.

Tài nguyên dự án


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Là một nhà khoa học dữ liệu được chứng nhận, tôi đam mê tận dụng công nghệ tiên tiến để tạo ra các ứng dụng học máy đổi mới. Với nền tảng vững chắc về nhận dạng giọng nói, phân tích và báo cáo dữ liệu, MLOps, AI hội thoại và NLP, tôi đã rèn giũa kỹ năng phát triển các hệ thống thông minh có thể tạo ra tác động thực sự. Bên cạnh chuyên môn kỹ thuật, tôi cũng là một người truyền đạt tốt, có khả năng chắt lọc các khái niệm phức tạp thành ngôn ngữ rõ ràng, súc tích. Nhờ đó, tôi trở thành một blogger được nhiều người quan tâm trong lĩnh vực khoa học dữ liệu, chia sẻ góc nhìn và kinh nghiệm với cộng đồng các chuyên gia dữ liệu ngày càng lớn. Hiện tại, tôi tập trung vào sáng tạo và biên tập nội dung, làm việc với các mô hình ngôn ngữ lớn để phát triển nội dung mạnh mẽ và hấp dẫn, giúp doanh nghiệp và cá nhân tận dụng tối đa dữ liệu của mình.

Chủ đề
Machine Learning
Python

Bắt đầu hành trình Machine Learning của bạn ngay hôm nay!

Khóa học

Tìm hiểu Machine Learning

2 giờ
313.7K
Giới thiệu về học máy mà không cần lập trình.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm