From d0b83445a3dc325846b01cf4bb30b146c174472b Mon Sep 17 00:00:00 2001
From: Calico <93032279+calico-1226@users.noreply.github.com>
Date: Fri, 5 Jul 2024 03:06:28 +0800
Subject: [PATCH] feat(examples): release an example implementation of T-V
reward model. (#2)
* feat(examples): release an example implementation of T-V reward model.
Co-authored-by: linghaiCTL <2358044947@qq.com>
* chore(conda-recipe.yaml): add conda-recipe.yaml for installation
* chore(.github): remove duplicate lint checks
* chore(Makefile): ignore files from other projects when run addlicense
---------
Co-authored-by: linghaiCTL <2358044947@qq.com>
---
.flake8 | 3 +-
.github/PULL_REQUEST_TEMPLATE.md | 1 -
.github/workflows/lint.yml | 16 -
.gitignore | 3 +-
.pre-commit-config.yaml | 10 +
Makefile | 4 +-
conda-recipe.yaml | 56 +
docs/images/win_rate.png | Bin 0 -> 1051557 bytes
examples/README.md | 63 +
examples/reward_model/inference.py | 350 ++++++
examples/reward_model/train_reward.py | 417 ++++++
examples/reward_model/utils.py | 204 +++
examples/scripts/ds_zero2.json | 23 +
examples/scripts/finetune_reward_model.sh | 165 +++
examples/scripts/inference_reward_model.sh | 88 ++
pyproject.toml | 11 +
safe_sora/conversations.py | 343 +++++
safe_sora/datasets/base.py | 4 +-
safe_sora/models/__init__.py | 30 +
safe_sora/models/constants.py | 47 +
.../models/multimodal_encoder/builder.py | 50 +
.../models/multimodal_encoder/clip_encoder.py | 83 ++
.../languagebind/__init__.py | 251 ++++
.../languagebind/image/configuration_image.py | 454 +++++++
.../languagebind/image/modeling_image.py | 1111 ++++++++++++++++
.../languagebind/image/processing_image.py | 91 ++
.../languagebind/image/tokenization_image.py | 80 ++
.../languagebind/video/configuration_video.py | 454 +++++++
.../languagebind/video/modeling_video.py | 1116 +++++++++++++++++
.../languagebind/video/processing_video.py | 280 +++++
.../languagebind/video/tokenization_video.py | 80 ++
.../models/multimodal_projector/builder.py | 52 +
safe_sora/models/score_model.py | 243 ++++
safe_sora/models/video_llava.py | 601 +++++++++
safe_sora/trainers/__init__.py | 22 +
safe_sora/trainers/reward_trainer.py | 423 +++++++
safe_sora/utils.py | 41 +
37 files changed, 7246 insertions(+), 24 deletions(-)
create mode 100644 conda-recipe.yaml
create mode 100644 docs/images/win_rate.png
create mode 100644 examples/README.md
create mode 100644 examples/reward_model/inference.py
create mode 100644 examples/reward_model/train_reward.py
create mode 100644 examples/reward_model/utils.py
create mode 100644 examples/scripts/ds_zero2.json
create mode 100755 examples/scripts/finetune_reward_model.sh
create mode 100755 examples/scripts/inference_reward_model.sh
create mode 100644 safe_sora/conversations.py
create mode 100644 safe_sora/models/__init__.py
create mode 100644 safe_sora/models/constants.py
create mode 100644 safe_sora/models/multimodal_encoder/builder.py
create mode 100644 safe_sora/models/multimodal_encoder/clip_encoder.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/__init__.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/image/configuration_image.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/image/modeling_image.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/image/processing_image.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/image/tokenization_image.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/video/configuration_video.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/video/modeling_video.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/video/processing_video.py
create mode 100644 safe_sora/models/multimodal_encoder/languagebind/video/tokenization_video.py
create mode 100644 safe_sora/models/multimodal_projector/builder.py
create mode 100644 safe_sora/models/score_model.py
create mode 100644 safe_sora/models/video_llava.py
create mode 100644 safe_sora/trainers/__init__.py
create mode 100644 safe_sora/trainers/reward_trainer.py
create mode 100644 safe_sora/utils.py
diff --git a/.flake8 b/.flake8
index 1a256e6..eae28f6 100644
--- a/.flake8
+++ b/.flake8
@@ -9,11 +9,10 @@ ignore =
# W503: line break before binary operator
# W504: line break after binary operator
# format by black
- E203,E241,E704,W503,W504,
+ E203,E241,E704,W503,W504,E501,W505,
# E501: line too long
# W505: doc line too long
# too long docstring due to long example blocks
- E501,W505,
per-file-ignores =
# F401: module imported but unused
# intentionally unused imports
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index e71c35e..2683657 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -24,7 +24,6 @@ What types of changes does your code introduce? Put an `x` in all the boxes that
Go over all the following points, and put an `x` in all the boxes that apply.
If you are unsure about any of these, don't hesitate to ask. We are here to help!
-
- [ ] My change requires a change to the documentation.
- [ ] I have updated the tests accordingly. (*required for a bug fix or a new feature*)
- [ ] I have updated the documentation accordingly.
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 90cb6e2..4bdcc64 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -44,22 +44,6 @@ jobs:
run: |
make pre-commit
- - name: ruff
- run: |
- make ruff
-
- - name: flake8
- run: |
- make flake8
-
- - name: pylint
- run: |
- make pylint
-
- - name: isort and black
- run: |
- make py-format
-
- name: addlicense
run: |
make addlicense
diff --git a/.gitignore b/.gitignore
index 6473400..c5be0c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,10 @@
##### Project Specification #####
-dataset/
outputs/
wandb/
test/
data/
+checkpoints/
+cache_dir
##### Python.gitignore #####
# Byte-compiled / optimized / DLL files
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 28e7222..10f747c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -33,6 +33,11 @@ repos:
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
+ exclude: |
+ (?x)(
+ ^safe_sora/models/multimodal_encoder/|
+ ^safe_sora/models/multimodal_projector/
+ )
- repo: https://github.com/PyCQA/isort
rev: 5.13.2
hooks:
@@ -68,6 +73,8 @@ repos:
- repo: local
hooks:
- id: pylint
+ args:
+ - --disable=R0801
name: pylint
entry: pylint
language: system
@@ -78,5 +85,8 @@ repos:
^examples/|
^tests/|
^setup.py$|
+ ^safe_sora/models/multimodal_encoder/|
+ ^safe_sora/models/multimodal_projector/|
+ ^safe_sora/models/video_llava.py|
^docs/source/conf.py$
)
diff --git a/Makefile b/Makefile
index 493bce0..1fb3b48 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ PROJECT_NAME = safe-sora
COPYRIGHT = "PKU-Alignment Team. All Rights Reserved."
PROJECT_PATH = safe_sora
SHELL = /bin/bash
-SOURCE_FOLDERS = $(PROJECT_PATH) examples tests docs
+SOURCE_FOLDERS = $(PROJECT_PATH) examples docs
PYTHON_FILES = $(shell find $(SOURCE_FOLDERS) -type f -name "*.py" -o -name "*.pyi")
COMMIT_HASH = $(shell git log -1 --format=%h)
PATH := $(HOME)/go/bin:$(PATH)
@@ -130,7 +130,7 @@ pre-commit: pre-commit-install
# Documentation
addlicense: addlicense-install
- addlicense -c $(COPYRIGHT) -ignore tests/coverage.xml -l apache -y 2022-$(shell date +"%Y") -check $(SOURCE_FOLDERS)
+ addlicense -c $(COPYRIGHT) -ignore **/multimodal_encoder/** -ignore **/multimodal_projector/** -l apache -y 2022-$(shell date +"%Y") -check $(SOURCE_FOLDERS)
docstyle: docs-install
make -C docs clean
diff --git a/conda-recipe.yaml b/conda-recipe.yaml
new file mode 100644
index 0000000..088560b
--- /dev/null
+++ b/conda-recipe.yaml
@@ -0,0 +1,56 @@
+# Copyright 2024 PKU-Alignment Team. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+#
+# Create virtual environment with command:
+#
+# $ CONDA_OVERRIDE_CUDA=11.8 conda env create --file conda-recipe.yaml
+#
+
+name: safe-sora
+channels:
+ - huggingface
+ - pytorch
+ - nvidia/label/cuda-12.1.0
+ - defaults
+ - conda-forge
+dependencies:
+ - python = 3.11
+ - pip
+
+ - pytorch::pytorch >= 2.0
+ - pytorch::pytorch-mutex =*=*cuda*
+ - pytorch::torchvision
+ - transformers >= 4.42
+ - datasets
+ - tokenizers >= 0.19
+ - sentencepiece
+ - tensorboard
+ - wandb
+ - pip:
+ - accelerate
+ - deepspeed
+ - decord
+ - opencv-python
+
+ - nvidia/label/cuda-12.1.0::cuda-toolkit = 12.1
+
+ - matplotlib-base
+ - rich
+ - tqdm
+ - typing-extensions
+ - bitsandbytes
+ - av
+ - einops
+ - peft
diff --git a/docs/images/win_rate.png b/docs/images/win_rate.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f24428459d27c3b3c99025d5628576744862841
GIT binary patch
literal 1051557
zcmeFZbyQnh*Ed?H&{7K2@FIcYEm|bd;!bfV#U)5_htrk
@%SowU
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