Docker cho Python/AI Workloads
Container hoá FastAPI service, NVIDIA Container Toolkit cho GPU, container hoá model serving — nối trực tiếp 3 khoá học trước.
Toàn bộ hạ tầng AI đã xây ở 3 khoá học trước (FastAPI service, RAG pipeline, model serving qua vLLM) đều chạy trong container. Module này hệ thống hoá lại các thực hành đặc thù cho Python/AI mà Module 1-5 (tổng quát) chưa đủ chi tiết — đặc biệt là container hoá workload cần GPU.
🎯 Mục tiêu học tập
- Viết Dockerfile tối ưu cho ứng dụng FastAPI/Python theo đúng best practice
- Cấu hình NVIDIA Container Toolkit để container truy cập được GPU của host
- Container hoá một service serving model (vLLM/TGI — đã học ở khoá Fine-tuning Module 13)
- Hiểu các cân nhắc đặc thù khi container hoá workload AI: kích thước image, cold start, model weight
Dockerfile tối ưu cho FastAPI/Python
FROM python:3.12-slim AS base
# Cài đặt uv (Module 17 khoá AI Engineer) — nhanh hơn pip nhiều lần
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev
COPY . .
# Chạy bằng user không phải root — xem thêm Module 8 (Security)
RUN useradd -m appuser && chown -R appuser /app
USER appuser
EXPOSE 8000
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Áp dụng đầy đủ các nguyên tắc đã học: base image -slim (Module 2), thứ tự cache đúng
(copy dependency file trước), và chạy bằng user không phải root (đào sâu ở Module 8).
NVIDIA Container Toolkit — Container truy cập GPU
Mặc định, container không thấy được GPU của host — cần cài đặt NVIDIA Container Toolkit trên máy host (không phải trong container) để cầu nối giữa container runtime và driver GPU của host:
# Cài đặt trên HOST (Linux) — không phải trong Dockerfile
# Xem hướng dẫn chi tiết theo distro tại link tài liệu chính thức bên dưới
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# Chạy container với quyền truy cập GPU
docker run --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
# Nếu thấy bảng thông tin GPU hiện ra — cấu hình đã đúng
# docker-compose.yml — khai báo GPU cho 1 service
services:
model-server:
image: my-vllm-image
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
Bảng cấu hình VRAM theo kích thước model đã học ở đó vẫn áp dụng nguyên vẹn — Docker chỉ là lớp đóng gói, không thay đổi yêu cầu phần cứng GPU thực tế bên dưới.
Container hoá Model Serving (vLLM)
# Cách đơn giản nhất: dùng image chính thức của vLLM, chỉ mount model weight vào
docker run --gpus all \
-v ~/models/my-finetuned-model:/model \
-p 8000:8000 \
vllm/vllm-openai:latest \
--model /model --served-model-name support-assistant-v1
Với model weight lớn (hàng GB-chục GB — xem Module 9 khoá Fine-tuning), nên mount weight qua volume thay vì COPY vào image — COPY vào image khiến image khổng lồ, chậm build/push/pull; mount volume giữ image gọn nhẹ, chỉ chứa runtime, và có thể đổi model bằng cách đổi volume mà không cần build lại image.
Cân nhắc đặc thù cho Workload AI
- Kích thước image: image có CUDA/cuDNN thường rất lớn (vài GB) — chấp nhận được cho image chạy lâu dài, nhưng cân nhắc multi-stage (Module 2) nếu có bước build riêng.
- Cold start: container serving model cần thời gian load weight vào GPU memory lúc khởi động (có thể vài chục giây đến vài phút với model lớn) — cấu hình healthcheck/readiness probe (Module 12) với thời gian chờ đủ dài, tránh bị đánh dấu "unhealthy" oan trong lúc đang load model.
- Layer cache cho dependency AI nặng: các thư viện như
torch,transformersrất nặng — luôn tách riêng layer cài đặt chúng khỏi code ứng dụng (đúng nguyên tắc Module 2) vì đây là bước tốn thời gian nhất trong build.
🏋️ Bài tập thực hành
Container hoá 1 FastAPI service từ khoá AI Engineer (RAG hoặc gọi LLM API) theo đúng best practice. Nếu có GPU, thử container hoá và chạy 1 model serving đơn giản qua vLLM với --gpus all, xác nhận nvidia-smi bên trong container thấy đúng GPU. Cấu hình healthcheck với start_period đủ dài để không báo lỗi trong lúc model đang load.
📚 Tài nguyên học tập
-
NVIDIA — Container Toolkit installation guideHướng dẫn chính thức cài đặt NVIDIA Container ToolkitDocs
-
vLLM — Docker deploymentHướng dẫn chính thức triển khai vLLM bằng DockerDocs
-
Astral — uv Docker guideHướng dẫn dùng uv trong Dockerfile hiệu quảDocs
✅ Tự đánh giá hoàn thành
- Viết Dockerfile tối ưu cho ứng dụng FastAPI/Python theo best practice
- Cấu hình thành công NVIDIA Container Toolkit, container thấy được GPU host
- Container hoá được 1 service serving model, mount weight qua volume
- Cấu hình healthcheck phù hợp cho service có thời gian cold start dài