[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-RLHFlow--Online-RLHF":3,"tool-RLHFlow--Online-RLHF":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":80,"owner_twitter":76,"owner_website":79,"owner_url":81,"languages":82,"stars":91,"forks":92,"last_commit_at":93,"license":79,"difficulty_score":94,"env_os":95,"env_gpu":96,"env_ram":97,"env_deps":98,"category_tags":112,"github_topics":113,"view_count":23,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":117,"updated_at":118,"faqs":119,"releases":154},3037,"RLHFlow\u002FOnline-RLHF","Online-RLHF","A recipe for online RLHF and online iterative DPO.","Online-RLHF 是一套专注于大语言模型（LLM）对齐的开源解决方案，核心提供了在线迭代式强化学习人类反馈（Online Iterative RLHF）及在线迭代直接偏好优化（DPO）的完整实施指南。\n\n当前多数开源项目仍局限于“离线”训练模式，即使用固定数据集进行一次性优化，难以持续适应模型生成的新分布。Online-RLHF 旨在填补这一空白，通过引入在线迭代工作流，让模型在训练过程中不断利用自身生成的新数据进行自我进化。其最显著的技术亮点在于，仅依赖完全开源的数据资源，经过该流程优化的模型在多项权威基准测试中，性能即可媲美甚至超越 Meta 官方的 LLaMA3-8B-Instruct 版本。\n\n该项目不仅公开了详细的复现食谱，还配套发布了包括监督微调（SFT）模型、多种奖励模型（如 Bradley-Terry 模型、生成式成对偏好模型等）以及多轮迭代后的最终 RLHF 模型权重，极大地降低了复现门槛。\n\nOnline-RLHF 非常适合 AI 研究人员、大模型开发者以及对模型对齐技术有深入需求的工程师使用。如果你希望探索比传统离线训练更高效的模型优化路径，或者需要在无专有","Online-RLHF 是一套专注于大语言模型（LLM）对齐的开源解决方案，核心提供了在线迭代式强化学习人类反馈（Online Iterative RLHF）及在线迭代直接偏好优化（DPO）的完整实施指南。\n\n当前多数开源项目仍局限于“离线”训练模式，即使用固定数据集进行一次性优化，难以持续适应模型生成的新分布。Online-RLHF 旨在填补这一空白，通过引入在线迭代工作流，让模型在训练过程中不断利用自身生成的新数据进行自我进化。其最显著的技术亮点在于，仅依赖完全开源的数据资源，经过该流程优化的模型在多项权威基准测试中，性能即可媲美甚至超越 Meta 官方的 LLaMA3-8B-Instruct 版本。\n\n该项目不仅公开了详细的复现食谱，还配套发布了包括监督微调（SFT）模型、多种奖励模型（如 Bradley-Terry 模型、生成式成对偏好模型等）以及多轮迭代后的最终 RLHF 模型权重，极大地降低了复现门槛。\n\nOnline-RLHF 非常适合 AI 研究人员、大模型开发者以及对模型对齐技术有深入需求的工程师使用。如果你希望探索比传统离线训练更高效的模型优化路径，或者需要在无专有数据的情况下构建高性能指令跟随模型，这套工具将提供极具价值的参考与实践基础。需要注意的是，部署时需区分推理与训练环境，并特别注意 numpy 版本兼容性要求。","# Online RLHF\n\nTL;DL: this is a repo to align the large language models (LLMs) by [online iterative RLHF](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2312.11456.pdf). Also check out our [technical report](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2405.07863) and [Huggingface Repo](https:\u002F\u002Fhuggingface.co\u002FRLHFlow)!\n\nWe present the workflow of Online Iterative Reinforcement Learning from Human Feedback (RLHF), which is widely reported to outperform its offline counterpart by a large margin in the recent LLM literature. However, existing open-source RLHF projects are still largely confined to the offline learning setting. In this repo, we aim to fill in this gap and provide a detailed recipe that is easy to be reproduced for online iterative RLHF. In particular, with our recipe, with **only open-source data**, we can achieve comparable or even better results than LLaMA3-8B-instruct. \n\n\u003Cimg width=\"1589\" alt=\"image\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FRLHFlow_Online-RLHF_readme_405d178f33e6.png\">\n\n## Model Releases\nSFT Model: check more SFT checkpoints [Here](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002FRLHFlow\u002Fsft-models-66eda119ea7d19a23904da28) and dataset [RLHFlow\u002FRLHFlow-SFT-Dataset-ver2](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002FRLHFlow\u002FRLHFlow-SFT-Dataset-ver2)\n- [RLHFlow\u002FLLaMA3-SFT](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLLaMA3-SFT): v1.0 with 1 epoch training\n- [RLHFlow\u002FLLaMA3-SFT-v2](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLLaMA3-SFT-v2): v2.0 with 2 epoch training \n- [RLHFlow\u002FLlama3-SFT-v2.0-epoch1](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-SFT-v2.0-epoch1)\n- [RLHFlow\u002FLlama3-SFT-v2.0-epoch3](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-SFT-v2.0-epoch3)\n\nReward Model: also check more reward models [Here](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002FRLHFlow\u002Frlhflow-reward-models-669ecdd1c7e62283cb54b5fd)\n- [Reward model](https:\u002F\u002Fhuggingface.co\u002FsfairXC\u002FFsfairX-LLaMA3-RM-v0.1): Bradley-Terry model\n- [RLHFlow\u002Fpair-preference-model-LLaMA3-8B](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002Fpair-preference-model-LLaMA3-8B): generative pairwise preference model\n- [RLHFlow\u002FArmoRM-Llama3-8B-v0.1](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FArmoRM-Llama3-8B-v0.1): multi-head reward model with mixture-of-expert aggregation\n\nRLHF Model: \n- [RLHF model](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLLaMA3-iterative-DPO-final): trained from RLHFlow\u002FLLaMA3-SFT\n- [RLHF model v2 iter1](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-v2-iterative-DPO-iter1): trained from RLHFlow\u002FLLaMA3-SFT-v2\n- [RLHF model v2 iter2](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-v2-iterative-DPO-iter2): trained from RLHFlow\u002FLLaMA3-SFT-v2\n- [RLHF model v2 iter3](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-v2-iterative-DPO-iter3): trained from RLHFlow\u002FLLaMA3-SFT-v2\n\n| Model | LC AlpacaEval | MATH | GSM8K | HumanEval | HumanEval+ | MMLU | ARC-c | Truthful QA |\n|----------|----------|----------|----------|----------|----------|----------|----------|----------|\n| RLHFlow\u002FLLaMA3-SFT | 12.47 (1146 token) | 30 | 76.9 | 0.634 | 0.561 | 0.6462 | 0.5862 | 0.5345 |\n| RLHFlow\u002FLLaMA3-SFT-v2 | 12.66 (1175 token) | 41.1 | 83.4 | 0.665 | 0.616 | 0.648 | 0.5998 | 0.5393 |\n| RLHFlow\u002FLLaMA3-iterative-DPO-final (v1) | 30.9 | 31.3 | 82.1 | 0.64 | 0.585 | 0.6545 | 0.628 | 0.6216 |\n| RLHFlow\u002FLlama3-v2-iterative-DPO-iter1 | - | 43 | 85.3 | 0.634 | 0.585 | 0.6494 | 0.634 | 0.5955 |\n| RLHFlow\u002FLlama3-v2-iterative-DPO-iter2 | - | 43.8 | 84.8 | 0.671 | 0.591 | 0.6477 | 0.651 | 0.6331 |\n| RLHFlow\u002FLlama3-v2-iterative-DPO-iter3 | 31.31 (2157 token) | 44.4 | 85.3 | 0.683 | 0.622 | 0.6466 | 0.6596 | 0.6473 |\n| meta-llama\u002FMeta-Llama-3-8B-Instruct | 22.9 | 26.3 | 70.2 | 0.64 | 0.567 | 0.6561 | 0.5819 | 0.5166 |\n| meta-llama\u002FLlama-3.1-8B-Instruct | 20.9 | 50 | 86.5 | 0.689 | 0.622 | 0.682 | 0.558 | 0.5408 |\n\n\n\n\n\n## Installation instructions\n\nIt is recommended to have two separate environments for **inference** and **training**, respectively. \n\n**Note that the numpy version should be `numpy\u003C2.0`.  `Numpy 2.0` will encounter unexpected issues!!!**\n\n**SFT Environment**\n\n```shell\nconda create -n sft python=3.10.9\nconda activate sft\n\n## Get axolotl for general model\ngit clone https:\u002F\u002Fgithub.com\u002FOpenAccess-AI-Collective\u002Faxolotl\ncd axolotl\ngit checkout 55cc214c767741e83ee7b346e5e13e6c03b7b9fa\npip install -e .\n\n# The test cuda version is 12.1, 12.2. You may need to update the torch version based on your cuda version...\n# you may encounter underfined symbol error related to cuda and flash-attn and 2.1.2 can solve it ...\npip3 install torch==2.1.2 torchvision torchaudio\npip install flash-attn\n\n# fix an error of axolotl: ModuleNotFoundError: No module named 'pynvml.nvml'; 'pynvml' is not a package\npip install nvidia-ml-py3\n# also edit axolotl\u002Fsrc\u002Faxolotl\u002Futils\u002Fbench.py (line 6) to: ``from pynvml import NVMLError''\n\n\n## Get FastChat\ngit clone https:\u002F\u002Fgithub.com\u002Flm-sys\u002FFastChat.git\ncd FastChat\npip install -e .\n\ngit clone https:\u002F\u002Fgithub.com\u002FWeiXiongUST\u002FRLHF-Reward-Modeling.git\npip install deepspeed\n```\n\nYou also need to install wandb to record the training and log in with the huggingface accout to access Gemma.\n\n```shell\npip install wandb\nwandb login\n\nhuggingface-cli login\n```\n\n\n**Inference Environment**\n\n```sh\nconda create -n vllm python=3.10.9\nconda activate vllm\npip install datasets\n\n# The following code is tested for CUDA12.0-12.2, and CUDA12.6\n# To develop llama-3, mistral, gemma-1, 1.1, 2, deepseek you can consider the following vllm version\npip install vllm==0.5.4\n\npip install accelerate==0.33.0\npip install deepspeed==0.14.5\npip install transformers==4.43.4\npip install numpy==1.26.4 #Note that the numpy version should be `numpy\u003C2.0`.  `Numpy 2.0` will encounter unexpected issues!!!\n```\n\n**Training Environment**\n\n```sh\nconda create -n rlhflow python=3.10.9\nconda activate rlhflow\n\ngit clone https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Falignment-handbook.git\ncd .\u002Falignment-handbook\u002F\ngit checkout 27f7dbf00663dab66ad7334afb7a1311fa251f41\npip3 install torch==2.1.2 torchvision torchaudio\npython -m pip install .\npip install flash-attn==2.6.3\npip install accelerate==0.33.0\npip install huggingface-hub==0.24.7\n```\n\nYou also need to install the wandb to record the training and login with your huggingface account so that you have access to the LLaMA3 models.\n\n```sh\npip install wandb==0.17.7\n\nwandb login\nhuggingface-cli login\n```\n\n## Get Started\nWe present a step-by-step guidance in this section. \n\n### Step 1 Supervised Fine-tuning\nWe need to process the SFT data into the standard format. See [RLHFlow\u002FRLHFlow-SFT-Dataset-ver2](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002FRLHFlow\u002FRLHFlow-SFT-Dataset-ver2) for an eample. \n\n```sh\ncd sft\ntorchrun --nproc_per_node 8 --master_port 20001 -m axolotl.cli.train llama3-8b-it.yaml\n```\n\nYou can also modify the learning rate, batch size, output_path.. with either command or modify the ScriptArguments in the llama3-8b-it.yaml. If you encounter out-of-memory issue. Running the code with Gemma-2b-it with deepspeed stage 3 and gradient checkpoint (set in the config).\n\n```sh\ntorchrun --nproc_per_node 8 --master_port 20001 -m axolotl.cli.train llama3-8b-it.yaml --deepspeed ..\u002Fconfigs\u002Fdeepspeed_stage3.json\n```\n\n### Step 2 Reward Modeling\nWe refer the interested readers to [this repo](https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FRLHF-Reward-Modeling) for a detailed recipe to train the state-of-the-art open-source reward\u002Fpreference models. We have trained several RMs and prepared them on the huggingface like [sfairXC\u002FFsfairX-LLaMA3-RM-v0.1](https:\u002F\u002Fhuggingface.co\u002FsfairXC\u002FFsfairX-LLaMA3-RM-v0.1), [RLHFlow\u002Fpair-preference-model-LLaMA3-8B](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002Fpair-preference-model-LLaMA3-8B), [RLHFlow\u002FArmoRM-Llama3-8B-v0.1](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FArmoRM-Llama3-8B-v0.1), which are SOTA open-source RMs so far (2024 May).\n\n### Step 3.1 Data Generation\nWe have prepared some prompt sets on huggingface.\n- UltraFeedback RLHFlow\u002Fultrafeedback_iter1, RLHFlow\u002Fultrafeedback_iter2, RLHFlow\u002Fultrafeedback_iter3\n- RLHFlow\u002Fiterative-prompt-v1-iter1-20K, RLHFlow\u002Fiterative-prompt-v1-iter2-20K, RLHFlow\u002Fiterative-prompt-v1-iter3-20K ...\n\nTo accelerate data generation, we use the VLLM. We prepare two ways of using VLLM to inference for a more robust implementation, where you can try them out and choose the one that fits with your environment best. We use LLaMA3-8B as an example. \n\nYou may create a test_gen.sh file, and copy the following contents into the file and run ``bash test_gen.sh''.\n\n```sh\n# First approach: initialize 4 VLLM processes and split the prompt set to the 4 agents\n# The generated samples will be stored at output_dir + local_index + \".jsonl\n\nmy_world_size=8 # how many gpu you use\ninfer_model=RLHFlow\u002FLLaMA3-SFT\nprompt_dir=RLHFlow\u002Ftest_generation_2k\nmkdir data\noutput_dir=.\u002Fdata\u002Fgen_data\n\nconda activate vllm\nCUDA_VISIBLE_DEVICES=0 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 0 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=1 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 1 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=2 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 2 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=3 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 3 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=4 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 4 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=5 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 5 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=6 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 6 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=7 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 7 --my_world_size ${my_world_size}  &\n\n# then, we merge the 8 datasets into one dataset.\nwait\npython .\u002Fgeneration\u002Fmerge_data.py --base_path ${output_dir} --output_dir .\u002Fdata\u002Fgen_data.json --num_datasets ${my_world_size}\n```\n\nWe can also use API server to generate new responses.\n\n```sh\nmkdir data\nconda activate vllm\n\n# register the api server\nbash .\u002Fgeneration\u002Fregister_server.sh RLHFlow\u002FLLaMA3-SFT\n\n# start to generate\npython .\u002Fgeneration\u002Fgen_hf.py --ports 8000 8001 8002 8003 8004 8005 8006 8007 --tokenizer RLHFlow\u002FLLaMA3-SFT --dataset_name_or_path RLHFlow\u002Ftest_generation_2k --output_dir .\u002Fdata\u002Fgen_data.jsonl --K 4 --temperature 1.0\n```\n\n### Step 3.2 Data Annotation\nThen, we call the reward\u002Fpreference model trained in step 2 to rank the generated responses. \n\n```sh\naccelerate launch .\u002Fannotate_data\u002Fget_rewards.py --dataset_name_or_path .\u002Fdata\u002Fgen_data.jsonl --output_dir .\u002Fdata\u002Fdata_with_rewards.jsonl --K 4\n```\nIf you encounter error ``TypeError: Got unsupported ScalarType BFloat16'', considering adjusting your transformer version.\n\n### Step 3.3 Training\n\n```sh\nconda activate rlhflow\naccelerate launch --config_file .\u002Fconfigs\u002Fzero2.yaml dpo_iteration\u002Frun_dpo.py .\u002Fconfigs\u002Ftraining.yaml\n```\nIf you encounter ``RuntimeError: CUDA error: invalid device ordinal, CUDA kernel errors might be asynchronously reported at some other API call'', you need to adjust num_of_process in the config file according to your GPUs.\n\n### Putting Everything Together\nWe put everything together so that the iterative training can run automatically. Note that we set sleep 1m to wait for registering the API for inference. You may need to adjust this parameter according to your environment.\n\n```sh\nbash run_loop2.sh\n```\n\n## Acknowledgement\n\nThe authors would like to thank the great open-source communities, including the Huggingface TRL team, the Huggingface H4 team, the Allen Institute AI RewardBench team, the Meta LLaMA team, evalplus team and Axolotl team for sharing the models, codes, and training sets. \n\n## Citation\n\nIf you find the content of this repo useful, please consider cite it as follows:\n\n```bibtex\n@misc{dong2024rlhf,\n      title={RLHF Workflow: From Reward Modeling to Online RLHF}, \n      author={Hanze Dong and Wei Xiong and Bo Pang and Haoxiang Wang and Han Zhao and Yingbo Zhou and Nan Jiang and Doyen Sahoo and Caiming Xiong and Tong Zhang},\n      year={2024},\n      eprint={2405.07863},\n      archivePrefix={arXiv},\n      primaryClass={cs.LG}\n}\n@inproceedings{xiong2023iterative,\n  title={Iterative preference learning from human feedback: Bridging theory and practice for RLHF under KL-constraint},\n  author={Xiong, Wei and Dong, Hanze and Ye, Chenlu and Wang, Ziqi and Zhong, Han and Ji, Heng and Jiang, Nan and Zhang, Tong},\n  booktitle={ICLR 2024 Workshop on Mathematical and Empirical Understanding of Foundation Models}\n}\n```\n","# 在线 RLHF\n\nTL;DR：这是一个使用[在线迭代 RLHF](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2312.11456.pdf)对大型语言模型（LLMs）进行对齐的仓库。同时请查看我们的[技术报告](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2405.07863)和[Huggingface 仓库](https:\u002F\u002Fhuggingface.co\u002FRLHFlow)！\n\n我们介绍了在线迭代人类反馈强化学习（RLHF）的工作流程，该方法在最近的 LLM 文献中被广泛报道为显著优于离线版本。然而，现有的开源 RLHF 项目大多仍局限于离线学习场景。在此仓库中，我们旨在填补这一空白，并提供一套易于复现的详细方案，用于实现在线迭代 RLHF。特别地，借助我们的方案，仅使用**开源数据**，我们就能达到与 LLaMA3-8B-instruct 相当甚至更好的效果。\n\n\u003Cimg width=\"1589\" alt=\"image\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FRLHFlow_Online-RLHF_readme_405d178f33e6.png\">\n\n## 模型发布\nSFT 模型：更多 SFT 检查点请见[这里](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002FRLHFlow\u002Fsft-models-66eda119ea7d19a23904da28)，数据集请参阅[RLHFlow\u002FRLHFlow-SFT-Dataset-ver2](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002FRLHFlow\u002FRLHFlow-SFT-Dataset-ver2)。\n- [RLHFlow\u002FLLaMA3-SFT](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLLaMA3-SFT)：v1.0，训练 1 个 epoch\n- [RLHFlow\u002FLLaMA3-SFT-v2](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLLaMA3-SFT-v2)：v2.0，训练 2 个 epoch\n- [RLHFlow\u002FLlama3-SFT-v2.0-epoch1](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-SFT-v2.0-epoch1)\n- [RLHFlow\u002FLlama3-SFT-v2.0-epoch3](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-SFT-v2.0-epoch3)\n\n奖励模型：更多奖励模型请见[这里](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002FRLHFlow\u002Frlhflow-reward-models-669ecdd1c7e62283cb54b5fd)。\n- [奖励模型](https:\u002F\u002Fhuggingface.co\u002FsfairXC\u002FFsfairX-LLaMA3-RM-v0.1)：布拉德利-特里模型\n- [RLHFlow\u002Fpair-preference-model-LLaMA3-8B](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002Fpair-preference-model-LLaMA3-8B)：生成式成对偏好模型\n- [RLHFlow\u002FArmoRM-Llama3-8B-v0.1](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FArmoRM-Llama3-8B-v0.1)：多头奖励模型，采用专家混合聚合机制\n\nRLHF 模型：\n- [RLHF 模型](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLLaMA3-iterative-DPO-final)：基于 RLHFlow\u002FLLaMA3-SFT 训练\n- [RLHF 模型 v2 iter1](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-v2-iterative-DPO-iter1)：基于 RLHFlow\u002FLLaMA3-SFT-v2 训练\n- [RLHF 模型 v2 iter2](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-v2-iterative-DPO-iter2)：基于 RLHFlow\u002FLLaMA3-SFT-v2 训练\n- [RLHF 模型 v2 iter3](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FLlama3-v2-iterative-DPO-iter3)：基于 RLHFlow\u002FLLaMA3-SFT-v2 训练\n\n| 模型 | LC AlpacaEval | MATH | GSM8K | HumanEval | HumanEval+ | MMLU | ARC-c | Truthful QA |\n|----------|----------|----------|----------|----------|----------|----------|----------|----------|\n| RLHFlow\u002FLLaMA3-SFT | 12.47 (1146 token) | 30 | 76.9 | 0.634 | 0.561 | 0.6462 | 0.5862 | 0.5345 |\n| RLHFlow\u002FLLaMA3-SFT-v2 | 12.66 (1175 token) | 41.1 | 83.4 | 0.665 | 0.616 | 0.648 | 0.5998 | 0.5393 |\n| RLHFlow\u002FLLaMA3-iterative-DPO-final (v1) | 30.9 | 31.3 | 82.1 | 0.64 | 0.585 | 0.6545 | 0.628 | 0.6216 |\n| RLHFlow\u002FLlama3-v2-iterative-DPO-iter1 | - | 43 | 85.3 | 0.634 | 0.585 | 0.6494 | 0.634 | 0.5955 |\n| RLHFlow\u002FLlama3-v2-iterative-DPO-iter2 | - | 43.8 | 84.8 | 0.671 | 0.591 | 0.6477 | 0.651 | 0.6331 |\n| RLHFlow\u002FLlama3-v2-iterative-DPO-iter3 | 31.31 (2157 token) | 44.4 | 85.3 | 0.683 | 0.622 | 0.6466 | 0.6596 | 0.6473 |\n| meta-llama\u002FMeta-Llama-3-8B-Instruct | 22.9 | 26.3 | 70.2 | 0.64 | 0.567 | 0.6561 | 0.5819 | 0.5166 |\n| meta-llama\u002FLlama-3.1-8B-Instruct | 20.9 | 50 | 86.5 | 0.689 | 0.622 | 0.682 | 0.558 | 0.5408 |\n\n\n\n\n\n## 安装说明\n\n建议为**推理**和**训练**分别设置两个独立的环境。\n\n**请注意，numpy 版本应为 `numpy\u003C2.0`。`Numpy 2.0` 会出现意外问题！！！**\n\n**SFT 环境**\n\n```shell\nconda create -n sft python=3.10.9\nconda activate sft\n\n## 获取 axolotl 以用于通用模型\ngit clone https:\u002F\u002Fgithub.com\u002FOpenAccess-AI-Collective\u002Faxolotl\ncd axolotl\ngit checkout 55cc214c767741e83ee7b346e5e13e6c03b7b9fa\npip install -e .\n\n# 测试的 CUDA 版本为 12.1、12.2。您可能需要根据自己的 CUDA 版本更新 PyTorch 版本……\n# 您可能会遇到与 CUDA 和 flash-attn 相关的未定义符号错误，而 2.1.2 可以解决这个问题……\npip3 install torch==2.1.2 torchvision torchaudio\npip install flash-attn\n\n# 修复 axolotl 的一个错误：ModuleNotFoundError: 没有名为 'pynvml.nvml' 的模块；'pynvml' 不是包\npip install nvidia-ml-py3\n# 同时编辑 axolotl\u002Fsrc\u002Faxolotl\u002Futils\u002Fbench.py（第 6 行）为：``from pynvml import NVMLError''\n```\n\n## 获取 FastChat\ngit clone https:\u002F\u002Fgithub.com\u002Flm-sys\u002FFastChat.git\ncd FastChat\npip install -e .\n\ngit clone https:\u002F\u002Fgithub.com\u002FWeiXiongUST\u002FRLHF-Reward-Modeling.git\npip install deepspeed\n```\n\n您还需要安装 wandb 来记录训练过程，并使用 HuggingFace 账号登录以访问 Gemma。\n\n```shell\npip install wandb\nwandb login\n\nhuggingface-cli login\n```\n\n**推理环境**\n\n```sh\nconda create -n vllm python=3.10.9\nconda activate vllm\npip install datasets\n\n# 以下代码已在 CUDA12.0-12.2 和 CUDA12.6 上测试过。\n# 如果要开发 llama-3、mistral、gemma-1、1.1、2、deepseek，可以考虑使用以下 vllm 版本\npip install vllm==0.5.4\n\npip install accelerate==0.33.0\npip install deepspeed==0.14.5\npip install transformers==4.43.4\npip install numpy==1.26.4 #请注意，numpy 版本应为 `numpy\u003C2.0`。`Numpy 2.0` 会遇到意外问题！！！\n```\n\n**训练环境**\n\n```sh\nconda create -n rlhflow python=3.10.9\nconda activate rlhflow\n\ngit clone https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Falignment-handbook.git\ncd .\u002Falignment-handbook\u002F\ngit checkout 27f7dbf00663dab66ad7334afb7a1311fa251f41\npip3 install torch==2.1.2 torchvision torchaudio\npython -m pip install .\npip install flash-attn==2.6.3\npip install accelerate==0.33.0\npip install huggingface-hub==0.24.7\n```\n\n您还需要安装 wandb 来记录训练过程，并使用您的 HuggingFace 账号登录，以便访问 LLaMA3 模型。\n\n```sh\npip install wandb==0.17.7\n\nwandb login\nhuggingface-cli login\n```\n\n## 开始使用\n本节将提供逐步指导。\n\n### 第一步：监督微调\n我们需要将 SFT 数据处理成标准格式。示例请参阅[RLHFlow\u002FRLHFlow-SFT-Dataset-ver2](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002FRLHFlow\u002FRLHFlow-SFT-Dataset-ver2)。\n\n```sh\ncd sft\ntorchrun --nproc_per_node 8 --master_port 20001 -m axolotl.cli.train llama3-8b-it.yaml\n```\n\n您也可以通过命令行或修改 llama3-8b-it.yaml 中的 ScriptArguments 来调整学习率、批量大小、输出路径等。如果遇到内存不足的问题，可以使用 Gemma-2b-it 并结合 deepspeed stage 3 和梯度检查点（在配置中设置）来运行代码。\n\n```sh\ntorchrun --nproc_per_node 8 --master_port 20001 -m axolotl.cli.train llama3-8b-it.yaml --deepspeed ..\u002Fconfigs\u002Fdeepspeed_stage3.json\n```\n\n### 第2步 奖励建模\n我们建议感兴趣的读者参考[这个仓库](https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FRLHF-Reward-Modeling)，其中提供了训练当前最先进开源奖励\u002F偏好模型的详细流程。我们已经训练了多个奖励模型，并将其发布在Hugging Face上，例如[sfairXC\u002FFsfairX-LLaMA3-RM-v0.1](https:\u002F\u002Fhuggingface.co\u002FsfairXC\u002FFsfairX-LLaMA3-RM-v0.1)、[RLHFlow\u002Fpair-preference-model-LLaMA3-8B](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002Fpair-preference-model-LLaMA3-8B)、[RLHFlow\u002FArmoRM-Llama3-8B-v0.1](https:\u002F\u002Fhuggingface.co\u002FRLHFlow\u002FArmoRM-Llama3-8B-v0.1)，这些都是截至目前（2024年5月）最先进的开源奖励模型。\n\n### 第3.1步 数据生成\n我们在Hugging Face上准备了一些提示词集合：\n- UltraFeedback RLHFlow\u002Fultrafeedback_iter1、RLHFlow\u002Fultrafeedback_iter2、RLHFlow\u002Fultrafeedback_iter3\n- RLHFlow\u002Fiterative-prompt-v1-iter1-20K、RLHFlow\u002Fiterative-prompt-v1-iter2-20K、RLHFlow\u002Fiterative-prompt-v1-iter3-20K……\n\n为了加速数据生成，我们使用VLLM。我们准备了两种使用VLLM进行推理的方式，以实现更稳健的部署，您可以尝试并选择最适合您环境的一种。这里以LLaMA3-8B为例。\n\n您可以创建一个test_gen.sh文件，将以下内容复制到该文件中，然后运行``bash test_gen.sh``。\n\n```sh\n# 方法一：初始化4个VLLM进程，并将提示词集分配给这4个代理\n# 生成的样本将存储在output_dir + local_index + \".jsonl\"中\n\nmy_world_size=8 # 您使用的GPU数量\ninfer_model=RLHFlow\u002FLLaMA3-SFT\nprompt_dir=RLHFlow\u002Ftest_generation_2k\nmkdir data\noutput_dir=.\u002Fdata\u002Fgen_data\n\nconda activate vllm\nCUDA_VISIBLE_DEVICES=0 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 0 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=1 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 1 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=2 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 2 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=3 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 3 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=4 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 4 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=5 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 5 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=6 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 6 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=7 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 7 --my_world_size ${my_world_size}  &\n\n# 然后，我们将这8个数据集合并为一个。\nwait\npython .\u002Fgeneration\u002Fmerge_data.py --base_path ${output_dir} --output_dir .\u002Fdata\u002Fgen_data.json --num_datasets ${my_world_size}\n```\n\n我们也可以使用API服务器来生成新的响应。\n\n```sh\nmkdir data\nconda activate vllm\n\n# 注册API服务器\nbash .\u002Fgeneration\u002Fregister_server.sh RLHFlow\u002FLLaMA3-SFT\n\n# 开始生成\npython .\u002Fgeneration\u002Fgen_hf.py --ports 8000 8001 8002 8003 8004 8005 8006 8007 --tokenizer RLHFlow\u002FLLaMA3-SFT --dataset_name_or_path RLHFlow\u002Ftest_generation_2k --output_dir .\u002Fdata\u002Fgen_data.jsonl --K 4 --temperature 1.0\n```\n\n### 第3.2步 数据标注\n接下来，我们调用第2步中训练好的奖励\u002F偏好模型对生成的响应进行排序。\n\n```sh\naccelerate launch .\u002Fannotate_data\u002Fget_rewards.py --dataset_name_or_path .\u002Fdata\u002Fgen_data.jsonl --output_dir .\u002Fdata\u002Fdata_with_rewards.jsonl --K 4\n```\n如果您遇到``TypeError: Got unsupported ScalarType BFloat16''错误，请考虑调整您的transformers版本。\n\n### 第3.3步 训练\n\n```sh\nconda activate rlhflow\naccelerate launch --config_file .\u002Fconfigs\u002Fzero2.yaml dpo_iteration\u002Frun_dpo.py .\u002Fconfigs\u002Ftraining.yaml\n```\n如果您遇到``RuntimeError: CUDA error: invalid device ordinal, CUDA kernel errors might be asynchronously reported at some other API call''错误，您需要根据自己的GPU数量调整配置文件中的num_of_process参数。\n\n### 整体流程\n我们将所有步骤整合在一起，以便迭代训练能够自动运行。请注意，我们设置了sleep 1m来等待API注册完成以便进行推理。您可能需要根据自己的环境调整这个参数。\n\n```sh\nbash run_loop2.sh\n```\n\n## 致谢\n\n作者谨向优秀的开源社区表示感谢，包括Hugging Face TRL团队、Hugging Face H4团队、Allen Institute AI RewardBench团队、Meta LLaMA团队、evalplus团队以及Axolotl团队，感谢他们分享的模型、代码和训练数据集。\n\n## 引用\n如果您觉得本仓库的内容有用，请考虑按如下方式引用：\n\n```bibtex\n@misc{dong2024rlhf,\n      title={RLHF工作流：从奖励建模到在线RLHF}, \n      author={Hanze Dong、Wei Xiong、Bo Pang、Haoxiang Wang、Han Zhao、Yingbo Zhou、Nan Jiang、Doyen Sahoo、Caiming Xiong、Tong Zhang},\n      year={2024},\n      eprint={2405.07863},\n      archivePrefix={arXiv},\n      primaryClass={cs.LG}\n}\n@inproceedings{xiong2023iterative,\n  title={基于人类反馈的迭代偏好学习：在KL约束下弥合理论与实践的差距——关于RLHF的研究},\n  author={Xiong, Wei、Dong, Hanze、Ye, Chenlu、Wang, Ziqi、Zhong, Han、Ji, Heng、Jiang, Nan、Zhang, Tong},\n  booktitle={ICLR 2024基础模型的数学与经验理解研讨会}\n}\n```","# Online-RLHF 快速上手指南\n\nOnline-RLHF 是一个用于通过**在线迭代强化学习人类反馈（Online Iterative RLHF）**来对齐大语言模型（LLM）的开源项目。该项目仅使用开源数据即可达到媲美甚至超越 LLaMA3-8B-Instruct 的效果。\n\n## 1. 环境准备\n\n### 系统要求\n- **操作系统**: Linux (推荐 Ubuntu)\n- **Python 版本**: 3.10.9\n- **CUDA 版本**: 推荐 12.1 - 12.2 (已测试兼容 12.0-12.6)\n- **GPU**: 建议多卡环境以加速训练和推理\n\n### 重要依赖警告\n- **NumPy 版本必须小于 2.0** (`numpy\u003C2.0`)，否则会遇到未知错误。\n- 需要注册并登录 **Hugging Face** 账号以访问 LLaMA3 等模型。\n- 需要注册 **Weights & Biases (wandb)** 账号以记录训练日志。\n\n---\n\n## 2. 安装步骤\n\n本项目建议为**推理**、**SFT 训练**和**RLHF 训练**分别创建独立的 Conda 环境。\n\n### 2.1 SFT 环境 (监督微调)\n\n```shell\nconda create -n sft python=3.10.9\nconda activate sft\n\n# 安装 Axolotl (用于通用模型微调)\ngit clone https:\u002F\u002Fgithub.com\u002FOpenAccess-AI-Collective\u002Faxolotl\ncd axolotl\ngit checkout 55cc214c767741e83ee7b346e5e13e6c03b7b9fa\npip install -e .\n\n# 安装 PyTorch 和 Flash-Attention (根据 CUDA 版本调整 torch 版本)\npip3 install torch==2.1.2 torchvision torchaudio\npip install flash-attn\n\n# 修复 Axolotl 依赖问题\npip install nvidia-ml-py3\n# 注意：需手动编辑 axolotl\u002Fsrc\u002Faxolotl\u002Futils\u002Fbench.py 第 6 行，改为: from pynvml import NVMLError\n\n# 安装 FastChat 和 Reward Modeling 相关依赖\ncd ..\ngit clone https:\u002F\u002Fgithub.com\u002Flm-sys\u002FFastChat.git\ncd FastChat\npip install -e .\n\ncd ..\ngit clone https:\u002F\u002Fgithub.com\u002FWeiXiongUST\u002FRLHF-Reward-Modeling.git\npip install deepspeed\n\n# 登录 WandB 和 HuggingFace\npip install wandb\nwandb login\nhuggingface-cli login\n```\n\n### 2.2 推理环境 (Data Generation)\n\n```shell\nconda create -n vllm python=3.10.9\nconda activate vllm\n\npip install datasets\n\n# 安装 vLLM 及相关依赖 (适配 LLaMA3, Mistral 等)\npip install vllm==0.5.4\npip install accelerate==0.33.0\npip install deepspeed==0.14.5\npip install transformers==4.43.4\n\n# 【关键】锁定 NumPy 版本\npip install numpy==1.26.4\n```\n\n### 2.3 RLHF 训练环境\n\n```shell\nconda create -n rlhflow python=3.10.9\nconda activate rlhflow\n\n# 安装 Alignment Handbook\ngit clone https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Falignment-handbook.git\ncd .\u002Falignment-handbook\u002F\ngit checkout 27f7dbf00663dab66ad7334afb7a1311fa251f41\n\npip3 install torch==2.1.2 torchvision torchaudio\npython -m pip install .\n\n# 安装其他关键依赖\npip install flash-attn==2.6.3\npip install accelerate==0.33.0\npip install huggingface-hub==0.24.7\npip install wandb==0.17.7\n\n# 登录账号\nwandb login\nhuggingface-cli login\n```\n\n---\n\n## 3. 基本使用流程\n\n以下是实现一次完整在线迭代 RLHF 的核心步骤。\n\n### 第一步：监督微调 (SFT)\n将数据处理为标准格式（参考 `RLHFlow\u002FRLHFlow-SFT-Dataset-ver2`），然后启动训练。\n\n```shell\ncd sft\n# 单卡或多卡训练示例\ntorchrun --nproc_per_node 8 --master_port 20001 -m axolotl.cli.train llama3-8b-it.yaml\n```\n*注：若显存不足，可添加 `--deepspeed ..\u002Fconfigs\u002Fdeepspeed_stage3.json` 参数。*\n\n### 第二步：奖励模型 (Reward Modeling)\n使用已有的开源奖励模型或对数据进行标注。项目提供了多个 SOTA 奖励模型（如 `sfairXC\u002FFsfairX-LLaMA3-RM-v0.1`）。详细训练方法可参考 [RLHF-Reward-Modeling](https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FRLHF-Reward-Modeling)。\n\n### 第三步：数据生成与标注 (Data Generation & Annotation)\n\n#### 3.1 生成数据\n使用 vLLM 加速生成回复。创建 `test_gen.sh` 并运行：\n\n```shell\nmy_world_size=8 \ninfer_model=RLHFlow\u002FLLaMA3-SFT\nprompt_dir=RLHFlow\u002Ftest_generation_2k\nmkdir data\noutput_dir=.\u002Fdata\u002Fgen_data\n\nconda activate vllm\n# 并行启动多个生成进程\nCUDA_VISIBLE_DEVICES=0 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 0 --my_world_size ${my_world_size}  &\nCUDA_VISIBLE_DEVICES=1 python .\u002Fgeneration\u002Fgen_hf2.py --model_name_or_path ${infer_model} --dataset_name_or_path ${prompt_dir} --output_dir ${output_dir} --K 4 --temperature 1.0 --local_index 1 --my_world_size ${my_world_size}  &\n# ... (根据 GPU 数量继续启动其他进程，直至 my_world_size-1)\n\nwait\n# 合并生成的数据\npython .\u002Fgeneration\u002Fmerge_data.py --base_path ${output_dir} --output_dir .\u002Fdata\u002Fgen_data.json --num_datasets ${my_world_size}\n```\n\n#### 3.2 标注数据\n使用奖励模型对生成的回复进行打分排序：\n\n```shell\naccelerate launch .\u002Fannotate_data\u002Fget_rewards.py --dataset_name_or_path .\u002Fdata\u002Fgen_data.jsonl --output_dir .\u002Fdata\u002Fdata_with_rewards.jsonl --K 4\n```\n*注：若遇到 `BFloat16` 类型错误，请检查并调整 `transformers` 版本。*\n\n### 第四步：迭代训练 (DPO Training)\n\n切换到 `rlhflow` 环境开始 DPO 迭代训练：\n\n```shell\nconda activate rlhflow\naccelerate launch --config_file .\u002Fconfigs\u002Fzero2.yaml dpo_iteration\u002Frun_dpo.py .\u002Fconfigs\u002Ftraining.yaml\n```\n*注：若遇到 `invalid device ordinal` 错误，请根据实际 GPU 数量修改配置文件中的 `num_of_process`。*\n\n### 自动化全流程\n项目支持将上述步骤整合为自动迭代脚本。使用时请注意调整脚本中的等待时间（如 `sleep 1m`），以确保 API 服务注册完成。","某初创团队正在基于 LLaMA3-8B 构建垂直领域的医疗咨询助手，急需提升模型在复杂病例推理和事实准确性上的表现。\n\n### 没有 Online-RLHF 时\n- **数据滞后导致性能瓶颈**：团队仅能依赖静态的离线数据集进行微调，模型无法从新生成的回复中学习，导致在迭代优化时遭遇明显的性能天花板。\n- **对齐效果不及预期**：受限于离线训练模式，模型在 Truthful QA（事实真实性）和逻辑推理任务上的得分难以超越官方基线，甚至出现“越训越呆”的现象。\n- **资源浪费与复现困难**：尝试自行搭建在线强化学习流程时，因缺乏成熟的开源配方，导致环境配置冲突频发（如 NumPy 版本问题），耗费大量算力却难以复现论文中的优异结果。\n\n### 使用 Online-RLHF 后\n- **闭环迭代突破上限**：利用 Online-RLHF 提供的在线迭代 DPO 流程，模型能够实时利用自身生成的新数据进行训练，仅在开源数据支持下，Truthful QA 得分便从 0.53 跃升至 0.64，显著优于原版 LLaMA3-8B-Instruct。\n- **关键指标全面反超**：经过三轮迭代，模型在 GSM8K 数学推理和 HumanEval 代码生成任务上分别达到 85.3 和 0.683 的高分，在多项基准测试中实现了比肩甚至超越闭源大模型的效果。\n- **开箱即用的高效落地**：直接复用官方提供的详细食谱（Recipe）和预训练检查点，团队快速避开了环境兼容陷阱，将原本数周的算法调试周期缩短至几天，迅速完成了模型部署。\n\nOnline-RLHF 通过打通“生成 - 反馈 - 学习”的实时闭环，让开发者仅凭开源数据即可低成本打造出具备顶尖对齐能力的专用大模型。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FRLHFlow_Online-RLHF_405d178f.png","RLHFlow","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FRLHFlow_915790d8.jpg","Code for the Workflow of Reinforcement Learning from Human Feedback (RLHF)",null,"rlhflow.ai@gmail.com","https:\u002F\u002Fgithub.com\u002FRLHFlow",[83,87],{"name":84,"color":85,"percentage":86},"Python","#3572A5",89,{"name":88,"color":89,"percentage":90},"Shell","#89e051",11,543,48,"2026-04-01T08:23:26",4,"Linux","必需 NVIDIA GPU。测试环境为 CUDA 12.0-12.2 及 12.6。SFT 训练示例使用 8 卡 (nproc_per_node=8)，若显存不足建议使用 DeepSpeed Stage 3 和梯度检查点。推理部分明确提到使用多 GPU (示例为 8 卡) 并行生成数据。","未说明 (建议根据模型大小和批量大小配置，通常大模型训练需 64GB+)",{"notes":99,"python":100,"dependencies":101},"1. 强烈建议将推理 (inference) 和训练 (training) 环境分开部署。2. NumPy 版本必须低于 2.0 (推荐 1.26.4)，否则会遇到意外错误。3. 需要登录 Hugging Face 账号以访问 LLaMA3 等模型。4. 安装 axolotl 后需手动修复 pynvml 导入错误。5. 若遇到 BFloat16 类型错误，需调整 transformers 版本。6. 多卡训练时需根据实际 GPU 数量调整配置文件中的进程数。","3.10.9",[102,103,104,105,106,107,108,109,110,111],"torch==2.1.2","numpy\u003C2.0 (推荐 1.26.4)","flash-attn==2.6.3","transformers==4.43.4","accelerate==0.33.0","deepspeed==0.14.5","vllm==0.5.4","axolotl","FastChat","wandb==0.17.7",[13,26],[114,115,116],"llm","rlhf","llama3","2026-03-27T02:49:30.150509","2026-04-06T08:45:18.447178",[120,125,130,135,140,145,150],{"id":121,"question_zh":122,"answer_zh":123,"source_url":124},13989,"迭代式 DPO（Iterative DPO）的训练流程是怎样的？参考模型（Reference Policy）在每一轮迭代中会更新吗？","训练流程如下：从初始 SFT 模型（pi0）开始，在第一轮迭代中标注 20k 数据并训练得到 pi1。在第二轮迭代中，同样标注新的 20k 数据，但**基于 pi1 继续训练**得到 pi2，以此类推。关于参考策略，它通常固定为初始的 SFT 策略（initial policy），而不是更新为上一轮的策略。初始策略通常是 \"RLHFlow\u002FLLaMA3-SFT\"，而非原始的 \"meta-llama\u002FMeta-Llama-3-8B-Instruct\"。","https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FOnline-RLHF\u002Fissues\u002F18",{"id":126,"question_zh":127,"answer_zh":128,"source_url":129},13990,"为什么离线 DPO 训练推荐使用 Nectar 数据集而不是 HH-RLHF 数据集？","适合奖励建模（Reward Modeling）的数据集不一定适合 DPO 训练。例如，HH-RLHF 包含多轮对话，适合评估奖励模型，但已有超过 10 篇研究论文验证表明，直接在 HH-RLHF 上训练 DPO 效果不佳。Nectar 数据集使用强大且多样的大语言模型对这些数据进行了重新标注（re-label），生成了更高质量的回复，因此更适合用于 DPO 训练。离线 DPO 的效果很大程度上依赖于数据质量，而在线采样和在线数据标注是在线 RLHF 成功的关键。","https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FOnline-RLHF\u002Fissues\u002F8",{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},13991,"迭代数据集中的 'context_messages' 包含 'assistant' 标签的内容，这是否意味着存在信息泄露？","这不是信息泄露。这是因为部分提示词（prompts）是**多轮对话（multi-turn）**，包含对话历史而不仅仅是单条指令。例如，许多来自 HH-RLHF 的提示词都是多轮的。在数据集中，`choosen[:-1]`（或 `rejected[:-1]`）被视为提示词（prompt，即历史对话），而 `choosen[-1]` 被视为当前的回复（response）。","https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FOnline-RLHF\u002Fissues\u002F21",{"id":136,"question_zh":137,"answer_zh":138,"source_url":139},13992,"复现迭代 DPO 时，推荐的超参数（学习率、优化器、Batch Size）是什么？","维护者推荐的超参数配置为：优化器使用 AdamW，学习率为 5e-7（如果 Batch Size 为 32，则建议使用 2e-7），配合余弦退火（cosine decay）。Batch Size 建议为 128。Weight decay 和 warmup 步骤对最终性能影响不显著，可遵循代码默认值。注意报告中提到的学习率是 5e-7，而 README 中可能写的是 2e-7，建议以报告或维护者确认的 5e-7 (bs=128) 为准。","https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FOnline-RLHF\u002Fissues\u002F7",{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},13993,"使用 MT-Bench 或 AlpacaEval 评估模型时，得到的分数与论文报告不符，可能的原因及解决方法是什么？","分数差异通常由推理后端或评估配置不同导致。论文报告的分数是基于 HuggingFace generation 计算的，但维护者也确认使用 vllm 进行推理是快速且方便的，且结果应相近。如果使用 MT-Bench 只得到 8.09 分左右（低于预期的 8.22+），请检查：1. 确保使用的 GPT-4 模型版本和配置与基准测试一致；2. 检查终止符设置（如 `\u003C|eot_id|>`）；3. 尝试参考 `alpaca_eval` 库中的 `evaluate_from_model` 函数进行评估。此外，模型输出长度也可能影响评分，需确保生成长度在正常范围内。","https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FOnline-RLHF\u002Fissues\u002F6",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},13994,"在迭代过程中，历史数据集是否会累积？每一轮训练是使用累积数据还是仅使用新数据？","根据项目目前的实现和解释，每一轮迭代主要是使用当轮新标注的 20k 数据进行训练。具体流程是：从 pi0 开始，第一轮用新标注的 20k 数据训练得到 pi1；第二轮再用**新标注的** 20k 数据，从 pi1 初始化继续训练得到 pi2。虽然论文图表可能暗示历史数据集增长，但在该项目的具体操作描述中，强调的是在上一轮模型基础上利用新一轮数据进行增量训练，而非将所有历史数据混合后从头训练。","https:\u002F\u002Fgithub.com\u002FRLHFlow\u002FOnline-RLHF\u002Fissues\u002F5",{"id":151,"question_zh":152,"answer_zh":153,"source_url":129},13995,"如何将迭代式 DPO 应用到 Llama3-70B 等大模型上？有什么注意事项？","将迭代式 DPO 应用到大模型（如 Llama3-70B）时，核心原则与中小模型一致，但需特别注意数据质量和在线采样的重要性。离线 DPO 在大模型上极度依赖数据质量，因此直接蒸馏 GPT-4 的离线数据可能不如在线 RLHF 效果好。建议关注在线数据标注和 On-policy 采样。此外，由于显存限制，可能需要调整 Batch Size 并相应降低学习率（例如 BS=32 时使用 2e-7），并确保推理和评估环境（如 vllm 配置）能够支持大模型的运行。",[]]