把模型服務包成 Docker:一份可用的基礎設定
GPU 容器化有幾個固定要處理的點,這是可以直接改用的骨架。
模型服務容器化的重點不在 Dockerfile 本身,而在映像大小、權重的取得方式與 GPU 的存取。
權重不要打進映像
把幾十 GB 的權重烤進映像,會讓每次部署都要拉一個巨大檔案。正確做法是映像只含程式與相依套件,權重掛載或啟動時下載並快取。
FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 python3-pip && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY app/ ./app/
# 權重掛載進來,不打包
ENV MODEL_DIR=/models
VOLUME ["/models"]
EXPOSE 8000
CMD ["python3", "-m", "app.server"]執行時的必要參數
docker run --rm \
--gpus all \
--shm-size=8g \
-v /data/models:/models:ro \
-p 8000:8000 \
--health-cmd='curl -fs localhost:8000/healthz || exit 1' \
--health-interval=30s \
llm-serve:2026.08三個常見問題
--shm-size太小導致資料載入器崩潰——預設 64MB 對多數框架不夠。- 基礎映像用了 devel 版本,體積多好幾 GB。跑推論用 runtime 就夠。
- 沒有固定套件版本,重建映像後行為改變。務必鎖定版本。
映像標籤用日期或版本號,不要用 latest。回滾時你會感謝自己。