File size: 4,151 Bytes
ac29381 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | #!/bin/bash
# DreamZero 模型权重一键下载脚本
#
# 用法:
# bash scripts/data/download_checkpoints.sh
# bash scripts/data/download_checkpoints.sh --mirror # 使用 HF 镜像(中国用户)
# bash scripts/data/download_checkpoints.sh --offline /path/to/cache # 从本地缓存加载
#
# 下载内容:
# - Wan2.2-TI2V-5B: Wan2.2 视频 DiT 骨干 (~32G)
# - umt5-xxl: T5 tokenizer (~49G)
# - CLIP encoder: 图像编码器 (~2.4G)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
CHECKPOINT_DIR="${CHECKPOINT_DIR:-$REPO_ROOT/checkpoints}"
MIRROR=false
OFFLINE_CACHE=""
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--mirror)
MIRROR=true
shift
;;
--offline)
OFFLINE_CACHE="$2"
shift 2
;;
*)
echo "Unknown option: $1"
echo "Usage: $0 [--mirror] [--offline /path/to/cache]"
exit 1
;;
esac
done
# ============ 网络配置 ============
if [ "$MIRROR" = true ]; then
export HF_ENDPOINT=https://hf-mirror.com
echo ">>> 使用 HF 镜像: hf-mirror.com"
fi
# ============ 离线模式 ============
if [ -n "$OFFLINE_CACHE" ]; then
if [ ! -d "$OFFLINE_CACHE" ]; then
echo "ERROR: 离线缓存目录不存在: $OFFLINE_CACHE"
exit 1
fi
echo ">>> 离线模式,从 $OFFLINE_CACHE 复制..."
cp -r "$OFFLINE_CACHE"/* "$CHECKPOINT_DIR/"
echo ">>> 复制完成!"
exit 0
fi
# ============ 下载 Wan2.2-TI2V-5B ============
WAN22_DIR="$CHECKPOINT_DIR/Wan2.2-TI2V-5B"
if [ -d "$WAN22_DIR" ] && [ -n "$(ls -A "$WAN22_DIR" 2>/dev/null)" ]; then
echo "[SKIP] Wan2.2-TI2V-5B 已存在: $WAN22_DIR"
else
echo "[DOWNLOAD] Wan2.2-TI2V-5B → $WAN22_DIR"
mkdir -p "$WAN22_DIR"
huggingface-cli download Wan-AI/Wan2.2-TI2V-5B --local-dir "$WAN22_DIR"
echo "[OK] Wan2.2-TI2V-5B 下载完成"
fi
# ============ 下载 umt5-xxl ============
TOKENIZER_DIR="$CHECKPOINT_DIR/umt5-xxl"
if [ -d "$TOKENIZER_DIR" ] && [ -n "$(ls -A "$TOKENIZER_DIR" 2>/dev/null)" ]; then
echo "[SKIP] umt5-xxl 已存在: $TOKENIZER_DIR"
else
echo "[DOWNLOAD] umt5-xxl → $TOKENIZER_DIR"
mkdir -p "$TOKENIZER_DIR"
huggingface-cli download google/umt5-xxl --local-dir "$TOKENIZER_DIR"
echo "[OK] umt5-xxl 下载完成"
fi
# ============ 下载 CLIP encoder ============
CLIP_DIR="$CHECKPOINT_DIR/clip-encoder"
CLIP_FILE="$CLIP_DIR/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth"
if [ -f "$CLIP_FILE" ]; then
echo "[SKIP] CLIP encoder 已存在: $CLIP_FILE"
else
echo "[DOWNLOAD] CLIP encoder → $CLIP_DIR"
mkdir -p "$CLIP_DIR"
# 尝试从 dreamzero 独立仓库下载
if huggingface-cli download poet70/clip-encoder \
--local-dir "$CLIP_DIR" 2>/dev/null; then
echo "[OK] CLIP encoder 下载完成"
else
echo "[WARN] 独立 CLIP 仓库暂不可用,尝试从 Wan2.1 提取..."
# 后备:下载 Wan2.1-I2V-14B-480P(包含 CLIP 权重)
WAN21_DIR="$CHECKPOINT_DIR/Wan2.1-I2V-14B-480P"
if [ ! -d "$WAN21_DIR" ]; then
huggingface-cli download Wan-AI/Wan2.1-I2V-14B-480P --local-dir "$WAN21_DIR"
fi
# 复制 CLIP 权重
if [ -f "$WAN21_DIR/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth" ]; then
cp "$WAN21_DIR/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth" "$CLIP_DIR/"
echo "[OK] CLIP encoder 从 Wan2.1 提取完成"
else
echo "[ERROR] 无法获取 CLIP encoder"
echo "请手动从 DreamZero-DROID 检查点提取:"
echo " cp /path/to/DreamZero-DROID/models_clip_*.pth $CLIP_DIR/"
exit 1
fi
fi
fi
echo ""
echo "============================================"
echo " 所有权重下载完成!"
echo "============================================"
echo "Wan2.2: $WAN22_DIR"
echo "umt5-xxl: $TOKENIZER_DIR"
echo "CLIP: $CLIP_DIR"
echo "============================================"
|