Chạy các mô hình ML tổng hợp trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Chạy các mô hình ML tổng hợp trên Amazon SageMaker

Việc triển khai mô hình trong học máy (ML) ngày càng trở nên phức tạp. Bạn muốn triển khai không chỉ một mô hình ML mà cả các nhóm mô hình ML lớn được biểu thị dưới dạng quy trình công việc tổng hợp. Các quy trình công việc này bao gồm nhiều mô hình ML. Việc sản xuất các mô hình ML này là một thách thức vì bạn cần tuân thủ các yêu cầu về hiệu suất và độ trễ khác nhau.

Amazon SageMaker hỗ trợ các tập hợp đơn lẻ với Máy chủ suy luận Triton. Khả năng này cho phép bạn chạy các tổ hợp mô hình phù hợp trên một phiên bản duy nhất. Đằng sau hậu trường, SageMaker tận dụng Máy chủ suy luận Triton để quản lý tập hợp trên mọi phiên bản phía sau điểm cuối nhằm tối đa hóa thông lượng và mức sử dụng phần cứng với độ trễ suy luận cực thấp (một mili giây). Với Triton, bạn cũng có thể chọn từ nhiều khung ML được hỗ trợ (bao gồm TensorFlow, PyTorch, ONNX, XGBoost và NVIDIA TensorRT) và các chương trình phụ trợ cơ sở hạ tầng, bao gồm GPU, CPU và Suy luận AWS.

Với khả năng này trên SageMaker, bạn có thể tối ưu hóa khối lượng công việc của mình bằng cách tránh độ trễ mạng tốn kém và tận dụng lợi ích của tính toán và vị trí dữ liệu cho quy trình suy luận tổng hợp. Trong bài đăng này, chúng tôi thảo luận về lợi ích của việc sử dụng Máy chủ suy luận Triton cùng với những cân nhắc về việc liệu đây có phải là tùy chọn phù hợp cho khối lượng công việc của bạn hay không.

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

Máy chủ suy luận Triton được thiết kế để cho phép các nhóm triển khai, chạy và mở rộng quy mô các mô hình AI đã được đào tạo từ bất kỳ khung nào trên bất kỳ cơ sở hạ tầng dựa trên GPU hoặc CPU nào. Ngoài ra, nó đã được tối ưu hóa để cung cấp khả năng suy luận hiệu suất cao trên quy mô lớn với các tính năng như phân khối động, chạy đồng thời, cấu hình mô hình tối ưu, khả năng tập hợp mô hình và hỗ trợ truyền phát đầu vào.

Khối lượng công việc phải tính đến khả năng mà Triton cung cấp để đảm bảo các mô hình của họ có thể được phục vụ. Triton hỗ trợ một số khung công tác phổ biến ngay từ đầu, bao gồm TensorFlow, PyTorch, ONNX, XGBoost và NVIDIA TensorRT. Triton cũng hỗ trợ nhiều chương trình phụ trợ khác nhau cần thiết để thuật toán chạy đúng. Bạn nên đảm bảo rằng các mô hình của bạn được hỗ trợ bởi các phần phụ trợ này và trong trường hợp phần phụ trợ không có, Triton cho phép bạn triển khai và tích hợp nó. Bạn cũng nên xác minh rằng phiên bản thuật toán của bạn được hỗ trợ cũng như đảm bảo rằng các tạo phẩm mô hình được chương trình phụ trợ tương ứng chấp nhận. Để kiểm tra xem thuật toán cụ thể của bạn có được hỗ trợ hay không, hãy tham khảo Phần cuối của máy chủ suy luận Triton để biết danh sách các chương trình phụ trợ được hỗ trợ nguyên bản do NVIDIA duy trì.

Có thể có một số trường hợp trong đó mô hình hoặc tổ hợp mô hình của bạn không hoạt động trên Triton mà không cần nỗ lực nhiều hơn, chẳng hạn như nếu thuật toán của bạn không tồn tại phần phụ trợ được hỗ trợ nguyên gốc. Có một số điều cần cân nhắc khác, chẳng hạn như định dạng tải trọng có thể không lý tưởng, đặc biệt khi kích thước tải trọng của bạn có thể lớn so với yêu cầu của bạn. Như mọi khi, bạn nên xác thực hiệu suất của mình sau khi triển khai các khối lượng công việc này để đảm bảo đáp ứng mong đợi của bạn.

