Chạy khối lượng công việc suy luận machine learning trên các phiên bản dựa trên AWS Graviton với Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Chạy khối lượng công việc suy luận bằng máy học trên các phiên bản dựa trên AWS Graviton với Amazon SageMaker

Hôm nay, chúng tôi ra mắt Amazon SageMaker suy luận về AWS trọng lực để cho phép bạn tận dụng các lợi ích về giá cả, hiệu suất và hiệu quả đến từ chip Graviton.

Các phiên bản dựa trên Graviton có sẵn để suy luận mô hình trong SageMaker. Bài đăng này giúp bạn di chuyển và triển khai khối lượng công việc suy luận máy học (ML) từ phiên bản x86 sang phiên bản dựa trên Graviton trong SageMaker. Chúng tôi cung cấp hướng dẫn từng bước để triển khai mô hình được đào tạo SageMaker của bạn cho các phiên bản dựa trên Graviton, đề cập đến các phương pháp hay nhất khi làm việc với Graviton, thảo luận về lợi ích hiệu suất giá và trình diễn cách triển khai mô hình TensorFlow trên phiên bản SageMaker Graviton.

Tổng quan ngắn gọn về Graviton

AWS Graviton là một dòng vi xử lý được AWS thiết kế để cung cấp hiệu suất giá tốt nhất và tiết kiệm năng lượng hơn so với các đối tác x86 của chúng. Bộ xử lý AWS Graviton 3 là bộ xử lý mới nhất trong dòng bộ xử lý Graviton và được tối ưu hóa cho khối lượng công việc ML, bao gồm hỗ trợ bfloat16 và gấp đôi băng thông Đa dữ liệu theo lệnh đơn (SIMD). Khi hai tính năng này được kết hợp, Graviton 3 có thể mang lại hiệu suất tốt hơn gấp ba lần so với phiên bản Graviton 2. Graviton 3 cũng sử dụng năng lượng ít hơn tới 60% cho hiệu suất tương đương Đám mây điện toán đàn hồi Amazon (Amazon EC2) các phiên bản. Đây là một tính năng tuyệt vời nếu bạn muốn giảm lượng khí thải carbon và đạt được các mục tiêu bền vững của mình.

Tổng quan về giải pháp

Để triển khai các mô hình của bạn cho các phiên bản Graviton, bạn có thể sử dụng AWS Deep Learning Container or mang theo thùng chứa của riêng bạn tương thích với kiến ​​trúc Arm v8.2.

Việc di chuyển (hoặc triển khai mới) các mô hình của bạn từ các phiên bản được hỗ trợ x86 sang các phiên bản Graviton rất đơn giản vì AWS cung cấp các vùng chứa để lưu trữ các mô hình với PyTorch, TensorFlow, Scikit-learning và XGBoost và các mô hình này không có kiến ​​trúc. Tuy nhiên, nếu bạn sẵn sàng mang theo các thư viện của riêng mình, bạn cũng có thể làm như vậy, chỉ cần đảm bảo rằng vùng chứa của bạn được xây dựng với môi trường hỗ trợ kiến ​​trúc Arm64. Để biết thêm thông tin, hãy xem Xây dựng bộ chứa thuật toán của riêng bạn.

Bạn cần hoàn thành ba bước để triển khai mô hình của mình:

  1. Tạo mô hình SageMaker: Điều này sẽ chứa, trong số các tham số khác, thông tin về vị trí tệp mô hình, vùng chứa sẽ được sử dụng để triển khai và vị trí của tập lệnh suy luận. (Nếu bạn đã triển khai một mô hình hiện có trong phiên bản suy luận dựa trên x86, thì bạn có thể bỏ qua bước này.)
  2. Tạo cấu hình điểm cuối: Điều này sẽ chứa thông tin về loại phiên bản bạn muốn cho điểm cuối (ví dụ: ml.c7g.xlarge cho Graviton3), tên của mô hình bạn đã tạo ở bước 1 và số lượng phiên bản cho mỗi điểm cuối.
  3. Khởi chạy điểm cuối với cấu hình điểm cuối được tạo ở bước 2.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy xem xét các điều kiện tiên quyết sau:

  1. Hoàn thành các điều kiện tiên quyết như được liệt kê trong Điều kiện tiên quyết.
  2. Mô hình của bạn phải là mô hình dựa trên PyTorch, TensorFlow, XGBoost hoặc Scikit-learning. Bảng sau đây tóm tắt các phiên bản hiện được hỗ trợ khi viết bài này. Để biết các bản cập nhật mới nhất, hãy tham khảo Bộ chứa khung SageMaker (chỉ hỗ trợ SM).
    . Python TensorFlow Kim tự tháp Học hỏi XGBoost
    Các phiên bản được hỗ trợ 3.8 2.9.1 1.12.1 1.0-1 1.3-1 thành 1.5-1
  3. Tập lệnh suy luận được lưu trữ trong Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3).

