Xây dựng với AI

Khắc phục lỗi tự động mở rộng quy mô (auto scaling) khi cập nhật endpoint SageMaker bằng CDK

AWS cung cấp một construct CDK mới để xử lý điều kiện tranh chấp (race condition) giữa việc cập nhật endpoint của SageMaker và đăng ký Application Auto Scaling, giúp ngăn chặn các lỗi triển khai.

Biểu đồ trừu tượng hiển thị ba bánh răng kết nối đại diện cho các bước hủy đăng ký, cập nhật và đăng ký.
Minh họa được tạo riêng cho bài viết này

Được dịch tự động từ bản gốc tiếng Anh.

Việc cập nhật các endpoint thời gian thực của Amazon SageMaker AI thường làm hỏng cấu hình auto scaling khi sử dụng AWS CloudFormation hoặc AWS Cloud Development Kit (CDK). Một giải pháp mới từ AWS giới thiệu một construct CDK có thể tái sử dụng, tự động điều phối quá trình hủy đăng ký và đăng ký lại các mục tiêu có khả năng mở rộng (scalable targets). Cách tiếp cận này cho phép kỹ sư cập nhật loại instance, số lượng instance hoặc biến môi trường trong một lần triển khai duy nhất mà không cần can thiệp thủ công hay gây hỏng stack.

Vấn đề xảy ra như thế nào

Các nhà phát triển triển khai endpoint SageMaker AI với tài nguyên auto scaling gốc của CloudFormation thường gặp lỗi triển khai khi sửa đổi cấu hình endpoint. Vấn đề cốt lõi nảy sinh vì SageMaker AI yêu cầu phải hủy đăng ký mục tiêu có khả năng mở rộng trước khi endpoint có thể được cập nhật, chẳng hạn như khi thay đổi loại instance hoặc số lượng instance. Tuy nhiên, CloudFormation quản lý các tài nguyên này theo cách khai báo (declaratively), dẫn đến xung đột khi dịch vụ chặn bản cập nhật trong khi mục tiêu auto scaling vẫn đang hoạt động.

Khi kỹ sư cố gắng khắc phục bằng cách hủy đăng ký thủ công mục tiêu có khả năng mở rộng qua AWS CLI, họ sẽ đối mặt với hai chế độ lỗi riêng biệt. Nếu họ triển khai lại chỉ với những thay đổi về cấu hình endpoint, CloudFormation sẽ không thấy bất kỳ thay đổi nào trong các tham số auto scaling và bỏ qua việc đăng ký lại mục tiêu. Endpoint được cập nhật thành công nhưng chạy mà không có auto scaling, khiến hệ thống dễ bị tổn thương trước các đợt tăng đột biến lưu lượng truy cập mà không có thông báo lỗi nào cảnh báo đội ngũ vận hành.

Nếu họ hủy đăng ký thủ công rồi sau đó thay đổi các tham số auto scaling, CloudFormation sẽ cố gắng cập nhật tài nguyên ScalableTarget vốn không còn tồn tại nữa. Điều này dẫn đến lỗi "Resource not found" (Không tìm thấy tài nguyên). Nghiêm trọng hơn, quá trình rollback cũng thất bại, khiến stack CloudFormation rơi vào trạng thái UPDATE_ROLLBACK_FAILED. Việc khôi phục từ trạng thái này đòi hỏi sự can thiệp thủ công phức tạp trên console, phá vỡ pipeline tự động hóa và gia tăng rủi ro vận hành.

Cơ chế hoạt động

Giải pháp được đề xuất thay thế các tài nguyên gốc AWS::ApplicationAutoScaling::ScalableTarget và AWS::ApplicationAutoScaling::ScalingPolicy bằng ba custom resource được quản lý bởi một construct CDK. Các custom resource này áp đặt thứ tự phụ thuộc chặt chẽ bằng cách gọi hàm node.add_dependency, đảm bảo rằng auto scaling được xử lý đúng cách trong vòng đời cập nhật endpoint. Quy trình bắt đầu với một custom resource Deregister, xóa mục tiêu có khả năng mở rộng trước khi quá trình cập nhật endpoint bắt đầu. Trong các lần triển khai ban đầu, handler này sẽ bỏ qua lỗi một cách duyên dáng nếu chưa có mục tiêu nào tồn tại.

Sau khi mục tiêu có khả năng mở rộng bị xóa, CDK tiến hành cập nhật chính tài nguyên endpoint. Sau khi bản cập nhật endpoint được chấp nhận, custom resource Register Scalable Target sẽ tiếp quản. Tài nguyên này sử dụng mẫu hoàn tất bất đồng bộ (asynchronous completion pattern), trong đó handler on_event trả về ngay lập tức, và một waiter sẽ gọi lại handler is_complete mỗi 30 giây. Nó chờ cho đến khi endpoint đạt trạng thái InService trước khi đăng ký mục tiêu có khả năng mở rộng, với giới hạn tổng thời gian chờ là một giờ để tránh vượt quá giới hạn thực thi của Lambda.

