safe-rlhf

PKU-AlignmentApache-2.0更新放缓

基于安全强化学习的人类反馈对齐框架,通过约束优化让大模型在有用性和安全性之间取得平衡,附带 Beaver 系列模型与数据集。

Safe RLHF: Constrained Value Alignment via Safe Reinforcement Learning from Human Feedback

暂无版本1,621star134fork同步于 2026-11-07 07:31 UTC

怎么上手

由 README 提炼,执行前请确认
git clone https://github.com/PKU-Alignment/safe-rlhf.git
cd safe-rlhf
conda env create --file conda-recipe.yaml
硬件要求按 README 说明

README 说明所有训练流程在 8 张 NVIDIA A800-80GB GPU 上以 LLaMA-7B 测试;显存不足时可用 --offload 将参数或优化器状态卸载到 CPU,未说明其他 GPU 厂商支持情况。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

北大团队开源的 RLHF 框架,支持从 SFT 到 Safe RLHF 的完整安全对齐训练流程

基于安全强化学习的人类反馈对齐框架,通过约束优化让大模型在有用性和安全性之间取得平衡,附带 Beaver 系列模型与数据集。

核心能力

  • 覆盖 SFT、RLHF、Safe RLHF 全流程训练
  • 同时训练奖励模型与代价模型约束安全性
  • 提供最高 100 万对人工标注的有害/无害偏好数据
  • 支持 LLaMA、OPT、Baichuan 等预训练模型
  • 内置 BIG-bench 与 GPT-4 评测等多尺度安全指标

容易踩的坑

