




Preview text:
Lab 2 — Triển khai API mô hình “đeo khẩu trang” (Mask Detection) với SageMaker hoặc ECS + API Gateway
Mục tiêu: lưu/truy xuất model từ S , triển khai 3
API inference (HTTPS), gọi từ máy cá nhân. Có hai
đường triển khai, giảng viên có thể cho lớp chọn 1 trong 2: •
Option A (Nhanh/MLOps thuần AWS): Amazon SageMaker real-time endpoint + API Gateway proxy. •
Option B (DevOps phổ thông): ECS Fargate chạy FastAPI/Flask + ALB + API Gateway (hoặc ALB trực tiếp). 1) Mục tiêu •
Tạo IAM Role, S3 bucket model-artifacts. •
Upload mô hình nhận diện đeo khẩu trang (ví dụ: YOLOv5/YOLOv8 hoặc MobileNet đã export ONNX/pt). •
Triển khai endpoint inference có HTTPS, cấp API; test bằng curl/Python requests từ máy cá nhân. •
Ghi log inference (CloudWatch), đo latency.
2) Kiến trúc (2 lựa chọn) Option A — SageMaker
Client --> API Gateway (REST) --> Lambda (proxy nhỏ, tùy chọn) --> SageMaker Endpoint \
+--> S3 (input images, model artifacts) Option B — ECS Fargate
Client --> API Gateway (HTTP API) --> ALB (optional) --> ECS Service (FastAPI) \ +--> S3 (model, uploads) 3) Chuẩn bị •
Tạo S3 bucket mask-model- và thư mục: •
s3://mask-model-/artifacts/model.onnx •
s3://mask-model-/code/inference.py • Tạo IAM Role:
o SageMaker execution role (Option A) có quyền đọc bucket. o Task execution role & T
ask role (Option B) có quyền đọc S3, ghi CloudWatch logs.
4) Option A — SageMaker Endpoint (đề x ất cho lớp ML) u A1. Gói mã inference •
inference.py (giả sử dùng torch/onnxruntime) định nghĩa model_fn, input_fn, predict_fn,
output_fn theo chuẩn SageMaker. •
Upload inference.py vào s3://mask-model-/code/.
A2. Tạo Model, EndpointConfig, Endpoint •
Vào SageMaker → Inference → Models → Create:
o Container: chọn PyTorch/HuggingFace/custom image (tuỳ mô hình).
o Model data: trỏ đến s3://mask-model-/artifacts/.
o Execution role: role đã tạo. •
Endpoint configuration: chọn instance ml.m5.large (demo), 1 instance. • Create endpoint từ config.
A3. Kết nối API Gateway (2 cách) •
Cách 1 (Nhanh): Gọi trực tiếp SageMak
er runtime từ máy cá nhân bằng AWS SDK (bảo mật
IAM). Phù hợp nội bộ/CLI. •
Cách 2 (Công khai HTTPS): API Gateway (REST API) + Lambda proxy:
1. Lambda đọc file ảnh (multipart hoặc base64), gọi sagemak er-runtime:InvokeEndpoint,
trả dự đoán (mask/no-mask, bbox).
2. API Gateway tạo POST /predict, Integration = Lambda.
3. Bật Binary media types nếu gửi ảnh.
4. Deploy stage → lấy Invoke URL.
A4. Test từ máy cá nhân # Gửi ảnh base64 JSON curl -X POST "/predict" \
-H "Content-Type: application/json" \ -d '{"image_b64":""}'
Hoặc dùng multipart/form-data nếu Lambda xử lý.
A5. Giám sát & tối ưu •
Latency/Invocations: CloudWatch → Metrics (SageMaker endpoint). •
Logging lỗi: CloudWatch Logs của Lambda. • Tuỳ c ọn bậ h
t Auto Scaling endpoint theo TPS.
5) Option B — ECS Fargate + FastAPI (đề xuất cho lớp hệ thống) B1. Docker hoá API
Dockerfile (ví dụ FastAPI + onnxruntime): FROM python:3.11-slim WORKDIR /app
RUN pip install fastapi uvicorn[standard] onnxruntime pillow boto3 COPY app/ /app/
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"] app/main.py ( ối giản): t
from fastapi import FastAPI, UploadFile, File import onnxruntime as ort, io from PIL import Image import boto3, base64 app = FastAPI()
sess = ort.InferenceSession("/models/model.onnx") # hoặc tải từ S3 lúc start @app.post("/predict")
async def predict(file: UploadFile = File(...)):
img = Image.open(io.BytesIO(await file.read())).convert("RGB")
# TODO: preprocess -> sess.run(...) -> postprocess
return {"label": "mask", "score" : 0.98}
B2. Lưu model & khởi tạo • Lựa chọn:
o Copy sẵn model.onnx vào image tại build time.
o Hoặc tải từ S3 ở startup (cần quyền S3:GetObject). • Push image lên ECR.
B3. Tạo ECS Fargate Service •
ECS → Create Cluster (Networking only). •
Task Definition: Fargate, container image từ ECR, port 8080. •
Service: 1–2 task, VPC default, Assign public IP nếu dùng trực tiếp. •
ALB (tuỳ chọn mạnh khuyến nghị): tạo ALB + Target Group (port 8080), health check /docs
hoặc /predict (GET 405 là unhealthy, nên thêm /healthz).
B4. API Gateway (HTTP API) → ALB hoặc thẳng ECS • API Gateway → HTTP API: o Route: POST /predict.
o Integration: VPC Link đến ALB (sạch & bảo mật) hoặc public endpoint của ALB.
o Triển khai stage, lấy Invoke URL.
B5. Test từ máy cá nhân curl -X POST "/predict" \ -F "file=@/path/to/face.jpg"
B6. Ghi log & giám sát •
CloudWatch Logs của task (log driver awslogs). •
ALB access logs (tuỳ c ọn) → S3. h •
Metrics: 5xx rate, TargetResponseTime.
6) Kiểm thử chức năng •
Ảnh có người đeo/không đeo khẩu trang → API trả về label + score (và bbo x nếu có). •
Đo latency p50/p95 bằng nhiều lần gọi (loop curl/Python). •
Kiểm tra CORS (nếu sẽ gọi từ web frontend). 7) Deliverables •
Sơ đồ k ến trúc đã chọn (A h i oặc B). •
Link API Invoke URL, ví dụ phản hồi JSON. •
Ảnh chụp CloudWatch metrics (latency, invocations). •
Tài liệu hướng dẫn tái lập (README nhóm).
8) Dọn tài nguyên (bắt buộc) •
SageMaker: Delete endpoint, endpoint config, model. • API Gateway: delete API. •
Lambda (nếu có): delete function. •
ECR images (nếu không dùng). •
ECS: delete service, task def, cluster. •
ALB/Target Group, VPC Link (nếu tạo). •
S3: xoá object/bucket mask-model-.
9) Yêu cầu nhóm & học viên • Mỗi nhóm nộp:
o Link API + mã ví dụ gọi (curl & Python).
o Mô tả pipeline triển khai, bảo mật IAM, tối ưu latency.
o Ghi chú chi phí ước tính & biện pháp hạn chế (auto-stop, t2.micro, xóa tài nguyên).