Cuối cùng, custom resource Attach Scaling Policy đảm bảo rằng chính sách theo dõi tải (target tracking policy) được áp dụng. Nó cũng sử dụng mẫu bất đồng bộ để chờ cho đến khi mục tiêu có khả năng mở rộng có thể truy vấn được, điều này có thể mất một chút thời gian sau khi đăng ký. Khi mục tiêu đã hiển thị, nó sẽ áp dụng chính sách. Thuộc tính ConfigHash điều khiển toàn bộ chuỗi thao tác này, buộc CloudFormation phải gọi lại các hàm Lambda bất cứ khi nào giá trị cấu hình của endpoint hoặc auto scaling thay đổi, giữ cho hai hệ thống luôn đồng bộ.

Chi tiết quan trọng

  • Construct này thay thế các tài nguyên auto scaling gốc của CloudFormation bằng ba custom resource: Deregister, Register Scalable Target và Attach Scaling Policy.
  • Thứ tự phụ thuộc được áp đặt thông qua các lệnh gọi node.add_dependency của CDK để đảm bảo trình tự thao tác chính xác.
  • Các custom resource bất đồng bộ sử dụng khung provider với các handler on_event và is_complete, được hỗ trợ bởi máy trạng thái AWS Step Functions.
  • Tài nguyên Register Scalable Target có tổng thời gian chờ là một giờ, trong khi Attach Scaling Policy có thời gian chờ là 15 phút.
  • Một thuộc tính ConfigHash duy nhất kích hoạt chuỗi điều phối khi các tham số endpoint hoặc auto scaling thay đổi.
  • Stack được triển khai bao gồm mười hai hàm Lambda và hai máy trạng thái Step Functions, phần lớn trong số đó được tạo bởi khung provider của CDK.

Tại sao điều này quan trọng

Đối với các đội ngũ xây dựng hạ tầng AI cho môi trường production, độ tin cậy trong pipeline triển khai là yếu tố bắt buộc. Hành vi trước đây của việc âm thầm loại bỏ cấu hình auto scaling hoặc để lại stack ở trạng thái hỏng hóc đã gây ra nợ kỹ thuật vận hành đáng kể. Kỹ sư phải lựa chọn giữa việc can thiệp thủ công qua CLI (phá vỡ nguyên tắc infrastructure-as-code) hoặc chấp nhận rủi ro chạy mô hình mà không có auto scaling. Giải pháp này khôi phục lại lời hứa của hạ tầng khai báo, cho phép các đội ngũ coi endpoint SageMaker giống như bất kỳ tài nguyên đám mây nào khác có thể được cập nhật một cách an toàn và dự đoán được.

Hơn nữa, việc sử dụng các custom resource bất đồng bộ giải quyết một điểm đau phổ biến trong CloudFormation: các thao tác chạy dài vượt quá thời gian chờ của Lambda. Bằng cách chuyển giao logic chờ đợi sang khung provider và Step Functions, construct này đảm bảo rằng các bản triển khai không thất bại do các vấn đề định thời tạm thời. Sự vững chắc này rất quan trọng đối với các hoạt động ML quy mô lớn, nơi việc cập nhật endpoint có thể mất vài phút để lan truyền trên toàn bộ cụm máy chủ.

Những gì bạn có thể làm

  • Nhân bản repository sample-sagemaker-endpoint-autoscaling từ GitHub để truy cập vào phiên bản tham khảo.
  • Cài đặt các dependency bằng cách sử dụng uv sync và bootstrap môi trường AWS của bạn với uv run cdk bootstrap.
  • Xác định các thiết lập endpoint và auto scaling trong config/config.yaml, đảm bảo cả hai phần đều được bao gồm để tạo ra ConfigHash.
  • Triển khai stack ví dụ bằng cách sử dụng uv run cdk deploy InferenceStack và xác minh mục tiêu có khả năng mở rộng qua AWS CLI.
  • Kiểm thử một bản cập nhật bằng cách thay đổi loại instance trong tệp cấu hình và triển khai lại để xác nhận rằng auto scaling vẫn nguyên vẹn.
  • Tích hợp SagemakerAutoscalingConstruct vào các stack CDK hiện có bằng cách sao chép thư mục construct và truyền vào tài nguyên endpoint cùng hash cấu hình của bạn.
  • #aws
  • #sagemaker
  • #cdk
  • #machine learning
  • #infrastructure

Công cụ từ cửa hàng Bytechap

$89

DocBento

Hệ thống quản lý tài liệu tự host, có khả năng đọc mọi bản quét và trả lời kèm trích dẫn trang cụ thể.

Demo trực tiếp

Đọc tiếp

Tất cả bài viết