Nguồn: Pinterest Engineering
Tóm tắt
Đội ngũ Kubernetes platform tại Pinterest đã trải qua cuộc điều tra kéo dài hơn ba tháng để xác định nguyên nhân gốc rễ khiến các Ray training job trên GPU bị crash do mất kết nối mạng. Vấn đề bắt đầu khi đội ML platform báo cáo rằng các distributed training job — thường chạy hàng giờ trên phần cứng GPU đắt tiền — gặp sự cố mạng ngắt quãng, dẫn đến tỉ lệ thành công giảm hơn 25%.
Triệu chứng đầu tiên được phát hiện là các network driver reset trên EC2. Driver AWS ENA có cơ chế self-healing tự kích hoạt khi luồng TX bị tạm dừng quá 5 giây — nguyên nhân điển hình là CPU starvation. Điều kỳ lạ là hiện tượng chỉ xảy ra ở một Availability Zone (us-east-1a), trong khi các zone khác hoạt động bình thường với cùng cấu hình.
Sau khi dùng perf và mpstat để phân tích từng CPU core riêng lẻ trên máy 96 vCPU, nhóm kỹ sư phát hiện một core đơn lẻ đôi khi chiếm 100% system CPU trong nhiều giây liên tiếp. Đây chính là nguyên nhân khiến network thread bị starved và driver reset. Nguồn gốc của hiện tượng này — “zombie processes” tích lũy qua thời gian — là lý do tại sao reboot máy giải quyết vấn đề tạm thời nhưng sẽ tái phát sau khoảng một tuần uptime.
Bài viết là ví dụ điển hình về phương pháp điều tra performance bottlenecks theo chiều sâu: từ các chỉ số high-level, xuống profiling per-core, và cuối cùng phát hiện vấn đề ở kernel level. Bài học quan trọng là các vấn đề mạng trong môi trường Kubernetes/GPU thường có nguyên nhân gốc rễ ở tầng infrastructure thấp hơn, không phải ở application code.