Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon

Amazon SageMaker là một dịch vụ được quản lý hoàn toàn cho phép các nhà phát triển và nhà khoa học dữ liệu xây dựng, đào tạo và triển khai các mô hình học máy (ML) ở mọi quy mô một cách nhanh chóng và dễ dàng. SageMaker giúp việc triển khai mô hình vào sản xuất trực tiếp thông qua lệnh gọi API tới dịch vụ trở nên đơn giản. Các mô hình được đóng gói vào các thùng chứa để triển khai mạnh mẽ và có thể mở rộng. Mặc dù nó cung cấp nhiều điểm truy cập khác nhau như SageMaker Python SDK, AWS SDK, bảng điều khiển SageMaker và Xưởng sản xuất Amazon SageMaker notebook để đơn giản hóa quá trình đào tạo và triển khai mô hình ML trên quy mô lớn, khách hàng vẫn đang tìm kiếm những cách tốt hơn để triển khai mô hình của họ cho thử nghiệm sân chơi và tối ưu hóa việc triển khai sản xuất.

Chúng tôi sắp ra mắt hai cách mới để đơn giản hóa quy trình đóng gói và triển khai mô hình bằng SageMaker.

Trong bài đăng này, chúng tôi giới thiệu SDK Python SageMaker mới ModelBuilder trải nghiệm, nhằm mục đích giảm thiểu thời gian học tập cho người dùng SageMaker mới như nhà khoa học dữ liệu, đồng thời giúp các kỹ sư MLOps có kinh nghiệm tận dụng tối đa dịch vụ lưu trữ của SageMaker. Nó làm giảm sự phức tạp của quá trình thiết lập và triển khai ban đầu, đồng thời bằng cách cung cấp hướng dẫn về các phương pháp hay nhất để tận dụng toàn bộ khả năng của SageMaker. Chúng tôi cung cấp thông tin chi tiết và ví dụ về GitHub cho khả năng SageMaker mới này.

Lần ra mắt mới khác là sử dụng trải nghiệm triển khai tương tác mới trong SageMaker Studio. Chúng ta thảo luận điều này trong Phần 2.

Việc triển khai mô hình đến điểm cuối SageMaker đòi hỏi một loạt bước để chuẩn bị sẵn sàng cho mô hình được lưu trữ trên điểm cuối SageMaker. Điều này liên quan đến việc lấy các tạo phẩm mô hình ở định dạng và cấu trúc chính xác, tạo mã suy luận và chỉ định các chi tiết cần thiết như URL hình ảnh mô hình, Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) vị trí của các tạo phẩm mô hình, các bước tuần tự hóa và giải tuần tự hóa cũng như các thông tin cần thiết Quản lý truy cập và nhận dạng AWS (IAM) để tạo điều kiện cho các quyền truy cập thích hợp. Theo đó, cấu hình điểm cuối yêu cầu xác định loại suy luận và định cấu hình các tham số tương ứng như loại phiên bản, số lượng và phân bổ lưu lượng giữa các biến thể mô hình.

Để trợ giúp thêm cho khách hàng khi sử dụng dịch vụ lưu trữ SageMaker, chúng tôi đã giới thiệu tính năng mới ModelBuilder class trong SageMaker Python SDK, mang lại những lợi ích chính sau khi triển khai mô hình cho điểm cuối SageMaker:

  • Thống nhất trải nghiệm triển khai trên các framework – Trải nghiệm mới cung cấp quy trình làm việc nhất quán để triển khai các mô hình được xây dựng bằng các khung khác nhau như PyTorch, TensorFlow và XGBoost. Điều này đơn giản hóa quá trình triển khai.
  • Tự động triển khai mô hình – Các tác vụ như chọn vùng chứa thích hợp, nắm bắt các phần phụ thuộc và xử lý tuần tự hóa/giải tuần tự hóa đều được tự động hóa, giảm bớt nỗ lực thủ công cần thiết cho việc triển khai.
  • Cung cấp quá trình chuyển đổi suôn sẻ từ điểm cuối cục bộ sang điểm cuối được lưu trữ trên SageMaker – Với những thay đổi mã tối thiểu, các mô hình có thể dễ dàng chuyển từ thử nghiệm cục bộ sang triển khai trên điểm cuối SageMaker. Nhật ký trực tiếp giúp việc gỡ lỗi trở nên liền mạch.