Trong các phần sau, chúng tôi sẽ hướng dẫn bạn qua các bước triển khai.

Tạo mô hình SageMaker

Nếu bạn có một mô hình hiện tại đã được triển khai trong một phiên bản suy luận dựa trên x86, bạn có thể bỏ qua bước này. Nếu không, hãy hoàn thành các bước sau để tạo mô hình SageMaker:

  1. Xác định vị trí mô hình mà bạn đã lưu trữ trong bộ chứa S3. Sao chép URI.
    Bạn sử dụng URI mô hình sau này trong MODEL_S3_LOCATION.
  2. Xác định phiên bản khung và phiên bản Python đã được sử dụng trong quá trình đào tạo mô hình.
    Bạn cần chọn một vùng chứa từ danh sách Các vùng chứa AWS Deep Learning có sẵn theo khuôn khổ và phiên bản Python của bạn. Để biết thêm thông tin, hãy tham khảo Giới thiệu hình ảnh vùng chứa đa kiến ​​trúc cho Amazon ECR.
  3. Định vị URI tập lệnh Python suy luận trong bộ chứa S3 (tên tệp phổ biến là inference.py).
    Cần có URI tập lệnh suy luận trong INFERENCE_SCRIPT_S3_LOCATION.
  4. Với các biến này, bạn có thể gọi API SageMaker bằng lệnh sau:
    client = boto3.client("sagemaker")
    
    client.create_model(
        ModelName="Your model name",
        PrimaryContainer={
            "Image": ,
            "ModelDataUrl": ,
            "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": ,
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": 
            }
        },
        ExecutionRoleArn= 
    )

Bạn cũng có thể tạo hình ảnh đa kiến ​​trúc và sử dụng cùng một hình ảnh nhưng với các thẻ khác nhau. Bạn có thể cho biết phiên bản của bạn sẽ được triển khai trên kiến ​​trúc nào. Để biết thêm thông tin, hãy tham khảo Giới thiệu hình ảnh vùng chứa đa kiến ​​trúc cho Amazon ECR.

Tạo cấu hình điểm cuối

Sau khi tạo mô hình, bạn phải tạo cấu hình điểm cuối bằng cách chạy lệnh sau (lưu ý loại phiên bản chúng tôi đang sử dụng):

client.create_endpoint_config(
    EndpointConfigName= ,
    ProductionVariants=[
        {
         "VariantName": "v0",
         "ModelName": "Your model name",
         "InitialInstanceCount": 1,
         "InstanceType": "ml.c7g.xlarge",
        },
    ]
)

Ảnh chụp màn hình sau đây hiển thị chi tiết cấu hình điểm cuối trên bảng điều khiển SageMaker.

Khởi chạy điểm cuối

Với cấu hình điểm cuối được tạo ở bước trước, bạn có thể triển khai điểm cuối:

client.create_endpoint(
    EndpointName = "",
    EndpointConfigName = ""
    )

Đợi cho đến khi điểm cuối mô hình của bạn được triển khai. Bạn có thể yêu cầu các dự đoán giống như cách bạn yêu cầu các dự đoán cho các điểm cuối được triển khai trong các phiên bản dựa trên x86.

Ảnh chụp màn hình sau đây cho thấy điểm cuối của bạn trên bảng điều khiển SageMaker.

Điểm cuối SageMaker từ Cấu hình

Những gì được hỗ trợ

