mirror of
https://github.com/Wan-Video/Wan2.1.git
synced 2025-11-04 14:16:57 +00:00
Add professional-grade Docker setup for local deployment
This commit introduces comprehensive Docker support for running Wan2.1 video generation models locally with GPU acceleration. Changes: - Add Dockerfile with CUDA 12.1 support and optimized layer caching - Add docker-compose.yml for easy container orchestration - Add .dockerignore for efficient Docker builds - Add DOCKER_SETUP.md with detailed setup and troubleshooting guide - Add DOCKER_QUICKSTART.md for rapid deployment - Add docker-run.sh helper script for container management - Update Makefile with Docker management commands Features: - Full GPU support with NVIDIA Docker runtime - Single-GPU and multi-GPU (FSDP + xDiT) configurations - Memory optimization flags for consumer GPUs (8GB+) - Gradio web interface support on port 7860 - Volume mounts for models, outputs, and cache - Comprehensive troubleshooting and optimization guides - Production-ready security best practices The Docker setup supports all Wan2.1 models (T2V, I2V, FLF2V, VACE) and includes both 1.3B (consumer GPU) and 14B (high-end GPU) variants. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
7c81b2f27d
commit
0bd40b9bf0
92
.dockerignore
Normal file
92
.dockerignore
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
# Git files
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.gitattributes
|
||||||
|
|
||||||
|
# Docker files
|
||||||
|
Dockerfile
|
||||||
|
docker-compose.yml
|
||||||
|
.dockerignore
|
||||||
|
|
||||||
|
# Python cache
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# Virtual environments
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
ENV/
|
||||||
|
.venv
|
||||||
|
|
||||||
|
# IDE files
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Model files (download separately)
|
||||||
|
models/
|
||||||
|
*.pth
|
||||||
|
*.pt
|
||||||
|
*.bin
|
||||||
|
*.safetensors
|
||||||
|
*.ckpt
|
||||||
|
|
||||||
|
# Output files
|
||||||
|
outputs/
|
||||||
|
output/
|
||||||
|
*.mp4
|
||||||
|
*.avi
|
||||||
|
*.mov
|
||||||
|
*.png
|
||||||
|
*.jpg
|
||||||
|
*.jpeg
|
||||||
|
|
||||||
|
# Cache directories
|
||||||
|
cache/
|
||||||
|
.cache/
|
||||||
|
__pycache__/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
|
||||||
|
# Documentation (keep lightweight)
|
||||||
|
*.md
|
||||||
|
!README.md
|
||||||
|
!DOCKER_SETUP.md
|
||||||
|
|
||||||
|
# Test files
|
||||||
|
tests/
|
||||||
|
test/
|
||||||
|
*.test.py
|
||||||
|
|
||||||
|
# CI/CD
|
||||||
|
.github/
|
||||||
|
.gitlab-ci.yml
|
||||||
|
.travis.yml
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
*.tmp
|
||||||
157
DOCKER_QUICKSTART.md
Normal file
157
DOCKER_QUICKSTART.md
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
# Wan2.1 Docker Quick Start
|
||||||
|
|
||||||
|
Get Wan2.1 running in Docker in 5 minutes!
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Docker 20.10+ installed ([Get Docker](https://docs.docker.com/get-docker/))
|
||||||
|
- NVIDIA GPU with 8GB+ VRAM (for GPU acceleration)
|
||||||
|
- NVIDIA Docker runtime installed ([Install Guide](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html))
|
||||||
|
|
||||||
|
## Quick Start (3 Steps)
|
||||||
|
|
||||||
|
### Step 1: Clone and Navigate
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/Wan-Video/Wan2.1.git
|
||||||
|
cd Wan2.1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: Build and Start
|
||||||
|
|
||||||
|
**Option A: Using the helper script** (Recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./docker-run.sh start
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option B: Using Make**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make docker-build
|
||||||
|
make docker-up
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option C: Using Docker Compose directly**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d wan2-1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Download Models and Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Enter the container
|
||||||
|
./docker-run.sh shell
|
||||||
|
# OR
|
||||||
|
make docker-shell
|
||||||
|
# OR
|
||||||
|
docker compose exec wan2-1 bash
|
||||||
|
|
||||||
|
# Download a model (1.3B for consumer GPUs)
|
||||||
|
pip install "huggingface_hub[cli]"
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-T2V-1.3B --local-dir /app/models/Wan2.1-T2V-1.3B
|
||||||
|
|
||||||
|
# Generate your first video!
|
||||||
|
python generate.py \
|
||||||
|
--task t2v-1.3B \
|
||||||
|
--size 832*480 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-1.3B \
|
||||||
|
--offload_model True \
|
||||||
|
--t5_cpu \
|
||||||
|
--sample_shift 8 \
|
||||||
|
--sample_guide_scale 6 \
|
||||||
|
--prompt "A cute cat playing with a ball of yarn"
|
||||||
|
|
||||||
|
# Your video will be in /app/outputs (accessible at ./outputs on your host)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Commands
|
||||||
|
|
||||||
|
### Container Management
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start container
|
||||||
|
./docker-run.sh start
|
||||||
|
|
||||||
|
# Stop container
|
||||||
|
./docker-run.sh stop
|
||||||
|
|
||||||
|
# Restart container
|
||||||
|
./docker-run.sh restart
|
||||||
|
|
||||||
|
# View logs
|
||||||
|
./docker-run.sh logs
|
||||||
|
|
||||||
|
# Enter shell
|
||||||
|
./docker-run.sh shell
|
||||||
|
|
||||||
|
# Check status
|
||||||
|
./docker-run.sh status
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using Make Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make docker-up # Start
|
||||||
|
make docker-down # Stop
|
||||||
|
make docker-shell # Enter shell
|
||||||
|
make docker-logs # View logs
|
||||||
|
make docker-status # Check status
|
||||||
|
make help # Show all commands
|
||||||
|
```
|
||||||
|
|
||||||
|
## Run Gradio Web Interface
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Inside the container
|
||||||
|
cd gradio
|
||||||
|
python t2v_14B_singleGPU.py --ckpt_dir /app/models/Wan2.1-T2V-1.3B
|
||||||
|
|
||||||
|
# Open browser to: http://localhost:7860
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available Models
|
||||||
|
|
||||||
|
| Model | VRAM | Resolution | Download Command |
|
||||||
|
|-------|------|------------|------------------|
|
||||||
|
| T2V-1.3B | 8GB+ | 480P | `huggingface-cli download Wan-AI/Wan2.1-T2V-1.3B --local-dir /app/models/Wan2.1-T2V-1.3B` |
|
||||||
|
| T2V-14B | 24GB+ | 720P | `huggingface-cli download Wan-AI/Wan2.1-T2V-14B --local-dir /app/models/Wan2.1-T2V-14B` |
|
||||||
|
| I2V-14B-720P | 24GB+ | 720P | `huggingface-cli download Wan-AI/Wan2.1-I2V-14B-720P --local-dir /app/models/Wan2.1-I2V-14B-720P` |
|
||||||
|
| I2V-14B-480P | 16GB+ | 480P | `huggingface-cli download Wan-AI/Wan2.1-I2V-14B-480P --local-dir /app/models/Wan2.1-I2V-14B-480P` |
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### "CUDA out of memory"
|
||||||
|
- Use the 1.3B model with `--offload_model True --t5_cpu`
|
||||||
|
- Reduce resolution to 480P
|
||||||
|
|
||||||
|
### "nvidia-smi not found"
|
||||||
|
- Ensure NVIDIA Docker runtime is installed
|
||||||
|
- Run: `docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi`
|
||||||
|
|
||||||
|
### Can't access Gradio interface
|
||||||
|
- Check if port 7860 is exposed: `docker ps | grep 7860`
|
||||||
|
- Try: `http://127.0.0.1:7860` instead of `localhost`
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
- Read the full [DOCKER_SETUP.md](DOCKER_SETUP.md) for advanced configuration
|
||||||
|
- Check the main [README.md](README.md) for model details
|
||||||
|
- Join the [Discord community](https://discord.gg/AKNgpMK4Yj)
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
Wan2.1/
|
||||||
|
├── models/ # Downloaded models (created automatically)
|
||||||
|
├── outputs/ # Generated videos (accessible from host)
|
||||||
|
├── cache/ # Model cache
|
||||||
|
├── Dockerfile # Docker image definition
|
||||||
|
├── docker-compose.yml # Container orchestration
|
||||||
|
├── docker-run.sh # Helper script
|
||||||
|
├── Makefile # Make commands
|
||||||
|
└── DOCKER_SETUP.md # Detailed documentation
|
||||||
|
```
|
||||||
|
|
||||||
|
**Happy Generating!** 🎬
|
||||||
663
DOCKER_SETUP.md
Normal file
663
DOCKER_SETUP.md
Normal file
@ -0,0 +1,663 @@
|
|||||||
|
# Wan2.1 Docker Setup Guide
|
||||||
|
|
||||||
|
Professional-grade instructions for running Wan2.1 video generation models in Docker containers with GPU support.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
- [Prerequisites](#prerequisites)
|
||||||
|
- [System Requirements](#system-requirements)
|
||||||
|
- [Installation Steps](#installation-steps)
|
||||||
|
- [Quick Start](#quick-start)
|
||||||
|
- [Model Download](#model-download)
|
||||||
|
- [Running Inference](#running-inference)
|
||||||
|
- [Gradio Web Interface](#gradio-web-interface)
|
||||||
|
- [Advanced Configuration](#advanced-configuration)
|
||||||
|
- [Troubleshooting](#troubleshooting)
|
||||||
|
- [Performance Optimization](#performance-optimization)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
### Required Software
|
||||||
|
|
||||||
|
1. **Docker Engine** (version 20.10+)
|
||||||
|
- [Installation Guide](https://docs.docker.com/engine/install/)
|
||||||
|
|
||||||
|
2. **NVIDIA Docker Runtime** (for GPU support)
|
||||||
|
- Required for GPU acceleration
|
||||||
|
- [Installation Guide](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html)
|
||||||
|
|
||||||
|
3. **NVIDIA Drivers** (version 525.60.13+)
|
||||||
|
- CUDA 12.1 compatible drivers
|
||||||
|
- Check with: `nvidia-smi`
|
||||||
|
|
||||||
|
4. **Docker Compose** (version 2.0+)
|
||||||
|
- Typically included with Docker Desktop
|
||||||
|
- [Installation Guide](https://docs.docker.com/compose/install/)
|
||||||
|
|
||||||
|
### Optional Software
|
||||||
|
|
||||||
|
- **Git** - For cloning the repository
|
||||||
|
- **Make** - For using convenience commands
|
||||||
|
- **NVIDIA Container Toolkit** - For multi-GPU support
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## System Requirements
|
||||||
|
|
||||||
|
### Minimum Requirements (T2V-1.3B at 480P)
|
||||||
|
- **GPU**: NVIDIA GPU with 8GB+ VRAM (e.g., RTX 4060 Ti)
|
||||||
|
- **RAM**: 16GB system memory
|
||||||
|
- **Storage**: 50GB free space (for models and cache)
|
||||||
|
- **OS**: Linux (Ubuntu 20.04+), Windows 10/11 with WSL2
|
||||||
|
|
||||||
|
### Recommended Requirements (T2V-14B at 720P)
|
||||||
|
- **GPU**: NVIDIA GPU with 24GB+ VRAM (e.g., RTX 4090, A5000)
|
||||||
|
- **RAM**: 32GB+ system memory
|
||||||
|
- **Storage**: 100GB+ free space
|
||||||
|
- **OS**: Linux (Ubuntu 22.04+)
|
||||||
|
|
||||||
|
### Multi-GPU Setup (for 8x GPU)
|
||||||
|
- **GPUs**: 8x NVIDIA GPUs (A100, H100, etc.)
|
||||||
|
- **RAM**: 128GB+ system memory
|
||||||
|
- **Storage**: 200GB+ free space
|
||||||
|
- **Network**: High-bandwidth GPU interconnect (NVLink preferred)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation Steps
|
||||||
|
|
||||||
|
### Step 1: Verify Docker and NVIDIA Runtime
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check Docker installation
|
||||||
|
docker --version
|
||||||
|
docker compose version
|
||||||
|
|
||||||
|
# Check NVIDIA driver
|
||||||
|
nvidia-smi
|
||||||
|
|
||||||
|
# Test NVIDIA Docker runtime
|
||||||
|
docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi
|
||||||
|
```
|
||||||
|
|
||||||
|
**Expected output**: You should see your GPU(s) listed in the nvidia-smi output.
|
||||||
|
|
||||||
|
### Step 2: Clone the Repository
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/Wan-Video/Wan2.1.git
|
||||||
|
cd Wan2.1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Create Required Directories
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create directories for models, outputs, and cache
|
||||||
|
mkdir -p models outputs cache examples
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 4: Set Environment Variables (Optional)
|
||||||
|
|
||||||
|
For prompt extension with Dashscope API:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create a .env file
|
||||||
|
cat > .env << EOF
|
||||||
|
DASH_API_KEY=your_dashscope_api_key_here
|
||||||
|
DASH_API_URL=https://dashscope.aliyuncs.com/api/v1
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
For international Alibaba Cloud users:
|
||||||
|
```bash
|
||||||
|
DASH_API_URL=https://dashscope-intl.aliyuncs.com/api/v1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 5: Build the Docker Image
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build using Docker Compose (recommended)
|
||||||
|
docker compose build
|
||||||
|
|
||||||
|
# OR build manually
|
||||||
|
docker build -t wan2.1:latest .
|
||||||
|
```
|
||||||
|
|
||||||
|
**Build time**: Approximately 10-20 minutes depending on your internet connection.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Option 1: Using Docker Compose (Recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start the container with GPU support
|
||||||
|
docker compose up -d wan2-1
|
||||||
|
|
||||||
|
# Check container status
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
# View logs
|
||||||
|
docker compose logs -f wan2-1
|
||||||
|
|
||||||
|
# Access the container shell
|
||||||
|
docker compose exec wan2-1 bash
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 2: Using Docker Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -it --gpus all \
|
||||||
|
--name wan2.1-container \
|
||||||
|
-v $(pwd)/models:/app/models \
|
||||||
|
-v $(pwd)/outputs:/app/outputs \
|
||||||
|
-v $(pwd)/cache:/app/cache \
|
||||||
|
-p 7860:7860 \
|
||||||
|
--shm-size=16g \
|
||||||
|
wan2.1:latest bash
|
||||||
|
```
|
||||||
|
|
||||||
|
### For CPU-only Mode
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using Docker Compose
|
||||||
|
docker compose --profile cpu up -d wan2-1-cpu
|
||||||
|
|
||||||
|
# Using Docker Run
|
||||||
|
docker run -it \
|
||||||
|
--name wan2.1-cpu \
|
||||||
|
-e CUDA_VISIBLE_DEVICES="" \
|
||||||
|
-v $(pwd)/models:/app/models \
|
||||||
|
-v $(pwd)/outputs:/app/outputs \
|
||||||
|
-v $(pwd)/cache:/app/cache \
|
||||||
|
-p 7860:7860 \
|
||||||
|
wan2.1:latest bash
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Model Download
|
||||||
|
|
||||||
|
Download models **before** running inference. Models should be placed in the `./models` directory.
|
||||||
|
|
||||||
|
### Using Hugging Face CLI (Inside Container)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Enter the container
|
||||||
|
docker compose exec wan2-1 bash
|
||||||
|
|
||||||
|
# Download T2V-14B model
|
||||||
|
pip install "huggingface_hub[cli]"
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-T2V-14B --local-dir /app/models/Wan2.1-T2V-14B
|
||||||
|
|
||||||
|
# Download T2V-1.3B model
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-T2V-1.3B --local-dir /app/models/Wan2.1-T2V-1.3B
|
||||||
|
|
||||||
|
# Download I2V-14B-720P model
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-I2V-14B-720P --local-dir /app/models/Wan2.1-I2V-14B-720P
|
||||||
|
|
||||||
|
# Download I2V-14B-480P model
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-I2V-14B-480P --local-dir /app/models/Wan2.1-I2V-14B-480P
|
||||||
|
|
||||||
|
# Download FLF2V-14B model
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-FLF2V-14B-720P --local-dir /app/models/Wan2.1-FLF2V-14B-720P
|
||||||
|
|
||||||
|
# Download VACE models
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-VACE-1.3B --local-dir /app/models/Wan2.1-VACE-1.3B
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-VACE-14B --local-dir /app/models/Wan2.1-VACE-14B
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using ModelScope (Alternative for Chinese Users)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install modelscope
|
||||||
|
modelscope download Wan-AI/Wan2.1-T2V-14B --local_dir /app/models/Wan2.1-T2V-14B
|
||||||
|
```
|
||||||
|
|
||||||
|
### Download from Host Machine
|
||||||
|
|
||||||
|
You can also download models on your host machine and they will be accessible in the container:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# On host machine (outside Docker)
|
||||||
|
cd Wan2.1/models
|
||||||
|
huggingface-cli download Wan-AI/Wan2.1-T2V-1.3B --local-dir ./Wan2.1-T2V-1.3B
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Running Inference
|
||||||
|
|
||||||
|
All commands below should be run **inside the container**.
|
||||||
|
|
||||||
|
### Text-to-Video Generation
|
||||||
|
|
||||||
|
#### 1.3B Model (480P) - Consumer GPU Friendly
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task t2v-1.3B \
|
||||||
|
--size 832*480 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-1.3B \
|
||||||
|
--offload_model True \
|
||||||
|
--t5_cpu \
|
||||||
|
--sample_shift 8 \
|
||||||
|
--sample_guide_scale 6 \
|
||||||
|
--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 14B Model (720P) - High-End GPU
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task t2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### With Prompt Extension (Better Quality)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using local Qwen model
|
||||||
|
python generate.py \
|
||||||
|
--task t2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--use_prompt_extend \
|
||||||
|
--prompt_extend_method 'local_qwen' \
|
||||||
|
--prompt "A beautiful sunset over the ocean"
|
||||||
|
|
||||||
|
# Using Dashscope API (requires DASH_API_KEY)
|
||||||
|
DASH_API_KEY=your_key python generate.py \
|
||||||
|
--task t2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--use_prompt_extend \
|
||||||
|
--prompt_extend_method 'dashscope' \
|
||||||
|
--prompt "A beautiful sunset over the ocean"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Image-to-Video Generation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task i2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-I2V-14B-720P \
|
||||||
|
--image /app/examples/i2v_input.JPG \
|
||||||
|
--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard."
|
||||||
|
```
|
||||||
|
|
||||||
|
### First-Last-Frame-to-Video
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task flf2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-FLF2V-14B-720P \
|
||||||
|
--first_frame /app/examples/flf2v_input_first_frame.png \
|
||||||
|
--last_frame /app/examples/flf2v_input_last_frame.png \
|
||||||
|
--prompt "CG animation style, a small blue bird takes off from the ground"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Text-to-Image Generation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task t2i-14B \
|
||||||
|
--size 1024*1024 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--prompt "A serene mountain landscape at dawn"
|
||||||
|
```
|
||||||
|
|
||||||
|
### VACE (Video Creation and Editing)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task vace-1.3B \
|
||||||
|
--size 832*480 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-VACE-1.3B \
|
||||||
|
--src_ref_images /app/examples/girl.png,/app/examples/snake.png \
|
||||||
|
--prompt "Your detailed prompt here"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gradio Web Interface
|
||||||
|
|
||||||
|
### Start Gradio Interface
|
||||||
|
|
||||||
|
#### Text-to-Video (14B)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd gradio
|
||||||
|
python t2v_14B_singleGPU.py \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--prompt_extend_method 'local_qwen'
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Image-to-Video (14B)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd gradio
|
||||||
|
python i2v_14B_singleGPU.py \
|
||||||
|
--ckpt_dir_720p /app/models/Wan2.1-I2V-14B-720P \
|
||||||
|
--prompt_extend_method 'local_qwen'
|
||||||
|
```
|
||||||
|
|
||||||
|
#### VACE (All-in-One)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd gradio
|
||||||
|
python vace.py --ckpt_dir /app/models/Wan2.1-VACE-1.3B
|
||||||
|
```
|
||||||
|
|
||||||
|
### Access the Web Interface
|
||||||
|
|
||||||
|
1. Open your web browser
|
||||||
|
2. Navigate to: `http://localhost:7860`
|
||||||
|
3. Use the intuitive interface to generate videos
|
||||||
|
|
||||||
|
### For Remote Access
|
||||||
|
|
||||||
|
If running on a remote server:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start with public URL (Gradio share feature)
|
||||||
|
python gradio/t2v_14B_singleGPU.py \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--server_name 0.0.0.0 \
|
||||||
|
--server_port 7860 \
|
||||||
|
--share
|
||||||
|
```
|
||||||
|
|
||||||
|
Then access via: `http://your-server-ip:7860`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Advanced Configuration
|
||||||
|
|
||||||
|
### Multi-GPU Inference (FSDP + xDiT)
|
||||||
|
|
||||||
|
For 8-GPU setup using Ulysses or Ring attention strategies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install xDiT
|
||||||
|
pip install "xfuser>=0.4.1"
|
||||||
|
|
||||||
|
# Run with Ulysses strategy (8 GPUs)
|
||||||
|
torchrun --nproc_per_node=8 generate.py \
|
||||||
|
--task t2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--dit_fsdp \
|
||||||
|
--t5_fsdp \
|
||||||
|
--ulysses_size 8 \
|
||||||
|
--prompt "Your prompt here"
|
||||||
|
|
||||||
|
# Run with Ring strategy (for sequence parallelism)
|
||||||
|
torchrun --nproc_per_node=8 generate.py \
|
||||||
|
--task t2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--dit_fsdp \
|
||||||
|
--t5_fsdp \
|
||||||
|
--ring_size 8 \
|
||||||
|
--prompt "Your prompt here"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Memory Optimization Flags
|
||||||
|
|
||||||
|
For limited VRAM:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task t2v-1.3B \
|
||||||
|
--size 832*480 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-1.3B \
|
||||||
|
--offload_model True \ # Offload model to CPU when not in use
|
||||||
|
--t5_cpu \ # Keep T5 encoder on CPU
|
||||||
|
--sample_shift 8 \
|
||||||
|
--sample_guide_scale 6 \
|
||||||
|
--prompt "Your prompt"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Custom Output Directory
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task t2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--output_dir /app/outputs/my_generation \
|
||||||
|
--prompt "Your prompt"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Batch Generation
|
||||||
|
|
||||||
|
Generate multiple variations:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python generate.py \
|
||||||
|
--task t2v-14B \
|
||||||
|
--size 1280*720 \
|
||||||
|
--ckpt_dir /app/models/Wan2.1-T2V-14B \
|
||||||
|
--base_seed 0 \
|
||||||
|
--num_samples 4 \ # Generate 4 variations
|
||||||
|
--prompt "Your prompt"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Issue: "CUDA out of memory"
|
||||||
|
|
||||||
|
**Solutions:**
|
||||||
|
1. Use smaller model (1.3B instead of 14B)
|
||||||
|
2. Reduce resolution (480P instead of 720P)
|
||||||
|
3. Enable memory optimization flags:
|
||||||
|
```bash
|
||||||
|
--offload_model True --t5_cpu
|
||||||
|
```
|
||||||
|
4. Increase Docker shared memory:
|
||||||
|
```bash
|
||||||
|
docker run --shm-size=32g ...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Issue: "nvidia-smi not found" inside container
|
||||||
|
|
||||||
|
**Solutions:**
|
||||||
|
1. Verify NVIDIA Docker runtime is installed on host
|
||||||
|
2. Check Docker daemon configuration:
|
||||||
|
```bash
|
||||||
|
# Edit /etc/docker/daemon.json
|
||||||
|
{
|
||||||
|
"runtimes": {
|
||||||
|
"nvidia": {
|
||||||
|
"path": "nvidia-container-runtime",
|
||||||
|
"runtimeArgs": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"default-runtime": "nvidia"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
3. Restart Docker daemon:
|
||||||
|
```bash
|
||||||
|
sudo systemctl restart docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### Issue: "Flash attention installation failed"
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
Flash attention is optional. The Dockerfile continues even if it fails. For better performance, install manually:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Inside container
|
||||||
|
pip install flash-attn --no-build-isolation
|
||||||
|
```
|
||||||
|
|
||||||
|
### Issue: Model download fails
|
||||||
|
|
||||||
|
**Solutions:**
|
||||||
|
1. Check internet connection
|
||||||
|
2. Use mirror sites (ModelScope for Chinese users)
|
||||||
|
3. Download models on host machine and mount them
|
||||||
|
4. Increase Docker download timeout
|
||||||
|
|
||||||
|
### Issue: "RuntimeError: CUDA error: device-side assert triggered"
|
||||||
|
|
||||||
|
**Solutions:**
|
||||||
|
1. Check CUDA compatibility:
|
||||||
|
```bash
|
||||||
|
python -c "import torch; print(torch.cuda.is_available())"
|
||||||
|
```
|
||||||
|
2. Update NVIDIA drivers
|
||||||
|
3. Rebuild Docker image with matching CUDA version
|
||||||
|
|
||||||
|
### Issue: Gradio interface not accessible
|
||||||
|
|
||||||
|
**Solutions:**
|
||||||
|
1. Check if port is exposed:
|
||||||
|
```bash
|
||||||
|
docker ps | grep 7860
|
||||||
|
```
|
||||||
|
2. Ensure firewall allows port 7860
|
||||||
|
3. Try binding to all interfaces:
|
||||||
|
```bash
|
||||||
|
python gradio/app.py --server_name 0.0.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Issue: Permission denied errors
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
```bash
|
||||||
|
# Fix ownership of mounted volumes
|
||||||
|
sudo chown -R $(id -u):$(id -g) models outputs cache
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Performance Optimization
|
||||||
|
|
||||||
|
### 1. Use SSD Storage
|
||||||
|
- Store models and cache on SSD for faster loading
|
||||||
|
- Use NVMe for best performance
|
||||||
|
|
||||||
|
### 2. Increase Shared Memory
|
||||||
|
```bash
|
||||||
|
# In docker-compose.yml
|
||||||
|
shm_size: '32gb'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Use Mixed Precision
|
||||||
|
- The model uses bfloat16 by default (optimal for modern GPUs)
|
||||||
|
|
||||||
|
### 4. Enable Xformers (if available)
|
||||||
|
```bash
|
||||||
|
pip install xformers
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Multi-GPU Best Practices
|
||||||
|
- Use NVLink/NVSwitch for GPU communication
|
||||||
|
- Balance model sharding with Ulysses + Ring strategies
|
||||||
|
- Monitor GPU utilization: `watch -n 1 nvidia-smi`
|
||||||
|
|
||||||
|
### 6. Optimize Inference Parameters
|
||||||
|
```bash
|
||||||
|
# For T2V-1.3B
|
||||||
|
--sample_shift 8 \ # Adjust 8-12 based on quality
|
||||||
|
--sample_guide_scale 6 # Lower = faster, higher = better quality
|
||||||
|
|
||||||
|
# For T2V-14B
|
||||||
|
--sample_guide_scale 5.0 # Default recommended
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Use Persistent Cache
|
||||||
|
```bash
|
||||||
|
# Models and transformers will be cached in ./cache
|
||||||
|
# Reusing the cache speeds up subsequent runs
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Container Management
|
||||||
|
|
||||||
|
### Stop Container
|
||||||
|
```bash
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restart Container
|
||||||
|
```bash
|
||||||
|
docker compose restart wan2-1
|
||||||
|
```
|
||||||
|
|
||||||
|
### View Logs
|
||||||
|
```bash
|
||||||
|
docker compose logs -f wan2-1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clean Up
|
||||||
|
```bash
|
||||||
|
# Remove containers
|
||||||
|
docker compose down -v
|
||||||
|
|
||||||
|
# Remove images
|
||||||
|
docker rmi wan2.1:latest
|
||||||
|
|
||||||
|
# Clean up Docker system
|
||||||
|
docker system prune -a
|
||||||
|
```
|
||||||
|
|
||||||
|
### Update Container
|
||||||
|
```bash
|
||||||
|
# Pull latest code
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
# Rebuild image
|
||||||
|
docker compose build --no-cache
|
||||||
|
|
||||||
|
# Restart containers
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Security Best Practices
|
||||||
|
|
||||||
|
1. **Do not commit API keys** to version control
|
||||||
|
2. **Use .env files** for sensitive environment variables
|
||||||
|
3. **Limit container privileges**: Avoid running as root
|
||||||
|
4. **Keep Docker updated** for security patches
|
||||||
|
5. **Scan images** for vulnerabilities:
|
||||||
|
```bash
|
||||||
|
docker scan wan2.1:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Support and Resources
|
||||||
|
|
||||||
|
- **GitHub Issues**: [https://github.com/Wan-Video/Wan2.1/issues](https://github.com/Wan-Video/Wan2.1/issues)
|
||||||
|
- **Discord**: [Join the community](https://discord.gg/AKNgpMK4Yj)
|
||||||
|
- **Technical Report**: [arXiv:2503.20314](https://arxiv.org/abs/2503.20314)
|
||||||
|
- **Docker Documentation**: [https://docs.docker.com/](https://docs.docker.com/)
|
||||||
|
- **NVIDIA Container Toolkit**: [https://github.com/NVIDIA/nvidia-docker](https://github.com/NVIDIA/nvidia-docker)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This Docker setup follows the same Apache 2.0 License as the Wan2.1 project. See [LICENSE.txt](LICENSE.txt) for details.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated**: 2025-10-26
|
||||||
|
**Version**: 1.0.0
|
||||||
|
**Maintainer**: Wan2.1 Community
|
||||||
69
Dockerfile
Normal file
69
Dockerfile
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# Wan2.1 Docker Image
|
||||||
|
# Professional-grade Docker setup for Wan2.1 video generation models
|
||||||
|
# Supports both CPU and GPU (NVIDIA CUDA) environments
|
||||||
|
|
||||||
|
FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04
|
||||||
|
|
||||||
|
# Prevent interactive prompts during build
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
python3.10 \
|
||||||
|
python3-pip \
|
||||||
|
python3.10-dev \
|
||||||
|
git \
|
||||||
|
wget \
|
||||||
|
curl \
|
||||||
|
ffmpeg \
|
||||||
|
libsm6 \
|
||||||
|
libxext6 \
|
||||||
|
libxrender-dev \
|
||||||
|
libgomp1 \
|
||||||
|
libgl1-mesa-glx \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Upgrade pip and install build tools
|
||||||
|
RUN pip3 install --no-cache-dir --upgrade pip setuptools wheel
|
||||||
|
|
||||||
|
# Set Python 3.10 as default
|
||||||
|
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 && \
|
||||||
|
update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
|
||||||
|
|
||||||
|
# Copy requirements first for better layer caching
|
||||||
|
COPY requirements.txt /app/requirements.txt
|
||||||
|
|
||||||
|
# Install PyTorch with CUDA support
|
||||||
|
RUN pip install --no-cache-dir torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu121
|
||||||
|
|
||||||
|
# Install flash-attention separately (can be problematic)
|
||||||
|
RUN pip install --no-cache-dir flash-attn --no-build-isolation || echo "Flash attention installation failed, continuing..."
|
||||||
|
|
||||||
|
# Install remaining Python dependencies
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Copy application code
|
||||||
|
COPY . /app/
|
||||||
|
|
||||||
|
# Create directories for models and outputs
|
||||||
|
RUN mkdir -p /app/models /app/outputs /app/cache
|
||||||
|
|
||||||
|
# Set environment variables
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
ENV TORCH_HOME=/app/cache
|
||||||
|
ENV HF_HOME=/app/cache/huggingface
|
||||||
|
ENV TRANSFORMERS_CACHE=/app/cache/transformers
|
||||||
|
ENV CUDA_VISIBLE_DEVICES=0
|
||||||
|
|
||||||
|
# Expose port for Gradio
|
||||||
|
EXPOSE 7860
|
||||||
|
|
||||||
|
# Health check
|
||||||
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
||||||
|
CMD python -c "import torch; print('CUDA available:', torch.cuda.is_available())" || exit 1
|
||||||
|
|
||||||
|
# Default command (can be overridden)
|
||||||
|
CMD ["/bin/bash"]
|
||||||
55
Makefile
55
Makefile
@ -1,5 +1,58 @@
|
|||||||
.PHONY: format
|
.PHONY: format docker-build docker-up docker-down docker-shell docker-logs docker-clean help
|
||||||
|
|
||||||
|
# Code formatting
|
||||||
format:
|
format:
|
||||||
isort generate.py gradio wan
|
isort generate.py gradio wan
|
||||||
yapf -i -r *.py generate.py gradio wan
|
yapf -i -r *.py generate.py gradio wan
|
||||||
|
|
||||||
|
# Docker commands
|
||||||
|
docker-build:
|
||||||
|
@echo "Building Docker image..."
|
||||||
|
docker compose build
|
||||||
|
|
||||||
|
docker-up:
|
||||||
|
@echo "Starting Wan2.1 container..."
|
||||||
|
@mkdir -p models outputs cache
|
||||||
|
docker compose up -d wan2-1
|
||||||
|
|
||||||
|
docker-down:
|
||||||
|
@echo "Stopping Wan2.1 container..."
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
docker-restart: docker-down docker-up
|
||||||
|
|
||||||
|
docker-shell:
|
||||||
|
@echo "Entering container shell..."
|
||||||
|
docker compose exec wan2-1 bash
|
||||||
|
|
||||||
|
docker-logs:
|
||||||
|
@echo "Showing container logs..."
|
||||||
|
docker compose logs -f wan2-1
|
||||||
|
|
||||||
|
docker-clean:
|
||||||
|
@echo "Cleaning up Docker resources..."
|
||||||
|
docker compose down -v
|
||||||
|
docker system prune -f
|
||||||
|
|
||||||
|
docker-status:
|
||||||
|
@echo "Container status:"
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
# Help command
|
||||||
|
help:
|
||||||
|
@echo "Wan2.1 Makefile Commands:"
|
||||||
|
@echo ""
|
||||||
|
@echo "Code Formatting:"
|
||||||
|
@echo " make format - Format Python code with isort and yapf"
|
||||||
|
@echo ""
|
||||||
|
@echo "Docker Management:"
|
||||||
|
@echo " make docker-build - Build Docker image"
|
||||||
|
@echo " make docker-up - Start container (with GPU support)"
|
||||||
|
@echo " make docker-down - Stop container"
|
||||||
|
@echo " make docker-restart - Restart container"
|
||||||
|
@echo " make docker-shell - Enter container shell"
|
||||||
|
@echo " make docker-logs - View container logs"
|
||||||
|
@echo " make docker-status - Show container status"
|
||||||
|
@echo " make docker-clean - Remove containers and clean up"
|
||||||
|
@echo ""
|
||||||
|
@echo "For detailed Docker setup, see DOCKER_SETUP.md"
|
||||||
|
|||||||
99
docker-compose.yml
Normal file
99
docker-compose.yml
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
wan2-1:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
image: wan2.1:latest
|
||||||
|
container_name: wan2.1-gpu
|
||||||
|
|
||||||
|
# GPU support - requires NVIDIA Docker runtime
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: all
|
||||||
|
capabilities: [gpu]
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
environment:
|
||||||
|
- NVIDIA_VISIBLE_DEVICES=all
|
||||||
|
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
|
||||||
|
- CUDA_VISIBLE_DEVICES=0
|
||||||
|
- PYTHONUNBUFFERED=1
|
||||||
|
- TORCH_HOME=/app/cache
|
||||||
|
- HF_HOME=/app/cache/huggingface
|
||||||
|
- TRANSFORMERS_CACHE=/app/cache/transformers
|
||||||
|
# Optional: Set your Dashscope API key for prompt extension
|
||||||
|
# - DASH_API_KEY=your_api_key_here
|
||||||
|
# - DASH_API_URL=https://dashscope.aliyuncs.com/api/v1
|
||||||
|
|
||||||
|
# Volume mounts
|
||||||
|
volumes:
|
||||||
|
# Mount models directory (download models here)
|
||||||
|
- ./models:/app/models
|
||||||
|
# Mount outputs directory
|
||||||
|
- ./outputs:/app/outputs
|
||||||
|
# Mount cache directory for model downloads
|
||||||
|
- ./cache:/app/cache
|
||||||
|
# Optional: Mount examples directory if you modify it
|
||||||
|
- ./examples:/app/examples
|
||||||
|
|
||||||
|
# Port mapping for Gradio interface
|
||||||
|
ports:
|
||||||
|
- "7860:7860"
|
||||||
|
|
||||||
|
# Shared memory size (important for DataLoader workers)
|
||||||
|
shm_size: '16gb'
|
||||||
|
|
||||||
|
# Keep container running
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
# Network mode
|
||||||
|
network_mode: bridge
|
||||||
|
|
||||||
|
# Restart policy
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
# CPU-only service (for systems without GPU)
|
||||||
|
wan2-1-cpu:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
image: wan2.1:latest
|
||||||
|
container_name: wan2.1-cpu
|
||||||
|
profiles:
|
||||||
|
- cpu
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- PYTHONUNBUFFERED=1
|
||||||
|
- TORCH_HOME=/app/cache
|
||||||
|
- HF_HOME=/app/cache/huggingface
|
||||||
|
- TRANSFORMERS_CACHE=/app/cache/transformers
|
||||||
|
- CUDA_VISIBLE_DEVICES=""
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- ./models:/app/models
|
||||||
|
- ./outputs:/app/outputs
|
||||||
|
- ./cache:/app/cache
|
||||||
|
- ./examples:/app/examples
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "7860:7860"
|
||||||
|
|
||||||
|
shm_size: '8gb'
|
||||||
|
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
network_mode: bridge
|
||||||
|
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
models:
|
||||||
|
outputs:
|
||||||
|
cache:
|
||||||
183
docker-run.sh
Executable file
183
docker-run.sh
Executable file
@ -0,0 +1,183 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Wan2.1 Docker Helper Script
|
||||||
|
# Quick start script for running Wan2.1 in Docker
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
CONTAINER_NAME="wan2.1-gpu"
|
||||||
|
IMAGE_NAME="wan2.1:latest"
|
||||||
|
MODELS_DIR="./models"
|
||||||
|
OUTPUTS_DIR="./outputs"
|
||||||
|
CACHE_DIR="./cache"
|
||||||
|
|
||||||
|
# Print header
|
||||||
|
echo -e "${BLUE}========================================${NC}"
|
||||||
|
echo -e "${BLUE} Wan2.1 Docker Helper Script${NC}"
|
||||||
|
echo -e "${BLUE}========================================${NC}\n"
|
||||||
|
|
||||||
|
# Check if Docker is installed
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
echo -e "${RED}Error: Docker is not installed${NC}"
|
||||||
|
echo "Please install Docker first: https://docs.docker.com/engine/install/"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if Docker Compose is installed
|
||||||
|
if ! command -v docker compose &> /dev/null; then
|
||||||
|
echo -e "${RED}Error: Docker Compose is not installed${NC}"
|
||||||
|
echo "Please install Docker Compose: https://docs.docker.com/compose/install/"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Function to check NVIDIA Docker runtime
|
||||||
|
check_nvidia_runtime() {
|
||||||
|
if ! docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi &> /dev/null; then
|
||||||
|
echo -e "${YELLOW}Warning: NVIDIA Docker runtime not available${NC}"
|
||||||
|
echo "GPU acceleration will not be available"
|
||||||
|
echo "Install NVIDIA Container Toolkit: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to create directories
|
||||||
|
create_directories() {
|
||||||
|
echo -e "${BLUE}Creating required directories...${NC}"
|
||||||
|
mkdir -p "$MODELS_DIR" "$OUTPUTS_DIR" "$CACHE_DIR"
|
||||||
|
echo -e "${GREEN}✓ Directories created${NC}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to build Docker image
|
||||||
|
build_image() {
|
||||||
|
echo -e "${BLUE}Building Docker image...${NC}"
|
||||||
|
docker compose build
|
||||||
|
echo -e "${GREEN}✓ Docker image built successfully${NC}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to start container
|
||||||
|
start_container() {
|
||||||
|
echo -e "${BLUE}Starting Wan2.1 container...${NC}"
|
||||||
|
|
||||||
|
if check_nvidia_runtime; then
|
||||||
|
echo "Starting with GPU support..."
|
||||||
|
docker compose up -d wan2-1
|
||||||
|
else
|
||||||
|
echo "Starting in CPU-only mode..."
|
||||||
|
docker compose --profile cpu up -d wan2-1-cpu
|
||||||
|
CONTAINER_NAME="wan2.1-cpu"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${GREEN}✓ Container started successfully${NC}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to show status
|
||||||
|
show_status() {
|
||||||
|
echo -e "${BLUE}Container Status:${NC}"
|
||||||
|
docker compose ps
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to show logs
|
||||||
|
show_logs() {
|
||||||
|
echo -e "${BLUE}Showing container logs (Ctrl+C to exit)...${NC}"
|
||||||
|
docker compose logs -f "$CONTAINER_NAME"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to enter container
|
||||||
|
enter_container() {
|
||||||
|
echo -e "${BLUE}Entering container shell...${NC}"
|
||||||
|
docker compose exec wan2-1 bash || docker compose exec wan2-1-cpu bash
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to stop container
|
||||||
|
stop_container() {
|
||||||
|
echo -e "${BLUE}Stopping container...${NC}"
|
||||||
|
docker compose down
|
||||||
|
echo -e "${GREEN}✓ Container stopped${NC}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to show help
|
||||||
|
show_help() {
|
||||||
|
cat << EOF
|
||||||
|
Usage: ./docker-run.sh [COMMAND]
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
build Build the Docker image
|
||||||
|
start Start the container
|
||||||
|
stop Stop the container
|
||||||
|
restart Restart the container
|
||||||
|
status Show container status
|
||||||
|
logs Show container logs
|
||||||
|
shell Enter container shell
|
||||||
|
clean Stop container and clean up
|
||||||
|
help Show this help message
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
./docker-run.sh build # Build the image
|
||||||
|
./docker-run.sh start # Start the container
|
||||||
|
./docker-run.sh shell # Enter the container
|
||||||
|
./docker-run.sh logs # View logs
|
||||||
|
|
||||||
|
For detailed documentation, see DOCKER_SETUP.md
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script logic
|
||||||
|
case "${1:-start}" in
|
||||||
|
build)
|
||||||
|
create_directories
|
||||||
|
build_image
|
||||||
|
;;
|
||||||
|
start)
|
||||||
|
create_directories
|
||||||
|
if ! docker images | grep -q "$IMAGE_NAME"; then
|
||||||
|
build_image
|
||||||
|
fi
|
||||||
|
start_container
|
||||||
|
show_status
|
||||||
|
echo -e "${GREEN}Container is running!${NC}"
|
||||||
|
echo -e "Run ${BLUE}./docker-run.sh shell${NC} to enter the container"
|
||||||
|
echo -e "Run ${BLUE}./docker-run.sh logs${NC} to view logs"
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop_container
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
stop_container
|
||||||
|
start_container
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
show_status
|
||||||
|
;;
|
||||||
|
logs)
|
||||||
|
show_logs
|
||||||
|
;;
|
||||||
|
shell)
|
||||||
|
enter_container
|
||||||
|
;;
|
||||||
|
clean)
|
||||||
|
echo -e "${YELLOW}This will stop the container and remove volumes${NC}"
|
||||||
|
read -p "Are you sure? (y/N) " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
docker compose down -v
|
||||||
|
echo -e "${GREEN}✓ Cleanup complete${NC}"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
help|--help|-h)
|
||||||
|
show_help
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "${RED}Unknown command: $1${NC}"
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Loading…
Reference in New Issue
Block a user