Suy luận ML tiết kiệm chi phí với các mô hình đa khung trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Suy luận ML tiết kiệm chi phí với các mô hình đa khung trên Amazon SageMaker 

Học máy (ML) đã được chứng minh là một trong những ứng dụng công nghệ thành công và phổ biến nhất, ảnh hưởng đến nhiều ngành công nghiệp và tác động đến hàng tỷ người dùng mỗi ngày. Với việc áp dụng ML nhanh chóng vào mọi ngành, các công ty đang phải đối mặt với những thách thức trong việc hỗ trợ các dự đoán có độ trễ thấp và tính sẵn sàng cao đồng thời tối đa hóa việc sử dụng tài nguyên và giảm chi phí liên quan. Bởi vì mỗi khung ML có các phần phụ thuộc riêng và các bước triển khai cho từng khung là khác nhau nên việc triển khai các mô hình được xây dựng trong các khung khác nhau trong quá trình sản xuất và quản lý từng điểm cuối ngày càng trở nên phức tạp hơn.

Amazon SageMaker điểm cuối nhiều vùng chứa (MCE) cho phép chúng tôi nhóm các mô hình trên các khung khác nhau và triển khai chúng trên cùng một máy chủ, tạo ra một điểm cuối duy nhất. Bạn có thể cung cấp vùng chứa cho các khung khác nhau mà bạn đang sử dụng để xây dựng mô hình và SageMaker sẽ lấy tất cả các vùng chứa này và đặt chúng sau một điểm cuối. Ví dụ: bạn có thể tải mô hình PyTorch và TensorFlow trên hai điểm cuối chuyên dụng phục vụ các trường hợp sử dụng giống nhau hoặc hoàn toàn khác nhau và cả hai mô hình này đều có lưu lượng truy cập đến không liên tục không sử dụng tài nguyên đến giới hạn. Trong trường hợp như vậy, bạn có thể kết hợp chúng lại với nhau bằng cách sử dụng các vùng chứa vào một điểm cuối bằng MCE, cải thiện việc sử dụng tài nguyên đồng thời giảm chi phí phát sinh khi cả hai mô hình phân phát từ các điểm cuối khác nhau.

Điểm cuối nhiều vùng chứa cung cấp giải pháp có thể mở rộng và tiết kiệm chi phí để triển khai tối đa 15 mô hình được xây dựng trên các khung ML, máy chủ mô hình và thuật toán khác nhau phục vụ cho trường hợp sử dụng giống nhau hoặc khác nhau, nghĩa là bạn có thể xây dựng các mô hình trên các khung ML hoặc trung gian khác nhau các bước trên tất cả các vùng chứa và mô hình này. Tất cả các mô hình này có thể được truy cập riêng lẻ thông qua lệnh gọi trực tiếp hoặc được ghép vào một đường ống bằng cách sử dụng lệnh gọi nối tiếp, trong đó đầu ra của một mô hình là đầu vào cho mô hình tiếp theo.

Trong bài đăng này, chúng tôi thảo luận về cách thực hiện suy luận ML tiết kiệm chi phí với các mô hình đa khung trên SageMaker.

Các mẫu lệnh gọi MCE

Lệnh gọi trực tiếp MCE của SageMaker rất hữu ích trong trường hợp bạn đã gộp các mô hình không liên quan vào điểm cuối MCE hoặc bạn đang chạy thử nghiệm A/B giữa các mô hình phía sau điểm cuối MCE để đánh giá hiệu suất của chúng. Bạn có thể gọi trực tiếp vùng chứa cụ thể trong lệnh gọi API và nhận dự đoán từ mô hình đó.

Với lệnh gọi nối tiếp, bạn có thể ghép 2–15 vùng chứa lại với nhau và đầu ra của một vùng chứa sẽ trở thành đầu vào của vùng chứa tiếp theo theo trình tự. Ví dụ: đây là trường hợp sử dụng lý tưởng nếu bạn có quy trình dự đoán gồm nhiều bước trong đó mô hình Scikit-learn được sử dụng cho dự đoán trung gian và kết quả được đưa đến mô hình TensorFlow để suy luận cuối cùng. Thay vì triển khai chúng dưới dạng các điểm cuối khác nhau và một ứng dụng hoặc công việc khác điều phối chúng cũng như thực hiện nhiều lệnh gọi API, bạn có thể triển khai chúng dưới dạng SageMaker MCE, trừu tượng hóa logic và thiết lập chúng cho lệnh gọi nối tiếp, trong đó SageMaker quản lý việc truyền dữ liệu giữa một vùng chứa sang vùng chứa khác một cách tự động và phát ra đầu ra của vùng chứa cuối cùng cho máy khách thực hiện yêu cầu API.

