Anima-Preview-2 / Dockerfile
rikunarita's picture
Update Dockerfile
3b80a19 verified
FROM pytorch/pytorch:2.10.0-cuda13.0-cudnn9-runtime
# ------------------------------------------------
# System packages
# ------------------------------------------------
# [修正1] python3-distutils は Ubuntu 24.04 / Python 3.12 で廃止済み。
# python3-setuptools で代替。
# [最適化] libjemalloc2: 大テンソルの確保/解放時の断片化を抑制。
RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
wget \
python3-venv \
python3-setuptools \
libjemalloc2 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN useradd -rm -d /home/hf -s /bin/bash -g root -G sudo -u 1001 hf
# ------------------------------------------------
# Global performance / memory optimization
# ------------------------------------------------
# [修正2] PYTORCH_ENABLE_MPS_FALLBACK は Apple Silicon 専用。Linux では削除。
# [修正3] HF_HOME/TRANSFORMERS_CACHE を /tmp 直下 → /tmp/hf_cache に変更。
ENV TRANSFORMERS_CACHE=/tmp/hf_cache
ENV HF_HOME=/tmp/hf_cache
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV TOKENIZERS_PARALLELISM=false
# ------------------------------------------------
# CPU 最適化環境変数 (静的に設定できるもの)
# ------------------------------------------------
# KMP_BLOCKTIME=0: アイドルスレッドが即スリープ → 推論ループ間のウェイクアップ遅延ゼロ
ENV KMP_BLOCKTIME=0
# KMP_AFFINITY: スレッドを物理コアに密集配置し HT を活用 (スレッド数固定なし)
ENV KMP_AFFINITY=granularity=fine,compact,1,0
# OMP_WAIT_POLICY=ACTIVE: OpenMP スレッドをビジーウェイト → 短タスク間の再起動コスト削減
ENV OMP_WAIT_POLICY=ACTIVE
# oneDNN プリミティブキャッシュ拡大 → 同一 shape 演算の再コンパイルを削減
ENV ONEDNN_PRIMITIVE_CACHE_CAPACITY=1024
# jemalloc をアロケータとして使用 → 断片化抑制
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
# [修正6] Python 内部アロケータ (pymalloc) をバイパスし、小オブジェクトも
# jemalloc に直結する。pymalloc はメモリを自身のヒープに溜め込み
# LD_PRELOAD 経由の jemalloc に戻さないため、RSS が肥大化する。
ENV PYTHONMALLOC=malloc
# ------------------------------------------------
# スレッド数は entrypoint.sh で nproc を使って動的設定。
# ENV に静的に書くと Docker ビルド時の値に固定されてしまい、
# 実行環境の CPU 数と一致しない場合に 50% 止まりになる。
# ------------------------------------------------
WORKDIR /home/hf
# ------------------------------------------------
# entrypoint.sh を配置
# ------------------------------------------------
COPY --chown=root:root entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
USER hf
# ------------------------------------------------
# ComfyUI
# ------------------------------------------------
RUN git clone https://github.com/comfyanonymous/ComfyUI
WORKDIR /home/hf/ComfyUI
ENV VIRTUAL_ENV=/home/hf/ComfyUI/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN pip install --upgrade pip
RUN pip install --no-cache-dir --prefer-binary -r requirements.txt
# ------------------------------------------------
# models
# ------------------------------------------------
RUN wget -nv -c \
https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/diffusion_models/anima-preview2.safetensors \
-P ./models/diffusion_models/
RUN wget -nv -c \
https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/text_encoders/qwen_3_06b_base.safetensors \
-P ./models/text_encoders/
RUN wget -nv -c \
https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/vae/qwen_image_vae.safetensors \
-P ./models/vae/
RUN wget -nv -c \
https://huggingface.co/Einhorn/Anima-Preview2-Turbo-LoRA/resolve/main/anima_turbo_distill_preview2_14step.safetensors \
-P ./models/loras/
RUN mkdir temp && chmod 777 temp
# ------------------------------------------------
# AMP (自動混合精度) 設定
# ------------------------------------------------
# torch.amp.autocast("cpu") は CPU AMP API であり、
# コードレベルの context manager のため Dockerfile から直接制御できない。
# CPU AMP でサポートされる低精度型は BF16 のみ (FP16 は CPU では非対応)。
# ComfyUI の --bf16-* フラグは内部で torch.amp.autocast("cpu", dtype=bfloat16)
# 相当の処理を有効化する。これが Dockerfile レベルで設定できる唯一の手段。
#
# --force-fp32 はアキュムレーション (累積演算) を FP32 に固定し、
# BF16 演算の精度劣化を最小限に抑える (AMP の標準パターン)。
# ------------------------------------------------
# Launch ComfyUI (CPU optimized)
# ------------------------------------------------
# [修正4] --lowvram: GPU VRAM 管理フラグ。CPU モードで削除。
# [修正5] --use-split-cross-attention: GPU 専用。
# --use-pytorch-cross-attention (CPU 対応) に置換。
# [最適化] --preview-method none: CPU での VAE デコードを省いて本推論に集中。
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["python", "main.py", \
"--cpu", \
"--listen", "0.0.0.0", \
"--port", "7860", \
"--output-directory", "./temp", \
"--bf16-unet", \
"--bf16-vae", \
"--bf16-text-enc", \
"--cache-none", \
"--use-pytorch-cross-attention"]