Skip to main content

A CLI tool to sync W&B offline runs from Kaggle Notebooks via GitHub Actions

Project description

kaggle-wandb-sync

PyPI version Test License: MIT

A CLI tool to sync Weights & Biases offline runs from Kaggle Notebooks to W&B cloud — fully automated via GitHub Actions.

Why?

Kaggle Notebooks run in an isolated environment with internet access disabled for competition submissions. This means you can't push W&B metrics in real time. kaggle-wandb-sync solves this by:

  1. Running your notebook with WANDB_MODE=offline (logs saved locally on Kaggle)
  2. Downloading the output via kaggle kernels output
  3. Syncing the offline runs to W&B cloud with wandb sync

Installation

pip install kaggle-wandb-sync

Prerequisites: Kaggle API credentials (~/.kaggle/kaggle.json) and a W&B API key (WANDB_API_KEY env var, or run wandb login once to save credentials to ~/.netrc).

Quick Start

All-in-one command

# Set your W&B API key
export WANDB_API_KEY=your_api_key

# Push notebook, wait for completion, download output, sync to W&B
kaggle-wandb-sync run my-notebook/

Step by step

kaggle-wandb-sync push   my-notebook/                      # push (with 409 protection)
kaggle-wandb-sync poll   yasunorim/my-notebook             # wait for COMPLETE
kaggle-wandb-sync output yasunorim/my-notebook             # download output
kaggle-wandb-sync sync   ./kaggle_output                   # wandb sync

Notebook Setup

Add these lines before importing wandb in your Kaggle Notebook:

import os
os.environ['WANDB_MODE'] = 'offline'   # must be set before import
os.environ['WANDB_PROJECT'] = 'my-project'

import wandb
wandb.init()
# ... your training code ...
wandb.log({"loss": 0.1, "accuracy": 0.95})
wandb.finish()

Important: Set WANDB_MODE=offline before import wandb, not after.

GitHub Actions Integration

Add this workflow to your Kaggle repo (.github/workflows/kaggle-wandb-sync.yml):

name: Kaggle W&B Sync

on:
  workflow_dispatch:
    inputs:
      notebook_dir:
        description: "Notebook directory (e.g. my-competition)"
        required: true
      kernel_id:
        description: "Kernel ID (e.g. username/my-competition-baseline)"
        required: true

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Install kaggle-wandb-sync
        run: pip install kaggle-wandb-sync

      - name: Set up Kaggle credentials
        run: |
          mkdir -p ~/.kaggle
          echo '${{ secrets.KAGGLE_API_TOKEN }}' > ~/.kaggle/kaggle.json
          chmod 600 ~/.kaggle/kaggle.json

      - name: Run pipeline
        env:
          WANDB_API_KEY: ${{ secrets.WANDB_API_KEY }}
        run: |
          kaggle-wandb-sync run ${{ inputs.notebook_dir }} \
            --kernel-id ${{ inputs.kernel_id }}

Required secrets: KAGGLE_API_TOKEN (JSON content of ~/.kaggle/kaggle.json) and WANDB_API_KEY.

Commands

run — Full pipeline (recommended)

kaggle-wandb-sync run [DIRECTORY] [OPTIONS]
Option Default Description
--kernel-id, -k from metadata Kernel ID (username/slug)
--output-dir, -o ./kaggle_output Directory for downloaded files
--poll-interval 30 Seconds between status checks
--max-attempts 60 Max poll attempts (30min total)
--skip-push off Skip push step (use when notebook has already finished running)
--skip-sync off Download output only, skip W&B sync

push — Push notebook

kaggle-wandb-sync push [DIRECTORY] [OPTIONS]

Waits for any currently running kernel to finish before pushing (prevents 409 Conflict errors).

poll — Wait for completion

kaggle-wandb-sync poll KERNEL_ID [--interval 30] [--max-attempts 60]

Exits with code 1 if the kernel finishes with ERROR or CANCEL.

output — Download output

kaggle-wandb-sync output KERNEL_ID [--output-dir ./kaggle_output]

sync — Sync to W&B

kaggle-wandb-sync sync [OUTPUT_DIR]

Finds all offline-run-* directories and runs wandb sync on each.

Known Issues

  • Windows encoding: Prefix commands with PYTHONUTF8=1 if you see encoding errors on Windows.

  • Windows PATH (Microsoft Store Python): If kaggle-wandb-sync: command not found in Git Bash, add the Scripts directory to your PATH:

    # Add to ~/.bashrc
    export PATH="$PATH:/c/Users/<your-username>/AppData/Local/Packages/PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0/LocalCache/local-packages/Python312/Scripts"
    
  • Git Bash path format (fixed in v0.1.2): Git Bash converts paths like C:/Users/... to /c/Users/..., which Python cannot resolve. As of v0.1.2, all path arguments are automatically converted to Windows format.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kaggle_wandb_sync-0.1.5.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kaggle_wandb_sync-0.1.5-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file kaggle_wandb_sync-0.1.5.tar.gz.

File metadata

  • Download URL: kaggle_wandb_sync-0.1.5.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kaggle_wandb_sync-0.1.5.tar.gz
Algorithm Hash digest
SHA256 dce36b2f6785fd56b102d54c7ed171e32a675de03e72cf8ffd4f421099e747c7
MD5 d8cf071e1b0035a1d618c92021f3cc67
BLAKE2b-256 71445f84ebd3ef37d31ac45bf194c3a59c9134416f96d43773c047f1466d5d7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for kaggle_wandb_sync-0.1.5.tar.gz:

Publisher: publish.yml on yasumorishima/kaggle-wandb-sync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kaggle_wandb_sync-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for kaggle_wandb_sync-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 92a6603d875919b0c82417bee831bd3df4811f30ab5b4d294cc5243dfdcaf802
MD5 f668f448ec22e5beb90bd22d67499acc
BLAKE2b-256 a574566964d4672c3cbc2cdeaffe7a11874a9ae50b685c5e1f3bbda9156f3d82

See more details on using hashes here.

Provenance

The following attestation bundles were made for kaggle_wandb_sync-0.1.5-py3-none-any.whl:

Publisher: publish.yml on yasumorishima/kaggle-wandb-sync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page