Lệnh gọi nối tiếp SageMaker MCE về cơ bản khác với quy trình suy luận nối tiếp SageMaker (xem thêm chi tiết trong các phần bên dưới). Đường dẫn suy luận nối tiếp được nhắm mục tiêu nhiều hơn để điều phối các quy trình công việc ML phức tạp như tiền xử lý dữ liệu, xây dựng một tổ hợp mô hình, thực hiện kiểm tra có điều kiện để xác định mô hình nào sẽ gọi hoặc xử lý hậu kỳ dự đoán, liên quan đến logic nghiệp vụ trước khi dự đoán được gửi đến các ứng dụng tiếp theo . Ngược lại, lệnh gọi nối tiếp MCE được thiết kế để ghép 2–14 mô hình vào một đường dẫn để suy luận, mỗi mô hình lấy dự đoán của mô hình trước đó làm đầu vào.

Tất cả các thùng chứa trong MCE luôn ở trạng thái phục vụ và trong bộ nhớ, do đó không có hiện tượng khởi động nguội khi gọi điểm cuối. MCE cũng cải thiện việc sử dụng điểm cuối và cải thiện chi phí vì các mô hình được triển khai sau một điểm cuối và chia sẻ phiên bản điện toán cơ bản, thay vì mỗi mô hình chiếm tài nguyên điện toán riêng lẻ.

Hãy xem xét một số trường hợp sử dụng và xem cách bạn có thể sử dụng SageMaker MCE để tối ưu hóa suy luận ML.

Các trường hợp sử dụng cho SageMaker MCE

Giả sử bạn có hai mô hình để phân loại cảm tính, một cho ngôn ngữ tiếng Anh và một cho ngôn ngữ tiếng Đức và các mô hình này đang phục vụ các khu vực địa lý khác nhau với lưu lượng truy cập đến vào các thời điểm khác nhau trong ngày. Thay vì có hai điểm cuối chạy 24/7, bạn có thể triển khai cả hai điểm cuối này vào một điểm cuối bằng MCE và truy cập chúng bằng lệnh gọi trực tiếp, từ đó tối ưu hóa việc sử dụng tài nguyên và chi phí của bạn. Xem đoạn mã sau:

englishModel = {
   'Image': container1,
   'ContainerHostname': englishModel }; ...
 
germanModel = {
   'Image': container2,
   'ContainerHostname': germanModel }; ...
 
sm.create_model(
   InferenceExecutionConfig = {'Mode': 'Direct'},
   Containers = [englishModel, germanModel], ...)
sm.create_endpoint_config(EndpointConfigName = ‘my-mce-epc’,
    ProductionVariants=[{
        'InstanceType':        ‘ml.m4.xlarge’,
        'InitialInstanceCount': 2,
        'InitialVariantWeight': 1,
        'ModelName':            ‘my-multi-model-name’,
        'VariantName':          'AllTraffic'}])
sm.create_endpoint(EndpointName = ‘my-mce-endpoint’, 
                  EndpointConfigName = ‘my-mce-epc’)

Trong ví dụ này, chúng ta có hai mô hình (englishModelgermanModel) và chúng tôi xác định các vùng chứa trong SageMaker create_model xây dựng và xác định các InferenceExecutionConfig là 'Trực tiếp'. Bây giờ chúng ta có thể gọi điểm cuối để suy luận và xác định TargetContainerHostname như một trong hai englishModel or germanModel tùy thuộc vào ứng dụng khách thực hiện lệnh gọi API:

sm.invoke_endpoint(        
   EndpointName = endpoint_name,
   TargetContainerHostname = englishModel,
   Body = body, ...)

Bạn cũng có thể sử dụng lệnh gọi trực tiếp trong MCE để chạy thử nghiệm A/B nhằm so sánh hiệu suất giữa các mô hình.

Sơ đồ sau đây minh họa kiến ​​trúc của chúng tôi.

Tương tự, trong các trường hợp sử dụng ML khác, khi sử dụng mô hình đã đào tạo để xử lý một yêu cầu, mô hình đó sẽ nhận dữ liệu ở định dạng cần được xử lý trước (ví dụ: được đặc trưng hóa) trước khi có thể chuyển sang thuật toán để suy luận. Khi các thuật toán ML được kết nối với nhau, đầu ra của một mô hình sẽ đóng vai trò là đầu vào cho mô hình tiếp theo trước khi đạt được kết quả cuối cùng. Trong trường hợp này, bạn có thể xây dựng một đường dẫn nối tiếp SageMaker MCE, trong đó các vùng chứa liên lạc với nhau theo trình tự được xác định trong create_model xây dựng thay vì bạn triển khai từng mô hình vào các điểm cuối khác nhau và viết logic độc lập để tạo điều kiện thuận lợi cho luồng dữ liệu giữa tất cả các mô hình và lệnh gọi API này. Sơ đồ sau minh họa kiến ​​trúc này.

