|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "${BASH_VERSION}" ]; then |
|
echo "Please use bash to run this script." >&2 |
|
exit 1 |
|
fi |
|
|
|
VIDEO_DIR="/home/juntao/Data/safe-sora/videos" |
|
TRAIN_DATA_PATH="/home/juntao/Data/safe-sora/unsafe_pairs/config-train.json" |
|
EVAL_DATA_PATH="/home/juntao/Data/safe-sora/unsafe_pairs/config-test.json" |
|
MODEL_NAME_OR_PATH="/home/juntao/Models/LanguageBind/Video-LLaVA-7B" |
|
MM_MLP_ADAPTER_PATH="/home/juntao/Models/LanguageBind/Video-LLaVA-Pretrain-7B/mm_projector.bin" |
|
OUTPUT_DIR="./outputs/cost" |
|
DIMENSION="harmlessness" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while [[ "$#" -gt 0 ]]; do |
|
arg="$1" |
|
shift |
|
case "${arg}" in |
|
--video_dir) |
|
VIDEO_DIR="$1" |
|
shift |
|
;; |
|
--video_dir=*) |
|
VIDEO_DIR="${arg#*=}" |
|
;; |
|
--train_data_path) |
|
TRAIN_DATA_PATH="$1" |
|
shift |
|
;; |
|
--train_data_path=*) |
|
TRAIN_DATA_PATH="${arg#*=}" |
|
;; |
|
--eval_data_path) |
|
EVAL_DATA_PATH="$1" |
|
shift |
|
;; |
|
--eval_data_path=*) |
|
EVAL_DATA_PATH="${arg#*=}" |
|
;; |
|
--model_name_or_path) |
|
MODEL_NAME_OR_PATH="$1" |
|
shift |
|
;; |
|
--model_name_or_path=*) |
|
MODEL_NAME_OR_PATH="${arg#*=}" |
|
;; |
|
--mm_mlp_adapter_path) |
|
MM_MLP_ADAPTER_PATH="$1" |
|
shift |
|
;; |
|
--mm_mlp_adapter_path=*) |
|
MM_MLP_ADAPTER_PATH="${arg#*=}" |
|
;; |
|
--output_dir) |
|
OUTPUT_DIR="$1" |
|
shift |
|
;; |
|
--output_dir=*) |
|
OUTPUT_DIR="${arg#*=}" |
|
;; |
|
--dimension) |
|
DIMENSION="$1" |
|
shift |
|
;; |
|
--dimension=*) |
|
DIMENSION="${arg#*=}" |
|
;; |
|
*) |
|
echo "Unknown parameter passed: '${arg}'" >&2 |
|
exit 1 |
|
;; |
|
esac |
|
done |
|
|
|
if [[ ! "helpfulness harmlessness instruction_following correctness informativeness aesthetics" =~ (^|[[:space:]])"${DIMENSION}"($|[[:space:]]) ]]; then |
|
echo "Invalid dimension: ${DIMENSION}, should be one of 'helpfulness', 'harmlessness', 'instruction_following', 'correctness', 'informativeness', 'aesthetics'." >&2 |
|
exit 1 |
|
fi |
|
|
|
IMAGE_DIR="${VIDEO_DIR}" |
|
RUN_NAME="reward-${DIMENSION}" |
|
OUTPUT_DIR="${OUTPUT_DIR}/${RUN_NAME}" |
|
|
|
mkdir -p "${OUTPUT_DIR}" |
|
OUTPUT_DIR="$(cd "${OUTPUT_DIR}" &>/dev/null && pwd)" |
|
if [[ ! -f "${OUTPUT_DIR}/.gitignore" ]]; then |
|
echo '*' >"${OUTPUT_DIR}/.gitignore" |
|
fi |
|
|
|
cp -f "$0" "${OUTPUT_DIR}/script.sh" |
|
|
|
MASTER_PORT_START=10000 |
|
MASTER_PORT_END=65535 |
|
MASTER_PORT="$( |
|
comm -23 \ |
|
<(seq "${MASTER_PORT_START}" "${MASTER_PORT_END}" | sort) \ |
|
<(ss -Htan | awk '{ print $4 }' | awk -F ':' '{ print $NF }' | sort -u) | |
|
shuf | head -n 1 |
|
)" |
|
|
|
exec 1> >(tee "${OUTPUT_DIR}/stdout.log" >&1) 2> >(tee "${OUTPUT_DIR}/stderr.log" >&2) |
|
|
|
deepspeed --master_port="${MASTER_PORT}" examples/reward_model/train_cost.py \ |
|
--deepspeed examples/scripts/ds_zero2.json \ |
|
--version v1 \ |
|
--run_name "${RUN_NAME}" \ |
|
--model_name_or_path "${MODEL_NAME_OR_PATH}" \ |
|
--train_data_path "${TRAIN_DATA_PATH}" \ |
|
--eval_data_path "${EVAL_DATA_PATH}" \ |
|
--preference_dimension "${DIMENSION}" \ |
|
--image_dir "${IMAGE_DIR}" \ |
|
--video_dir "${VIDEO_DIR}" \ |
|
--image_tower LanguageBind/LanguageBind_Image \ |
|
--video_tower LanguageBind/LanguageBind_Video_merge \ |
|
--mm_projector_type mlp2x_gelu \ |
|
--pretrain_mm_mlp_adapter "${MM_MLP_ADAPTER_PATH}" \ |
|
--mm_vision_select_layer -2 \ |
|
--mm_use_im_start_end False \ |
|
--mm_use_im_patch_token False \ |
|
--image_aspect_ratio pad \ |
|
--group_by_modality_length True \ |
|
--output_dir "${OUTPUT_DIR}" \ |
|
--cache_dir "./models/cache_dir" \ |
|
--num_train_epochs 4 \ |
|
--per_device_train_batch_size 8 \ |
|
--per_device_eval_batch_size 8 \ |
|
--gradient_accumulation_steps 1 \ |
|
--evaluation_strategy "steps" \ |
|
--eval_steps 0.0499 \ |
|
--load_best_model_at_end True \ |
|
--metric_for_best_model "accuracy" \ |
|
--greater_is_better True \ |
|
--logging_first_step True \ |
|
--save_strategy "steps" \ |
|
--save_steps 0.0499 \ |
|
--save_total_limit 1 \ |
|
--learning_rate 2e-5 \ |
|
--weight_decay 0.1 \ |
|
--warmup_ratio 0.03 \ |
|
--lr_scheduler_type "cosine" \ |
|
--logging_steps 1 \ |
|
--model_max_length 2048 \ |
|
--tokenizer_model_max_length 3072 \ |
|
--gradient_checkpointing True \ |
|
--dataloader_num_workers 8 \ |
|
--report_to wandb \ |
|
--bf16 True \ |
|
--tf32 True \ |
|
--num_frames 8 |
|
|