尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
AReaL CLI 实战指南:统一管理训练、推理与 Agent 服务的命令行入口
AReaL CLI 实战指南统一管理训练、推理与 Agent 服务的命令行入口【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaLAReaL 在 2.0 微服务架构下提供了areal操作者 CLI通过train、inf、agent三个顶层子命令组分别覆盖训练实验、本机推理服务和本机 Agent 服务的启动与管理。本文以官方文档 docs/zh/best_practices/cli_guide.md 为主体结合 CLI 源码 areal/v2/cli 与配置解析实现 areal/api/cli_args.py完整讲解三个子命令组的用法、生命周期模型、配置文件与源码级实现原理读完后你可以直接上手跑通一条训练实验、拉起一个带 SGLang 后端的推理服务、并部署一套多副本的 Agent 服务。三个顶层子命令组训练、推理、AgentarealCLI 的三个子命令组各自对应一种服务形态入口在 areal/v2/cli/cli.py 中通过cli.add_command(agent)、cli.add_command(inf)、cli.add_command(train)注册areal train— 解析实验 driver 与配置文件转发 hydra 覆盖参数将控制权交给训练脚本。它不管理训练进程的生命周期只做「找到 driver、加载配置、透传参数」三件事刻意保持无状态。areal inf— 启动并管理本机上的推理服务gateway、router、model worker、data proxy负责注册模型、查看状态、管理日志与清理。areal agent— 启动并管理本机上的 agent 服务gateway、router、N 对 worker />result fn(argv) if isinstance(result, int): return result return 0用法与参数说明areal train run \ --config path/to/experiment.yaml \ --driver module.path:func \ [hydra-override-1 hydra-override-2 ...]flag / arg是否必填说明--config是实验 YAML 路径文件必须存在CLI 会执行exists检查--driver是driver 入口形如module.path:func冒号分隔尾部位置参数否原样转发给 driver通常是 hydra 风格的keyvalue覆盖参数run_cmd启用了context_settings{ignore_unknown_options: True}——尾部位置参数可以包含--xxx形式的选项CLI 不会去解析它们而是原样转发给 driver。实现上尾部参数通过click.argument(overrides, nargs-1, typeclick.UNPROCESSED)接收--config则声明为typeclick.Path(existsTrue, dir_okayFalse, path_typePath)文件不存在时由 click 直接拦截报错。典型示例运行 GSM8K GRPO最常见的 baselineareal train run \ --config examples/math/gsm8k_grpo.yaml \ --driver examples.math.gsm8k_rl:main \ experiment_namegsm8k_grpo_test \ trial_namet1运行 SFTareal train run \ --config examples/math/gsm8k_sft.yaml \ --driver examples.math.gsm8k_sft:main对应的实验配置与 driver 脚本都位于 examples/math 目录例如 examples/math/gsm8k_grpo.yaml 与 examples/math/gsm8k_rl.py。Driver 函数约定CLI 用单个参数argv: list[str]调用 driver因此 driver 长这样def main(args: list[str]) - int | None: config, _ load_expr_config(args, GRPOConfig) # 或任意其他 *Config dataclass ... return 0load_expr_config位于 areal.api.cli_args实现见该文件load_expr_config定义处约 areal/api/cli_args.py#L4240。它自己消费args识别--config后面的 YAML 路径将剩余的keyvalue作为 hydra 覆盖合并进 config dataclass。也就是说hydra 解析是由 driver 完成而不是由 CLI 完成。其内部流程是parse_cli_args解析原始 argv →to_structured_cfg将 DictConfig 结构化到目标 dataclass →OmegaConf.to_object转回 Python 对象随后还会把解析结果以config.yaml形式保存到StatsLogger的日志目录save_config敏感字段会被redact_sensitive_config脱敏。编写新 driver 的最小模板from areal.api.cli_args import GRPOConfig, load_expr_config from areal import PPOTrainer def main(args): config, _ load_expr_config(args, GRPOConfig) with PPOTrainer(config, train_dataset..., valid_dataset...) as trainer: trainer.train(workflow..., workflow_kwargs{...}) return 0Hydra 覆盖参数所有使用load_expr_config解析参数的 driver 都支持 hydra 风格覆盖。常见覆盖目标# 实验 / trial 命名 experiment_namemy_run trial_namet1 # 集群规模 cluster.n_nodes4 cluster.n_gpus_per_node8 # 训练超参 actor.optimizer.lr5e-6 total_train_epochs20 # rollout backend rollout.backendsglang:d2p1t2 rollout.max_concurrent_rollouts128 # 数据集 train_dataset.batch_size256CLI不会校验这些 key 是否合法driver 加载配置时 hydra 会报告未知字段。值得注意的是actor.optimizer.lr这类点分路径会命中OptimizerConfig中的lr、warmup_steps_proportion、warmup_steps等字段见 areal/api/cli_args.py 中OptimizerConfigdataclass 定义默认lr1e-3、warmup_steps_proportion0.001且当warmup_steps与比例同时显式配置时以warmup_steps为准并给出警告。退出码约定场景退出码driver 返回int直接使用其返回值driver 返回None/ 其他0--driver不包含:UsageErrorclick 默认 2--driver引用的模块无法导入ClickException1--driver引用的函数不在模块上ClickException1--config路径不存在click 的existsTrue捕获2driver 内部抛出的异常CLI 不做捕获——走 Python 默认行为打印 traceback、退出进程。尚未实现areal train目前只实现了run命令定义见 areal/v2/cli/training/commands/run.py。下列子命令是合理的未来扩展但当前版本未包含areal train ps/status/stop—— 训练任务生命周期管理需要先引入训练服务的状态概念。推理服务 CLIareal infareal inf用于在本机启动并管理 AReaL 推理服务。它会启动 gateway/router、注册模型、查看服务状态、管理日志。基础概念一个推理服务通常包含以下组件gateway对外提供 OpenAI 兼容 API 与 RL API。router维护「模型 → worker />export AREAL_HOME/path/to/areal-home从源码 areal/v2/cli/inference/commands/run.py 看run启动时会依次拉起 router 与 gatewayrouter 固定绑定127.0.0.1随机端口gateway 绑定用户指定的 host/port并把TaskHandle进程 PID、端口、GPU 设备持久化到ServiceState同时把模型列表持久化到ModelState。启动过程中的健康检查由wait_client_health完成默认--launch-timeout 30.0秒等待 gateway/health注册模型时默认--model-health-timeout 600.0秒等待模型服务器就绪。启动服务启动一个空的推理服务areal inf run \ --service default \ --host 127.0.0.1 \ --port 8080 \ --admin-api-key areal-admin-key \ --scheduler local \ --detach--scheduler用于选择 worker />areal inf ps areal inf status --service defaultps展示服务列表status深入到 gateway、router、data-proxy、worker 等各组件的状态。列出已注册的模型areal inf models --service default注册模型register让 CLI 启动一个本地推理后端并配一个>areal inf register \ --service default \ --model-name qwen-local \ --backend sglang:d1 \ --model-path Qwen/Qwen2.5-7B-Instruct \ --tokenizer-path Qwen/Qwen2.5-7B-Instruct \ --engine-args --mem-fraction-static 0.8 \ --proxy-args --request-timeout 120 --chat-template-type hf--engine-args是一个 shell 风格字符串原样转发给 sglang / vllm 的 worker 进程--proxy-args是>areal inf run \ --service default \ --port 8080 \ --admin-api-key areal-admin-key \ --model qwen-local \ --backend sglang:d1 \ --model-path Qwen/Qwen2.5-7B-Instruct \ --engine-args --mem-fraction-static 0.8 \ --proxy-args --request-timeout 120 --chat-template-type hf \ --detach注意--model相关的注册参数--backend等只在指定了--model时才合法否则run会抛出UsageError(model registration flags require --model.)。普通推理请求模型注册好后可以直接调用 gateway 的 OpenAI 兼容接口curl -sS http://127.0.0.1:8080/v1/chat/completions \ -H Authorization: Bearer areal-admin-key \ -H Content-Type: application/json \ -d { model: qwen-local, messages: [ {role: user, content: Hi, give me a quick intro to AReaL.} ], max_tokens: 128 }日志与清理查看日志areal inf logs --service default --component gateway -f areal inf logs --service default --component router -f areal inf logs --service default --component qwen-local-worker-0 -f areal inf logs --service default --component qwen-local-data-proxy-0 -f每个模型的 worker />areal inf deregister --service default --model-name qwen-local停止服务areal inf stop --service default强制停止areal inf stop --service default --force配置文件areal inf会从下面这个默认配置文件读取默认值~/.areal/inf/config.toml也可以另外传入配置文件areal inf --config ./inf.toml run --service default --detach示例[default] service default [launch] gateway_host 127.0.0.1 gateway_port 8080 routing_strategy round_robin [scheduler] type local [register.internal] backend sglang:d1 model_health_timeout 600 engine_args --mem-fraction-static 0.8 proxy_args --request-timeout 120 --chat-template-type hfAgent 服务 CLIareal agentareal agent用于在本机启动一组 agent 服务进程gateway / router N 对 worker />export AREAL_HOME/path/to/areal-home从源码 areal/v2/cli/agent/commands/run.py 看do_run首先强制校验--agent必填缺失抛UsageError(--agent is required)随后通过launch_agent_stack一次性拉起整条栈gateway router N 对 worker/proxy并把ServiceState保存到磁盘。若拉起过程中任何组件失败ServiceHTTPError/ServiceUnreachable/RuntimeError/ValueError会kill_pids清理已启动的进程并抛出ClickException。启动服务最小启动——一对 (worker, proxy)areal agent run \ --service default \ --agent my_package.my_agent.MyAgent \ --num-pairs 1 \ --admin-api-key areal-agent-admin--agent是必填项是 worker 进程用来加载 agent 类的导入路径。清除残留状态并强制启动areal agent run --service default --agent ... --force与areal inf run一样--force会先以 5 秒宽限期替换旧状态否则拒绝重复启动。其余可选参数及默认值--setup-timeout 120.0组件就绪等待、--health-poll-interval 5.0、--drain-timeout 30.0下线排空、--session-timeout 1800.0会话超时、--log-level info。查看服务状态列出本机所有 agent 服务areal agent ps areal agent ps --all # 包含 stale 行 areal agent ps --json输出列SERVICE / STATUS / GATEWAY / AGENT。查看单个服务里每个组件的健康状况areal agent status --service default输出包含 gateway、router以及每对 worker proxy。--watch模式按间隔刷新默认 2 秒areal agent status --service default --watch --interval 1JSON 模式方便与 jq 配合areal agent status --service default --json | jq .pairs[].worker与服务通信CLI不负责应用如何跟服务交互——应用直接打 gateway 的 HTTP 接口即可。status命令可以告诉你 gateway URLGATEWAY_URL$(areal agent status --service default --json | jq -r .gateway.url) echo gateway at $GATEWAY_URL应用带上--admin-api-key或从 gateway 拿到的 session key向该 URL 发请求。日志每个组件都有独立日志文件areal agent logs --service default --component gateway -f areal agent logs --service default --component router -f areal agent logs --service default --component worker-0 -f areal agent logs --service default --component proxy-0 -f命名约定gateway/router服务级单例。worker-i/proxy-i第 i 对 pair 的 worker />areal agent stop --service default默认是两阶段关闭先 SIGTERM等--grace-period10 秒再 SIGKILL。立即 SIGKILLareal agent stop --service default --force--keep-state保留状态文件杀掉进程但磁盘上的svc.json保留areal agent stop --service default --keep-state配置文件areal agent启动时会读取~/.areal/agent/config.toml作为默认值也可以另外传入配置文件areal agent --config ./my-agent.toml run --service default --agent ...示例[default] service default admin_api_key areal-agent-admin log_level info [run] agent my_package.my_agent.MyAgent num_pairs 2 setup_timeout 120 health_poll_interval 5 drain_timeout 30 session_timeout 1800优先级CLI 参数 通过--config传入的 TOML ~/.areal/agent/config.toml 内置默认值。尚未实现当前areal agent不包含会话级 CLI 操作开启会话 / 设置奖励 / 导出轨迹——这类操作与应用耦合很紧由应用直接调用 gateway HTTP 处理。自动故障恢复 / 心跳监控——status是按需查询不会持续观察组件健康。worker 死掉后需要用户运行status或看日志才能发现。分布式调度——只在本机启动本地进程k8s / slurm 等超出当前 CLI 的范围。小结一条命令链贯通三种服务形态arealCLI 的设计遵循「操作者工具」定位训练侧保持无状态、只做 driver 配置的封装与透传hydra 覆盖解析完全下沉到 driver 侧load_expr_config推理与 Agent 侧则共享完整的生命周期管理run/ps/status/logs/stopAREAL_HOME状态目录 TOML 配置优先级区别仅在于inf面向无状态模型推理gateway router worker contenteditable="false">【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