Suy luận ML tiết kiệm chi phí với các mô hình đa khung trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Đối với trường hợp sử dụng này, chúng tôi sử dụng đoạn mã sau:

sm_model = PipelineModel(name=model_name, role=aws_role, models=[Processing-1, Processing-2, Inference-1, Inference-2]) 

predictor = sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge")                  
response = runtime.invoke_endpoint( 
EndpointName=predictor.endpoint,                                
    Body=body,...)

Trong ví dụ này, chúng tôi có hai thùng chứa xử lý (Processing-1Processing-2) để xử lý tính năng và chuyển đổi dữ liệu và hai vùng chứa suy luận (Inference-1Inference-2) để chạy dự đoán mô hình ML trên dữ liệu được xử lý trước. Các PipelineModel instance cho phép bạn xác định đường dẫn suy luận bao gồm một chuỗi tuyến tính gồm bốn vùng chứa xử lý các yêu cầu suy luận về dữ liệu. Các vùng chứa được đặt cùng vị trí trên cùng một phiên bản, cho phép bạn chạy suy luận với độ trễ thấp.

Chia tỷ lệ điểm cuối đa mô hình cho số lượng lớn mô hình

Lợi ích của điểm cuối đa mô hình SageMaker tăng lên dựa trên quy mô hợp nhất mô hình. Bạn có thể thấy mức tiết kiệm chi phí khi lưu trữ hai mô hình với một điểm cuối và đối với các trường hợp sử dụng với hàng trăm hoặc hàng nghìn mô hình, mức tiết kiệm sẽ lớn hơn nhiều.

Việc mở rộng quy mô điểm cuối MCE cũng đơn giản bằng cách sử dụng SageMakerVariantInvocationsPerInstance số liệu được xác định trước, cung cấp số lần trung bình mỗi phút mà mỗi phiên bản cho điểm cuối mô hình được gọi để xác định TargetScaling chính sách. SageMaker tự động điều chỉnh số lượng phiên bản được cung cấp cho một mô hình để đáp ứng những thay đổi trong khối lượng công việc của bạn. Khi khối lượng công việc tăng lên, tính năng tự động thay đổi quy mô sẽ đưa nhiều phiên bản trực tuyến hơn và tải các mô hình và bộ chứa mục tiêu để tiếp tục phục vụ các yêu cầu. Khi khối lượng công việc giảm, tính năng tự động thay đổi quy mô sẽ loại bỏ các phiên bản không cần thiết và giảm tải các vùng chứa mô hình để các vùng chứa không tiêu tốn tài nguyên và bạn không phải trả tiền cho các phiên bản mà bạn không sử dụng. Thời gian hoàn thành yêu cầu đầu tiên đối với một mô hình nhất định sẽ có thêm độ trễ (được gọi là khởi động nguội) để tải xuống mô hình từ đó Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) và tải nó vào bộ nhớ. Các cuộc gọi tiếp theo kết thúc mà không cần thêm phí bổ sung vì mô hình đã được tải. Xem đoạn mã sau:

# AutoScaling client
asg = boto3.client('application-autoscaling')

# Resource type is variant and the unique identifier is the resource ID.
resource_id=f"endpoint/{endpoint_name}/variant/AllTraffic"

# scaling configuration
response = asg.register_scalable_target(
    ServiceNamespace='sagemaker', #
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount', 
    MinCapacity=1,
    MaxCapacity=4
)
#Target Scaling
response = asg.put_scaling_policy(
    PolicyName=f'Request-ScalingPolicy-{endpoint_name}',
    ServiceNamespace='sagemaker',
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount',
    PolicyType='TargetTrackingScaling',
    TargetTrackingScalingPolicyConfiguration={
        'TargetValue': 70.0, # Threshold
        'PredefinedMetricSpecification': {
            'PredefinedMetricType': 'SageMakerVariantInvocationsPerInstance',
        },
        'ScaleInCooldown': 300, # duration until scale in
        'ScaleOutCooldown': 60 # duration between scale out
    }
)

Theo cấu hình chính sách ví dụ trước, chúng tôi sử dụng SageMakerVariantInvocationsPerInstance số liệu được xác định trước để điều chỉnh số lượng phiên bản biến thể sao cho mỗi phiên bản có một InvocationsPerInstance hệ số 70.

