# LLM Fine-tuning (FT) 场景运行指南 本文档介绍如何运行 RD-Agent 的 LLM Fine-tuning 场景。 ## 简介 FT 场景用于自动化优化大语言模型在特定 benchmark 上的表现。系统会自动: 1. 生成数据处理和训练代码 2. 执行模型微调 3. 在目标 benchmark 上评估模型性能 4. 根据反馈迭代改进 ## 支持的 Benchmark | 类别 | Benchmark | 数据集 | 描述 | |------|-----------|--------|------| | Math | `aime24`, `aime25` | `deepscaler` | AIME 数学竞赛 | | Patent | `panorama_par4pc` | `panorama-par4pc` | 专利现有技术检索 | | Patent | `panorama_pi4pc` | `panorama-pi4pc` | 专利段落识别 | | Patent | `panorama_noc4pc` | `panorama-noc4pc` | 专利新颖性分类 | | Chemistry | `chemcotbench_mol_und` | `chemcot-mol_und` | 分子理解 | | Chemistry | `chemcotbench_mol_edit` | `chemcot-mol_edit` | 分子编辑 | | Chemistry | `chemcotbench_mol_opt` | `chemcot-mol_opt` | 分子优化 | | Chemistry | `chemcotbench_reaction` | `chemcot-rxn` | 化学反应预测 | > 数据集配置位于 `rdagent/scenarios/finetune/datasets/__init__.py` 的 `DATASETS` 字典中。 >运行时agent会查看所有数据集,根据target benchmark和scenario选出与之相关的。 ## 环境配置 ### 1. 运行环境 确保已安装 `rdagent` 主运行环境,其他需要的运行环境会自动创建 > 在 `.env` 配置文件中通过设置 `FT_Coder_CoSTEER_env_type = conda/docker` 来配置 ### 2. .env 配置文件 在项目根目录创建 `.env` 文件,参考以下模板: ```bash # ========== API Configuration ========== BACKEND=rdagent.oai.backend.LiteLLMAPIBackend CHAT_MODEL=gpt-5.2 CHAT_TEMPERATURE=1 CHAT_STREAM=True OPENAI_API_KEY=sk-xxx OPENAI_API_BASE=http://your-api-endpoint EMBEDDING_MODEL=text-embedding-ada-002 EMBEDDING_USE_AZURE=True # ========== Global Configs ========== MAX_RETRY=12000 RETRY_WAIT_SECONDS=5 MULTI_PROC_N=16 STEP_SEMAPHORE=1 # ========== Cache Settings ========== DUMP_CHAT_CACHE=False USE_CHAT_CACHE=False DUMP_EMBEDDING_CACHE=True USE_EMBEDDING_CACHE=True LOG_LLM_CHAT_CONTENT=True CHAT_FREQUENCY_PENALTY=0.1 CHAT_PRESENCE_PENALTY=0.0 # ========== FT Scenario Specific ========== FT_FILE_PATH=/path/to/your/finetune/workspace # Environment type: docker or conda # Set to "conda" when Docker is unavailable FT_Coder_CoSTEER_env_type=conda # Docker settings (only used when env_type=docker) FT_DOCKER_ENABLE_CACHE=True FT_UPDATE_LLAMA_FACTORY=False # Data processing API concurrency (adjust based on target API capacity) FT_API_MAX_WORKERS=1000 # Data processing Model FT_STRONG_MODELS='["gpt-5", "gpt-5.1"]' FT_WEAK_MODELS='["gpt-4o-mini"]' # Benchmark and target (can be overridden in script) FT_TARGET_BENCHMARK=aime25 FT_USER_TARGET_SCENARIO="I need to enhance the model's performance on math reasoning tasks." # Timeout settings FT_DATA_PROCESSING_TIMEOUT=28800 # Judge settings (optional) # FT_JUDGE_MODEL=gpt-5.1 # FT_JUDGE_RETRY=10 REASONING_THINK_RM=True # ========== Logging ========== LOG_FORMAT_CONSOLE="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {process} | {name}:{function}:{line} - {message}" # ========== HuggingFace ========== HF_TOKEN=hf_xxx ``` ## 运行方法 ### 基本命令 ```bash # 激活 conda 环境 conda activate rdagent # 运行 FT 场景 dotenv run -- python rdagent/app/finetune/llm/loop.py --base-model ``` ### 命令行参数 | 参数 | 说明 | 示例 | |------|------|------| | `--base-model` | 基础模型名称(必需,其他都可以不填) | `Qwen/Qwen2.5-7B-Instruct` | | `--benchmark` | 目标 benchmark | `aime25` | | `--benchmark-description` | Benchmark 描述 | - | | `--dataset` | 指定数据集 | - | | `--step-n` | 步数限制 | `10` | | `--loop-n` | 循环次数限制 | `5` | | `--timeout` | 总时间限制 | - | ### 运行示例 ```bash # 在 AIME25 上微调 Qwen2.5-7B dotenv run -- python rdagent/app/finetune/llm/loop.py \ --base-model Qwen/Qwen2.5-7B-Instruct # 指定 GPU 运行 CUDA_VISIBLE_DEVICES=0,1 dotenv run -- python rdagent/app/finetune/llm/loop.py \ --base-model Qwen/Qwen2.5-7B-Instruct # 限制循环次数 dotenv run -- python rdagent/app/finetune/llm/loop.py \ --base-model Qwen/Qwen2.5-7B-Instruct \ --loop-n 3 ``` ### 多任务并行运行 创建 `tasks.json` 配置文件: ```json { "tasks": [ {"model": "Qwen/Qwen2.5-7B-Instruct", "benchmark": "aime25", "gpus": "0,1"}, {"model": "Qwen/Qwen2.5-7B-Instruct", "benchmark": "gsm8k", "gpus": "2,3"} ] } ``` 使用 `run_ft_deploy.sh` 脚本运行: ```bash ./run_ft_deploy.sh tasks.json # 正常运行 ./run_ft_deploy.sh tasks.json --dry-run # 仅预览配置 ./run_ft_deploy.sh tasks.json --no-sync # 禁用 blob 同步 ```
run_ft_deploy.sh 脚本参考 ```bash #!/bin/bash # 多任务并行部署脚本(简化版) RDAGENT_DIR="$HOME/RD-Agent" ENV_TEMPLATE=".env.ft" STAGGER_DELAY=60 cd "$RDAGENT_DIR" source ~/miniconda3/etc/profile.d/conda.sh conda activate rdagent CONFIG_FILE="${1:-tasks.json}" NUM_TASKS=$(jq '.tasks | length' "$CONFIG_FILE") for ((i=0; i ## Blob 日志同步 使用 Azure Blob 在多台机器间同步日志文件。 ### 1. 生成 SAS Token ```bash # 首先登录 Azure CLI az login # 生成 Token(默认有效期 7 天) bash rdagent/utils/blob/gen_token.sh # 或指定过期时间 bash rdagent/utils/blob/gen_token.sh 2025-01-31T00:00Z ``` Token 会保存到 `git_ignore_folder/.az_sas_token`。 ### 2. 同步日志 同步路径:`log/` ↔ `blob://epeastus/rdagent/FinetuneAgenticLLM/FT_qizheng/logs` ```bash # 上传本地日志到 Blob bash rdagent/utils/blob/azsync.sh up # 从 Blob 下载日志到本地 bash rdagent/utils/blob/azsync.sh down ``` > 如需修改远程路径,编辑 `rdagent/utils/blob/azsync.sh` 中的 `REMOTE_PATH` 变量。 ## 日志查看 运行日志保存在 `log/` 目录下: ``` log/ └── 2025-01-01_12-00-00-123456/ ├── Loop_0/ │ ├── direct_exp_gen/ # 假设生成 │ ├── coding/ # 代码生成 │ ├── running/ # 训练执行 │ └── feedback/ # 反馈总结 └── Loop_1/ └── ... ```