SageMaker cung cấp các bộ chứa sâu Graviton được tối ưu hóa hiệu suất cho các khung TensorFlow và PyTorch. Các vùng chứa này hỗ trợ thị giác máy tính, xử lý ngôn ngữ tự nhiên, đề xuất và các trường hợp sử dụng suy luận dựa trên mô hình sâu và rộng chung. Ngoài các vùng chứa học sâu, SageMaker cũng cung cấp các vùng chứa cho các khung ML cổ điển như XGBoost và Scikit-learning. Các bộ chứa tương thích nhị phân trên các phiên bản c6g/m6g và c7g, do đó, việc di chuyển ứng dụng suy luận từ thế hệ này sang thế hệ khác diễn ra liền mạch.

C6g/m6g hỗ trợ fp16 (phao chính xác một nửa) và đối với các kiểu máy tương thích, nó cung cấp hiệu suất tương đương hoặc tốt hơn so với các phiên bản c5. C7g tăng đáng kể hiệu suất ML bằng cách tăng gấp đôi chiều rộng SIMD và hỗ trợ bfloat-16 (bf16), đây là nền tảng tiết kiệm chi phí nhất để chạy các mô hình của bạn.

Cả c6g/m6g và c7g đều mang lại hiệu suất tốt cho ML cổ điển (ví dụ: XGBoost) so với các phiên bản CPU khác trong SageMaker. Hỗ trợ Bfloat-16 trên c7g cho phép triển khai hiệu quả các mô hình được đào tạo bf16 hoặc AMP (Độ chính xác hỗn hợp tự động). Chương trình phụ trợ Thư viện điện toán cánh tay (ACL) trên Graviton cung cấp các hạt nhân bfloat-16 có thể tăng tốc ngay cả các toán tử fp32 thông qua chế độ toán học nhanh mà không cần lượng tử hóa mô hình.

Các phương pháp hay nhất được đề xuất

Trên các phiên bản Graviton, mọi vCPU đều là một lõi vật lý. Không có tranh chấp về tài nguyên CPU chung (không giống như SMT) và tỷ lệ hiệu suất khối lượng công việc là tuyến tính với mỗi lần bổ sung vCPU. Do đó, bạn nên sử dụng suy luận hàng loạt bất cứ khi nào trường hợp sử dụng cho phép. Điều này sẽ cho phép sử dụng hiệu quả các vCPU bằng cách xử lý song song lô trên mỗi lõi vật lý. Nếu không thể suy luận theo lô, thì kích thước phiên bản tối ưu cho một tải trọng nhất định là bắt buộc để đảm bảo chi phí lập lịch trình chuỗi hệ điều hành không vượt quá sức mạnh tính toán đi kèm với các vCPU bổ sung.

Theo mặc định, TensorFlow đi kèm với các nhân Eigen và bạn nên chuyển sang OneDNN với ACL để có được chương trình phụ trợ suy luận được tối ưu hóa nhất. Phần phụ trợ OneDNN và chế độ tính toán nhanh bfloat-16 có thể được bật khi khởi chạy dịch vụ bộ chứa:

docker run -p 8501:8501 --name tfserving_resnet 
--mount type=bind,source=/tmp/resnet,target=/models/resnet 
-e MODEL_NAME=resnet -e TF_ENABLE_ONEDNN_OPTS=1 
-e DNNL_DEFAULT_FPMATH_MODE=BF16 -e -t tfs:mkl_aarch64

Lệnh phục vụ trước lưu trữ mô hình resnet50 tiêu chuẩn với hai cấu hình quan trọng:

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

Chúng có thể được chuyển đến vùng chứa suy luận theo cách sau:

client.create_model(
    ModelName="Your model name",
    PrimaryContainer={
    "Image": ,
    "ModelDataUrl": ,
    "Environment": {
        "SAGEMAKER_PROGRAM": "inference.py",
        "SAGEMAKER_SUBMIT_DIRECTORY": "",
        "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
        "SAGEMAKER_REGION": ,
        "TF_ENABLE_ONEDNN_OPTS": "1",
        "DNNL_DEFAULT_FPMATH_MODE": "BF16"
         }
     },
     ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
)

Ví dụ triển khai

Trong bài đăng này, chúng tôi chỉ cho bạn cách triển khai mô hình TensorFlow, được đào tạo trong SageMaker, trên phiên bản suy luận SageMaker do Graviton cung cấp.