训练前需设置 WANDB_API_KEY 环境变量;脚本中的 GPU 数量与 batch size 等参数需按本机配置自行修改;需自备模型权重路径(如 ~/models/llama-7b),README 未说明自动下载。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Beaver is a highly modular open-source RLHF framework developed by the PKU-Alignment team at Peking University. It aims to provide training data and a reproducible code pipeline for alignment research, especially constrained alignment LLM research via Safe RLHF methods.

    The key features of Beaver are:

    • Support SFT, RLHF and Safe RLHF training for popular pre-trained models: LLaMA, OPT, Baichuan, etc.
    • Provide a large human-labeled dataset (up to 1M pairs) including both helpful and harmless preferences to support reproducible RLHF research.
    • Support training for Reward Model & Cost Model, and provide pre-trained checkpoints.
    • Support customized parameters and datasets for SFT and RLHF.
    • Provide multi-scale metrics for safety constraints verification, e.g., BIG-bench, GPT-4 Evaluation.

    🦫 What's New?

    • 🎉 2024/06/13: We are pleased to announce the open-sourcing of our PKU-SafeRLHF dataset version 1.0. This release advances over the initial beta version by incorporating human-AI joint annotations, expanding the scope of harm categories, and introducing detailed severity level labels. For further details and access, please visit our dataset page on 🤗 Hugging Face: PKU-Alignment/PKU-SafeRLHF.
    • 🎉 2024/01/16: Our method Safe RLHF has been accepted by ICLR 2024 Spotlight.
    • 📄 2023/10/19: We've released our Safe RLHF paper on arXiv, detailing our new safe alignment algorithm and its implementation.
    • 🚀 2023/07/10: We're delighted to announce the open-sourcing of Beaver-7B v1 / v2 / v3 models as the first milestone of the Safe RLHF training series, complemented by the corresponding Reward Models v1 / v2 / v3 / unified and Cost Models v1 / v2 / v3 / unified checkpoints on 🤗 Hugging Face.
    • 🔥 2023/07/10: We extend the open-source safety preference dataset, PKU-Alignment/PKU-SafeRLHF, which now contains over 300k examples. (See also section PKU-SafeRLHF-Dataset)
    • ⚙ 2023/07/05: We enhanced our support for Chinese pre-training models and incorporated additional open-source Chinese datasets. (See also sections Chinese Support (中文支持) and Custom Datasets (自定义数据集))
    • ⭐️ 2023/05/15: First release of the Safe RLHF pipeline, evaluation results, and training code.

    Table of Contents

    Constrained Value Alignment via Safe RLHF

    Reinforcement Learning from Human Feedback: reward maximization via preference learning

    Safe Reinforcement Learning from Human Feedback: constrained reward maximization via preference learning

    where $R (\cdot)$ and $C (\cdot)$ are reward and cost functions respectively. They are neural networks known as human proxies trained on human preferences.

    The ultimate goal is to find a model $\pi_{\theta}$ that is both helpful (high reward) and harmless (low cost).

    Comparison with Other RLHF Libraries

    Compare with other frameworks supporting RLHF, safe-rlhf is the first framework to support all stages from SFT to RLHF and Evaluation. In addition, safe-rlhf is the first framework that takes safety preference under consideration during the RLHF stage. It holds a more theoretical guarantee for constrained parameter searching in the policy space.

    SFTPreference Model1 TrainingRLHFSafe RLHFPTX LossEvaluationBackend
    Beaver(Safe-RLHF)✔️✔️✔️✔️✔️✔️DeepSpeed
    trlX✔️❌2✔️❌❌❌Accelerate / NeMo
    DeepSpeed-Chat✔️✔️✔️❌✔️❌DeepSpeed
    Colossal-AI✔️✔️✔️❌✔️❌ColossalAI
    AlpacaFarm❌3✔️✔️❌❌✔️Accelerate

    PKU-SafeRLHF-Dataset

    The PKU-SafeRLHF dataset is a human-labeled dataset containing both performance and safety preferences. It includes constraints in over ten dimensions, such as insults, immorality, crime, emotional harm, and privacy, among others. These constraints are designed for fine-grained value alignment in RLHF technology.

    To facilitate multi-round fine-tuning, we will release the initial parameter weights, required datasets, and training parameters for each round. This ensures reproducibility in scientific and academic research. The dataset will be released gradually through rolling updates.

    The dataset is available on Hugging Face: PKU-Alignment/PKU-SafeRLHF.

    PKU-SafeRLHF-10K

    PKU-SafeRLHF-10K is a subset of PKU-SafeRLHF that contains the first round of Safe RLHF training data with 10K instances, including safety preferences. You can find it on Hugging Face: PKU-Alignment/PKU-SafeRLHF-10K.

    PKU-SafeRLHF-1M

    We will gradually release the full Safe-RLHF datasets, which include 1M human-labeled pairs for both helpful and harmless preferences.

    Why "Beaver"

    Beaver is a large language model based on LLaMA, trained using safe-rlhf. It is developed upon the foundation of the Alpaca model, by collecting human preference data related to helpfulness and harmlessness and employing the Safe RLHF technique for training. While maintaining the helpful performance of Alpaca, Beaver significantly improves its harmlessness.

    Beavers are known as the "natural dam engineers" as they are adept at using branches, shrubs, rocks, and soil to build dams and small wooden houses, creating wetland environments suitable for other creatures to inhabit, making them an indispensable part of the ecosystem. To ensure the safety and reliability of Large Language Models (LLMs) while accommodating a wide range of values across different populations, the Peking University team has named their open-source model "Beaver" and aims to build a dam for LLMs through the Constrained Value Alignment (CVA) technology. This technology enables fine-grained labeling of information and, combined with secure reinforcement learning methods, significantly reduces model bias and discrimination, thereby enhancing the model's safety. Analogous to the role of beavers in the ecosystem, the Beaver model will provide crucial support for the development of large language models and make positive contributions to the sustainable development of artificial intelligence technology.

    Beaver vs. Alpaca

    Following the evaluation methodology of the Vicuna model, we utilized GPT-4 to evaluate Beaver. The results indicate that, compared to Alpaca, Beaver exhibits significant improvements in multiple dimensions related to safety.

    Arena-Demo

    Significant distribution shift for safety preferences after utilizing the Safe RLHF pipeline on the Alpaca-7B model.

    Installation

    Clone the source code from GitHub:

    git clone https://github.com/PKU-Alignment/safe-rlhf.git
    cd safe-rlhf
    

    Native Runner: Setup a conda environment using conda / mamba:

    conda env create --file conda-recipe.yaml  # or `mamba env create --file conda-recipe.yaml`
    

    This will automatically setup all dependencies.

    Containerized Runner: Other than using the native machine with conda isolation, as an alternative, you can also use docker images to configure the environment.

    Firstly, please follow NVIDIA Container Toolkit: Installation Guide and NVIDIA Docker: Installation Guide to setup nvidia-docker. Then you can run:

    make docker-run
    

    This command will build and start a docker container installed with proper dependencies. The host path / will be mapped to /host and the current working directory will be mapped to /workspace inside the container.

    Training

    safe-rlhf supports a complete pipeline from Supervised Fine-Tuning (SFT) to preference model training to RLHF alignment training.

    1. Follow the instructions in section Installation to setup the training environment properly.
    conda activate safe-rlhf
    export WANDB_API_KEY="..."  # your W&B API key here
    

    or

    make docker-run
    export WANDB_API_KEY="..."  # your W&B API key here
    
    1. Supervised Fine-Tuning (SFT)
    bash scripts/sft.sh \
        --model_name_or_path <your-model-name-or-checkpoint-path> \
        --output_dir output/sft
    

    NOTE: You may need to update some of the parameters in the script according to your machine setup, such as the number of GPUs for training, the training batch size, etc.

    1. Value Models (reward model & cost model)
    bash scripts/reward-model.sh \
        --model_name_or_path output/sft \
        --output_dir output/rm
    
    bash scripts/cost-model.sh \
        --model_name_or_path output/sft \
        --output_dir output/cm
    
    1. RLHF (Optional)
    bash scripts/ppo.sh \
        --actor_model_name_or_path output/sft \
        --reward_model_name_or_path output/rm \
        --output_dir output/ppo
    
    1. Safe-RLHF
    bash scripts/ppo-lag.sh \
        --actor_model_name_or_path output/sft \
        --reward_model_name_or_path output/rm \
        --cost_model_name_or_path output/cm \
        --output_dir output/ppo-lag
    

    An example of commands to run the whole pipeline with LLaMA-7B:

    conda activate safe-rlhf
    bash scripts/sft.sh --model_name_or_path ~/models/llama-7b --output_dir output/sft
    bash scripts/reward-model.sh --model_name_or_path output/sft --output_dir output/rm
    bash scripts/cost-model.sh --model_name_or_path output/sft --output_dir output/cm
    bash scripts/ppo-lag.sh \
        --actor_model_name_or_path output/sft \
        --reward_model_name_or_path output/rm \
        --cost_model_name_or_path output/cm \
        --output_dir output/ppo-lag
    
    Computational Requirements

    All training processes listed above are tested with LLaMA-7B on a cloud server with 8 x NVIDIA A800-80GB GPUs.

    Users, who do not have enough GPU memory resources, can enable DeepSpeed ZeRO-Offload to alleviate the peak GPU memory usage.

    All training scripts can pass with an extra option --offload (defaults to none, i.e., disable ZeRO-Offload) to offload the tensors (parameters and/or optimizer states) to CPU. For example:

    bash scripts/sft.sh \
        --model_name_or_path ~/models/llama-7b \
        --output_dir output/sft \
        --offload all  # or `parameter` or `optimizer`
    

    For multi-node settings, users can refer to the DeepSpeed: Resource Configuration (multi-node) documentation for more details. Here is an example to start the training process on 4 nodes (each has 8 GPUs):

    # myhostfile
    worker-1 slots=8
    worker-2 slots=8
    worker-3 slots=8
    worker-4 slots=8
    

    Then launch the training scripts with:

    bash scripts/sft.sh \
        --hostfile myhostfile \
        --model_name_or_path ~/models/llama-7b \
        --output_dir output/sft
    

    Custom Datasets

    safe-rlhf provides an abstraction to create datasets for all of the Supervised Fine-Tuning, preference model training, and RL training stages.

    class RawSample(TypedDict, total=False):
        """Raw sample type.
    
        For SupervisedDataset, should provide (input, answer) or (dialogue).
        For PreferenceDataset, should provide (input, answer, other_answer, better).
        For SafetyPreferenceDataset, should provide (input, answer, other_answer, safer, is_safe, is_other_safe).
        For PromptOnlyDataset, should provide (input).
        """
    
        # Texts
        input: NotRequired[str]  # either `input` or `dialogue` should be provided
        """User input text."""
        answer: NotRequired[str]
        """Assistant answer text."""
        other_answer: NotRequired[str]
        """Other assistant answer text via resampling."""
        dialogue: NotRequired[list[str]]  # either `input` or `dialogue` should be provided
        """Dialogue history."""
    
        # Flags
        better: NotRequired[bool]
        """Whether ``answer`` is better than ``other_answer``."""
        safer: NotRequired[bool]
        """Whether ``answer`` is safer than ``other_answer``."""
        is_safe: NotRequired[bool]
        """Whether ``answer`` is safe."""
        is_other_safe: NotRequired[bool]
        """Whether ``other_answer`` is safe."""
    

    Here is an example to implement a custom dataset (see safe_rlhf/datasets/raw for more examples):

    import argparse
    from datasets import load_dataset
    from safe_rlhf.datasets import RawDataset, RawSample, parse_dataset
    
    
    class MyRawDataset(RawDataset):
        NAME = 'my-dataset-name'
    
        def __init__(self, path=None) -> None:
            # Load a dataset from Hugging Face
            self.data = load_dataset(path or 'my-organization/my-dataset')['train']
    
        def __getitem__(self, index: int) -> RawSample:
            data = self.data[index]
            # Construct a `RawSample` dictionary from your custom dataset item
            return RawSample(
                input=data['col1'],
                answer=data['col2'],
                other_answer=data['col3'],
                better=float(data['col4']) > float(data['col5']),
                ...
            )
    
        def __len__(self) -> int:
            return len(self.data)  # dataset size
    
    
    def parse_arguments():
        parser = argparse.ArgumentParser(...)
        parser.add_argument(
            '--datasets',
            type=parse_dataset,
            nargs='+',
            metavar='DATASET[:PROPORTION[:PATH]]',
        )
        ...
        return parser.parse_args()
    
    
    def main():
        args = parse_arguments()
        ...
    
    
    if __name__ == '__main__':
        main()
    

    Then you can pass this dataset to the training scripts as:

    python3 train.py --datasets my-dataset-name
    

    You may also pass multiple datasets with optionally additional dataset proportions (separated by a colon :). For example:

    python3 train.py --datasets alpaca:0.75 my-dataset-name:0.5
    

    This will use randomly split 75% of the Stanford Alpaca dataset and 50% of your custom dataset.

    In addition, the dataset argument can also be followed by a local path (separated by a colon :) if you have already cloned the dataset repository from Hugging Face.

    git lfs install
    git clone https://huggingface.co/datasets/my-organization/my-dataset ~/path/to/my-dataset/repository
    python3 train.py --datasets alpaca:0.75 my-dataset-name:0.5:~/path/to/my-dataset/repository
    

    NOTE: The dataset class must be imported before the training script begins to parse the command line arguments.

    Inference

    Interactive CLI Demo

    python3 -m safe_rlhf.serve.cli --model_name_or_path output/sft  # or output/ppo-lag
    

    Interactive Arena

    python3 -m safe_rlhf.serve.arena --red_corner_model_name_or_path output/sft --blue_corner_model_name_or_path output/ppo-lag
    

    Arena-Demo

    Chinese Support (中文支持)

    The Safe-RLHF pipeline supports not only the LLaMA model family but also other pre-trained models such as Baichuan, InternLM, etc. that offer better support for Chinese. You just need to update the path to the pre-trained model in the training and inference code.

    Safe-RLHF 管道不仅仅支持 LLaMA 系列模型,它也支持其他一些对中文支持更好的预训练模型,例如 Baichuan 和 InternLM 等。你只需要在训练和推理的代码中更新预训练模型的路径即可。

    # SFT training
    bash scripts/sft.sh --model_name_or_path baichuan-inc/Baichuan-7B --output_dir output/baichuan-sft
    
    # Inference
    python3 -m safe_rlhf.serve.cli --model_name_or_path output/baichuan-sft
    

    In the meantime, we've added support for Chinese datasets such as the Firefly and MOSS series to our raw-datasets. You only need to change the dataset path in the training code to use the corresponding dataset for fine-tuning the Chinese pre-training model:

    同时,我们也在 raw-datasets 中增加了支持一些中文数据集,例如 Firefly 和 MOSS 系列等。在训练代码中更改数据集路径,你就可以使用相应的数据集来微调中文预训练模型:

    # scripts/sft.sh
    -	--train_datasets alpaca \
    +	--train_datasets firefly \
    

    For instructions on how to add custom datasets, please refer to section Custom Datasets.

    关于如何添加自定义数据集的方法,请参阅章节 Custom Datasets (自定义数据集)。

    Benchmark and Evaluation

    Arena via Reward and Cost Models

    scripts/arena-evaluation.sh \
        --red_corner_model_name_or_path output/sft \
        --blue_corner_model_name_or_path output/ppo-lag \
        --reward_model_name_or_path output/rm \
        --cost_model_name_or_path output/cm \
        --output_dir output/arena-evaluation
    

    BIG-bench

    # Install BIG-bench
    git clone https://github.com/google/BIG-bench.git
    (
        cd BIG-bench
        python3 setup.py sdist
        python3 -m pip install -e .
    )
    
    # BIG-bench evaluation
    python3 -m safe_rlhf.evaluate.bigbench \
        --model_name_or_path output/ppo-lag \
        --task_name <BIG-bench-task-name>
    

    GPT-4 Evaluation

    # Install OpenAI Python API
    pip3 install openai
    export OPENAI_API_KEY="..."  # your OpenAI API key here
    
    # GPT-4 evaluation
    python3 -m safe_rlhf.evaluate.gpt4 \
        --red_corner_model_name_or_path output/sft \
        --blue_corner_model_name_or_path output/ppo-lag
    

    Future Plans

    • Beaver-7B checkpoint is released on Hugging Face.
    • Release Safe RLHF paper preprint.
    • We will gradually release the full Safe-RLHF datasets.
    • Train Larger LLM with Safe-RLHF.
    • Support memory-efficient training, such as LoRA, PEFT, etc.

    Citation

    If you find Safe-RLHF useful or use Safe-RLHF (model, code, dataset, etc.) in your research, please consider citing the following work in your publications.

    @inproceedings{safe-rlhf,
      title={Safe RLHF: Safe Reinforcement Learning from Human Feedback},
      author={Josef Dai and Xuehai Pan and Ruiyang Sun and Jiaming Ji and Xinbo Xu and Mickel Liu and Yizhou Wang and Yaodong Yang},
      booktitle={The Twelfth International Conference on Learning Representations},
      year={2024},
      url={https://openreview.net/forum?id=TyFrPOKYXw}
    }
    @inproceedings{beavertails,
      title={BeaverTails: Towards Improved Safety Alignment of {LLM} via a Human-Preference Dataset},
      author={Jiaming Ji and Mickel Liu and Juntao Dai and Xuehai Pan and Chi Zhang and Ce Bian and Boyuan Chen and Ruiyang Sun and Yizhou Wang and Yaodong Yang},
      booktitle={Thirty-seventh Conference on Neural Information Processing Systems Datasets and Benchmarks Track},
      year={2023},
      url={https://openreview.net/forum?id=g0QovXbFw3}
    }
    

    PKU-Alignment Team

    All students below contributed equally and the order is determined alphabetically:

    All advised by Yizhou Wang and Yaodong Yang. Acknowledge: We appreciate Ms. Yi Qu for designing the Beaver logo.

    Acknowledgment

    This repository benefits from LLaMA, Stanford Alpaca, DeepSpeed, and DeepSpeed-Chat. Thanks for their wonderful works and their efforts for democratizing the LLM research. Safe-RLHF and its related assets are built and open-sourced with love 🤗❤️.

    This work is supported and funded by the Peking University.

    License

    Safe-RLHF is released under Apache License 2.0.