Chúng tôi cũng có thể mở rộng quy mô MCE của SageMaker dựa trên số liệu tùy chỉnh của riêng mình, chẳng hạn như CPUUtilization, MemoryUtilization, GPUUtilization, GPUMemoryUtilization, hoặc là DiskUtilization, để tăng hoặc giảm số lượng phiên bản dựa trên việc sử dụng một tài nguyên cụ thể. Để biết thêm thông tin, hãy tham khảo Tự động mở rộng mô hình Amazon SageMaker.

Chúng tôi khuyến nghị rằng mô hình trong mỗi vùng chứa thể hiện các yêu cầu về độ trễ và tính toán tương tự nhau trên mỗi yêu cầu suy luận, vì nếu lưu lượng truy cập đến MCE chuyển từ mô hình mức sử dụng CPU cao sang mô hình mức sử dụng CPU thấp nhưng tổng lượng cuộc gọi vẫn giữ nguyên thì điểm cuối không mở rộng quy mô và có thể không có đủ phiên bản để xử lý tất cả yêu cầu tới mô hình sử dụng CPU cao.

MCE an toàn

Đối với MCE có lệnh gọi trực tiếp, nhiều vùng chứa được lưu trữ trong một phiên bản duy nhất bằng cách chia sẻ bộ nhớ và dung lượng lưu trữ. Điều quan trọng là phải bảo mật vùng chứa, duy trì ánh xạ chính xác các yêu cầu tới vùng chứa mục tiêu và cung cấp cho người dùng quyền truy cập chính xác vào vùng chứa mục tiêu. Bạn có thể hạn chế invoke_endpoint truy cập vào một bộ container giới hạn bên trong MCE bằng cách sử dụng sagemaker:TargetContainerHostname Quản lý truy cập và nhận dạng AWS (IAM) khóa điều kiện. Công dụng của SageMaker Vai trò IAM để cung cấp các chính sách dựa trên danh tính IAM mà bạn sử dụng để chỉ định các hành động và tài nguyên được phép hoặc bị từ chối cũng như các điều kiện theo đó các hành động được phép hoặc từ chối. Các chính sách sau đây cho biết cách giới hạn lệnh gọi đến các vùng chứa cụ thể trong điểm cuối:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetContainerHostname": ["customIps*", "common*"]
                }
            }
        }
    ]
}

Giám sát các điểm cuối đa mô hình bằng cách sử dụng số liệu của Amazon CloudWatch

Để cân bằng giữa giá cả và hiệu suất, bạn sẽ muốn thử nghiệm các điểm cuối nhiều mô hình bằng các mô hình và lưu lượng truy cập đại diện từ ứng dụng của riêng bạn. SageMaker cung cấp số liệu bổ sung trong amazoncloudwatch dành cho các điểm cuối nhiều mô hình để bạn có thể xác định mức sử dụng điểm cuối cũng như tốc độ truy cập bộ đệm và tối ưu hóa điểm cuối của mình. Các số liệu như sau:

  • Mô hìnhĐangĐangChờThời gian – Khoảng thời gian mà yêu cầu gọi chờ mô hình đích được tải xuống hoặc tải để thực hiện suy luận.
  • Mô HìnhDỡ Thời Gian – Khoảng thời gian cần thiết để dỡ mô hình qua thùng chứa UnloadModel Lệnh gọi API.
  • Thời gian tải xuống mô hình – Khoảng thời gian cần thiết để tải xuống mô hình từ Amazon S3.
  • Thời gian tải mô hình – Khoảng thời gian cần thiết để tải mô hình qua vùng chứa LoadModel Lệnh gọi API.
  • Mô hìnhCacheHit - Số lượng InvokeEndpoint yêu cầu được gửi đến điểm cuối nơi mô hình đã được tải. Lấy Average thống kê hiển thị tỷ lệ yêu cầu trong đó mô hình đã được tải.
  • Đã tảiMô hìnhĐếm – Số lượng mô hình được tải trong các thùng chứa ở điểm cuối. Số liệu này được phát ra trên mỗi phiên bản. Các Average thống kê trong khoảng thời gian 1 phút cho bạn biết số lượng mô hình trung bình được tải trên mỗi phiên bản và Sum thống kê cho bạn biết tổng số mô hình được tải trên tất cả các phiên bản ở điểm cuối. Các mô hình mà số liệu này theo dõi không nhất thiết phải là duy nhất vì bạn có thể tải một mô hình vào nhiều vùng chứa ở điểm cuối.