Bạn có thể chạy mẫu mã trong phiên bản sổ ghi chép SageMaker, một Xưởng sản xuất Amazon SageMaker notebook hoặc sổ ghi chép Jupyter ở chế độ cục bộ. Bạn cần truy xuất vai trò thực thi SageMaker nếu bạn sử dụng sổ ghi chép Jupyter ở chế độ cục bộ.

Ví dụ sau xem xét bộ dữ liệu CIFAR-10. Bạn có thể làm theo ví dụ về sổ ghi chép từ các ví dụ về SageMaker Repo GitHub để tái tạo mô hình được sử dụng trong bài đăng này. Chúng tôi sử dụng mô hình được đào tạo và cifar10_keras_main.py Tập lệnh Python để suy luận.

Mô hình được lưu trữ trong nhóm S3: s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

Sản phẩm cifar10_keras_main.py script, có thể được sử dụng để suy luận, được lưu trữ tại:s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

Chúng tôi sử dụng us-east-1 Phân vùng và triển khai mô hình trên phiên bản dựa trên ml.c7g.xlarge Graviton. Dựa trên điều này, URI của AWS Deep Learning Container của chúng tôi là 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. Thiết lập với đoạn mã sau:
    import sagemaker
    import boto3
    import datetime
    import json
    import gzip
    import os
    
    sagemaker_session = sagemaker.Session()
    bucket = sagemaker_session.default_bucket()
    role = sagemaker.get_execution_role()
    region = sagemaker_session.boto_region_name

  2. Tải xuống tập dữ liệu để kiểm tra điểm cuối:
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. Tạo mô hình và cấu hình điểm cuối và triển khai điểm cuối:
    timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now())
    
    client = boto3.client("sagemaker")
    
    MODEL_NAME = f"graviton-model-{timestamp}"
    ENDPOINT_NAME = f"graviton-endpoint-{timestamp}"
    ENDPOINT_CONFIG_NAME = f"graviton-endpoint-config-{timestamp}"
    
    # create sagemaker model
    create_model_response = client.create_model(
        ModelName=MODEL_NAME,
        PrimaryContainer={
        "Image":  "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker ",
        "ModelDataUrl":  "s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz",
        "Environment": {
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": region
            }
        },
        ExecutionRoleArn=role
    )
    print ("create_model API response", create_model_response)

  4. Theo tùy chọn, bạn có thể thêm tập lệnh suy luận của mình vào Environment in create_model nếu ban đầu bạn không thêm nó làm hiện vật vào mô hình SageMaker của mình trong quá trình đào tạo:
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": ,
    		
    # create sagemaker endpoint config
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=ENDPOINT_CONFIG_NAME,
        ProductionVariants=[
            {
             "VariantName": "v0",
             "ModelName": MODEL_NAME,
             "InitialInstanceCount": 1,
             "InstanceType": "ml.c7g.xlarge" 
            },
        ]
    )
    print ("ncreate_endpoint_config API response", create_endpoint_config_response)
    
    # create sagemaker endpoint
    create_endpoint_response = client.create_endpoint(
        EndpointName = ENDPOINT_NAME,
        EndpointConfigName = ENDPOINT_CONFIG_NAME,
    )
    print ("ncreate_endpoint API response", create_endpoint_response)   
    

    Bạn phải đợi vài phút để việc triển khai diễn ra.

  5. Xác minh trạng thái điểm cuối bằng mã sau:
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    Bạn cũng có thể kiểm tra Bảng điều khiển quản lý AWS để xem khi nào mô hình của bạn được triển khai.

  6. Thiết lập môi trường thời gian chạy để gọi các điểm cuối:
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    Bây giờ chúng tôi chuẩn bị tải trọng để gọi điểm cuối. Chúng tôi sử dụng cùng một loại hình ảnh được sử dụng để đào tạo mô hình. Chúng đã được tải xuống trong các bước trước.

  7. Truyền trọng tải tới tenxơ và đặt đúng định dạng mà mô hình đang mong đợi. Đối với ví dụ này, chúng tôi chỉ yêu cầu một dự đoán.
    input_image = x_test[0].reshape(1,32,32,3)

    Chúng tôi nhận được đầu ra mô hình dưới dạng một mảng.

  8. Chúng ta có thể biến đầu ra này thành xác suất nếu chúng ta áp dụng softmax cho nó:
    CONTENT_TYPE = 'application/json'
    ACCEPT = 'application/json'
    PAYLOAD = json.dumps(input_image.tolist())
    
    response = runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME, 
        ContentType=CONTENT_TYPE,
        Accept=ACCEPT,
        Body=PAYLOAD
    )
        
    print(response['Body'].read().decode())

