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

Hướng dẫn Metaflow cho người mới bắt đầu: Xây dựng và mở rộng quy trình dữ liệu

Hướng dẫn thân thiện cho người mới bắt đầu này sẽ giúp bạn nắm vững những điều cơ bản của Metaflow. Tìm hiểu cách framework đơn giản hóa việc xây dựng và mở rộng workflow khoa học dữ liệu.
Đã cập nhật 5 thg 10, 2026  · 9 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Metaflow là một framework mạnh mẽ để xây dựng và quản lý workflow dữ liệu. Trong hướng dẫn này, bạn sẽ học cách bắt đầu. Cụ thể, chúng ta sẽ đề cập: 

  • Quy trình cài đặt
  • Xây dựng một workflow cơ bản
  • Các khái niệm cốt lõi
  • Thực tiễn tốt nhất

Kết thúc bài viết, bạn sẽ có kỹ năng cần thiết để tinh gọn và mở rộng workflow của mình một cách hiệu quả!

Metaflow là gì?

Hình ảnh hiển thị sơ đồ kiến trúc và các khối thành phần của Metaflow

Nguồn: Vì sao Metaflow? 

Metaflow là một framework Python được thiết kế để hỗ trợ quản lý dự án khoa học dữ liệu. Netflix ban đầu phát triển công cụ này để giúp nhà khoa học dữ liệu và kỹ sư học máy làm việc hiệu quả hơn. Nó đạt được mục tiêu này bằng cách đơn giản hóa các tác vụ phức tạp, như điều phối workflow, đảm bảo quy trình vận hành trơn tru từ đầu đến cuối. 

Các tính năng chính của Metaflow gồm tự động quản lý phiên bản dữ liệu, giúp theo dõi thay đổi của workflow, và hỗ trợ workflow có thể mở rộng, cho phép xử lý tập dữ liệu lớn hơn và các tác vụ phức tạp hơn. 

Một ưu điểm khác của Metaflow là tích hợp dễ dàng với AWS. Điều này có nghĩa người dùng có thể tận dụng tài nguyên đám mây cho lưu trữ và sức mạnh tính toán. Ngoài ra, API Python thân thiện giúp cả người mới bắt đầu lẫn người dùng giàu kinh nghiệm đều dễ tiếp cận.

Hãy bắt đầu thiết lập nào. 

Thiết lập Metaflow

Metaflow khuyến nghị người dùng cài đặt Python 3 thay vì Python 2.7 cho các dự án mới. Tài liệu nêu rằng “Python 3 ít lỗi hơn và được hỗ trợ tốt hơn so với Python 2.7 đã ngừng hỗ trợ.”

Bước tiếp theo là tạo môi trường ảo để quản lý phụ thuộc của dự án. Chạy lệnh sau để thực hiện: 

python -m venv venv
source venv/bin/activate

Lệnh này sẽ tạo và kích hoạt môi trường ảo. Sau khi kích hoạt, bạn đã sẵn sàng cài đặt Metaflow. 

Metaflow có sẵn dưới dạng gói Python cho MacOS và Linux. Phiên bản mới nhất có thể cài đặt từ kho Metaflow trên Github hoặc PyPi bằng cách chạy lệnh sau: 

pip install metaflow

Đáng tiếc là tại thời điểm viết bài, Metaflow chưa hỗ trợ gốc cho người dùng Windows. Tuy nhiên, người dùng Windows 10 có thể sử dụng WSL (Windows Subsystem for Linux) để cài đặt Metaflow, cho phép chạy môi trường Linux ngay trong hệ điều hành Windows. Hay xem tài liệu để có hướng dẫn từng bước cài đặt Metaflow trên Windows 10. 

Tích hợp AWS (Tùy chọn)

Metaflow cung cấp tích hợp liền mạch với AWS, cho phép người dùng mở rộng workflow bằng hạ tầng đám mây. Để tích hợp AWS, bạn cần thiết lập thông tin xác thực AWS của mình.

Lưu ý: Các bước này giả định bạn đã có tài khoản AWS và đã cài AWS CLI. Để biết chi tiết, hãy làm theo hướng dẫn trong tài liệu AWS. 

  1. Đầu tiên, cài AWS CLI bằng cách chạy:
pip install awscli
  1. Cấu hình AWS bằng cách chạy
aws configure

Sau đó, bạn sẽ được nhắc nhập AWS Access Key ID và Secret Access Key — đây là thông tin xác thực mà AWS CLI dùng để xác thực yêu cầu của bạn tới AWS. Lưu ý rằng bạn cũng có thể được yêu cầu nhập vùng (region) và định dạng đầu ra.

Khi đã nhập các thông tin này, xong rồi! Metaflow sẽ tự động sử dụng thông tin xác thực AWS của bạn để chạy workflow. 

Xây dựng Workflow đầu tiên với Metaflow

Giờ Metaflow đã được thiết lập, đã đến lúc xây dựng workflow đầu tiên. Trong phần này, tôi sẽ hướng dẫn bạn những điều cơ bản để tạo một flow, chạy nó và hiểu cách nhiệm vụ và bước được tổ chức trong Metaflow. 

Kết thúc phần này, bạn sẽ có một workflow xử lý dữ liệu và thực hiện các thao tác đơn giản. Bắt đầu thôi!

Tổng quan về một flow trong Metaflow

Metaflow sử dụng mô hình lập trình dataflow, đại diện chương trình như một đồ thị có hướng của các phép toán. Cách tiếp cận này lý tưởng để xây dựng pipeline xử lý dữ liệu, đặc biệt trong machine learning.

Trong Metaflow, đồ thị các phép toán được gọi là flow. Một flow gồm loạt tác vụ được chia thành các bước. Lưu ý mỗi bước có thể xem là một phép toán được biểu diễn như một nút, với các chuyển tiếp giữa các bước đóng vai trò là các cạnh của đồ thị.

Hình ảnh hiển thị một chuyển tiếp tuyến tính cơ bản trong Metaflow

Một chuyển tiếp tuyến tính cơ bản trong Metaflow | Nguồn: Tài liệu Metaflow

Có một vài quy tắc cấu trúc cho flow trong Metaflow. Ví dụ, mọi flow phải có bước start và bước end. Khi một flow được thực thi, gọi là một run, nó bắt đầu ở bước start và được coi là thành công nếu đến được bước end mà không gặp lỗi. 

Những gì diễn ra giữa các bước start và end là do bạn quyết định – như bạn sẽ thấy ở phần tiếp theo. 

Viết flow đầu tiên của bạn

Dưới đây là một flow đơn giản để bắt đầu. Lưu ý: Có thể chạy mã trong DataLab.

from metaflow import FlowSpec, step

class MyFirstFlow(FlowSpec):
    @step
    def start(self):
        print("Starting the flow!")
        self.data = [1, 2, 3, 4, 5]  # Example dataset
        self.next(self.process_data)
    @step
    def process_data(self):
        self.processed_data = [x * 2 for x in self.data]  # Simple data processing
        print("Processed data:", self.processed_data)
        self.next(self.end)
    @step
    def end(self):
        print("Flow is complete!")

if __name__ == '__main__': 
    MyFirstFlow()

Trong flow này:

  • Bước start() khởi tạo workflow và định nghĩa một tập dữ liệu.
  • Bước process_data() xử lý dữ liệu bằng cách nhân đôi mỗi phần tử.
  • Bước end() hoàn tất flow.

Mỗi bước sử dụng decorator @step, và bạn định nghĩa chuỗi flow bằng self.next() để nối các bước.

Chạy flow của bạn

Sau khi viết flow, lưu lại dưới tên my_first_flow.py. Chạy từ dòng lệnh bằng:

py -m my_first_flow.py run

Một tính năng mới được thêm vào Metaflow 2.12 cho phép phát triển và thực thi flow trong notebook. 

Để thực thi một flow trong một ô xác định, bạn chỉ cần thêm một dòng NBRunner ở dòng cuối cùng của cùng ô đó. Ví dụ:

from metaflow import FlowSpec, step, NBRunner

class MyFirstFlow(FlowSpec):
    @step
    def start(self):
        print("Starting the flow!")
        self.data = [1, 2, 3, 4, 5]  # Example dataset
        self.next(self.process_data)
    @step
    def process_data(self):
        self.processed_data = [x * 2 for x in self.data]  # Simple data processing
        print("Processed data:", self.processed_data)
        self.next(self.end)
    @step
    def end(self):
        print("Flow is complete!")