Hãy lấy mô hình mạng thần kinh phân loại hình ảnh và xem cách chúng tôi có thể tăng tốc khối lượng công việc của mình. Trong ví dụ này, chúng tôi sử dụng phần phụ trợ NVIDIA DALI để tăng tốc quá trình tiền xử lý trong bối cảnh tập hợp của chúng tôi.

Tạo quần thể mô hình Triton

Máy chủ suy luận Triton đơn giản hóa việc triển khai các mô hình AI trên quy mô lớn. Máy chủ suy luận Triton đi kèm với một giải pháp thuận tiện giúp đơn giản hóa việc xây dựng các quy trình tiền xử lý và hậu xử lý. Nền tảng Máy chủ suy luận Triton cung cấp bộ lập lịch tập hợp mà bạn có thể sử dụng để xây dựng các mô hình tập hợp đường ống tham gia vào quá trình suy luận đồng thời đảm bảo hiệu quả và tối ưu hóa thông lượng.

Máy chủ suy luận Triton phục vụ các mô hình từ kho mô hình. Chúng ta hãy xem bố cục kho lưu trữ mô hình cho mô hình tập hợp chứa mô hình tiền xử lý DALI, mô hình V3 khởi động TensorFlow và cấu hình tập hợp mô hình. Mỗi thư mục con chứa thông tin kho lưu trữ cho các mô hình tương ứng. Các config.pbtxt tập tin mô tả cấu hình mô hình cho các mô hình. Mỗi thư mục phải có một thư mục con số cho mỗi phiên bản của mô hình và nó được điều hành bởi một chương trình phụ trợ cụ thể mà Triton hỗ trợ.

Kho lưu trữ mô hình NVIDIA Triton

NVIDIA DALI

Đối với bài đăng này, chúng tôi sử dụng Thư viện tải dữ liệu NVIDIA (DALI) làm mô hình tiền xử lý trong tập hợp mô hình của chúng tôi. NVIDIA DALI là thư viện để tải và xử lý trước dữ liệu nhằm tăng tốc các ứng dụng học sâu. Nó cung cấp một tập hợp các khối xây dựng được tối ưu hóa để tải và xử lý dữ liệu hình ảnh, video và âm thanh. Bạn có thể sử dụng nó như một giải pháp thay thế di động cho các trình tải dữ liệu tích hợp và trình lặp dữ liệu trong các khung học sâu phổ biến.

NVIDIA Đại Lý

Đoạn mã sau hiển thị cấu hình mô hình cho phần phụ trợ DALI:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

Mô hình khởi động V3

Đối với bài đăng này, chúng tôi trình bày cách DALI được sử dụng trong một nhóm mô hình với Inception V3. Mô hình được đào tạo trước Inception V3 TensorFlow được lưu ở định dạng GraphDef dưới dạng một tệp duy nhất có tên model.graphdef. Các config.pbtxt tập tin có thông tin về tên model, nền tảng, max_batch_sizevà các hợp đồng đầu vào và đầu ra. Chúng tôi khuyên bạn nên thiết lập max_batch_size cấu hình nhỏ hơn kích thước lô mô hình V3 ban đầu. Tệp nhãn có nhãn lớp cho 1,000 lớp khác nhau. Chúng tôi sao chép nhãn mô hình phân loại khởi đầu vào inception_graphdef thư mục trong kho lưu trữ mô hình. Tệp nhãn chứa 1,000 nhãn lớp của IMAGEnet tập dữ liệu phân loại.

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

ban nhạc triton

Đoạn mã sau hiển thị cấu hình mô hình của một mô hình tập hợp để xử lý trước DALI và phân loại hình ảnh:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

Tạo điểm cuối SageMaker

Điểm cuối của SageMaker cho phép lưu trữ theo thời gian thực trong đó yêu cầu thời gian phản hồi tính bằng mili giây. SageMaker đảm nhận vai trò quản lý lưu trữ mô hình nặng nề nhất và có khả năng tự động mở rộng quy mô. Ngoài ra, một số khả năng cũng được cung cấp, bao gồm lưu trữ nhiều biến thể của mô hình, thử nghiệm A/B cho mô hình của bạn, tích hợp với amazoncloudwatch để đạt được khả năng quan sát hiệu suất của mô hình và giám sát độ trôi của mô hình.

