by Muni Annachi, Arun Dyasani, Jenna Eun, Meenakshi Ponn Shankaran, Shweta Singh, and Ajay Raghunathan on 23 JAN 2025 in Amazon Elastic Container Registry, Amazon Machine Learning, Amazon SageMaker AI, Amazon SageMaker Studio, AWS CodePipeline, DevOps, Featured, Technical How-to
Gắn một Docker image tùy chỉnh vào Amazon SageMaker Studio domain bao gồm nhiều bước. Đầu tiên, bạn cần build và đẩy image lên Amazon Elastic Container Registry (Amazon ECR). Bạn cũng cần đảm bảo rằng Amazon SageMaker domain execution role có đủ quyền để kéo image từ Amazon ECR. Sau khi image được đẩy lên Amazon ECR, bạn tạo một SageMaker custom image trên AWS Management Console. Cuối cùng, bạn cập nhật cấu hình SageMaker domain để chỉ định Amazon Resource Name (ARN) của custom image. Quy trình nhiều bước này cần được thực hiện thủ công mỗi khi người dùng cuối tạo Docker image tùy chỉnh mới để có sẵn trong SageMaker Studio.
Trong bài viết này, chúng tôi giải thích cách tự động hóa quy trình này. Cách tiếp cận này cho phép bạn cập nhật cấu hình SageMaker mà không cần viết thêm mã cơ sở hạ tầng, cung cấp custom image và gắn chúng vào SageMaker domain. Bằng cách áp dụng tự động hóa này, bạn có thể triển khai môi trường phân tích nhất quán và chuẩn hóa trong tổ chức, dẫn đến tăng năng suất của nhóm và giảm thiểu rủi ro bảo mật liên quan đến việc sử dụng image một lần.
Giải pháp được mô tả trong bài viết này hướng đến các kỹ sư machine learning (ML) và các nhóm platform thường chịu trách nhiệm quản lý và chuẩn hóa môi trường tùy chỉnh ở quy mô lớn trong tổ chức. Đối với các nhà khoa học dữ liệu cá nhân muốn trải nghiệm tự phục vụ, chúng tôi khuyên bạn nên sử dụng native Docker support trong SageMaker Studio, như được mô tả trong Accelerate ML workflows with Amazon SageMaker Studio Local Mode and Docker support. Tính năng này cho phép các nhà khoa học dữ liệu build, test và triển khai Docker container tùy chỉnh trực tiếp trong môi trường phát triển tích hợp (IDE) của SageMaker Studio, cho phép bạn thử nghiệm lặp đi lặp lại với môi trường phân tích một cách liền mạch trong giao diện SageMaker Studio quen thuộc.
Tổng quan giải pháp
Sơ đồ sau minh họa kiến trúc giải pháp.
Chúng tôi triển khai một pipeline sử dụng AWS CodePipeline, tự động hóa việc tạo Docker image tùy chỉnh và gắn image vào SageMaker domain. Pipeline trước tiên kiểm tra code base từ GitHub repo và tạo Docker image tùy chỉnh dựa trên cấu hình được khai báo trong các file config. Sau khi tạo và đẩy Docker image thành công lên Amazon ECR, pipeline xác thực image bằng scanning và kiểm tra các lỗ hổng bảo mật trong image. Nếu không tìm thấy lỗ hổng bảo mật nghiêm trọng hoặc cao, pipeline tiếp tục đến giai đoạn phê duyệt thủ công trước khi triển khai. Sau khi hoàn tất phê duyệt thủ công, pipeline triển khai SageMaker domain và tự động gắn custom image vào domain.
Điều kiện tiên quyết
Các điều kiện tiên quyết để triển khai giải pháp được mô tả trong bài viết này bao gồm:
- Một tài khoản AWS và quyền truy cập vào tài khoản và quyền triển khai AWS CloudFormation templates
- js và npm command line interface
- AWS Cloud Development Kit (AWS CDK) đã được cài đặt
- Phiên bản 2 của AWS Command Line Interface (AWS CLI) đã được cài đặt
- Git command line interface đã được cài đặt trên máy tính của bạn để clone repository
- AWS CDK bootstrapping hoàn chỉnh trong tài khoản AWS của bạn
Triển khai giải pháp
Hoàn thành các bước sau để triển khai giải pháp:
- Đăng nhập vào tài khoản AWS của bạn sử dụng AWS CLI trong terminal (để biết thêm chi tiết, xem Authenticating with short-term credentials for the AWS CLI).
- Chạy lệnh sau để đảm bảo bạn đã đăng nhập thành công vào tài khoản AWS:
aws sts get-caller-identity
- Fork GitHub repo về tài khoản GitHub của bạn.
- Clone repo đã fork về máy local bằng lệnh sau:
git clone <clone_url_of_forked_repo>
- Đăng nhập vào console và tạo kết nối AWS CodeStar tới GitHub repo ở bước trước.Để được hướng dẫn, xem Create a connection to GitHub (console).
- Copy ARN của kết nối bạn vừa tạo.
- Vào terminal và chạy lệnh sau để cd vào thư mục repository:
cd streamline-sagemaker-custom-images-cicd
- Chạy lệnh sau để cài đặt tất cả thư viện từ npm:
npm install
- Chạy các lệnh sau để chạy shell script trong terminal. Script này sẽ lấy số tài khoản AWS và AWS Region làm tham số đầu vào và triển khai AWS CDK stack, stack này sẽ triển khai các thành phần như CodePipeline, AWS CodeBuild, ECR repository, v.v. Sử dụng VPC có sẵn để thiết lập biến VPC_ID export bên dưới. Nếu bạn chưa có VPC, hãy tạo một VPC với ít nhất hai subnet và sử dụng nó.
export AWS_ACCOUNT=$(aws sts get-caller-identity –query Account –output text)
export AWS_REGION=<YOUR_AWS_REGION>
export VPC_ID=<VPC_ID_TO_DEPLOY>
export CODESTAR_CONNECTION_ARN=<CODE_STAR_CONNECTION_ARN_CREATED_IN_ABOVE_STEP>
export REPOSITORY_OWNER=<YOUR_GITHUB_LOGIN_ID>
- Chạy lệnh sau để triển khai hạ tầng AWS sử dụng AWS CDK V2 và đảm bảo đợi cho template thành công:
cdk deploy PipelineStack –require-approval never
- Trên CodePipeline console, chọn Pipelines trong thanh điều hướng.
- Chọn link cho pipeline có tên sagemaker-custom-image-pipeline
- Bạn có thể theo dõi tiến trình của pipeline trên console và cung cấp phê duyệt trong giai đoạn phê duyệt thủ công để triển khai hạ tầng SageMaker. Pipeline mất khoảng 5-8 phút để build image và chuyển sang giai đoạn phê duyệt thủ công.
- Đợi pipeline hoàn thành giai đoạn triển khai.
Pipeline tạo các tài nguyên hạ tầng trong tài khoản AWS của bạn với một SageMaker domain và một SageMaker custom image. Nó cũng gắn custom image vào SageMaker domain.
- Trên SageMaker console, chọn Domains dưới Admin configurations trong thanh điều hướng.
- Mở domain có tên team-ds, và điều hướng tới Environment
Bạn sẽ thấy một custom image đã được gắn.
Cách custom images được triển khai và gắn kết
CodePipeline có một giai đoạn gọi là BuildCustomImages chứa các bước tự động để tạo SageMaker custom image sử dụng SageMaker Custom Image CLI và đẩy nó lên ECR repository được tạo trong tài khoản AWS. AWS CDK stack ở giai đoạn triển khai có các bước cần thiết để tạo SageMaker domain và gắn custom image vào domain. Các tham số để tạo SageMaker domain, custom image, v.v. được cấu hình theo định dạng JSON và được sử dụng trong SageMaker stack dưới thư mục lib. Tham khảo phần sagemakerConfig trong environments/config.json để biết các tham số khai báo.
Thêm nhiều custom images
Bây giờ bạn có thể thêm custom Docker image của riêng mình để gắn vào SageMaker domain được tạo bởi pipeline. Đối với các custom images đang được tạo, hãy tham khảo Dockerfile specifications cho các Docker image specifications.
- cd vào thư mục images trong repository qua terminal:
cd images
- Tạo một thư mục mới (ví dụ: custom) dưới thư mục images:
mkdir custom
- Thêm Dockerfile của bạn vào thư mục này. Để kiểm tra, bạn có thể sử dụng cấu hình Dockerfile sau:
FROM public.ecr.aws/amazonlinux/amazonlinux:2
ARG NB_USER=”sagemaker-user”
ARG NB_UID=”1000″
ARG NB_GID=”100″
RUN yum update -y && \
yum install python3 python3-pip shadow-utils -y && \
yum clean all
RUN yum install –assumeyes python3 shadow-utils && \
useradd –create-home –shell /bin/bash –gid “${NB_GID}” –uid ${NB_UID} ${NB_USER} && \
yum clean all && \
python3 -m pip install jupyterlab
RUN python3 -m pip install –upgrade pip
RUN python3 -m pip install –upgrade urllib3==1.26.6
USER ${NB_UID}
CMD jupyter lab –ip 0.0.0.0 –port 8888 \
–ServerApp.base_url=”/jupyterlab/default” \
–ServerApp.token=” \
–ServerApp.allow_origin=’*’
- Cập nhật phần images trong file json dưới thư mục environments để thêm tên thư mục image mới bạn đã tạo:
“images”: [
“repositoryName”: “research-platform-ecr”,
“tags”:[
“jlab”,
“custom” << Add here
]
}
]
- Cập nhật cùng tên image trong customImages dưới cấu hình SageMaker domain đã tạo:
“customImages”:[
“jlab”,
“custom” << Add here
],
- Commit và push các thay đổi lên GitHub repository.
- Bạn sẽ thấy CodePipeline được kích hoạt sau khi push. Theo dõi tiến trình của pipeline và cung cấp phê duyệt thủ công để triển khai.
Sau khi triển khai hoàn tất thành công, bạn sẽ thấy custom image bạn đã thêm được gắn vào cấu hình domain.
Dọn dẹp
Để dọn dẹp tài nguyên của bạn, mở AWS CloudFormation console và xóa các stack SagemakerImageStack và PipelineStack theo thứ tự đó. Nếu bạn gặp lỗi như “S3 Bucket is not empty” hoặc “ECR Repository has images,” bạn có thể xóa thủ công S3 bucket và ECR repository đã tạo. Sau đó bạn có thể thử lại việc xóa các CloudFormation stack.
Kết luận
Trong bài viết này, chúng tôi đã chỉ ra cách tạo giải pháp pipeline continuous integration và delivery (CI/CD) tự động để build, scan và triển khai custom Docker images tới các SageMaker Studio domain. Bạn có thể sử dụng giải pháp này để thúc đẩy tính nhất quán của môi trường phân tích cho các team data science trong doanh nghiệp của bạn. Cách tiếp cận này giúp bạn đạt được quản trị machine learning (ML), khả năng mở rộng và tiêu chuẩn hóa.