Nhìn chung, SageMaker ModelBuilder đơn giản hóa và hợp lý hóa quy trình đóng gói mô hình cho suy luận SageMaker bằng cách xử lý các chi tiết cấp thấp và cung cấp các công cụ để kiểm tra, xác thực và tối ưu hóa điểm cuối. Điều này cải thiện năng suất của nhà phát triển và giảm lỗi.

Trong các phần sau, chúng ta sẽ đi sâu vào chi tiết về tính năng mới này. Chúng ta cũng thảo luận cách triển khai các mô hình lên dịch vụ lưu trữ SageMaker bằng cách sử dụng ModelBuilder, giúp đơn giản hóa quá trình. Sau đó, chúng tôi sẽ hướng dẫn bạn một số ví dụ về các khung khác nhau để triển khai cả mô hình ML truyền thống và mô hình nền tảng hỗ trợ các trường hợp sử dụng AI tổng quát.

Làm quen với SageMaker ModelBuilder

Mới ModelBuilder là một lớp Python tập trung vào việc lấy các mô hình ML được xây dựng bằng các khung, như XGBoost hoặc PyTorch, rồi chuyển đổi chúng thành các mô hình sẵn sàng triển khai trên SageMaker. ModelBuilder cung cấp một build() chức năng tạo ra các tạo phẩm theo máy chủ mô hình và deploy() để triển khai cục bộ hoặc tới điểm cuối SageMaker. Việc giới thiệu tính năng này giúp đơn giản hóa việc tích hợp các mô hình với môi trường SageMaker, tối ưu hóa chúng về hiệu suất và khả năng mở rộng. Sơ đồ sau đây cho thấy cách ModelBuilder hoạt động ở mức độ cao.

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.

Lớp ModelBuilder

Sản phẩm Người xây dựng mô hình lớp cung cấp các tùy chọn khác nhau để tùy chỉnh. Tuy nhiên, để triển khai mô hình khung, người xây dựng mô hình chỉ mong đợi mô hình, đầu vào, đầu ra và vai trò:

class ModelBuilder( model, # model id or model object role_arn, # IAM role schema_builder, # defines the input and output mode, # select between local deployment and depoy to SageMaker Endpoints ...
)

Trình tạo lược đồ

Sản phẩm Trình tạo lược đồ class cho phép bạn xác định đầu vào và đầu ra cho điểm cuối của mình. Nó cho phép người xây dựng lược đồ tạo ra các hàm sắp xếp tương ứng để tuần tự hóa và giải tuần tự hóa đầu vào và đầu ra. Tệp lớp sau đây cung cấp tất cả các tùy chọn để tùy chỉnh:

class SchemaBuilder( sample_input: Any, sample_output: Any, input_translator: CustomPayloadTranslator = None, output_translator: CustomPayloadTranslator = None
)

Tuy nhiên, trong hầu hết các trường hợp, chỉ cần đầu vào và đầu ra mẫu sẽ hoạt động. Ví dụ:

input = "How is the demo going?"
output = "Comment la démo va-t-elle?"
schema = SchemaBuilder(input, output)

Bằng cách cung cấp đầu vào và đầu ra mẫu, SchemaBuilder có thể tự động xác định các phép biến đổi cần thiết, giúp quá trình tích hợp trở nên đơn giản hơn. Đối với các trường hợp sử dụng nâng cao hơn, có thể linh hoạt cung cấp các chức năng dịch tùy chỉnh cho cả đầu vào và đầu ra, đảm bảo rằng các cấu trúc dữ liệu phức tạp hơn cũng có thể được xử lý một cách hiệu quả. Chúng tôi chứng minh điều này trong các phần sau bằng cách triển khai các mô hình khác nhau với nhiều khung khác nhau bằng cách sử dụng ModelBuilder.

Trải nghiệm chế độ cục bộ

Trong ví dụ này, chúng tôi sử dụng ModelBuilder để triển khai mô hình XGBoost cục bộ. Bạn có thể sử dụng Chế độ để chuyển đổi giữa thử nghiệm cục bộ và triển khai đến điểm cuối SageMaker. Trước tiên, chúng tôi huấn luyện mô hình XGBoost (cục bộ hoặc trong SageMaker) và lưu trữ các thành phần lạ của mô hình trong thư mục làm việc:

# Train the model
model = XGBClassifier()
model.fit(X_train, y_train)
model.save_model(model_dir + "/my_model.xgb")

Sau đó, chúng ta tạo một đối tượng ModelBuilder bằng cách chuyển đối tượng mô hình thực tế, SchemaBuilder sử dụng các đối tượng đầu vào và đầu ra của thử nghiệm mẫu (cùng một đầu vào và đầu ra mà chúng tôi đã sử dụng khi đào tạo và thử nghiệm mô hình) để suy ra sự tuần tự hóa cần thiết. Lưu ý rằng chúng tôi sử dụng Mode.LOCAL_CONTAINER để chỉ định triển khai cục bộ. Sau đó, chúng tôi gọi xây dựng chức năng tự động xác định hình ảnh vùng chứa khung được hỗ trợ cũng như quét các phần phụ thuộc. Xem đoạn mã sau:

model_builder_local = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution_role, mode=Mode.LOCAL_CONTAINER
)
xgb_local_builder = model_builder_local.build()

Cuối cùng, chúng ta có thể gọi deploy trong đối tượng mô hình, cũng cung cấp tính năng ghi nhật ký trực tiếp để gỡ lỗi dễ dàng hơn. Bạn không cần chỉ định loại hoặc số lượng phiên bản vì mô hình sẽ được triển khai cục bộ. Nếu bạn cung cấp các tham số này, chúng sẽ bị bỏ qua. Hàm này sẽ trả về đối tượng dự đoán mà chúng ta có thể sử dụng để đưa ra dự đoán với dữ liệu thử nghiệm:

# note: all the serialization and deserialization is handled by the model builder.
predictor_local = xgb_local_builder.deploy(
# instance_type='ml.c5.xlarge',
# initial_instance_count=1
) # Make prediction for test data. predictor_local.predict(X_test)

Tùy chọn, bạn cũng có thể kiểm soát việc tải mô hình cũng như tiền xử lý và hậu xử lý bằng cách sử dụng InferenceSpec. Chúng tôi cung cấp thêm chi tiết sau trong bài viết này. sử dụng LOCAL_CONTAINER là một cách tuyệt vời để kiểm tra cục bộ tập lệnh của bạn trước khi triển khai tới điểm cuối SageMaker.

Tham khảo đến model-builder-xgboost.ipynb ví dụ để kiểm tra việc triển khai cục bộ và tới điểm cuối SageMaker bằng cách sử dụng ModelBuilder.

Triển khai các mô hình truyền thống tới điểm cuối SageMaker

Trong các ví dụ sau, chúng tôi giới thiệu cách sử dụng ModelBuilder để triển khai các mô hình ML truyền thống.

Mô hình XGBoost

Tương tự như phần trước, bạn có thể triển khai mô hình XGBoost tới điểm cuối SageMaker bằng cách thay đổi mode tham số khi tạo ModelBuilder vật:

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(sample_input=sample_input, sample_output=sample_output), role_arn=execution_role, mode=Mode.SAGEMAKER_ENDPOINT
)
xgb_builder = model_builder.build()
predictor = xgb_builder.deploy( instance_type='ml.c5.xlarge', initial_instance_count=1
)

Lưu ý rằng khi triển khai tới điểm cuối SageMaker, bạn cần chỉ định loại phiên bản và số lượng phiên bản khi gọi deploy chức năng.

Tham khảo đến model-builder-xgboost.ipynb ví dụ để triển khai mô hình XGBoost.

Mô hình Triton

Bạn có thể sử dụng ModelBuilder để phục vụ các mô hình PyTorch trên Máy chủ suy luận Triton. Để làm được điều đó, bạn cần chỉ định model_server tham số như ModelServer.TRITON, vượt qua một mô hình và có một SchemaBuilder đối tượng, yêu cầu đầu vào và đầu ra mẫu từ mô hình. ModelBuilder sẽ lo phần còn lại cho bạn.

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(sample_input=sample_input, sample_output=sample_output), role_arn=execution_role, model_server=ModelServer.TRITON, mode=Mode.SAGEMAKER_ENDPOINT
) triton_builder = model_builder.build() predictor = triton_builder.deploy( instance_type='ml.g4dn.xlarge', initial_instance_count=1
)

Tham khảo model-builder-triton.ipynb để triển khai mô hình với Triton.

Người mẫu ôm mặt