Làm sạch tài nguyên

Các dịch vụ liên quan đến giải pháp này phát sinh chi phí. Khi bạn sử dụng xong giải pháp này, hãy dọn sạch các tài nguyên sau:

client.delete_endpoint(EndpointName=ENDPOINT_NAME)
client.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME)
client.delete_model(ModelName=MODEL_NAME)

So sánh giá-hiệu suất

Các phiên bản dựa trên Graviton cung cấp mức giá thấp nhất và hiệu suất giá tốt nhất khi so sánh với các phiên bản dựa trên x86. Tương tự như các phiên bản EC2, điểm cuối suy luận của SageMaker với các phiên bản ml.c6g (Graviton 2) cung cấp giá thấp hơn 20% so với ml.c5 và các phiên bản Graviton 3 ml.c7g rẻ hơn 15% so với các phiên bản ml.c6. Để biết thêm thông tin, hãy tham khảo Amazon SageMaker Giá.

Kết luận

Trong bài đăng này, chúng tôi đã giới thiệu khả năng SageMaker mới ra mắt để triển khai các mô hình trong các trường hợp suy luận do Graviton cung cấp. Chúng tôi đã cung cấp cho bạn hướng dẫn về các phương pháp hay nhất và thảo luận ngắn gọn về lợi ích hiệu suất giá của loại phiên bản suy luận mới.

Để tìm hiểu thêm về Graviton, hãy tham khảo Bộ xử lý AWS Graviton. Bạn có thể bắt đầu với các phiên bản EC2 dựa trên AWS Graviton trên bảng điều khiển Amazon EC2 và bằng cách tham khảo Hướng dẫn kỹ thuật AWS Graviton. Bạn có thể triển khai điểm cuối mô hình Sagemaker để suy luận trên Graviton bằng mã mẫu trong bài đăng trên blog này.


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

Victor JaramilloVictor Jaramillo, Tiến sĩ, là Kỹ sư máy học cao cấp trong Dịch vụ chuyên nghiệp AWS. Trước AWS, ông là giáo sư đại học và nhà khoa học nghiên cứu về bảo trì dự đoán. Khi rảnh rỗi, anh ấy thích đi xe máy và tự sửa xe máy.

Zmnako AwrahmanZmnako Awrahman, Tiến sĩ, là Người quản lý thực hành, ML SME và thành viên Cộng đồng lĩnh vực kỹ thuật máy học (TFC) tại Amazon Web Services. Anh ấy giúp khách hàng tận dụng sức mạnh của đám mây để trích xuất giá trị từ dữ liệu của họ bằng phân tích dữ liệu và máy học.

Sunita NadampalliSunita Nadampalli là Giám đốc phát triển phần mềm tại AWS. Cô lãnh đạo việc tối ưu hóa hiệu suất phần mềm Graviton cho khối lượng công việc nghiêng máy, HPC và đa phương tiện. Cô đam mê phát triển nguồn mở và cung cấp các giải pháp phần mềm hiệu quả về chi phí với các SoC của Arm.

Johna LiuJohna Liu là Kỹ sư phát triển phần mềm trong nhóm Amazon SageMaker. Công việc hiện tại của cô tập trung vào việc giúp các nhà phát triển lưu trữ hiệu quả các mô hình máy học và cải thiện hiệu suất suy luận. Cô đam mê phân tích dữ liệu không gian và sử dụng AI để giải quyết các vấn đề xã hội.

Alan TấnAlan Tấn là Giám đốc Sản phẩm Cấp cao của SageMaker, dẫn đầu nỗ lực về suy luận mô hình lớn. Anh ấy đam mê ứng dụng học máy vào lĩnh vực phân tích. Ngoài công việc, anh ấy thích hoạt động ngoài trời.

Dấu thời gian:

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