| # #!/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" | |