# #!/usr/bin/env bash # set -euo pipefail # SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # source "$SCRIPT_DIR/deploy/env.sh" # mkdir -p "$LOG_DIR" "$RUNTIME_DIR" # RUN_NAME="${RUN_NAME:-poetry_bindweave_10s_$(date +%Y%m%d_%H%M%S)}" # LOG_FILE="$LOG_DIR/${RUN_NAME}.log" # POEM="${POEM:-夜雨寄北 # 李商隐 # 君问归期未有期,巴山夜雨涨秋池。 # 何当共剪西窗烛,却话巴山夜雨时。}" # require_path() { # local path="$1" # local message="$2" # if [[ ! -e "$path" ]]; then # echo "$message: $path" >&2 # exit 1 # fi # } # require_path "$QWEN_IMAGE_MODEL" "Qwen-Image model is missing" # require_path "$COSYVOICE_MODEL" "CosyVoice model is missing" # require_path "$BINDWEAVE_ROOT" "BindWeave code directory is missing" # require_path "$BINDWEAVE_ROOT/MindSpeed-MM/checkpoint" "BindWeave MindSpeed-MM submodule is incomplete" # require_path "$BINDWEAVE_ROOT/MindSpeed/mindspeed" "BindWeave MindSpeed submodule is incomplete" # require_path "$BINDWEAVE_ROOT/Megatron-LM/megatron" "BindWeave Megatron-LM submodule is incomplete" # require_path "$BINDWEAVE_SOURCE_MODEL" "BindWeave HF checkpoint directory is missing" # require_path "$BINDWEAVE_WAN21_MODEL/vae" "Wan2.1 VAE directory is missing" # require_path "$BINDWEAVE_WAN21_MODEL/tokenizer" "Wan2.1 tokenizer directory is missing" # require_path "$BINDWEAVE_WAN21_MODEL/text_encoder" "Wan2.1 text_encoder directory is missing" # require_path "$BINDWEAVE_WAN21_MODEL/image_encoder" "Wan2.1 image_encoder directory is missing" # require_path "$BINDWEAVE_QWEN_MODEL" "Qwen2.5-VL model is missing" # if ! curl -fsS \ # -H "Authorization: Bearer ${QWEN35_API_KEY:-qwen3.5-27b-local}" \ # "${QWEN35_API_BASE:-http://127.0.0.1:8002/v1}/models" \ # >/dev/null; then # echo "Qwen3.5 service is not ready: ${QWEN35_API_BASE:-http://127.0.0.1:8002/v1}" >&2 # echo "Please start it first: bash $VGEN_ROOT/scripts/deploy/start_qwen35_27b.sh" >&2 # exit 1 # fi # if [[ -f /usr/local/Ascend/ascend-toolkit/set_env.sh ]]; then # source /usr/local/Ascend/ascend-toolkit/set_env.sh # fi # source "$CONDA_SH" # conda activate "$DIFF_ENV" # PYTHON_BIN="${PYTHON_BIN:-$CONDA_ROOT/envs/$DIFF_ENV/bin/python}" # BINDWEAVE_PYTHON="${BINDWEAVE_PYTHON:-$PYTHON_BIN}" # BINDWEAVE_PYTHONPATH="$BINDWEAVE_ROOT:$BINDWEAVE_ROOT/MindSpeed-MM:$BINDWEAVE_ROOT/MindSpeed:$BINDWEAVE_ROOT/Megatron-LM${PYTHONPATH:+:$PYTHONPATH}" # export PYTHONPATH="$BINDWEAVE_PYTHONPATH" # if [[ ! -f "$BINDWEAVE_CHECKPOINT/latest_checkpointed_iteration.txt" ]]; then # echo "Converting BindWeave checkpoint to MindSpeed/MM format..." # rm -rf "$BINDWEAVE_CHECKPOINT" # ( # cd "$BINDWEAVE_ROOT" # PYTHONPATH="$BINDWEAVE_PYTHONPATH" "$BINDWEAVE_PYTHON" convert_ckpt.py \ # --source_path "$BINDWEAVE_SOURCE_MODEL" \ # --target_path "$BINDWEAVE_CHECKPOINT" \ # --mode convert_to_mm # ) # fi # require_path "$BINDWEAVE_CHECKPOINT/latest_checkpointed_iteration.txt" "Converted BindWeave checkpoint is missing" # export BINDWEAVE_PYTHON # export VIDEO_BACKEND=bindweave # OUTPUT_DIR="$VGEN_ROOT/outputs/poetry_teaching/$RUN_NAME" # echo "Run name: $RUN_NAME" # echo "Log file: $LOG_FILE" # echo "Output dir: $OUTPUT_DIR" # echo "Video backend: BindWeave" # echo "BindWeave checkpoint: $BINDWEAVE_CHECKPOINT" # echo "Wan2.1 base: $BINDWEAVE_WAN21_MODEL" # echo "Qwen2.5-VL: $BINDWEAVE_QWEN_MODEL" # nohup bash "$SCRIPT_DIR/run_poetry_teaching_pipeline.sh" \ # --poem "$POEM" \ # --run-name "$RUN_NAME" \ # --segments "${SEGMENTS:-6}" \ # --clip-seconds "${CLIP_SECONDS:-10}" \ # --fps "${FPS:-15}" \ # --height "${HEIGHT:-480}" \ # --width "${WIDTH:-832}" \ # --image-height "${IMAGE_HEIGHT:-720}" \ # --image-width "${IMAGE_WIDTH:-1280}" \ # --image-device "${IMAGE_DEVICE:-cuda:0}" \ # --image-workers "${IMAGE_WORKERS:-1}" \ # --video-workers "${VIDEO_WORKERS:-1}" \ # --audio-workers "${AUDIO_WORKERS:-1}" \ # --video-backend bindweave \ # --bindweave-root "$BINDWEAVE_ROOT" \ # --bindweave-checkpoint "$BINDWEAVE_CHECKPOINT" \ # --bindweave-wan21-model "$BINDWEAVE_WAN21_MODEL" \ # --bindweave-qwen-model "$BINDWEAVE_QWEN_MODEL" \ # --bindweave-python "$BINDWEAVE_PYTHON" \ # --bindweave-device "$BINDWEAVE_DEVICE" \ # --bindweave-nproc-per-node "$BINDWEAVE_NPROC_PER_NODE" \ # --bindweave-context-parallel-size "$BINDWEAVE_CONTEXT_PARALLEL_SIZE" \ # --bindweave-master-port "$BINDWEAVE_MASTER_PORT" \ # --video-steps "${VIDEO_STEPS:-50}" \ # --qwen35-api-base "${QWEN35_API_BASE:-http://127.0.0.1:8002/v1}" \ # --qwen35-model "${QWEN35_MODEL:-qwen3.5-27b-local}" \ # --qwen35-api-key "${QWEN35_API_KEY:-qwen3.5-27b-local}" \ # --overwrite \ # "$@" \ # >"$LOG_FILE" 2>&1 & # echo $! > "$RUNTIME_DIR/${RUN_NAME}.pid" # echo "Started PID: $(cat "$RUNTIME_DIR/${RUN_NAME}.pid")" # echo "Follow log: tail -f $LOG_FILE" # echo "Final video: $OUTPUT_DIR/final_poetry_teaching.mp4" #!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/deploy/env.sh" mkdir -p "$LOG_DIR" "$RUNTIME_DIR" RUN_NAME="${RUN_NAME:-poetry_full_10s_$(date +%Y%m%d_%H%M%S)}" LOG_FILE="$LOG_DIR/${RUN_NAME}.log" POEM="${POEM:-枫桥夜泊 张继 月落乌啼霜满天,江枫渔火对愁眠。 姑苏城外寒山寺,夜半钟声到客船。}" if ! curl -fsS \ -H "Authorization: Bearer ${QWEN35_API_KEY:-qwen3.5-27b-local}" \ "${QWEN35_API_BASE:-http://127.0.0.1:8002/v1}/models" \ >/dev/null; then echo "Qwen3.5 service is not ready: ${QWEN35_API_BASE:-http://127.0.0.1:8002/v1}" >&2 echo "Please start it first: bash $VGEN_ROOT/scripts/deploy/start_qwen35_27b.sh" >&2 exit 1 fi echo "Run name: $RUN_NAME" echo "Log file: $LOG_FILE" echo "Output dir: $VGEN_ROOT/outputs/poetry_teaching/$RUN_NAME" nohup bash "$SCRIPT_DIR/run_poetry_teaching_pipeline-agentloop.sh" \ --poem "$POEM" \ --run-name "$RUN_NAME" \ --segments "${SEGMENTS:-6}" \ --clip-seconds "${CLIP_SECONDS:-10}" \ --fps "${FPS:-15}" \ --image-device "${IMAGE_DEVICE:-cuda:0}" \ --video-usp-devices "${VIDEO_USP_DEVICES:-1,2,3,4,5}" \ --image-workers "${IMAGE_WORKERS:-1}" \ --video-workers "${VIDEO_WORKERS:-1}" \ --audio-workers "${AUDIO_WORKERS:-1}" \ --qwen35-api-base "${QWEN35_API_BASE:-http://127.0.0.1:8002/v1}" \ --qwen35-model "${QWEN35_MODEL:-qwen3.5-27b-local}" \ --qwen35-api-key "${QWEN35_API_KEY:-qwen3.5-27b-local}" \ --overwrite \ "$@" \ >"$LOG_FILE" 2>&1 & echo $! > "$RUNTIME_DIR/${RUN_NAME}.pid" echo "Started PID: $(cat "$RUNTIME_DIR/${RUN_NAME}.pid")" echo "Follow log: tail -f $LOG_FILE" echo "Final video: $VGEN_ROOT/outputs/poetry_teaching/$RUN_NAME/final_poetry_teaching.mp4"