状态观测器设计:MATLAB极点配置与Simulink仿真实践

状态观测器设计:MATLAB极点配置与Simulink仿真实践

简介:基于MATLAB的状态观测器设计PDF以状态观测器为核心,系统梳理了状态观测器的基本概念、基于极点配置的设计原理、acker()与place()等MATLAB函数的适用场景与调用方式,并汇总出从能控性/能观性判断到观测器增益求解的完整设计步骤&#xf…

📅 2026/9/18 0:24:15
给 LLM judge 加一道任务核对,TaoToken 只做 Key 通道

给 LLM judge 加一道任务核对,TaoToken 只做 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/18 0:24:15
大部屋(OBEYA)作战指挥室:从信息架构到落地实践

大部屋(OBEYA)作战指挥室:从信息架构到落地实践

简介:《豐田-大部屋(OBEYA)实践教程》是一份面向企业中高层管理者、精益生产推进人员及项目管理团队的PDF学习资料,聚焦丰田生产方式中“作战指挥室”模式的落地方法。内容从大部屋的定义和丰田历史讲起,结合普锐斯项目…

📅 2026/9/18 0:24:15
MORE NEWS

更多资讯

📰

从RTE到iRTE,实时终于有了体感

声网iRTE2026实时智能大会将近,已经开始报名。连续关注RTE2024和RTE2025后,我对这场大会最直观的感受是:它不只把技术热词搬上台,而是把行业变化,拆成开发者和产品人看得见的下一步。RTE2024是第十届大会,站…