Ngoài ra còn có một số số liệu khác được sử dụng bởi mỗi vùng chứa chạy trên một phiên bản, chẳng hạn như Invocations cho biết số lượng InvokeEndpoint yêu cầu được gửi đến vùng chứa bên trong điểm cuối, ContainerLatency đưa ra thời gian mà điểm cuối dành cho vùng chứa mục tiêu hoặc tất cả các vùng chứa trong lệnh gọi nối tiếp để phản hồi như được xem từ SageMaker và CPUUtilizationMemoryUtilizaton cho biết các đơn vị CPU và phần trăm bộ nhớ.

Kết luận

Trong bài đăng, chúng tôi đã thảo luận về cách các điểm cuối nhiều vùng chứa của SageMaker có thể hữu ích trong việc tối ưu hóa chi phí và việc sử dụng tài nguyên. Ví dụ về thời điểm sử dụng MCE bao gồm nhưng không giới hạn ở những điều sau:

  • Các mô hình lưu trữ trên các khung khác nhau (chẳng hạn như TensorFlow, PyTorch và Scikit-learn) không có đủ lưu lượng truy cập để bão hòa toàn bộ công suất của phiên bản
  • Lưu trữ các mô hình từ cùng một khung với các thuật toán ML khác nhau (chẳng hạn như đề xuất, dự báo hoặc phân loại) và các chức năng xử lý
  • So sánh các kiến ​​trúc tương tự chạy trên các phiên bản khung khác nhau (chẳng hạn như TensorFlow 1.x so với TensorFlow 2.x) cho các tình huống như thử nghiệm A/B

SageMaker MCE hỗ trợ triển khai tối đa 15 bộ chứa trên các điểm cuối thời gian thực và gọi chúng một cách độc lập để suy luận có độ trễ thấp và tiết kiệm chi phí. Các mô hình có thể hoàn toàn không đồng nhất, với ngăn xếp phân phối độc lập của riêng chúng. Bạn có thể gọi các vùng chứa này một cách tuần tự hoặc độc lập cho từng yêu cầu. Việc lưu trữ an toàn nhiều mô hình, từ các khung khác nhau, trên một phiên bản duy nhất có thể giúp bạn tiết kiệm tới 90% chi phí so với việc lưu trữ các mô hình ở các điểm cuối phiên bản đơn chuyên dụng.


Giới thiệu về tác giả

Suy luận ML tiết kiệm chi phí với các mô hình đa khung trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Dhawal Patel là Kiến trúc sư chính về Học máy tại AWS. Ông đã làm việc với các tổ chức khác nhau, từ các doanh nghiệp lớn đến các công ty khởi nghiệp quy mô vừa về các vấn đề liên quan đến điện toán phân tán và trí tuệ nhân tạo. Anh ấy tập trung vào học sâu, bao gồm NLP và lĩnh vực thị giác máy tính. Anh ấy giúp khách hàng đạt được suy luận mô hình hiệu suất cao trên Amazon SageMaker.

Suy luận ML tiết kiệm chi phí với các mô hình đa khung trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Vikram Elango là Kiến trúc sư giải pháp chuyên gia AI/ML cấp cao tại Amazon Web Services, có trụ sở tại Virginia, Hoa Kỳ. Vikram giúp các khách hàng trong ngành tài chính và bảo hiểm toàn cầu có khả năng lãnh đạo về thiết kế và tư duy để xây dựng và triển khai các ứng dụng máy học trên quy mô lớn. Anh hiện đang tập trung vào xử lý ngôn ngữ tự nhiên, AI có trách nhiệm, tối ưu hóa suy luận và mở rộng quy mô ML trên toàn doanh nghiệp. Trong thời gian rảnh rỗi, anh thích đi du lịch, đi bộ đường dài, nấu ăn và cắm trại cùng gia đình.

Suy luận ML tiết kiệm chi phí với các mô hình đa khung trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Saurabh Trikande là Giám đốc sản phẩm cấp cao của Amazon SageMaker Inference. Anh ấy đam mê làm việc với khách hàng và được thúc đẩy bởi mục tiêu dân chủ hóa việc học máy. Ông tập trung vào những thách thức cốt lõi liên quan đến việc triển khai các ứng dụng ML phức tạp, mô hình ML nhiều người thuê, tối ưu hóa chi phí và làm cho việc triển khai các mô hình học sâu dễ tiếp cận hơn. Khi rảnh rỗi, Saurabh thích đi bộ đường dài, tìm hiểu về các công nghệ tiên tiến, theo dõi TechCrunch và dành thời gian cho gia đình.

Dấu thời gian:

Thêm từ Học máy AWS