Training Orchestrator: Unifying Model Training at Yelp

Bài tóm tắt Yelp 2026 4. Điều chỉnh Độ khó: Trung bình

Yelp · 2026 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc

Bối cảnh

  • Yelp đã có feature store cho dữ liệu tái lập được, thư viện training chung cho neural network và gradient-boosted tree, tích hợp Spark, và MLflow cho theo dõi và deploy model; còn thiếu phần ở giữa: cách chuẩn để điều phối việc train.
  • Trước đó mỗi team ML có batch, script, cấu hình training Spark riêng, chạy dạng script nguyên khối gắn chặt với runtime của cluster và trình launch job. Hệ quả: không chạy local được; khó test vì logic train lẫn với việc thực thi, mỗi thay đổi nhỏ là một vòng submit job, chờ build container, chờ cluster lên, nhìn nó hỏng; khung lặp lại và cấu hình trôi dần; kiểm tra rải rác nên lỗi lộ ra lúc khác nhau; mỗi team tự viết script theo dõi tiến độ và báo Slack (parse log, dễ gãy, bỏ sót lỗi); khó chạy lại đúng một lần train cũ.

Thay đổi chính

  • Training Orchestrator tách "chạy cái gì" khỏi "chạy thế nào":
    • Lớp cấu hình Pydantic: cấu hình orchestrator, cấu hình run MLflow, cấu hình từng step, cấu hình chung; mọi cấu hình được kiểm ngay lúc khởi tạo.
    • Ngữ cảnh Spark + MLflow được tiêm vào step, nên cùng định nghĩa step chạy được ở local, trong Jupyter hay ở production.
    • Lớp thực thi DAG: đọc phụ thuộc khai báo giữa các step, dựng DAG, chạy theo thứ tự topo, truyền output step trước làm input step sau, log tiến độ và metric vào MLflow ở mỗi step, gửi thông báo Slack nếu cấu hình.
  • Step = cặp settings + hàm: loại step định nghĩa bằng schema input/output (step ra dataset nối với step cần dataset, step ra model nối với step cần model), và orchestrator kiểm schema giữa các step, nên cấu hình sai lộ ra trong vài giây thay vì sau nhiều giờ train. Đổi cách tiền xử lý, so hai model song song, dùng lại hàm ở batch khác, đổi nguồn dữ liệu giữa dev và prod đều chỉ là đổi cấu hình hoặc tham chiếu hàm.
  • Kết quả, theo Yelp: test trở nên khả thi (chạy cả job local với dữ liệu mẫu, unit test từng step, cache input của step nạp dữ liệu làm integration test nhanh hơn); cấu hình là nguồn sự thật duy nhất (tự sinh cờ CLI, autocomplete); mỗi lần train ghi toàn bộ cấu hình vào MLflow nên chạy lại được từ một file cấu hình; thông báo Slack chỉ cần vài tham số.
  • Hướng tiếp: step khai báo cho đánh giá, so sánh, giải thích, đăng ký model; lineage làm một lần ở lớp điều phối thì mọi pipeline có ngay mà không phải migrate.

Vì sao

  • Theo Yelp, phần lớn workflow train cùng một khuôn (nạp, chuẩn bị, train, đánh giá, giải thích); thứ thay đổi là logic từng bước và tham số, nên khuôn nên do nền tảng giữ.

Bài học cho SWE

  • Tách logic khỏi môi trường thực thi là điều kiện để test: không chạy được local thì code sẽ không được test.
  • Kiểm hợp đồng giữa các bước ngay lúc khởi tạo, trước khi trả tiền cho cluster.
  • Ghi toàn bộ cấu hình của mỗi lần chạy như một artifact có version thì tái lập là đọc lại một file.
  • Tính năng đặt ở lớp điều phối chung (lineage, thông báo) đến với mọi pipeline mà không cần migrate.

Liên quan