> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tuneplane.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Chain runs into a pipeline

> Start one stage from the previous stage's checkpoint, and run export and evaluation automatically.

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp submit my-sft --profile h200:8
tp submit my-dpo --profile h200:8 --init-from run/run-4f2a91/checkpoint
```

Stage two starts from stage one's checkpoint. The server resolves the reference, checks the
artifact exists and that you may read it, and injects the real path into the job.

Post-training is rarely one step: SFT, then DPO or GRPO, then export and evaluation. Two flags
cover it — `--init-from` for the hand-off, `--then` for what follows automatically.

## Start from a previous run's checkpoint

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
# the latest checkpoint of that run
tp submit my-dpo --profile h200:8 --init-from run/run-4f2a91/checkpoint

# a specific step
tp submit my-grpo --profile h200:8 --init-from "run/run-8b1c02/checkpoint@step=120"
```

Every run's checkpoint is registered when it succeeds, so the next stage only needs the run id.
The new run records a **Derivation** back to the old one, and the Artifacts tab on either job
page shows the whole chain. A Derivation crosses projects and owners; Pipeline membership does
not.

## Run export and evaluation automatically

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp submit my-grpo --profile h200:8 --then export --then eval
```

Each `--then` becomes a **Step** of the same **Pipeline**, submitted once training succeeds.
The job list shows one row for the Pipeline, with a state rolled up from its Steps. When
training succeeds and a later Step does not happen, that state is `partial` — see
[job states](https://docs.tuneplane.ai/en/concepts/job-lifecycle.md).

## Export to HuggingFace format by hand

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp export my-grpo \
  --checkpoint checkpoints/step_500 \
  --checkpoint-format nemo-dcp
```

Formats: `nemo-dcp`, `nemo-megatron`, `verl-fsdp`, `verl-megatron`, `huggingface`. The
checkpoint path is the one the artifact registry recorded, which the job page lists under
Artifacts.

To push the result to the Hub:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp export my-grpo --checkpoint checkpoints/step_500 \
  --checkpoint-format nemo-dcp \
  --push-repo myorg/my-model
```

The server injects your own linked Hugging Face token. Link one first — see the
[Hugging Face integration](https://docs.tuneplane.ai/en/integrations/huggingface.md).

## Run the framework's own evaluation

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
# NeMo-RL, against an exported model
tp eval my-grpo --model /shared/hf_export/my-model

# NeMo-RL, with an explicit evaluation config
tp eval my-grpo --model Qwen/Qwen3.5-9B --eval-config configs/eval/gsm8k.yaml

# verl SFT, reporting validation samples back onto the training run
tp eval my-verl-sft --run-id run-4f2a91 --step 200 --data data/val.parquet
```

`tp eval` reuses the training framework's own inference path. For scores you can compare across
models and teams, use `tp bench` instead — those land in the benchmark dashboard. See
[benchmarks](https://docs.tuneplane.ai/en/guides/benchmarks.md).

## A pipeline end to end

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
# 1. SFT as the base
tp new sft-qwen --method nemo-rl/sft
tp submit sft-qwen --profile h200:8

# 2. GRPO from the SFT checkpoint, exporting when it finishes
tp new grpo-qwen --method nemo-rl/grpo
tp submit grpo-qwen --profile h200:8 \
  --init-from run/run-4f2a91/checkpoint --then export

# 3. Score it against standard benchmarks
tp bench run bench-qwen -m run:run-8b1c02 --suites gsm8k,mmlu

# 4. Try it
tp serve start run:run-8b1c02 --gpus 1
```

## Check it worked

The job page's Artifacts tab lists what this run registered and the run it derived from. A Pipeline that reads `succeeded` ran every declared Step; `partial` means one of
them did not happen.

## Next

[Model registry](https://docs.tuneplane.ai/en/guides/model-registry.md) to turn a checkpoint into a version ·
[Benchmarks](https://docs.tuneplane.ai/en/guides/benchmarks.md) · [Playground](https://docs.tuneplane.ai/en/guides/playground.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.