#!/usr/bin/env bash # Cache de latentes e de text-encoder, SERIAL na mesma GPU. # Paralelo entre as duas etapas piora ambas (medido no historico). set -Eeuo pipefail PIN=ede9ed9f769d605db32d37e32243d4c979f9eee3 : "${TRAINER_DIR:=/workspace/projects/musubi-tuner}" : "${VENV:=/venv/main}" : "${MODEL_DIR:=/workspace/models/MiniMax-H3}" : "${DATASET_CONFIG:?caminho absoluto do TOML de CACHE}" : "${TASK:=i2va}" : "${CACHE_BATCH:=24}" : "${CACHE_WORKERS:=16}" [[ "$TASK" == i2va || "$TASK" == fl2va ]] || { echo "use i2va ou fl2va revisado" >&2; exit 2; } source "$VENV/bin/activate" cd "$TRAINER_DIR" [[ "$(git rev-parse HEAD)" == "$PIN" ]] || { echo "pin do trainer errado" >&2; exit 2; } [[ -s "$DATASET_CONFIG" ]] || { echo "config ausente" >&2; exit 2; } echo "=== [1/2] latentes ===" python src/musubi_tuner/minimax_h3_cache_latents.py \ --dataset_config "$DATASET_CONFIG" \ --vae "$MODEL_DIR/vae/minimax_h3_video_vae_fp16.safetensors" \ --device cuda --batch_size "$CACHE_BATCH" --num_workers "$CACHE_WORKERS" \ --skip_existing --keep_cache echo "=== [2/2] text encoder ===" python src/musubi_tuner/minimax_h3_cache_text_encoder_outputs.py \ --dataset_config "$DATASET_CONFIG" \ --text_encoder "$MODEL_DIR/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors" \ --text_encoder_quantization nvfp4_awq --task "$TASK" --cache_guidance_empty \ --device cuda --batch_size "$CACHE_BATCH" --num_workers "$CACHE_WORKERS" \ --skip_existing --keep_cache echo "=== cache concluido ==="