จากความวุ่นวายสู่ความสม่ำเสมอ: Docker สำหรับ AI Workflows
คุณเทรนโมเดลเสร็จแล้ว Notebook ก็รันได้ Demo ก็ทำงานได้ปกติ
จากนั้นคุณส่งงานให้เพื่อนร่วมทีม ผ่านไป 40 นาที คุณได้รับข้อความแจ้งว่าพวกเขาเจอ CUDA error, Import Torch ไม่ได้ หรือใช้ Python version ไม่ตรงกัน
คุณพูดประโยคที่วิศวกรทุกคนหวาดกลัว: "มันทำงานได้บนเครื่องของผม"
"มันทำงานได้บนเครื่องของผม" คือการสารภาพความผิด มันหมายความว่าโค้ดของคุณต้องพึ่งพาสิ่งต่างๆ บนแล็ปท็อปที่คุณไม่ได้บันทึกไว้ ไม่ว่าจะเป็น Python version, system library หรือ CUDA toolkit
Docker จะช่วยหยุดปัญหานี้
เว็บแอปทั่วไปมี dependencies ไม่กี่อย่าง แต่โปรเจกต์ AI มีหลายเลเยอร์:
• Python packages: Torch, Transformers และ Numpy • System libraries: Libgl1 หรือ ffmpeg • The CUDA stack: Drivers และ toolkits • Model weights: ไฟล์ขนาดใหญ่ที่ไม่ได้อยู่ใน repo ของคุณ • Python version: 3.10 บนแล็ปท็อปของคุณ แต่เป็น 3.12 บนเซิร์ฟเวอร์
ไฟล์ requirements.txt เก็บข้อมูลได้เพียงเลเยอร์เดียว แต่ Docker เก็บได้ทั้งหมด
Docker image คือ snapshot ของคอมพิวเตอร์เครื่องหนึ่ง ซึ่งประกอบด้วย OS, Python, packages และโค้ดของคุณ ส่วน container คือสำเนาของ snapshot นั้นที่กำลังทำงานอยู่
Container จะใช้ kernel ร่วมกับเครื่องของคุณ มันเริ่มทำงานได้ภายในไม่กี่วินาที และ image เดียวกันนี้จะทำงานเหมือนกันทั้งบนแล็ปท็อปและบน cloud GPU server
ใช้ Dockerfile ในการเขียน "สูตร" ของคุณ นี่คือเทมเพลตสำหรับ 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"]
ปฏิบัติตามกฎเหล่านี้เพื่อหลีกเลี่ยงข้อผิดพลาด:
• ระบุเวอร์ชันให้ชัดเจน (Pin your versions): ใช้ torch==2.3.1 แทนที่จะใช้แค่ torch เพื่อให้มั่นใจว่าผลลัพธ์จะเหมือนเดิมเสมอ (reproducibility) • Copy requirements ก่อน: วิธีนี้จะใช้ประโยชน์จาก Docker caching ซึ่งช่วยให้การ build รวดเร็วขึ้นโดยการข้ามขั้นตอนการติดตั้งใหม่ หากโค้ดของคุณเปลี่ยนแต่ packages ยังเหมือนเดิม • ใช้ volumes สำหรับ weights: อย่าใส่โมเดลขนาด 5GB ลงใน image ให้ใช้ volume เพื่อเชื่อมโยงโฟลเดอร์ในเครื่องของคุณเข้ากับ container แทน • หนึ่ง container ต่อหนึ่ง process: อย่าใส่ทั้ง API และ database ไว้ใน container เดียวกัน ให้ใช้ Docker Compose ในการเชื่อมต่อพวกมันเข้าด้วยกัน
เมื่อใช้ Docker เพื่อนร่วมทีมของคุณต้องการเพียงแค่สองคำสั่ง:
git clone your-repo docker compose up
ไม่ต้องเสียเวลาแก้ error เรื่อง environment อีกต่อไป เพราะมันทำงานได้บนทุกเครื่อง
Source: https://dev.to/sachinsingh2156/from-chaos-to-consistency-docker-for-modern-ai-workflows-2gb7
ชุมชนการเรียนรู้ (ตามความสมัครใจ): https://t.me/GyaanSetuAi