Trong ví dụ này, chúng tôi chỉ cho bạn cách triển khai mô hình máy biến áp được đào tạo trước do Hugging Face cung cấp cho SageMaker. Chúng tôi muốn sử dụng Ôm Mặt pipeline để tải mô hình, vì vậy chúng tôi tạo thông số suy luận tùy chỉnh cho ModelBuilder:

# custom inference spec with hugging face pipeline
class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return pipeline("translation_en_to_fr", model="t5-small") def invoke(self, input, model): return model(input) inf_spec = MyInferenceSpec()

Chúng tôi cũng xác định đầu vào và đầu ra của khối lượng công việc suy luận bằng cách xác định SchemaBuilder đối tượng dựa trên đầu vào và đầu ra của mô hình:

schema = SchemaBuilder(value,output)

Sau đó chúng tôi tạo ra ModelBuilder đối tượng và triển khai mô hình lên điểm cuối SageMaker theo logic tương tự như trong ví dụ khác:

builder = ModelBuilder( inference_spec=inf_spec, mode=Mode.SAGEMAKER_ENDPOINT, # you can change it to Mode.LOCAL_CONTAINER for local testing schema_builder=schema, image_uri=image,
)
model = builder.build( role_arn=execution_role, sagemaker_session=sagemaker_session,
)
predictor = model.deploy( initial_instance_count=1, instance_type='ml.g5.2xlarge'
)

Tham khảo model-builder-huggingface.ipynb để triển khai mô hình đường ống Ôm Mặt.

Triển khai các mô hình nền tảng cho điểm cuối SageMaker

Trong các ví dụ sau, chúng tôi giới thiệu cách sử dụng ModelBuilder triển khai các mô hình nền tảng. Giống như các mẫu đã đề cập trước đó, tất cả những gì cần thiết là ID mẫu.

Trung tâm khuôn mặt ôm

Nếu bạn muốn triển khai một mô hình nền tảng từ Trung tâm khuôn mặt ôm, tất cả những gì bạn cần làm là chuyển ID mô hình được đào tạo trước. Ví dụ: đoạn mã sau đây triển khai meta-llama/Llama-2-7b-hf mô hình tại địa phương. Bạn có thể thay đổi chế độ thành Mode.SAGEMAKER_ENDPOINT để triển khai tới điểm cuối SageMaker.

model_builder = ModelBuilder( model="meta-llama/Llama-2-7b-hf", schema_builder=SchemaBuilder(sample_input, sample_output), model_path="/home/ec2-user/SageMaker/LoadTestResources/meta-llama2-7b", #local path where artifacts will be saved mode=Mode.LOCAL_CONTAINER, env_vars={ # Llama 2 is a gated model and requires a Hugging Face Hub token. "HUGGING_FACE_HUB_TOKEN": "<YourHuggingFaceToken>" }
)
model = model_builder.build()
local_predictor = model.deploy()

Đối với các mô hình được kiểm soát trên Hugging Face Hub, bạn cần yêu cầu quyền truy cập thông qua Hugging Face Hub và sử dụng khóa liên quan bằng cách chuyển nó làm biến môi trường HUGGING_FACE_HUB_TOKEN. Một số mẫu Ôm Mặt có thể yêu cầu tin cậy vào mã từ xa. Nó cũng có thể được đặt làm biến môi trường bằng cách sử dụng HF_TRUST_REMOTE_CODE. Theo mặc định, ModelBuilder sẽ sử dụng Suy luận tạo văn bản ôm khuôn mặt (TGI) làm vùng chứa bên dưới cho các mô hình Ôm Mặt. Nếu bạn muốn sử dụng Suy luận mô hình lớn AWS (LMI) thùng chứa, bạn có thể thiết lập model_server tham số như ModelServer.DJL_SERVING khi bạn cấu hình ModelBuilder vật.

Một tính năng gọn gàng của ModelBuilder là khả năng chạy điều chỉnh cục bộ các tham số vùng chứa khi bạn sử dụng LOCAL_CONTAINER cách thức. Tính năng này có thể được sử dụng bằng cách đơn giản là chạy tuned_model = model.tune().

Tham khảo demo-model-builder-huggingface-llama2.ipynb triển khai mô hình Hugging Face Hub.

Khởi động SageMaker

