Lab 2 Triển khai API 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ừ , triển khai t model S3 API inference máy nhân (HTTPS), gọi từ . hai
đường triển khai, giảng viên thể cho lớp chọn 1 trong 2:
Option A (Nhanh/MLOps thuần AWS) Amazon SageMaker API Gateway: real-time endpoint +
proxy.
Option B (DevOps phổ thông) ECS Fargate: chy FastAPI Flask ALB/ + + API Gateway (hoặc
ALB trực tiếp).
Tạo IAM Role, S3 bucket model-artifacts.
Upload hình nhận diện đeo khẩu trang (ví dụ: YOLOv5/YOLOv8 MobileNet hoc đã export
ONNX/pt).
Triển khai endpoint inference có , ; test bằng HTTPS cấp API 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
\
+--> (input images, model artifacts)S3
Option B ECS Fargate
Client --> API Gateway (HTTP API) --> ALB (optional) --> ECS Service (FastAPI)
\
+--> (model, uploads)S3
3) Chuẩn bị
To S3 bucket mask-model-<id> thư mục:
s3://mask-model-<id>/artifacts/model.onnx
s3://mask-model-<id>/code/inference.py
To IAM Role:
o SageMaker execution role (Option A) quyền đọc bucket.
o Task execution role Task role & (Option B) quyền đọc S3, ghi CloudWatch logs.
4) Option A SageMaker Endpoint (đề ất cho lớp ML)xu
A1. Gói 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-<id>/code/.
A2. Tạo Model, EndpointConfig, Endpoint
Vào SageMaker Inference Models Create:
o Container: chọn PyTorch HuggingFace/ /custom image (tuỳ hình).
o Model data: trỏ đến s3://mask-model-<id>/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) SageMaker runtime: Gọi trực tiếp 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ọ sagemaker-runtime:InvokeEndpoint, i
trdự đoán (mask/no-mask, bbox).
2. API Gateway to 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ừ y nhân
# Gửi ảnh base64 JSON
curl -X POST "<API_INVOKE_URL>/predict" \
-H "Content-Type: application/json" \
-d '{"image_b64":"<BASE64_IMG>"}'
Hoặc dùng multipart/form-data nếu Lambda xử .
A5. Giám sát & tối ưu
Latency/Invocations: CloudWatch Metrics (SageMaker endpoint).
Logging lỗi: CloudWatch Logs của Lambda.
Tu ọn bậch t Auto Scaling endpoint theo TPS.
5) Option B ECS Fargate + FastAPI (đề t cho lớp hệ xu 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 ort, ioas
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 to
Lựa chọn:
o Copy sẵn model.onnx 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ỳ ọn mạnh khuyến nghị)ch : tạo ALB + Target Group (port 8080), health check /docs
hoc /predict (GET 405 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: đến ALB (sạch & bảo mật) public endpoint của ALB.VPC Link hoặc
o Triển khai stage, lấy Invoke URL.
B5. Test từ y nhân
curl -X POST "<API_URL>/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ỳ ọn) S3.ch
Metrics: 5xx rate, TargetResponseTime.
6) Kiểm thử ức năngch
Ảnh người đeo/không đeo khẩu trang API trvề label score (và bbox 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
đồ ến trúc đã chọn (A hoặc B).ki
Link API Invoke URL, dụ ản hồi JSON.ph
Ả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-<id>.
9) Yêu cầu nhóm & học viên
Mỗi nhóm nộp:
o Link API + dụ gọi (curl & Python).
o 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).

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).