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:- Export - Download Neptune runs to local parquet files and artifacts
- Inspect - View a summary of exported data
- 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: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:- 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)- 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:Data Mapping
Attribute Types
Neptune attributes are mapped to Pluto as follows:Run Structure
- Project: Target project is set via
NEPTUNE_EXPORTER_PLUTO_PROJECT_NAMEor uses Neptuneβsproject_id - Op Name: Neptune
sys/name(experiment name) becomes the Pluto Op name. If missing, falls back tocustom_run_id/run_id. - Tags: Includes
import:neptuneandimport_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 viaNEPTUNE_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
- 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_DIRto a new location
Troubleshooting
Large Datasets
For runs with hundreds of thousands of steps:-
Increase batch size - Process more rows at once (uses more RAM):
-
Downsample metrics - Reduce points uploaded (lossy but faster):
-
Increase flush buffer - Fewer API calls (uses more RAM):
File Upload Errors
If you encounter 502 errors or rate limits during file uploads:-
Reduce chunk size - Upload fewer files per batch:
-
Increase sleep time - Wait longer between batches:
-
Cap total files - Limit files per run:
Memory Issues
If the loader runs out of memory:-
Decrease batch size:
-
Decrease flush buffer:
-
Process runs individually - Export and load one run at a time using
-rfilter