📰

MySQL重装初始化失败?从错误日志与data目录残留排查

你有没有遇到过这种情况:新装软件一切正常,但当你因为换版本、改配置、清理环境而把 MySQL 卸载再重装时,安装向导却卡在最后一步,直接弹出一个红色错误:Database initialization failed。我当时看到这个报错&#xff…

📰

出国看病病历翻译怎么做?材料清单、各国要求与避坑要点一文讲清

近年来,越来越多的家庭选择出国就医,从肿瘤、心血管等重症治疗,到辅助生殖、口腔种植等消费型医疗项目,跨境就医的需求持续增长。但在实际操作中,很多人把精力都放在选医院、办签证上,却忽略了一个关键环节…

📰

InfiniBand交换机实战解析:从架构原理到部署运维

InfiniBand网络交换机这东西,很多人第一次接触是在机房或者公司新采购的高性能计算集群里。一台台设备通过粗铜缆或者光纤连到一台看起来“平平无奇”的盒子上,标签上印着Mellanox或NVIDIA的Logo,型号里带着IB两个字母,这就是Infi…

📰

Windows下Node.js多版本管理:手动安装与nvm-windows切换实战

同时维护几个前端项目的人,大概率都碰过 nodejs 版本不一致的麻烦:老后台依赖旧版 Node,新项目又要求新版 Node,手动改环境变量改到怀疑人生。这时候要么同时安装多个 nodejs 版本并按需切换,要么直接用 nvm 做版本管理…

📰

IDEA右键新建Java Class选项消失?排查顺序与解决方案

IDEA右键新建时没有Java Class选项?别急着重装,先按这个排查顺序来用IDEA做Java开发,最让人措手不及的往往不是代码报错,而是工具本身突然“闹脾气”。前两天就有个同事在群里发截图问:在目录上右键想新建一个Java Cla…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