Hãy tạo một mô hình SageMaker từ các tạo phẩm mô hình mà chúng tôi đã tải lên Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3).

Tiếp theo, chúng tôi cũng cung cấp một biến môi trường bổ sung: SAGEMAKER_TRITON_DEFAULT_MODEL_NAME, trong đó chỉ định tên của mẫu máy sẽ được Triton tải. Giá trị của khóa này phải khớp với tên thư mục trong gói mô hình được tải lên Amazon S3. Biến này là tùy chọn trong trường hợp bạn đang sử dụng một mô hình duy nhất. Trong trường hợp mô hình tập hợp, khóa này phải được chỉ định để Triton khởi động trong SageMaker.

Ngoài ra, bạn có thể đặt SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNTSAGEMAKER_TRITON_THREAD_COUNT để tối ưu hóa số lượng chủ đề.

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

Với mô hình trước đó, chúng tôi tạo cấu hình điểm cuối trong đó chúng tôi có thể chỉ định loại và số lượng phiên bản mà chúng tôi muốn ở điểm cuối:

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

Chúng tôi sử dụng cấu hình điểm cuối này để tạo điểm cuối SageMaker mới và đợi quá trình triển khai kết thúc. Trạng thái thay đổi thành InService khi triển khai thành công.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

Tải trọng suy luận

Hình ảnh tải trọng đầu vào đi qua đường dẫn DALI tiền xử lý và được sử dụng trong bộ lập lịch tập hợp do Máy chủ suy luận Triton cung cấp. Chúng tôi xây dựng tải trọng để chuyển đến điểm cuối suy luận:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

suy luận tập hợp

Khi điểm cuối đang chạy, chúng tôi có thể sử dụng hình ảnh mẫu để thực hiện yêu cầu suy luận bằng cách sử dụng JSON làm định dạng tải trọng. Đối với định dạng yêu cầu suy luận, Triton sử dụng các giao thức suy luận tiêu chuẩn của cộng đồng KFServing.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

Với binary+json định dạng, chúng tôi phải chỉ định độ dài của siêu dữ liệu yêu cầu trong tiêu đề để cho phép Triton phân tích cú pháp chính xác tải trọng nhị phân. Điều này được thực hiện bằng cách sử dụng tiêu đề Kiểu nội dung tùy chỉnh application/vnd.sagemaker-triton.binary+json;json-header-size={}.

Điều này khác với việc sử dụng một Inference-Header-Content-Length tiêu đề trên máy chủ Triton độc lập vì tiêu đề tùy chỉnh không được phép trong SageMaker.

Gói tritonclient cung cấp các phương thức tiện ích để tạo tải trọng mà không cần phải biết chi tiết về thông số kỹ thuật. Chúng tôi sử dụng các phương pháp sau để chuyển đổi yêu cầu suy luận của mình sang định dạng nhị phân, mang lại độ trễ suy luận thấp hơn. Tham khảo GitHub máy tính xách tay để biết chi tiết triển khai.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

Kết luận

Trong bài đăng này, chúng tôi đã giới thiệu cách bạn có thể tạo ra các nhóm mô hình chạy trên một phiên bản duy nhất trên SageMaker. Mẫu thiết kế này có thể hữu ích cho việc kết hợp bất kỳ logic tiền xử lý và hậu xử lý nào cùng với các dự đoán suy luận. SageMaker sử dụng Triton để chạy suy luận tổng hợp trên một vùng chứa duy nhất trên một phiên bản hỗ trợ tất cả các khung chính.

Để biết thêm mẫu về nhóm Triton trên SageMaker, hãy tham khảo Repo GitHub. Hãy thử nó ra!


Về các tác giả

Chạy các mô hình ML tổng hợp trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Công viên James là Kiến trúc sư giải pháp tại Amazon Web Services. Anh làm việc với Amazon.com để thiết kế, xây dựng và triển khai các giải pháp công nghệ trên AWS và đặc biệt quan tâm đến AI và học máy. Trong thời gian rảnh rỗi, anh thích tìm kiếm những nền văn hóa mới, trải nghiệm mới và cập nhật những xu hướng công nghệ mới nhất.

Chạy các mô hình ML tổng hợp 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 khách hàng trong ngành tài chính và bảo hiểm 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.

Chạy các mô hình ML tổng hợp 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