run = NBRunner(MyFirstFlow).nbrun()

Nếu bạn gặp lỗi sau:

“Metaflow could not determine your user name based on environment variables ($USERNAME etc.)”

Hãy thêm đoạn sau vào mã trước khi thực thi Metaflow:

import os
if os.environ.get("USERNAME") is None:
    os.environ["USERNAME"] = "googlecolab"

Trong cả hai trường hợp, Metaflow sẽ thực thi flow từng bước. Cụ thể, nó sẽ hiển thị đầu ra của mỗi bước trong terminal như sau: 

Hình ảnh hiển thị đầu ra của notebook Colab khi chạy một flow Metaflow

Đầu ra từ đoạn mã trên | Nguồn: Hình ảnh của tác giả

Các khái niệm cốt lõi trong Metaflow

Hiểu các khái niệm cốt lõi của Metaflow là điều thiết yếu để xây dựng workflow dữ liệu hiệu quả và có thể mở rộng. Trong phần này, tôi sẽ đề cập ba khái niệm nền tảng: 

  • Các bước và phân nhánh
  • Artifact dữ liệu
  • Quản lý phiên bản 

Các yếu tố này là xương sống của cấu trúc và việc thực thi workflow trong Metaflow, giúp bạn quản lý quy trình phức tạp một cách dễ dàng.

Các bước và phân nhánh

Chúng ta đã đề cập ngắn gọn về các bước ở phần trước, nhưng để rõ ràng, ta sẽ nhắc lại. Điều quan trọng nhất cần hiểu về workflow Metaflow là chúng được xây dựng xoay quanh các bước. 

Mỗi bước đại diện cho một tác vụ riêng lẻ trong workflow. Nói cách khác, mỗi bước thực hiện một thao tác cụ thể (ví dụ: tải dữ liệu, xử lý, mô hình hóa, v.v.). 

Ví dụ chúng ta tạo ở phần “Viết flow đầu tiên” là một phép biến đổi tuyến tính. Bên cạnh các bước tuần tự, Metaflow cũng cho phép phân nhánh workflow. Phân nhánh cho phép bạn chạy nhiều tác vụ song song bằng cách tạo các nhánh thực thi riêng biệt. 

Hình ảnh hiển thị ví dụ về phân nhánh trong Metaflow

Ví dụ về phân nhánh | Nguồn: Tài liệu Metaflow

Lợi ích lớn nhất của phân nhánh là hiệu năng. Phân nhánh cho phép Metaflow thực thi nhiều bước trên nhiều lõi CPU hoặc các instance trên đám mây. 

Một phân nhánh trông như sau trong mã: 

from metaflow import FlowSpec, step, NBRunner

class BranchFlow(FlowSpec):
    @step
    def start(self):
        print("Starting the flow!")
        self.data = [1, 2, 3, 4, 5]  # Example dataset
        self.next(self.split)
    @step
    def split(self):
        self.next(self.branch1, self.branch2)
  
    @step
    def branch1(self):
        # Code for branch 1
        print("This is branch 1")
        self.next(self.join)
    
    @step
    def branch2(self):
        # Code for branch 2
        print("This is branch 2")
        self.next(self.join)
  
    @step
    def join(self, inputs):
        # Merging branches back
        print("Branches joined.")
        self.next(self.end)
  
    @step
    def end(self):
        print("Flow is complete!")

run = NBRunner(BranchFlow).nbrun()

💡Tóm tắt nhanh: Phân nhánh cho phép người dùng thiết kế workflow phức tạp có thể xử lý đồng thời nhiều tác vụ. 

Artifact dữ liệu

Các artifact dữ liệu là các biến cho phép bạn lưu trữ và truyền dữ liệu giữa các bước trong workflow. Các artifact này duy trì đầu ra của một bước để dùng cho bước tiếp theo — đây là cách dữ liệu được cung cấp cho các bước sau. 

Về cơ bản, khi bạn gán dữ liệu vào self trong một bước của lớp Metaflow, bạn đang lưu nó như một artifact, và artifact này có thể được truy cập bởi bất kỳ bước nào khác trong flow (xem chú thích trong mã).

