From 25e002d251b9f3b1570991f60b8fd2a2eb91c520 Mon Sep 17 00:00:00 2001 From: arcticfly Date: Thu, 28 Aug 2025 11:46:07 -0700 Subject: [PATCH 1/2] Add tutorial on deep research --- docs/docs.json | 3 +- docs/images/open-deep-research-progress.png | Bin 0 -> 34566 bytes docs/tutorials/open-deep-research.mdx | 156 ++++++++++++++++++++ 3 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 docs/images/open-deep-research-progress.png create mode 100644 docs/tutorials/open-deep-research.mdx diff --git a/docs/docs.json b/docs/docs.json index fbb6e6b80..a520c93b0 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -77,7 +77,8 @@ { "group": "Tutorials", "pages": [ - "tutorials/summarizer" + "tutorials/summarizer", + "tutorials/open-deep-research" ] }, { diff --git a/docs/images/open-deep-research-progress.png b/docs/images/open-deep-research-progress.png new file mode 100644 index 0000000000000000000000000000000000000000..33a70f7bb4c78da06dcc3641e4f3ed699c49308d GIT binary patch literal 34566 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
  • !RW#fQ8$a6ZeRWR+_ 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 + Checkpoint forking example + + + + +Reading time: 45 min + +Training time: 30hr + +Total cost: ~$100 + + + +## Step 1: Clone the starter repo and install dependencies + +To get started, clone [Open Deep Research Training](https://github.com/OpenPipe/open_deep_research_training), which contains the following pieces of our RL pipeline: + +- The deep research agent environment +- The reward function based on DeepResearch Bench +- SFT and GRPO training scripts +- Evaluation benchmarks + +Once the repository is cloned, install dependencies. If you haven't already, install `uv` by following the instructions [here](https://docs.astral.sh/uv/getting-started/installation/). + +Then install the project dependencies by running `uv sync`. + +### 2. Install SkyPilot/RunPod + +We'll be using `LocalBackend` to manage the GPU that your model will be trained on. In order to provision a GPU for your training run, you'll need to have SkyPilot installed on your machine and provide it with the credentials to spin up machines on at least one infra provider. + +We recommend using RunPod because of their ease of use, but any infra provider that SkyPilot [supports](https://docs.skypilot.co/en/latest/overview.html#bringing-your-infra) will work. + +Follow RunPod's **Getting Started** guide [here](https://docs.runpod.io/integrations/skypilot/). You'll have to provide a credit card to use RunPod, but you'll only pay for the time your GPUs are running. + +### 3. Set up optional environment variables found in `.env.example` + +Copy `.env.example` to `.env` at the root of the repository, and fill in the values for the environment variables. If you're unsure about any of the values, refer to [ENV_INSTRUCTIONS.md](https://github.com/OpenPipe/open_deep_research_training/blob/main/ENV_INSTRUCTIONS.md). + +### 4. Run the training scripts + +You'll want to run these scripts in this order: + +```bash +uv run collect_sft.py # Collect samples for your sft training run. ~1 Hour +``` + +This script collects supervised fine-tuning data by running the research agent on a subset of the DeepResearch Bench dataset. The collected trajectories will be used to improve the model's baseline performance before RL training. + +```bash +uv run run_sft.py # Run your sft training run. ~1 Hour +``` + +The SFT training step improves the model's ability to follow the research agent format and reasoning patterns. This creates a better starting point for the subsequent RL training. + +```bash +uv run run_train.py # Run your rl training run. 1+ Day +``` + +This is the main GRPO training loop where the model learns to optimize its research strategies based on feedback from the DeepResearch Bench evaluation framework. + +The following steps execute when a training run on a new cluster begins: + +- **Spin up a cluster with 1 or more H100 GPUs.** + - This usually takes about 10 minutes, but RunPod occasionally has network throughput issues that can cause the cluster to take up to 30 minutes to spin up. +- **Register the model with ART.** + - This usually takes less than 5 minutes, though it can require up to 30 minutes if RunPod experiences network issues. +- **Download the model checkpoint.** + - Usually takes a few minutes depending on the model size. +- **Train the model for a specified number of steps.** + - Each RL step involves running the research agent on benchmark questions, evaluating the results, and updating the model based on the rewards. Training time depends on the number of steps and the complexity of each research task. +- **Upload the final model checkpoint.** + - This usually takes a few minutes. + +### 5. Generate the benchmarks + +Run the benchmark script to evaluate your trained models: + +```bash +uv run evaluate/benchmark_model.py +``` + +This script will: + +- Run each benchmarked model through the DeepResearch Bench evaluation +- Compare performance against baseline models (GPT-4.1, Sonnet 4, etc.) +- Generate accuracy metrics and detailed results + +Then run the `display_benchmarks.ipynb` notebook to visualize the results and generate comparison charts. + +### 6. Shutting down the cluster + +When you're done training and running benchmarks, you can shut down the cluster by running: + +```bash +uv run sky down [cluster-name] +``` + +However, since spinning up clusters is a time-intensive process, we recommend keeping clusters alive until you're sure you won't be using them in the near future. + +## Training Results + +After completing the full training pipeline, you should see results similar to the chart at the beginning of this tutorial. The trained model typically shows: + +- Improved accuracy on research questions compared to the base model +- Better structured research approaches +- More comprehensive information gathering +- Higher quality synthesis of research findings + +The benchmark comparison will show how your trained model performs relative to leading commercial models like GPT-4.1 and Sonnet 4. + +## Next Steps + +Your model is trained and portable! Upload it to any platform you choose, including HuggingFace and inference providers like Together and Fireworks. + +To learn more about ART, check out another tutorial or look through our notebooks! As always, the [ART Discord](https://discord.gg/zbBHRUpwf4) is a great place to ask questions and share results! + +
    +
    + + Train a summarizer model to outperform Sonnet 4 and GPT-4.1. + +
    +
    + + Train a variety of agents in free Colab notebooks. + +
    +
    From 8964118bde528b65e87f029e3d5ca4d0a121260b Mon Sep 17 00:00:00 2001 From: arcticfly Date: Thu, 28 Aug 2025 11:46:36 -0700 Subject: [PATCH 2/2] Hide tutorial page --- docs/docs.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/docs.json b/docs/docs.json index a520c93b0..fbb6e6b80 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -77,8 +77,7 @@ { "group": "Tutorials", "pages": [ - "tutorials/summarizer", - "tutorials/open-deep-research" + "tutorials/summarizer" ] }, {