Khởi động Amazon SageMaker cũng cung cấp một số mô hình nền tảng được đào tạo trước. Cũng giống như quá trình triển khai một mô hình từ Hugging Face Hub, cần có ID mô hình. Việc triển khai mô hình SageMaker JumpStart cho điểm cuối SageMaker cũng đơn giản như việc chạy mã sau:

model_builder = ModelBuilder( model="huggingface-llm-falcon-7b-bf16", schema_builder=SchemaBuilder(sample_input, sample_output), role_arn=execution_role
) sm_ep_model = model_builder.build() predictor = sm_ep_model.deploy()

Để biết tất cả ID mô hình SageMaker JumpStart có sẵn, hãy tham khảo Các thuật toán tích hợp với Bảng mô hình được đào tạo trước. Tham khảo model-builder-jumpstart-falcon.ipynb để triển khai mô hình SageMaker JumpStart.

Thành phần suy luận

ModelBulder cho phép bạn sử dụng khả năng thành phần suy luận mới trong SageMaker để triển khai các mô hình. Để biết thêm thông tin về các thành phần suy luận, xem Giảm chi phí triển khai mô hình trung bình 50% bằng cách sử dụng các tính năng mới nhất của SageMaker. Bạn có thể sử dụng các thành phần suy luận để triển khai với ModelBuilder bằng cách chỉ định endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED trong deploy() phương pháp. Bạn cũng có thể sử dụng tune() phương thức tìm nạp số lượng máy gia tốc tối ưu và sửa đổi nó nếu cần.

resource_requirements = ResourceRequirements( requests={ "num_accelerators": 4, "memory": 1024, "copies": 1, }, limits={},
) goldfinch_predictor_2 = model_2.deploy( mode=Mode.SAGEMAKER_ENDPOINT, endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED, ... )

Tham khảo model-builder-inference-thành phần.ipynb để triển khai một mô hình như một thành phần suy luận.

Tùy chỉnh lớp ModelBuilder

Sản phẩm ModelBuilder lớp cho phép bạn tùy chỉnh tải mô hình bằng cách sử dụng InferenceSpec.

Ngoài ra, bạn có thể kiểm soát việc tuần tự hóa và giải tuần tự hóa tải trọng và phản hồi cũng như tùy chỉnh quá trình tiền xử lý và xử lý hậu kỳ bằng cách sử dụng CustomPayloadTranslator. Ngoài ra, khi bạn cần mở rộng các vùng chứa dựng sẵn của chúng tôi để triển khai mô hình trên SageMaker, bạn có thể sử dụng ModelBuilder để xử lý quá trình đóng gói mô hình. Trong phần sau đây, chúng tôi sẽ cung cấp thêm chi tiết về các khả năng này.

Thông số suy luận

Thông số suy luận cung cấp thêm một lớp tùy chỉnh. Nó cho phép bạn xác định cách mô hình được tải và cách nó xử lý các yêu cầu suy luận đến. Bởi vì InferenceSpec, bạn có thể xác định quy trình tải tùy chỉnh cho mô hình của mình, bỏ qua cơ chế tải mặc định. Tính linh hoạt này đặc biệt có lợi khi làm việc với các mô hình không chuẩn hoặc quy trình suy luận tùy chỉnh. Phương thức gọi có thể được tùy chỉnh, cung cấp cho bạn khả năng điều chỉnh cách mô hình xử lý các yêu cầu đến (tiền xử lý và hậu xử lý). Việc tùy chỉnh này có thể cần thiết để đảm bảo rằng quá trình suy luận phù hợp với nhu cầu cụ thể của mô hình. Xem đoạn mã sau:

class InferenceSpec(abc.ABC): @abc.abstractmethod def load(self, model_dir: str): pass @abc.abstractmethod def invoke(self, input_object: object, model: object): pass

Đoạn mã sau đây cho thấy một ví dụ về việc sử dụng lớp này:

class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return // model object def invoke(self, input, model): return model(input)

Trình dịch Payload tùy chỉnh