class ArtifactFlow(FlowSpec):
    @step
    def start(self):
        # Step 1: Initializing data
        print("Starting the flow!")
        self.data = [1, 2, 3, 4, 5]  # Example dataset saved as an artifact
        self.next(self.process_data)
    @step
    def process_data(self):
        # Step 2: Processing the data from the 'start' step
        self.processed_data = [x * 2 for x in self.data]  # Processing artifact data
        print("Processed data:", self.processed_data)
        self.next(self.save_results)
    @step
    def save_results(self):
        # Step 3: Saving the processed data artifact
        self.results = sum(self.processed_data)  # Saving final result as an artifact
        print("Sum of processed data:", self.results)
        self.next(self.end)
    @step
    def end(self):
        # Final step
        print("Flow is complete!")
        print(f"Final result: {self.results}")  # Accessing artifact in final step

Vì sao artifact là khái niệm cốt lõi của Metaflow? Bởi chúng có nhiều công dụng:

  • Tự động hóa quản lý luồng dữ liệu, loại bỏ nhu cầu tải và lưu dữ liệu thủ công.
  • Cho phép tính bền vững (sẽ nói ngay sau), tức cho phép phân tích sau này với Client API, trực quan hóa bằng Cards và tái sử dụng giữa các flow.
  • Tính nhất quán giữa môi trường cục bộ và đám mây. Điều này loại bỏ nhu cầu truyền dữ liệu tường minh.
  • Cho phép người dùng kiểm tra dữ liệu trước khi có lỗi và tiếp tục thực thi sau khi sửa lỗi.

Quản lý phiên bản và lưu trữ

Metaflow tự động xử lý quản lý phiên bản cho workflow của bạn. Nghĩa là mỗi lần flow được thực thi, nó được theo dõi như một lần chạy (run) riêng biệt. Nói cách khác, mỗi run có phiên bản của riêng nó, cho phép bạn dễ dàng xem lại và tái hiện các lần chạy trước. 

Metaflow làm điều này bằng cách gán các định danh duy nhất cho mỗi run và lưu giữ dữ liệu cùng artifact từ lần thực thi đó. Cơ chế lưu trữ này đảm bảo không mất dữ liệu giữa các lần chạy. Workflow trước đây có thể được truy cập và kiểm tra dễ dàng, và các bước cụ thể có thể được chạy lại nếu cần. Nhờ đó, gỡ lỗi và phát triển lặp trở nên hiệu quả hơn nhiều, đồng thời việc duy trì khả năng tái lập được đơn giản hóa. 

Ví dụ thực tiễn: Huấn luyện một mô hình Machine Learning

Trong phần này, tôi sẽ hướng dẫn bạn sử dụng Metaflow để huấn luyện một mô hình machine learning. Bạn sẽ học cách:

  • Định nghĩa một workflow để tải dữ liệu
  • Huấn luyện một mô hình machine learning 
  • Theo dõi kết quả

Kết thúc phần này, bạn sẽ hiểu rõ hơn cách dùng Metaflow để cấu trúc và chạy workflow machine learning một cách hiệu quả. Bắt đầu thôi!

Để bắt đầu, chúng ta sẽ tạo một flow cơ bản tải một tập dữ liệu, tiến hành huấn luyện và xuất ra kết quả của mô hình. 

Lưu ý: Mã có thể được chạy trong DataLab.

from metaflow import FlowSpec, step, Parameter, NBRunner

class TrainModelFlow(FlowSpec):
    @step
    def start(self):
        # Load and split the dataset
        print("Loading data...")
        self.data = [1, 2, 3, 4, 5]  # Replace with actual data loading logic
        self.labels = [0, 1, 0, 1, 0]  # Replace with labels
        self.next(self.train_model)
	   
    @step
    def train_model(self):
        # Training a simple model (e.g., linear regression)
        print("Training the model...")
        self.model = sum(self.data) / len(self.data)  # Replace with actual model training
        print(f"Model output: {self.model}")
        self.next(self.end)
	   
    @step
    def end(self):
        # Final step
        print("Training complete. Model ready for deployment!")f

