Từ Hỗn Loạn đến Sự Nhất Quán: Docker cho Quy trình làm việc AI

Bạn đã huấn luyện mô hình. Notebook chạy tốt. Bản demo hoạt động mượt mà.

Sau đó, bạn gửi nó cho một đồng nghiệp. Bốn mươi phút sau, bạn nhận được một tin nhắn. Họ gặp lỗi CUDA. Không thể import Torch. Họ dùng sai phiên bản Python.

Bạn thốt ra câu nói mà mọi kỹ sư đều khiếp sợ: "Nó chạy tốt trên máy của tôi."

"Nó chạy tốt trên máy của tôi" là một lời thú nhận. Nó có nghĩa là mã nguồn của bạn phụ thuộc vào những thứ trên laptop mà bạn đã không ghi chép lại. Bạn đã bỏ sót một phiên bản Python, một thư viện hệ thống, hoặc một bộ công cụ CUDA.

Docker ngăn chặn điều này.

Một ứng dụng web điển hình có ít phụ thuộc. Các dự án AI có rất nhiều lớp:

• Các gói Python: Torch, Transformers và Numpy. • Các thư viện hệ thống: Libgl1 hoặc ffmpeg. • Stack CUDA: Driver và toolkit. • Trọng số mô hình (Model weights): Các tệp lớn không nằm trong repo của bạn. • Phiên bản Python: 3.10 trên laptop của bạn, 3.12 trên máy chủ.

Một tệp requirements.txt chỉ ghi lại được một lớp. Docker ghi lại được tất cả các lớp đó.

Một Docker image là một bản chụp (snapshot) của một máy tính. Nó bao gồm hệ điều hành (OS), Python, các gói thư viện và mã nguồn của bạn. Một container là một bản sao đang chạy của bản chụp đó.

Một container chia sẻ nhân (kernel) của máy bạn. Nó khởi động chỉ trong vài giây. Một image sẽ chạy giống hệt nhau trên laptop của bạn và trên một máy chủ GPU đám mây.

Hãy sử dụng Dockerfile để viết "công thức" của bạn. Đây là một mẫu cho PyTorch:

FROM python:3.11-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    libgl1 \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "predict.py"]

Hãy tuân thủ các quy tắc sau để tránh sai sót:

• Cố định phiên bản (Pin your versions). Hãy sử dụng torch==2.3.1 thay vì chỉ dùng torch. Điều này đảm bảo khả năng tái lập (reproducibility). • Sao chép requirements trước. Điều này tận dụng cơ chế lưu bộ nhớ đệm (caching) của Docker. Nó giúp quá trình build nhanh hơn bằng cách bỏ qua việc cài đặt lại nếu mã nguồn của bạn thay đổi nhưng các gói thư viện thì không. • Sử dụng volume cho trọng số mô hình (weights). Đừng đưa các mô hình nặng 5GB vào bên trong image. Hãy sử dụng volume để liên kết thư mục cục bộ của bạn với container. • Mỗi container chỉ chạy một tiến trình. Đừng để API và cơ sở dữ liệu trong cùng một container. Hãy sử dụng Docker Compose để liên kết chúng.

Với Docker, đồng nghiệp của bạn chỉ cần hai câu lệnh:

git clone your-repo docker compose up

Không còn phải gỡ lỗi các lỗi môi trường nữa. Nó hoạt động trên mọi máy tính.

Nguồn: https://dev.to/sachinsingh2156/from-chaos-to-consistency-docker-for-modern-ai-workflows-2gb7

Cộng đồng học tập (tùy chọn): https://t.me/GyaanSetuAi