Khi gọi điểm cuối SageMaker, dữ liệu sẽ được gửi qua tải trọng HTTP với các loại MIME khác nhau. Ví dụ: một hình ảnh được gửi đến điểm cuối để suy luận cần phải được chuyển đổi thành byte ở phía máy khách và gửi qua tải trọng HTTP đến điểm cuối. Khi điểm cuối nhận được tải trọng, nó cần giải tuần tự hóa chuỗi byte trở lại kiểu dữ liệu mà mô hình mong đợi (còn được gọi là khử lưu huỳnh phía máy chủ). Sau khi dự đoán xong mô hình, kết quả cần được tuần tự hóa thành byte để có thể gửi lại thông qua tải trọng HTTP tới người dùng hoặc máy khách. Khi máy khách nhận được dữ liệu byte phản hồi, nó cần thực hiện quá trình giải tuần tự hóa phía máy khách để chuyển đổi dữ liệu byte trở lại định dạng dữ liệu dự kiến, chẳng hạn như JSON. Ở mức nhỏ nhất, bạn cần chuyển đổi dữ liệu cho mục sau (như được đánh số trong sơ đồ sau):

  1. Tuần tự hóa yêu cầu suy luận (do khách hàng xử lý)
  2. Quá trình khử tuần tự hóa yêu cầu suy luận (được xử lý bởi máy chủ hoặc thuật toán)
  3. Gọi mô hình dựa vào tải trọng
  4. Gửi lại tải trọng phản hồi
  5. Tuần tự hóa phản hồi suy luận (được xử lý bởi máy chủ hoặc thuật toán)
  6. Quá trình khử lưu lượng phản hồi suy luận (do khách hàng xử lý)

Sơ đồ sau đây cho thấy quá trình tuần tự hóa và giải tuần tự hóa trong quá trình gọi.

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.

Trong đoạn mã sau đây, chúng tôi đưa ra một ví dụ về CustomPayloadTranslator khi cần tùy chỉnh bổ sung để xử lý cả tuần tự hóa và giải tuần tự hóa ở phía máy khách và phía máy chủ, tương ứng:

from sagemaker.serve import CustomPayloadTranslator # request translator
class MyRequestTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on client side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the input payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on server side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object # response translator class MyResponseTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on server side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the response payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on client side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object

Trong tạp chí demo-model-builder-pytorch.ipynb notebook, chúng tôi trình bày cách dễ dàng triển khai mô hình PyTorch tới điểm cuối SageMaker bằng cách sử dụng ModelBuilder với CustomPayloadTranslatorInferenceSpec lớp học.

Mô hình giai đoạn triển khai

Nếu bạn muốn sắp xếp mô hình để suy luận hoặc trong sổ đăng ký mô hình, bạn có thể sử dụng model.create() or model.register(). Mô hình đã kích hoạt sẽ được tạo trên dịch vụ và sau đó bạn có thể triển khai sau. Xem đoạn mã sau:

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution_role, )
deployable_model = model_builder.build() deployable_model.create() # deployable_model.register() for model registry

Sử dụng các thùng chứa tùy chỉnh

SageMaker cung cấp hình ảnh Docker dựng sẵn về các thuật toán tích hợp và các khung học sâu được hỗ trợ dùng cho đào tạo và suy luận. Nếu vùng chứa SageMaker dựng sẵn không đáp ứng tất cả yêu cầu của bạn, bạn có thể mở rộng hình ảnh hiện có để đáp ứng nhu cầu của mình. Bằng cách mở rộng hình ảnh dựng sẵn, bạn có thể sử dụng các cài đặt và thư viện deep learning đi kèm mà không cần phải tạo hình ảnh từ đầu. Để biết thêm chi tiết về cách mở rộng vùng chứa dựng sẵn, hãy tham khảo tài liệu SageMaker. ModelBuilder hỗ trợ các trường hợp sử dụng khi mang theo vùng chứa của riêng bạn được mở rộng từ vùng chứa Docker dựng sẵn của chúng tôi.

Để sử dụng hình ảnh vùng chứa của riêng bạn trong trường hợp này, bạn cần đặt các trường image_urimodel_server khi xác định ModelBuilder:

model_builder = ModelBuilder( model=model, # Pass in the actual model object. its "predict" method will be invoked in the endpoint. schema_builder=SchemaBuilder(X_test, y_pred), # Pass in a "SchemaBuilder" which will use the sample test input and output objects to infer the serialization needed. role_arn=execution_role, image_uri=image_uri, # REQUIRED FOR BYOC: Passing in image hosted in personal ECR Repo model_server=ModelServer.TORCHSERVE, # REQUIRED FOR BYOC: Passing in model server of choice mode=Mode.SAGEMAKER_ENDPOINT, dependencies={"auto": True, "custom": ["protobuf==3.20.2"]}
)