Trong đoạn mã này, chúng ta định nghĩa ba bước:

  1. start(): Tải và chia tập dữ liệu. Trong thực tế, bạn sẽ tải dữ liệu từ nguồn thực (ví dụ: tệp hoặc cơ sở dữ liệu).
  2. train_model(): Mô phỏng việc huấn luyện mô hình. Ở đây sử dụng phép tính trung bình thay cho thuật toán machine learning thực sự, nhưng bạn có thể thay bằng bất kỳ mã huấn luyện nào bạn cần.
  3. end(): Đánh dấu kết thúc flow và cho biết mô hình đã sẵn sàng triển khai.

Sau khi bạn định nghĩa flow, có thể chạy bằng lệnh sau:

run = NBRunner(TrainModelFlow)
run.nbrun()

Lưu ý rằng đoạn mã này chỉ hoạt động trong notebook (toàn bộ mã phải nằm trong một ô).

Nếu bạn muốn chạy mã này như một script, hãy bỏ các lệnh NBRunner và thêm phần sau vào cuối script của bạn, rồi lưu lại (ví dụ: “metaflow_ml_model.py”): 

if __name__ == "__main__": 
    TrainModelFlow()

Sau đó, để chạy script, hãy chuyển đến dòng lệnh và chạy lệnh sau:

py -m metaflow_ml_model.py 

Metaflow tự động theo dõi mỗi lần chạy và cho phép bạn trực quan hóa kết quả thông qua Metaflow UI. 

Thực tiễn tốt nhất khi sử dụng Metaflow

Vậy làm thế nào để tận dụng tối đa các tính năng của Metaflow? Dưới đây là một vài thực tiễn tốt nhất giúp bạn đạt được điều đó đồng thời tối ưu workflow của mình: 

Bắt đầu với các flow nhỏ

Nếu bạn mới dùng Metaflow, hãy bắt đầu với các workflow đơn giản để làm quen với API của nó. Khởi đầu nhỏ sẽ giúp bạn hiểu framework hoạt động ra sao và xây dựng sự tự tin trước khi chuyển sang các dự án phức tạp hơn. Cách tiếp cận này giúp giảm đường cong học tập và đảm bảo nền tảng vững chắc.

Tận dụng UI của Metaflow để gỡ lỗi

Metaflow bao gồm một giao diện người dùng mạnh mẽ (user interface) có thể cực kỳ hữu ích để gỡ lỗi và theo dõi workflow của bạn. Hãy dùng UI để giám sát các lần chạy, kiểm tra đầu ra của từng bước và xác định các vấn đề có thể phát sinh. Việc trực quan hóa dữ liệu và log giúp bạn dễ dàng phát hiện và khắc phục sự cố trong quá trình thực thi flow.

Tận dụng AWS để mở rộng

Khi bạn mới cài đặt Metaflow, nó hoạt động ở chế độ cục bộ. Ở chế độ này, artifact và metadata được lưu trong thư mục cục bộ, và việc tính toán được chạy bằng các tiến trình cục bộ. Thiết lập này phù hợp cho nhu cầu cá nhân, nhưng nếu dự án của bạn có yếu tố cộng tác hoặc dữ liệu lớn, nên cấu hình Metaflow để sử dụng AWS nhằm có khả năng mở rộng tốt hơn. Tin tốt là Metaflow cung cấp tích hợp tuyệt vời với AWS.

Kết luận

Trong hướng dẫn này, chúng ta đã khám phá cách bắt đầu với Metaflow, từ cài đặt đến xây dựng workflow khoa học dữ liệu đầu tiên. Chúng ta đã đề cập các khái niệm cốt lõi, như định nghĩa bước, dùng artifact dữ liệu để truyền dữ liệu giữa các bước và quản lý phiên bản để theo dõi và tái hiện các lần chạy. Chúng ta cũng đã đi qua ví dụ thực tiễn về huấn luyện mô hình machine learning, minh họa cách định nghĩa, chạy và giám sát workflow. Cuối cùng, chúng ta đã đề cập một số thực tiễn tốt nhất để giúp bạn tận dụng tối đa Metaflow. 

Để tiếp tục học về MLOps, hãy xem các tài nguyên sau: 


Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Chủ đề
MLOps
Python

Tìm hiểu thêm về Python và machine learning với các khóa học này!

Khóa học

Machine Learning End-to-End

4 giờ
16.9K
Khám phá thế giới của học máy và tìm hiểu cách thiết kế, huấn luyện, triển khai các mô hình end-to-end.
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