Pipeline 10 bước — chỗ nào sẽ sập trước?

Pipeline 10 bước — chỗ nào sẽ sập trước?

Mọi pipeline AI nhiều bước đều đẹp trên Colab. Nhưng "bước tử thần" luôn núp ở chỗ bạn không ngờ nhất.

"Càng nhiều bước, càng pro" — có chắc?

Có một niềm tin phổ biến trong giới dev AI: pipeline càng nhiều stage, workflow càng bài bản thì hệ thống càng chuyên nghiệp. Mình từng nghĩ vậy — cho đến khi nhìn thấy một pipeline Pose2Sim chạy 10 bước tuần tự từ calibration camera, qua pose estimation, synchronization, triangulation, filtering, marker augmentation, cho đến kinematics phân tích chuyển động 3D... và sập ở bước thứ 7 vì một file config thiếu một dòng.

Chuyện này không chỉ xảy ra với computer vision. Bạn xây document extraction pipeline với LangExtract — thiết kế prompt, annotate example, chạy structured extraction, rồi visualize? Mỗi bước đều chạy đẹp khi test riêng. Nhưng nối lại thành dây chuyền, lỗi ở bước 3 im lặng truyền xuống bước 5, và bạn chỉ phát hiện khi output cuối cùng ra rác.

Vấn đề nằm ở chỗ: pipeline nhiều bước giống chuỗi khám bệnh ở bệnh viện. Bạn qua phòng xét nghiệm, chụp X-quang, siêu âm, rồi đến bác sĩ chuyên khoa. Nếu phòng xét nghiệm trả kết quả sai, bác sĩ cuối cùng vẫn đọc — nhưng chẩn đoán sẽ lệch. Triệu chứng xuất hiện ở bước 8, nhưng bệnh bắt đầu từ bước 2.

Bước nào thường "âm thầm hỏng"?

Mình quan sát đa số pipeline AI — dù là vision, NLP, hay multi-agent — đều có một pattern chung: bước dễ sập nhất không phải bước khó nhất, mà là bước chuyển tiếp giữa hai module.

Hình dung thế này: giả sử team bạn 4 người, một bạn lo phần pose estimation 2D, một bạn lo triangulation 3D, một bạn lo filtering, và tech lead lo integration. Mỗi người test module của mình — xanh hết. Nhưng khi ghép lại:

Đây chính xác là chuyện xảy ra khi triển khai Pose2Sim trên Colab. Pipeline gồm: calibration → 2D pose estimation (RTMPose) → synchronization → person association → triangulation → filtering → marker augmentation → OpenSim kinematics. Mỗi stage tạo ra output files mà stage sau đọc vào. Thiếu một bước configure headless runtime cho Colab — cả pipeline đứng im không báo lỗi rõ ràng.

Thực tế phũ phàng hơn: lỗi im lặng (silent failure) nguy hiểm gấp mười lần lỗi crash. Crash thì bạn biết chỗ sửa. Im lặng thì bạn tưởng mọi thứ ổn, deploy lên production, rồi khách hàng là người phát hiện.

Hai kịch bản thật — một vui, một đau

Kịch bản 1: Team physiotherapy startup ở Sài Gòn. Giả sử team 3 người muốn xây hệ thống phân tích chuyển động bệnh nhân phục hồi chức năng bằng camera thường — không cần thiết bị motion capture đắt tiền. Họ chọn Pose2Sim vì open-source, chạy demo trên Colab ngon lành. Nhưng khi đưa video bệnh nhân thật vào — camera góc khác, ánh sáng khác, bệnh nhân mặc áo trùng màu nền — pipeline sập ở bước person association. Bài học: demo data luôn "sạch đẹp", data thật thì không bao giờ.

Kịch bản 2: Team document processing ở Hà Nội. Giả sử team 5 người xây pipeline trích xuất thông tin hợp đồng pháp lý. Họ dùng LangExtract với OpenAI models, thiết kế prompt cẩn thận, annotate example đầy đủ. Chạy thử 10 hợp đồng tiếng Anh — hoàn hảo. Đưa hợp đồng tiếng Việt vào — extraction ra đúng format nhưng sai nội dung, vì prompt example toàn tiếng Anh. Không ai kiểm tra output ở bước giữa. Hai tuần sau khách hàng phát hiện.

Plot twist: cả hai team đều có CI/CD. Nhưng CI/CD test từng module riêng — không ai test flow xuyên suốt với data thật.

Thử ngay chiều nay — 3 bước "khám sức khỏe" pipeline

Bạn đang có một pipeline AI multi-step? Dành 2 tiếng chiều nay làm ba việc:

Bước 1 — Vẽ sơ đồ "truyền bệnh". Liệt kê tất cả output/input giữa các bước. Đánh dấu chỗ nào output bước trước được bước sau đọc trực tiếp mà không validate. Đó là điểm lây nhiễm.

Bước 2 — Chèn checkpoint giữa đường. Ở mỗi điểm chuyển tiếp, thêm một assertion đơn giản: file có tồn tại không, shape data có đúng không, giá trị có nằm trong khoảng hợp lý không. Pose2Sim pipeline có lệnh in timing cho mỗi stage — bạn cũng nên có thứ tương đương.

Bước 3 — Chạy end-to-end với "data xấu". Không phải data lỗi, mà data gần-giống-production: ảnh mờ, text có typo, file thiếu field. Nếu pipeline vẫn cho output thay vì báo lỗi — bạn đang có silent failure.

Nếu bạn đang explore công cụ mới, thử ModelScope — một model hub cho phép search, inference, fine-tune, evaluate, và export trong cùng một workflow. Nó tương thích với Hugging Face Transformers nên không phải học lại từ đầu, chạy được trên Colab với GPU verification sẵn.

Cái bẫy "chạy được trên Colab"

Đây là sai lầm mình thấy lặp đi lặp lại: "Nó chạy được trên Colab rồi" được coi là bằng chứng hệ thống sẵn sàng deploy.

Colab cho bạn môi trường sạch, GPU miễn phí, và demo data chuẩn chỉnh. Giống như đo huyết áp lúc nằm nghỉ trong phòng lạnh — chỉ số nào chả đẹp. Nhưng đưa cơ thể đó ra chạy marathon ngoài trời 35 độ thì câu chuyện hoàn toàn khác.

Khi triển khai thật, bạn đối mặt:

Một cách tiếp cận khôn ngoan hơn: container hóa từng stage. Nếu bạn dùng Ollama cho local inference, hãy tách pipeline thành các service nhỏ, mỗi service có Dockerfile riêng, giao tiếp qua API hoặc file system có schema rõ ràng. Như cách Bedrock AgentCore tách phần browser session ra khỏi phần agent logic — mỗi component có boundary riêng, debug từng phần dễ hơn gỡ cả cục.

Một dòng để nhớ

Pipeline AI không sập vì một bước nào đó quá khó. Nó sập vì khoảng trống giữa các bước — nơi không ai canh gác, không ai validate, và không ai test với data thật.

Mỗi pipeline đều cần một "bác sĩ trực" ở giữa — dù chỉ là một script 20 dòng kiểm tra output trước khi truyền xuống bước kế. Rẻ hơn nhiều so với debug production lúc 2 giờ sáng. À mà nói về 2 giờ sáng — mình lại đi đọc release notes đây.

---

Bụi Wire — nghiện đọc release notes lúc 2 giờ sáng

Nguồn tham khảo