Ở đây, image_uri sẽ là ARN hình ảnh vùng chứa được lưu trữ trong tài khoản của bạn Đăng ký container đàn hồi Amazon (Amazon ECR) kho lưu trữ. Một ví dụ được hiển thị như sau:

# Pulled the xgboost:1.7-1 DLC and pushed to personal ECR repo
image_uri = "<your_account_id>.dkr.ecr.us-west-2.amazonaws.com/my-byoc:xgb"

Khi image_uri được thiết lập, trong thời gian ModelBuilder quá trình xây dựng, nó sẽ bỏ qua việc tự động phát hiện hình ảnh khi URI hình ảnh được cung cấp. Nếu như model_server không được đặt trong ModelBuilder, bạn sẽ nhận được thông báo lỗi xác thực, ví dụ:

ValueError: Model_server must be set when image_uri is set. Supported model servers: {<ModelServer.TRITON: 5>, <ModelServer.DJL_SERVING: 4>, <ModelServer.TORCHSERVE: 1>}

Kể từ khi xuất bản bài viết này, ModelBuilder hỗ trợ mang theo các thùng chứa của riêng bạn được mở rộng từ chúng tôi hình ảnh vùng chứa DLC dựng sẵn hoặc các thùng chứa được xây dựng bằng các máy chủ mô hình như Thư viện Java sâu (DJL), Suy luận tạo văn bản (TGI), ngọn đuốcphục vụMáy chủ suy luận Triton.

Phần phụ thuộc tùy chỉnh

Khi chạy ModelBuilder.build(), theo mặc định, nó sẽ tự động ghi môi trường Python của bạn vào một requirements.txt file và cài đặt phần phụ thuộc tương tự trong vùng chứa. Tuy nhiên, đôi khi môi trường Python cục bộ của bạn sẽ xung đột với môi trường trong vùng chứa. ModelBuilder cung cấp một cách đơn giản để bạn sửa đổi các phần phụ thuộc đã nắm bắt nhằm khắc phục các xung đột phụ thuộc đó bằng cách cho phép bạn cung cấp các cấu hình tùy chỉnh của mình vào ModelBuilder. Lưu ý rằng điều này chỉ dành cho TorchServe và Triton với InferenceSpec. Ví dụ: bạn có thể chỉ định các phần phụ thuộc của tham số đầu vào, là từ điển Python, trong ModelBuilder như sau:

dependency_config = { "auto" = True, "requirements" = "/path/to/your/requirements.txt" "custom" = ["module>=1.2.3,<1.5", "boto3==1.16.*", "some_module@http://some/url"]
} ModelBuilder( # Other params dependencies=dependency_config,
).build()

Chúng tôi xác định các trường sau:

  • tự động – Có cố gắng tự động nắm bắt các phần phụ thuộc trong môi trường của bạn hay không.
  • yêu cầu – Một chuỗi đường dẫn đến của riêng bạn requirements.txt tài liệu. (Đây là tùy chọn.)
  • khách hàng – Danh sách bất kỳ phần phụ thuộc tùy chỉnh nào khác mà bạn muốn thêm hoặc sửa đổi. (Đây là tùy chọn.)

Nếu cùng một mô-đun được chỉ định ở nhiều nơi, custom sẽ có mức độ ưu tiên cao nhất, sau đó requirementsauto sẽ có mức độ ưu tiên thấp nhất. Ví dụ: giả sử rằng trong quá trình tự động phát hiện, ModelBuilder phát hiện numpy==1.25requirements.txt tập tin được cung cấp chỉ định numpy>=1.24,<1.26. Ngoài ra, còn có một phụ thuộc tùy chỉnh: custom = ["numpy==1.26.1"]. Trong trường hợp này, numpy==1.26.1 sẽ được chọn khi chúng tôi cài đặt các phần phụ thuộc trong vùng chứa.

Làm sạch

Khi bạn hoàn tất việc kiểm tra các mô hình, cách tốt nhất là hãy xóa điểm cuối để tiết kiệm chi phí nếu điểm cuối không còn cần thiết nữa. Bạn có thể theo dõi Làm sạch trong mỗi sổ tay demo hoặc sử dụng mã sau để xóa mô hình và điểm cuối được tạo bởi bản demo:

predictor.delete_model()
predictor.delete_endpoint()

Kết luận

Khả năng SageMaker ModelBuilder mới đơn giản hóa quá trình triển khai mô hình ML vào sản xuất trên SageMaker. Bằng cách xử lý nhiều chi tiết phức tạp ở hậu trường, ModelBuilder giảm bớt thời gian học tập cho người dùng mới và tối đa hóa khả năng sử dụng cho người dùng có kinh nghiệm. Chỉ với một vài dòng mã, bạn có thể triển khai các mô hình có khung tích hợp sẵn như XGBoost, PyTorch, Triton và Hugging Face, cũng như các mô hình do SageMaker JumpStart cung cấp thành các điểm cuối mạnh mẽ, có thể mở rộng trên SageMaker.

Chúng tôi khuyến khích tất cả người dùng SageMaker thử khả năng mới này bằng cách tham khảo Người xây dựng mô hình trang tài liệu. ModelBuilder hiện có sẵn cho tất cả người dùng SageMaker mà không phải trả thêm phí. Tận dụng quy trình làm việc đơn giản hóa này để triển khai mô hình của bạn nhanh hơn. Chúng tôi mong muốn được nghe ModelBuilder tăng tốc vòng đời phát triển mô hình của bạn như thế nào!

Đặc biệt cảm ơn Sirisha Upadhyayala, Raymond Liu, Gary Wang, Dhawal Patel, Deepak Garg và Ram Vegiraju.


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

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Melanie Lý, Tiến sĩ, là TAM Chuyên gia cao cấp về AI/ML tại AWS có trụ sở tại Sydney, Australia. Cô giúp các khách hàng doanh nghiệp xây dựng các giải pháp bằng cách sử dụng các công cụ AI/ML tiên tiến nhất trên AWS, đồng thời cung cấp hướng dẫn về kiến ​​trúc và triển khai các giải pháp ML với các phương pháp hay nhất. Khi rảnh rỗi, cô thích khám phá thiên nhiên và dành thời gian cho gia đình và bạn bè.

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Marc Karp là Kiến trúc sư ML của nhóm Dịch vụ Amazon SageMaker. Anh ấy tập trung vào việc giúp khách hàng thiết kế, triển khai và quản lý khối lượng công việc ML trên quy mô lớn. Trong thời gian rảnh rỗi, anh ấy thích đi du lịch và khám phá những địa điểm mới.

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Sam Edwards, là Kỹ sư đám mây (AI/ML) tại AWS Sydney chuyên về học máy và Amazon SageMaker. Anh ấy rất nhiệt tình giúp đỡ khách hàng giải quyết các vấn đề liên quan đến quy trình học máy và tạo ra các giải pháp mới cho họ. Ngoài công việc, anh thích chơi các môn thể thao dùng vợt và đi du lịch.

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Raghu Ramesha là Kiến trúc sư giải pháp ML cao cấp của nhóm Dịch vụ SageMaker của Amazon. Anh tập trung vào việc giúp khách hàng xây dựng, triển khai và di chuyển khối lượng công việc sản xuất ML sang SageMaker trên quy mô lớn. Anh ấy chuyên về lĩnh vực học máy, AI và thị giác máy tính, đồng thời có bằng thạc sĩ về Khoa học Máy tính của UT Dallas. Khi rảnh rỗi, anh thích đi du lịch và chụp ảnh.

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Shiva Raaj Kotini làm Giám đốc sản phẩm chính trong danh mục sản phẩm suy luận của Amazon SageMaker. Anh tập trung vào việc triển khai mô hình, điều chỉnh hiệu suất và tối ưu hóa trong SageMaker để suy luận.

Đóng gói và triển khai ML và LLM cổ điển một cách dễ dàng với Amazon SageMaker, phần 1: Cải tiến PySDK | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Mohan Gandhi là Kỹ sư phần mềm cao cấp tại AWS. Anh ấy đã làm việc với AWS trong 10 năm qua và đã làm việc trên nhiều dịch vụ AWS khác nhau như EMR, EFA và RDS. Hiện tại, anh ấy đang tập trung vào việc cải thiện Trải nghiệm suy luận của SageMaker. Trong thời gian rảnh rỗi, anh ấy thích đi bộ đường dài và chạy marathon.

Dấu thời gian:

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