From 024597c10147b666de712e7a96db50892ce483a1 Mon Sep 17 00:00:00 2001 From: ZQlQZ Date: Mon, 29 Dec 2025 14:18:53 +0800 Subject: [PATCH 1/2] add lightning --- docs/docs/deploy/optimization.md | 49 +++---- veadk/cli/cli_rl.py | 7 +- veadk/cli/templates/rl/lightning/README.md | 58 ++++++++ .../rl/lightning/data/demo_test.parquet | Bin 0 -> 8558 bytes .../rl/lightning/data/demo_train.parquet | Bin 0 -> 111540 bytes .../rl/lightning/demo_calculate_agent.py | 136 ++++++++++++++++++ .../cli/templates/rl/lightning/restart_ray.sh | 7 + veadk/cli/templates/rl/lightning/train.sh | 53 +++++++ 8 files changed, 280 insertions(+), 30 deletions(-) create mode 100644 veadk/cli/templates/rl/lightning/README.md create mode 100644 veadk/cli/templates/rl/lightning/data/demo_test.parquet create mode 100644 veadk/cli/templates/rl/lightning/data/demo_train.parquet create mode 100644 veadk/cli/templates/rl/lightning/demo_calculate_agent.py create mode 100755 veadk/cli/templates/rl/lightning/restart_ray.sh create mode 100755 veadk/cli/templates/rl/lightning/train.sh diff --git a/docs/docs/deploy/optimization.md b/docs/docs/deploy/optimization.md index 8f1f060b..5a72655f 100644 --- a/docs/docs/deploy/optimization.md +++ b/docs/docs/deploy/optimization.md @@ -117,51 +117,46 @@ veadk rl init --platform lightning --workspace veadk_rl_lightning_project ```bash cd veadk_rl_lightning_project -veadk rl run --platform lightning --client +python veadk_agent.py ``` -然后在终端2中运行以下命令,启动 server: +然后在终端2中运行以下命令 + +- 首先重启 ray 集群: + +```bash +cd veadk_rl_lightning_project +bash restart_ray.sh +``` + +- 启动 server: ```bash cd veadk_rl_lightning_project -veadk rl run --platform lightning --server +bash train.sh ``` #### 原理说明 生成后的项目结构如下,其中核心文件包括: -- agent_client: `examples/*/*_agent.py` 中定义了agent的rollout逻辑和reward规则 -- training_server: `examples/*/train.py` 定义了训练相关参数,用于启动训练服务器 +- agent_client: `*_agent.py` 中定义了agent的rollout逻辑和reward规则 +- training_server: `train.sh` 定义了训练相关参数,用于启动训练服务器 ```shell veadk_rl_lightning_project -├── agentligtning - ├── runner # 运行器:负责任务执行、调度、主流程管理 - ├── tracer # 追踪模块:记录日志、链路追踪、调试信息 - ├── trainer # 训练模块:支持模型训练、微调与评估逻辑 - ├── verl # VERL强化学习组件 - └── server.py # 训练服务器 -└── examples # 示例项目,包含若干示例 - ├── spider # 示例一:Spider 数据库问答任务 - ├── sql_agent.py # sql agent的rollout逻辑和reward设定 - ├── train.sh #训练服务器启动脚本,设定训练相关参数 - └── data # 数据集 - ├── train.parquet # 训练数据集,需要为parquet格式 - └── eval.parquet # 评测数据集,需要为parquet格式 - ├── rag # 示例二:RAG 应用示例 - ├── rag_agent.py # rag agent的rollout逻辑和reward设定 - └── train.sh #训练服务器启动脚本,设定训练相关参数 - └── calc_x # 示例三:计算 agent 应用示例 - ├── calc_agent.py # calculate agent的rollout逻辑和reward设定 - └── train.sh #训练服务器启动脚本,设定训练相关参数 - +├── data + ├── demo_train.parquet # 训练数据,必须为 parquet 格式 + ├── demo_test.parquet # 测试数据,必须为 parquet 格式 +└── demo_calculate_agent.py # agent的rollout逻辑和reward设定 +└── train.sh # 训练服务器启动脚本,设定训练相关参数 +└── restart_ray.sh # 重启 ray 集群脚本 ``` #### 最佳实践案例 -1. 脚手架中,基于 VeADK 的天气查询 Agent 进行强化学习优化 -2. 启动 client (veadk rl run --platform lightning --client) 与 server (veadk rl run --platform lightning --server),分别在终端1与终端2中运行以上命令 +1. 脚手架中,基于 VeADK 的算术 Agent 进行强化学习优化 +2. 启动 client (python demo_calculate_agent.py), 重启ray集群(bash restart_ray.sh), 最后启动训练服务器server (bash train.sh),分别在终端1与终端2中运行以上命令 ![启动client](../assets/images/optimization/lightning_client.png) diff --git a/veadk/cli/cli_rl.py b/veadk/cli/cli_rl.py index 02ff05ce..e2fd712d 100644 --- a/veadk/cli/cli_rl.py +++ b/veadk/cli/cli_rl.py @@ -38,8 +38,8 @@ def rl_group(): "--platform", "-p", required=True, - type=click.Choice(["ark"], case_sensitive=False), - help="Scaffold platform type (only support for now: ark)", + type=click.Choice(["ark", "lightning"], case_sensitive=False), + help="Scaffold platform type (supported: ark, lightning)", ) @click.option( "--workspace", "-w", required=True, type=str, help="Target workspace directory name" @@ -52,8 +52,9 @@ def rl_group(): ) def rl_init(platform: str, workspace: str, overwrite: bool): """ - Initialize RL scaffold project for ark platform + Initialize RL scaffold project for ark or lightning platform Example: veadk rl init --platform ark --workspace veadk_rl_ark_project + Example: veadk rl init --platform lightning --workspace veadk_rl_lightning_project """ # Locate template directory rl_template_root = get_rl_template_root() diff --git a/veadk/cli/templates/rl/lightning/README.md b/veadk/cli/templates/rl/lightning/README.md new file mode 100644 index 00000000..8c1a0901 --- /dev/null +++ b/veadk/cli/templates/rl/lightning/README.md @@ -0,0 +1,58 @@ +# Agent Lightning + +Agent Lightning 提供了灵活且可扩展的框架,实现了智能体(client)和训练(server)的完全解耦。 +VeADK 与 Agent Lightning 集成,用户使用 VeADK 提供的脚手架,可以开发 VeADK Agent,然后运行 client 与 server 进行强化学习优化。 + +## 准备工作 + +在你的终端中运行以下命令,初始化一个 Agent Lightning 项目: + +```bash +veadk rl init --platform lightning --workspace veadk_rl_lightning_project +``` + +该命令会在当前目录下创建一个名为 `veadk_rl_lightning_project` 的文件夹,其中包含了一个基本的基于 VeADK 和 Agent Lightning 的强化学习项目结构。 +然后在终端1中运行以下命令,启动 client: + +```bash +cd veadk_rl_lightning_project +python veadk_agent.py +``` + +然后在终端2中运行以下命令 + +- 首先重启 ray 集群: + +```bash +cd veadk_rl_lightning_project +bash restart_ray.sh +``` + +- 启动 server: + +```bash +cd veadk_rl_lightning_project +bash train.sh +``` + +## 原理说明 + +生成后的项目结构如下,其中核心文件包括: + +- agent_client: `*_agent.py` 中定义了agent的rollout逻辑和reward规则 +- training_server: `train.sh` 定义了训练相关参数,用于启动训练服务器 + +```shell +veadk_rl_lightning_project +├── data + ├── demo_train.parquet # 训练数据,必须为 parquet 格式 + ├── demo_test.parquet # 测试数据,必须为 parquet 格式 +└── demo_calculate_agent.py # agent的rollout逻辑和reward设定 +└── train.sh # 训练服务器启动脚本,设定训练相关参数 +└── restart_ray.sh # 重启 ray 集群脚本 +``` + +## 最佳实践案例 + +1. 脚手架中,基于 VeADK 的算术 Agent 进行强化学习优化 +2. 启动 client (python demo_calculate_agent.py), 重启ray集群(bash restart_ray.sh), 最后启动训练服务器server (bash train.sh),分别在终端1与终端2中运行以上命令 diff --git a/veadk/cli/templates/rl/lightning/data/demo_test.parquet b/veadk/cli/templates/rl/lightning/data/demo_test.parquet new file mode 100644 index 0000000000000000000000000000000000000000..06ba8cb6d8f3b18b2764d2e453c86107ee1b92c8 GIT binary patch literal 8558 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 SaNyhd7aeRw=s5hJ7XJkkqL*R- literal 0 HcmV?d00001 diff --git a/veadk/cli/templates/rl/lightning/data/demo_train.parquet b/veadk/cli/templates/rl/lightning/data/demo_train.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e99f09aa281a0b441d33d86f935c7cc0cb0859ba GIT binary patch literal 111540 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]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�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 str: + """ + >>> normalize_option(" (A) \n") + 'A' + """ + return re.sub(r"(\s+|\(|\))", "", option) + + +def is_option_result(result: str) -> bool: + """ + >>> is_option_result(" A) \n") + True + >>> is_option_result(" 23/7 ") + False + """ + return normalize_option(result) in list(string.ascii_letters) + + +def float_eval(input_str: str) -> float: + if " = around " in input_str: + input_str = input_str.split(" = around ")[0] + expr = sympy.parse_expr(input_str, evaluate=True) + return float(expr.evalf()) + + +def scalar_are_results_same(pred_result: str, true_result: str, rel_tol: float) -> bool: + pred_result = str(pred_result) if pred_result is not None else "" # type: ignore + true_result = str(true_result) if true_result is not None else "" # type: ignore + + if pred_result.strip() == true_result.strip(): + return True + + if is_option_result(true_result): + # The task is to select correct option + true_result = normalize_option(true_result) + pred_result = normalize_option(pred_result) + return pred_result == true_result + + # The task is to calculate the result as a number + try: + pred_float = float_eval(pred_result) + true_float = float_eval(true_result) + return math.isclose(pred_float, true_float, rel_tol=rel_tol) + except Exception: + pass + + return False + + +@reward +async def eval(prediction: str, ground_truth: str) -> float: + return float(scalar_are_results_same(prediction, ground_truth, 1e-2)) + + +class CalcAgent(LitAgent[Any]): + async def training_rollout_async( + self, task: Any, rollout_id: str, resources: NamedResources + ) -> Any: # type: ignore + llm: LLM = cast(LLM, resources.get("main_llm")) + calc_agent = Agent( + name="CalcAgent", + description="An agent that can perform calculations to answer questions.", + instruction="You are a helpful assistant that can perform mathematical calculations to answer questions accurately.", + model_provider="openai", + model=llm.model, + api_base=llm.endpoint, + api_key="", + ) + runner = Runner( + agent=calc_agent, + short_term_memory=ShortTermMemory(), + app_name="calc_agent", + user_id="veadk_default_user", + ) + try: + output_format = "Output the answer when you are ready. The answer should be surrounded by three sharps (`###`), in the form of ### ANSWER: ###." + prompt = task["question"] + " " + output_format + result = await runner.run( + session_id=rollout_id, + messages=prompt, + ) + # evaluate + answer = re.search( + r"###\s*ANSWER:\s*(.+?)(\s*###|$)", result.messages[-1].content + ) # type: ignore + if answer: + answer = answer.group(1) + else: + answer = result.messages[-1].content # type: ignore + except Exception as e: + print("Failure:", str(e)) + answer = "None" + reward = await eval( + answer, str(task["result"]) + ) # reward is tracked with the decorator # type: ignore + print( + "answer: {} ground_truth: {} reward: {}".format( + answer, task["result"], reward + ) + ) # type: ignore + + async def validation_rollout_async( + self, task: Any, rollout_id: str, resources: NamedResources + ) -> Any: # type: ignore + llm: LLM = cast(LLM, resources.get("main_llm")) + resources = { + "main_llm": LLM( + endpoint=llm.endpoint, + model=llm.model, + sampling_parameters={"temperature": 0}, + ) + } + return await self.training_rollout_async(task, rollout_id, resources) + + +if __name__ == "__main__": + Trainer(n_workers=10).fit(CalcAgent(), "http://localhost:9999/") diff --git a/veadk/cli/templates/rl/lightning/restart_ray.sh b/veadk/cli/templates/rl/lightning/restart_ray.sh new file mode 100755 index 00000000..7bec3d83 --- /dev/null +++ b/veadk/cli/templates/rl/lightning/restart_ray.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +set -ex + +ray stop -v --force --grace-period 60 +ps aux +env RAY_DEBUG=legacy HYDRA_FULL_ERROR=1 VLLM_USE_V1=1 ray start --head --dashboard-host=0.0.0.0 --port 6380 --dashboard-port 8266 \ No newline at end of file diff --git a/veadk/cli/templates/rl/lightning/train.sh b/veadk/cli/templates/rl/lightning/train.sh new file mode 100755 index 00000000..32e0742b --- /dev/null +++ b/veadk/cli/templates/rl/lightning/train.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +set -e + +export N_GPUS=1 +export BASE_MODEL=Qwen/Qwen2.5-1.5B-Instruct +export DATA_DIR=data +export ROLLOUT_TP_SIZE=1 +export EXPERIMENT_NAME=calc_x +export PROJECT_NAME=AgentLightning + +echo "Starting training script..." + +python -m agentlightning.verl \ + algorithm.adv_estimator=grpo \ + data.train_files=${DATA_DIR}/train.parquet \ + data.val_files=${DATA_DIR}/test.parquet \ + actor_rollout_ref.rollout.tensor_model_parallel_size=$ROLLOUT_TP_SIZE \ + trainer.n_gpus_per_node=${N_GPUS} \ + data.train_batch_size=32 \ + actor_rollout_ref.rollout.n=4 \ + actor_rollout_ref.actor.ppo_mini_batch_size=32 \ + actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=4 \ + actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=4 \ + actor_rollout_ref.rollout.multi_turn.format=hermes \ + actor_rollout_ref.model.path=${BASE_MODEL} \ + data.max_prompt_length=4096 \ + data.max_response_length=2048 \ + data.truncation='error' \ + trainer.val_before_train=True \ + actor_rollout_ref.actor.optim.lr=1e-6 \ + actor_rollout_ref.model.use_remove_padding=True \ + actor_rollout_ref.actor.use_kl_loss=False \ + actor_rollout_ref.actor.kl_loss_coef=0.000 \ + actor_rollout_ref.actor.entropy_coeff=0 \ + actor_rollout_ref.actor.clip_ratio_low=0.2 \ + actor_rollout_ref.actor.clip_ratio_high=0.3 \ + actor_rollout_ref.model.enable_gradient_checkpointing=True \ + actor_rollout_ref.actor.fsdp_config.param_offload=True \ + actor_rollout_ref.actor.fsdp_config.optimizer_offload=True \ + actor_rollout_ref.rollout.name=vllm \ + actor_rollout_ref.rollout.gpu_memory_utilization=0.8 \ + actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu=8 \ + actor_rollout_ref.ref.fsdp_config.param_offload=True \ + algorithm.use_kl_in_reward=False \ + trainer.critic_warmup=0 \ + trainer.logger=['console','wandb'] \ + trainer.project_name=${PROJECT_NAME} \ + trainer.experiment_name=${EXPERIMENT_NAME} \ + trainer.nnodes=1 \ + trainer.save_freq=256 \ + trainer.test_freq=32 \ + trainer.total_epochs=2 $@ From 41d2ed387f622ca6f158d0cef53ce87ce5c04894 Mon Sep 17 00:00:00 2001 From: ZQlQZ Date: Mon, 29 Dec 2025 14:22:13 +0800 Subject: [PATCH 2/2] add license --- .../templates/rl/lightning/demo_calculate_agent.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/veadk/cli/templates/rl/lightning/demo_calculate_agent.py b/veadk/cli/templates/rl/lightning/demo_calculate_agent.py index be71f89b..c6fb742e 100644 --- a/veadk/cli/templates/rl/lightning/demo_calculate_agent.py +++ b/veadk/cli/templates/rl/lightning/demo_calculate_agent.py @@ -1,4 +1,16 @@ -# Copyright (c) Microsoft. All rights reserved. +# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates. +# +# 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. import math import re