Khi học máy (ML) trở thành xu hướng chủ đạo và được áp dụng rộng rãi hơn, các ứng dụng suy luận do ML cung cấp ngày càng trở nên phổ biến để giải quyết một loạt các vấn đề kinh doanh phức tạp. Giải pháp cho những vấn đề kinh doanh phức tạp này thường yêu cầu sử dụng nhiều mô hình và bước ML. Bài đăng này chỉ cho bạn cách xây dựng và lưu trữ ứng dụng ML với các vùng chứa tùy chỉnh trên Amazon SageMaker.
Ưu đãi của Amazon SageMaker thuật toán tích hợp và SageMaker dựng sẵn hình ảnh docker để triển khai mô hình. Tuy nhiên, nếu những thứ này không phù hợp với nhu cầu của bạn, bạn có thể mang theo bộ chứa của riêng mình (BYOC) để lưu trữ trên Amazon SageMaker.
Có một số trường hợp sử dụng trong đó người dùng có thể cần BYOC để lưu trữ trên Amazon SageMaker.
- Khung hoặc thư viện ML tùy chỉnh: Nếu bạn dự định sử dụng khung ML hoặc thư viện không được hỗ trợ bởi các thuật toán tích hợp sẵn của Amazon SageMaker hoặc vùng chứa dựng sẵn thì bạn sẽ cần phải tạo vùng chứa tùy chỉnh.
- Mô hình chuyên biệt: Đối với một số miền hoặc ngành nhất định, bạn có thể yêu cầu kiến trúc mô hình cụ thể hoặc các bước tiền xử lý phù hợp không có sẵn trong các dịch vụ Amazon SageMaker tích hợp sẵn.
- Thuật toán độc quyền: Nếu bạn đã tự phát triển thuật toán độc quyền của riêng mình thì bạn sẽ cần một vùng chứa tùy chỉnh để triển khai chúng trên Amazon SageMaker.
- Quy trình suy luận phức tạp: Nếu quy trình suy luận ML của bạn liên quan đến logic nghiệp vụ tùy chỉnh — một loạt các bước phức tạp cần được thực hiện theo một thứ tự cụ thể — thì BYOC có thể giúp bạn quản lý và sắp xếp các bước này hiệu quả hơn.
Tổng quan về giải pháp
Trong giải pháp này, chúng tôi trình bày cách lưu trữ ứng dụng suy luận nối tiếp ML trên Amazon SageMaker với các điểm cuối thời gian thực bằng cách sử dụng hai vùng chứa suy luận tùy chỉnh với phiên bản mới nhất scikit-learn
và xgboost
gói.
Thùng chứa đầu tiên sử dụng một scikit-learn
mô hình để chuyển đổi dữ liệu thô thành các cột đặc trưng. Nó áp dụng Tiêu chuẩn cho các cột số và Bộ mã hóa OneHot đến những cái phân loại.
Vùng chứa thứ hai lưu trữ một dữ liệu đã được huấn luyện trước XGboost
mô hình (tức là dự đoán). Mô hình dự đoán chấp nhận các dự đoán đầu vào và đầu ra đặc trưng.
Cuối cùng, chúng tôi triển khai người làm đặc trưng và người dự đoán trong quy trình suy luận nối tiếp tới điểm cuối thời gian thực của Amazon SageMaker.
Dưới đây là một số cân nhắc khác nhau về lý do tại sao bạn có thể muốn có các vùng chứa riêng biệt trong ứng dụng suy luận của mình.
- Tách - Các bước khác nhau của đường ống có mục đích được xác định rõ ràng và cần được chạy trên các thùng chứa riêng biệt do các phụ thuộc cơ bản liên quan. Điều này cũng giúp giữ cho đường ống có cấu trúc tốt.
- khung - Các bước khác nhau của đường ống sử dụng các khuôn khổ phù hợp với mục đích cụ thể (chẳng hạn như scikit hoặc Spark ML) và do đó cần phải chạy trên các thùng chứa riêng biệt.
- Cô lập tài nguyên - Các bước khác nhau của đường ống có yêu cầu tiêu thụ tài nguyên khác nhau và do đó cần được chạy trên các thùng chứa riêng biệt để kiểm soát và linh hoạt hơn.
- Bảo trì và nâng cấp – Từ quan điểm vận hành, điều này thúc đẩy sự cô lập về chức năng và bạn có thể tiếp tục nâng cấp hoặc sửa đổi các bước riêng lẻ dễ dàng hơn nhiều mà không ảnh hưởng đến các mô hình khác.
Ngoài ra, việc xây dựng cục bộ các vùng chứa riêng lẻ sẽ hỗ trợ quá trình phát triển và thử nghiệm lặp đi lặp lại với các công cụ yêu thích và Môi trường phát triển tích hợp (IDE). Sau khi các vùng chứa đã sẵn sàng, bạn có thể triển khai chúng lên đám mây AWS để suy luận bằng cách sử dụng điểm cuối Amazon SageMaker.
Triển khai đầy đủ, bao gồm các đoạn mã, có sẵn trong kho lưu trữ Github này tại đây.
Điều kiện tiên quyết
Khi chúng tôi kiểm tra cục bộ các vùng chứa tùy chỉnh này trước tiên, chúng tôi sẽ cần cài đặt máy tính để bàn docker trên máy tính cục bộ của bạn. Bạn nên làm quen với việc xây dựng các container docker.
Bạn cũng sẽ cần có tài khoản AWS có quyền truy cập vào Amazon SageMaker, Amazon ECR và Amazon S3 để kiểm tra toàn diện ứng dụng này.
Đảm bảo bạn có phiên bản mới nhất của Boto3
và các gói Python của Amazon SageMaker đã được cài đặt:
Hướng dẫn giải pháp
Xây dựng vùng chứa tính năng tùy chỉnh
Để xây dựng vùng chứa đầu tiên, vùng chứa tính năng, chúng tôi huấn luyện một scikit-learn
mô hình để xử lý các tính năng thô trong bào ngư tập dữ liệu. Tập lệnh tiền xử lý sử dụng Đơn giản để xử lý các giá trị còn thiếu, Tiêu chuẩn để chuẩn hóa các cột số và Bộ mã hóa OneHot để chuyển đổi các cột phân loại. Sau khi lắp máy biến áp, chúng ta lưu mô hình vào việc làm định dạng. Sau đó, chúng tôi nén và tải tạo phẩm mô hình đã lưu này lên Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) Gầu múc.
Đây là đoạn mã mẫu chứng minh điều này. tham khảo tính năng.ipynb để thực hiện đầy đủ:
Tiếp theo, để tạo vùng chứa suy luận tùy chỉnh cho mô hình tính năng, chúng tôi xây dựng hình ảnh Docker với các gói nginx, gunicorn, jar, cùng với các phần phụ thuộc cần thiết khác cho mô hình tính năng.
Nginx, gunicorn và ứng dụng Flask sẽ đóng vai trò là ngăn xếp phục vụ mô hình trên các điểm cuối thời gian thực của Amazon SageMaker.
Khi đưa vùng chứa tùy chỉnh để lưu trữ trên Amazon SageMaker, chúng ta cần đảm bảo rằng tập lệnh suy luận thực hiện các tác vụ sau sau khi được khởi chạy bên trong vùng chứa:
- Tải mô hình: Kịch bản suy luận (
preprocessing.py
) nên tham khảo/opt/ml/model
thư mục để tải mô hình vào vùng chứa. Các tạo phẩm mô hình trong Amazon S3 sẽ được tải xuống và gắn vào vùng chứa tại đường dẫn/opt/ml/model
. - Các biến môi trường: Để chuyển các biến môi trường tùy chỉnh vào vùng chứa, bạn phải chỉ định chúng trong quá trình Mô hình bước tạo hoặc trong quá trình Điểm cuối sáng tạo từ công việc đào tạo.
- Yêu cầu về API: Kịch bản suy luận phải thực hiện cả hai
/ping
và/invocations
các tuyến đường dưới dạng một ứng dụng Flask. Các/ping
API được sử dụng để kiểm tra tình trạng, trong khi/invocations
API xử lý các yêu cầu suy luận. - Ghi nhật ký: Nhật ký đầu ra trong tập lệnh suy luận phải được ghi vào đầu ra tiêu chuẩn (tiêu chuẩn) và sai số chuẩn (tiêu chuẩn) dòng suối. Những nhật ký này sau đó được truyền tới amazoncloudwatch bởi Amazon SageMaker.
Đây là một đoạn trích từ preprocessing.py
điều đó cho thấy việc thực hiện /ping
và /invocations
.
Tham khảo tiền xử lý.py trong thư mục featureizer để thực hiện đầy đủ.
Xây dựng hình ảnh Docker với bộ tính năng và ngăn xếp phục vụ mô hình
Bây giờ chúng ta hãy xây dựng Dockerfile bằng hình ảnh cơ sở tùy chỉnh và cài đặt các phần phụ thuộc cần thiết.
Đối với điều này, chúng tôi sử dụng python:3.9-slim-buster
làm hình ảnh cơ sở. Bạn có thể thay đổi bất kỳ hình ảnh cơ sở nào khác có liên quan đến trường hợp sử dụng của bạn.
Sau đó, chúng tôi sao chép cấu hình nginx, tệp cổng máy chủ web của gunicorn và tập lệnh suy luận vào vùng chứa. Chúng tôi cũng tạo một tập lệnh python có tên là Serve để khởi chạy các tiến trình nginx và gunicorn trong nền và đặt tập lệnh suy luận (tức là ứng dụng preprocessing.py Flask) làm điểm vào cho vùng chứa.
Đây là một đoạn Dockerfile để lưu trữ mô hình tính năng. Để thực hiện đầy đủ hãy tham khảo Dockerfile Dưới người làm đặc trưng thư mục.
Kiểm tra hình ảnh suy luận tùy chỉnh bằng tính năng cục bộ
Bây giờ, hãy xây dựng và thử nghiệm bộ chứa suy luận tùy chỉnh với bộ tính năng cục bộ bằng cách sử dụng Amazon Chế độ cục bộ SageMaker. Chế độ cục bộ hoàn hảo để kiểm tra các tập lệnh xử lý, đào tạo và suy luận của bạn mà không cần khởi chạy bất kỳ tác vụ nào trên Amazon SageMaker. Sau khi xác nhận kết quả kiểm tra cục bộ, bạn có thể dễ dàng điều chỉnh tập lệnh đào tạo và suy luận để triển khai trên Amazon SageMaker với những thay đổi tối thiểu.
Để kiểm tra cục bộ hình ảnh tùy chỉnh của công cụ tính năng, trước tiên hãy xây dựng hình ảnh bằng cách sử dụng hình ảnh đã xác định trước đó Dockerfile. Sau đó, khởi chạy một vùng chứa bằng cách gắn thư mục chứa mô hình tính năng (preprocess.joblib
) đến /opt/ml/model
thư mục bên trong container. Ngoài ra, ánh xạ cổng 8080 từ vùng chứa đến máy chủ.
Sau khi khởi chạy, bạn có thể gửi yêu cầu suy luận tới http://localhost:8080/invocations.
Để xây dựng và khởi chạy vùng chứa, hãy mở một thiết bị đầu cuối và chạy các lệnh sau.
Lưu ý rằng bạn nên thay thế <IMAGE_NAME>
, như được hiển thị trong mã sau đây, cùng với tên hình ảnh vùng chứa của bạn.
Lệnh sau đây cũng giả định rằng người được đào tạo scikit-learn
mô hình (preprocess.joblib
) hiện diện trong một thư mục có tên models
.
Sau khi vùng chứa được thiết lập và chạy, chúng tôi có thể kiểm tra cả / ping và /lời gọi tuyến đường bằng cách sử dụng lệnh cuộn tròn.
Chạy các lệnh dưới đây từ thiết bị đầu cuối
Khi dữ liệu thô (chưa được chuyển đổi) được gửi tới http://localhost:8080/invocations, điểm cuối sẽ phản hồi với dữ liệu được chuyển đổi.
Bạn sẽ thấy phản hồi tương tự như sau:
Bây giờ, chúng tôi chấm dứt vùng chứa đang chạy, sau đó gắn thẻ và đẩy hình ảnh tùy chỉnh cục bộ vào Cơ quan đăng ký vùng chứa đàn hồi Amazon riêng tư (Amazon ECR) kho.
Xem các lệnh sau để đăng nhập vào Amazon ECR, gắn thẻ hình ảnh cục bộ với đường dẫn hình ảnh Amazon ECR đầy đủ rồi đẩy hình ảnh đó lên Amazon ECR. Đảm bảo bạn thay thế region
và account
các biến để phù hợp với môi trường của bạn.
Tham khảo tạo một kho lưu trữ và đẩy hình ảnh lên Amazon ECR Giao diện dòng lệnh AWS (AWSCLI) để biết thêm thông tin.
Bước tùy chọn
Theo tùy chọn, bạn có thể thực hiện thử nghiệm trực tiếp bằng cách triển khai mô hình công cụ tính năng đến điểm cuối thời gian thực bằng hình ảnh docker tùy chỉnh trong Amazon ECR. tham khảo tính năng.ipynb sổ ghi chép để triển khai đầy đủ quá trình xây dựng, thử nghiệm và đẩy hình ảnh tùy chỉnh lên Amazon ECR.
Amazon SageMaker khởi tạo điểm cuối suy luận và sao chép các thành phần lạ của mô hình vào /opt/ml/model
thư mục bên trong container. Nhìn thấy Cách SageMaker tải các tạo phẩm Mô hình của bạn.
Xây dựng vùng chứa dự đoán XGBoost tùy chỉnh
Để xây dựng vùng chứa suy luận XGBoost, chúng tôi làm theo các bước tương tự như chúng tôi đã làm khi xây dựng hình ảnh cho vùng chứa tính năng:
- Tải xuống được đào tạo trước
XGBoost
mô hình từ Amazon S3. - tạo
inference.py
tập lệnh tải phần đã được huấn luyện trướcXGBoost
mô hình, chuyển đổi dữ liệu đầu vào đã chuyển đổi nhận được từ bộ tính năng và chuyển đổi thànhXGBoost.DMatrix
định dạng, chạypredict
trên bộ tăng cường và trả về dự đoán ở định dạng json. - Các tập lệnh và tệp cấu hình tạo thành ngăn xếp phân phát mô hình (tức là
nginx.conf
,wsgi.py
vàserve
vẫn giữ nguyên và không cần sửa đổi. - Chúng tôi sử dụng
Ubuntu:18.04
làm hình ảnh cơ sở cho Dockerfile. Đây không phải là điều kiện tiên quyết. Chúng tôi sử dụng hình ảnh cơ sở của Ubuntu để chứng minh rằng các vùng chứa có thể được tạo bằng bất kỳ hình ảnh cơ sở nào. - Các bước xây dựng hình ảnh docker của khách hàng, kiểm tra hình ảnh cục bộ và đẩy hình ảnh đã kiểm tra lên Amazon ECR vẫn giống như trước.
Để cho ngắn gọn, vì các bước tương tự được trình bày trước đó; tuy nhiên, chúng tôi chỉ hiển thị mã hóa đã thay đổi sau đây.
Đầu tiên, inference.py
kịch bản. Đây là đoạn trích cho thấy việc triển khai /ping
và /invocations
. Tham khảo suy luận.py theo người dự đoán thư mục để thực hiện đầy đủ tập tin này.
Đây là một đoạn Dockerfile để lưu trữ mô hình dự đoán. Để thực hiện đầy đủ hãy tham khảo Dockerfile trong thư mục dự đoán.
Sau đó, chúng tôi tiếp tục xây dựng, thử nghiệm và đẩy hình ảnh dự đoán tùy chỉnh này tới kho lưu trữ riêng trong Amazon ECR. tham khảo dự đoán.ipynb sổ ghi chép để thực hiện đầy đủ việc xây dựng, thử nghiệm và đẩy hình ảnh tùy chỉnh lên Amazon ECR.
Triển khai đường dẫn suy luận nối tiếp
Sau khi chúng tôi đã thử nghiệm cả hình ảnh bộ tính năng và bộ dự đoán cũng như đẩy chúng lên Amazon ECR, giờ đây chúng tôi tải các tạo phẩm mô hình của mình lên bộ chứa Amazon S3.
Sau đó, chúng ta tạo hai đối tượng mô hình: một cho featurizer
(I E, preprocess.joblib
) và khác cho predictor
(I E, xgboost-model
) bằng cách chỉ định uri hình ảnh tùy chỉnh mà chúng tôi đã tạo trước đó.
Đây là một đoạn cho thấy điều đó. tham khảo suy luận nối tiếp-pipeline.ipynb để thực hiện đầy đủ.
Bây giờ, để triển khai các vùng chứa này theo kiểu tuần tự, trước tiên chúng ta tạo một Mô hình đường ống phản đối và vượt qua featurizer
mô hình và predictor
mô hình thành đối tượng danh sách python theo cùng thứ tự.
Sau đó, chúng tôi gọi các .deploy()
phương pháp trên Mô hình đường ống chỉ định loại cá thể và số lượng cá thể.
Ở giai đoạn này, Amazon SageMaker triển khai quy trình suy luận nối tiếp đến điểm cuối thời gian thực. Chúng tôi chờ đợi điểm cuối InService
.
Bây giờ chúng ta có thể kiểm tra điểm cuối bằng cách gửi một số yêu cầu suy luận đến điểm cuối trực tiếp này.
Tham khảo suy luận nối tiếp-pipeline.ipynb để thực hiện đầy đủ.
Làm sạch
Sau khi kiểm tra xong, vui lòng làm theo hướng dẫn trong phần dọn dẹp của sổ ghi chép để xóa các tài nguyên được cung cấp trong bài đăng này nhằm tránh những khoản phí không cần thiết. tham khảo Amazon SageMaker Giá để biết chi tiết về chi phí của các trường hợp suy luận.
Kết luận
Trong bài đăng này, tôi đã trình bày cách chúng ta có thể xây dựng và triển khai ứng dụng suy luận ML nối tiếp bằng cách sử dụng vùng chứa suy luận tùy chỉnh cho các điểm cuối thời gian thực trên Amazon SageMaker.
Giải pháp này minh họa cách khách hàng có thể mang theo bộ chứa tùy chỉnh của riêng mình để lưu trữ trên Amazon SageMaker theo cách tiết kiệm chi phí. Với tùy chọn BYOC, khách hàng có thể nhanh chóng xây dựng và điều chỉnh ứng dụng ML của mình để triển khai trên Amazon SageMaker.
Chúng tôi khuyến khích bạn thử giải pháp này với tập dữ liệu có liên quan đến Chỉ số hiệu suất chính (KPI) của doanh nghiệp bạn. Bạn có thể tham khảo toàn bộ giải pháp tại đây Kho GitHub.
dự án
Lưu ý
Praveen Chamarthi là Chuyên gia cao cấp về AI/ML của Amazon Web Services. Anh ấy đam mê AI/ML và mọi thứ về AWS. Anh ấy giúp khách hàng trên khắp Châu Mỹ mở rộng quy mô, đổi mới và vận hành khối lượng công việc ML một cách hiệu quả trên AWS. Khi rảnh rỗi, Praveen thích đọc sách và xem phim khoa học viễn tưởng.
- Phân phối nội dung và PR được hỗ trợ bởi SEO. Được khuếch đại ngay hôm nay.
- PlatoData.Network Vertical Generative Ai. Trao quyền cho chính mình. Truy cập Tại đây.
- PlatoAiStream. Thông minh Web3. Kiến thức khuếch đại. Truy cập Tại đây.
- Trung tâmESG. Than đá, công nghệ sạch, Năng lượng, Môi trường Hệ mặt trời, Quản lý chất thải. Truy cập Tại đây.
- PlatoSức khỏe. Tình báo thử nghiệm lâm sàng và công nghệ sinh học. Truy cập Tại đây.
- nguồn: https://aws.amazon.com/blogs/machine-learning/build-and-deploy-ml-inference-applications-from-scratch-using-amazon-sagemaker/