Skip to main content
If you have existing experiments tracked in Neptune (v2.x or v3.x), you can export and migrate them to Pluto using the neptune-exporter CLI tool. This tool streams your Neptune runs to parquet files and loads them into Pluto while preserving run structure, metrics, parameters, and artifacts.
This is separate from the Neptune compatibility layer which enables dual-logging. Use this tool to migrate existing historical runs from Neptune to Pluto.

Overview

The neptune-exporter tool works in three stages:
  1. Export - Download Neptune runs to local parquet files and artifacts
  2. Inspect - View a summary of exported data
  3. Load - Upload the exported data to Pluto

Installation

Clone the neptune-exporter repository and install it with uv:

Quick Start

1. Export Neptune Data

First, authenticate with Neptune by setting your API token:
Then, export your Neptune runs to local storage using this basic command:
Use --exporter neptune2 if you’re using Neptune 2.x, or --exporter neptune3 for Neptune 3.x.

Export Options

The export command supports various filters to control what data gets exported:

2. Inspect Exported Data

Review what was exported before loading to Pluto:
This displays:
  • Number of projects and runs
  • Breakdown of attribute types
  • Step statistics (min/max/count)
  • Data volume information

3. Load to Pluto

Upload the exported data to Pluto. You have two authentication options: Option A: Use stored credentials (recommended for repeated loads)
Option B: Provide API key directly
The loader will:
  • Create Ops in Pluto for each Neptune run
  • Upload metrics, parameters, and histograms
  • Upload artifacts and file series
  • Preserve experiment structure and metadata

Configuration

Optional Configuration

Configure the Pluto loader behavior using environment variables:

Loading Example

Choose your authentication method, then apply performance tuning: With stored credentials:
With direct API key:

Data Mapping

Attribute Types

Neptune attributes are mapped to Pluto as follows:

Run Structure

  • Project: Target project is set via NEPTUNE_EXPORTER_PLUTO_PROJECT_NAME or uses Neptune’s project_id
  • Op Name: Neptune sys/name (experiment name) becomes the Pluto Op name. If missing, falls back to custom_run_id/run_id.
  • Tags: Includes import:neptune and import_project:<project_id> for traceability
  • Tags: Neptune tags are preserved as Pluto tags
  • Fork Relationships: Not natively supported (stored as metadata only)

Data Schema

Exported data uses the following parquet schema:

Storage Layout

The exporter creates the following directory structure:
  • Projects are sanitized for filesystem safety (with digest suffix)
  • Each run is split into ~50 MB compressed parquet parts
  • Files and artifacts mirror the project structure

Duplicate Prevention

The Pluto loader tracks loaded runs in a local cache file to prevent duplicates:
  • Cache file: .pluto_upload_cache.txt (or custom path via NEPTUNE_EXPORTER_PLUTO_LOADED_CACHE)
  • Located in NEPTUNE_EXPORTER_PLUTO_BASE_DIR (default: current directory)
  • Stores project ID and run name to identify already-uploaded runs
  • The loader does not check the Pluto backend; it only uses the local cache
To re-upload the same runs:
  • Delete the run from the cache file, or
  • Delete the entire cache file, or
  • Run from a different directory, or
  • Set NEPTUNE_EXPORTER_PLUTO_BASE_DIR to a new location

Troubleshooting

Large Datasets

For runs with hundreds of thousands of steps:
  1. Increase batch size - Process more rows at once (uses more RAM):
  2. Downsample metrics - Reduce points uploaded (lossy but faster):
  3. Increase flush buffer - Fewer API calls (uses more RAM):

File Upload Errors

If you encounter 502 errors or rate limits during file uploads:
  1. Reduce chunk size - Upload fewer files per batch:
  2. Increase sleep time - Wait longer between batches:
  3. Cap total files - Limit files per run:

Memory Issues

If the loader runs out of memory:
  1. Decrease batch size:
  2. Decrease flush buffer:
  3. Process runs individually - Export and load one run at a time using -r filter

Still Having Issues?

For additional help and the latest information, check out the GitHub Repository