Skip to main content

A super-easy way to record, search and compare AI experiments.

Project description

An easy-to-use & supercharged open-source experiment tracker

Aim logs your training runs, enables a beautiful UI to compare them and an API to query them programmatically.

AboutFeaturesDemosExamplesQuick StartDocumentationRoadmapSlack CommunityTwitter

Platform Support PyPI - Python Version PyPI Package License PyPI Downloads Issues

Integrates seamlessly with your favorite tools



About Aim

Track and version ML runs Visualize runs via beautiful UI Query runs metadata via SDK

Aim is an open-source, self-hosted ML experiment tracking tool. It's good at tracking lots (1000s) of training runs and it allows you to compare them with a performant and beautiful UI.

You can use not only the great Aim UI but also its SDK to query your runs' metadata programmatically. That's especially useful for automations and additional analysis on a Jupyter Notebook.

Aim's mission is to democratize AI dev tools.

Why use Aim?

Compare 100s of runs in a few clicks - build models faster

  • Compare, group and aggregate 100s of metrics thanks to effective visualizations.
  • Analyze, learn correlations and patterns between hparams and metrics.
  • Easy pythonic search to query the runs you want to explore.

Deep dive into details of each run for easy debugging

  • Hyperparameters, metrics, images, distributions, audio, text - all available at hand on an intuitive UI to understand the performance of your model.
  • Easily track plots built via your favourite visualisation tools, like plotly and matplotlib.
  • Analyze system resource usage to effectively utilize computational resources.

Have all relevant information organised and accessible for easy governance

  • Centralized dashboard to holistically view all your runs, their hparams and results.
  • Use SDK to query/access all your runs and tracked metadata.
  • You own your data - Aim is open source and self hosted.

Demos

Machine translation lightweight-GAN
Training logs of a neural translation model(from WMT'19 competition). Training logs of 'lightweight' GAN, proposed in ICLR 2021.
FastSpeech 2 Simple MNIST
Training logs of Microsoft's "FastSpeech 2: Fast and High-Quality End-to-End Text to Speech". Simple MNIST training logs.

Quick Start

Follow the steps below to get started with Aim.

1. Install Aim on your training environment

pip3 install aim

2. Integrate Aim with your code

from aim import Run

# Initialize a new run
run = Run()

# Log run parameters
run["hparams"] = {
    "learning_rate": 0.001,
    "batch_size": 32,
}

# Log metrics
for i in range(10):
    run.track(i, name='loss', step=i, context={ "subset":"train" })
    run.track(i, name='acc', step=i, context={ "subset":"train" })

See the full list of supported trackable objects(e.g. images, text, etc) here.

3. Run the training as usual and start Aim UI

aim up

4. Or query runs programmatically via SDK

from aim import Repo

my_repo = Repo('/path/to/aim/repo')

query = "metric.name == 'loss'" # Example query

# Get collection of metrics
for run_metrics_collection in my_repo.query_metrics(query).iter_runs():
    for metric in run_metrics_collection:
        # Get run params
        params = metric.run[...]
        # Get metric values
        steps, metric_values = metric.values.sparse_numpy()

Integrations

Integrate PyTorch Lightning
from aim.pytorch_lightning import AimLogger

# ...
trainer = pl.Trainer(logger=AimLogger(experiment='experiment_name'))
# ...

See documentation here.

Integrate Hugging Face
from aim.hugging_face import AimCallback

# ...
aim_callback = AimCallback(repo='/path/to/logs/dir', experiment='mnli')
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset if training_args.do_train else None,
    eval_dataset=eval_dataset if training_args.do_eval else None,
    callbacks=[aim_callback],
    # ...
)
# ...

See documentation here.

Integrate Keras & tf.keras
import aim

# ...
model.fit(x_train, y_train, epochs=epochs, callbacks=[
    aim.keras.AimCallback(repo='/path/to/logs/dir', experiment='experiment_name')
    
    # Use aim.tensorflow.AimCallback in case of tf.keras
    aim.tensorflow.AimCallback(repo='/path/to/logs/dir', experiment='experiment_name')
])
# ...

See documentation here.

Integrate XGBoost
from aim.xgboost import AimCallback

# ...
aim_callback = AimCallback(repo='/path/to/logs/dir', experiment='experiment_name')
bst = xgb.train(param, xg_train, num_round, watchlist, callbacks=[aim_callback])
# ...

See documentation here.

Comparisons to familiar tools

Tensorboard

Training run comparison

Order of magnitude faster training run comparison with Aim

  • The tracked params are first class citizens at Aim. You can search, group, aggregate via params - deeply explore all the tracked data (metrics, params, images) on the UI.
  • With tensorboard the users are forced to record those parameters in the training run name to be able to search and compare. This causes a super-tedius comparison experience and usability issues on the UI when there are many experiments and params. TensorBoard doesn't have features to group, aggregate the metrics

Scalability

  • Aim is built to handle 1000s of training runs - both on the backend and on the UI.
  • TensorBoard becomes really slow and hard to use when a few hundred training runs are queried / compared.

Beloved TB visualizations to be added on Aim

  • Embedding projector.
  • Neural network visualization.

MLFlow

MLFlow is an end-to-end ML Lifecycle tool. Aim is focused on training tracking. The main differences of Aim and MLflow are around the UI scalability and run comparison features.

Run comparison

  • Aim treats tracked parameters as first-class citizens. Users can query runs, metrics, images and filter using the params.
  • MLFlow does have a search by tracked config, but there are no grouping, aggregation, subplotting by hyparparams and other comparison features available.

UI Scalability

  • Aim UI can handle several thousands of metrics at the same time smoothly with 1000s of steps. It may get shaky when you explore 1000s of metrics with 10000s of steps each. But we are constantly optimizing!
  • MLflow UI becomes slow to use when there are a few hundreds of runs.

Weights and Biases

Hosted vs self-hosted

  • Weights and Biases is a hosted closed-source MLOps platform.
  • Aim is self-hosted, free and open-source experiment tracking tool.

Roadmap

Detailed Sprints

:sparkle: The Aim product roadmap

  • The Backlog contains the issues we are going to choose from and prioritize weekly
  • The issues are mainly prioritized by the highly-requested features

High-level roadmap

The high-level features we are going to work on the next few months

Done

  • Live updates (Shipped: Oct 18 2021)
  • Images tracking and visualization (Start: Oct 18 2021, Shipped: Nov 19 2021)
  • Distributions tracking and visualization (Start: Nov 10 2021, Shipped: Dec 3 2021)
  • Jupyter integration (Start: Nov 18 2021, Shipped: Dec 3 2021)
  • Audio tracking and visualization (Start: Dec 6 2021, Shipped: Dec 17 2021)
  • Transcripts tracking and visualization (Start: Dec 6 2021, Shipped: Dec 17 2021)
  • Plotly integration (Start: Dec 1 2021, Shipped: Dec 17 2021)
  • Colab integration (Start: Nov 18 2021, Shipped: Dec 17 2021)
  • Centralized tracking server (Start: Oct 18 2021, Shipped: Jan 22 2022)
  • Tensorboard adaptor - visualize TensorBoard logs with Aim (Start: Dec 17 2021, Shipped: Feb 3 2022)
  • Track git info, env vars, CLI arguments, dependencies (Start: Jan 17 2022, Shipped: Feb 3 2022)
  • MLFlow adaptor (visualize MLflow logs with Aim) (Start: Feb 14 2022, Shipped: Feb 22 2022)
  • Activeloop Hub integration (Start: Feb 14 2022, Shipped: Feb 22 2022)
  • PyTorch-Ignite integration (Start: Feb 14 2022, Shipped: Feb 22 2022)
  • Run summary and overview info(system params, CLI args, git info, ...) (Start: Feb 14 2022, Shipped: Mar 9 2022)
  • Add DVC related metadata into aim run (Start: Mar 7 2022, Shipped: Mar 26 2022)
  • Ability to attach notes to Run from UI (Start: Mar 7 2022, Shipped: Apr 29 2022)
  • Fairseq integration (Start: Mar 27 2022, Shipped: Mar 29 2022)
  • LightGBM integration (Start: Apr 14 2022, Shipped: May 17 2022)
  • CatBoost integration (Start: Apr 20 2022, Shipped: May 17 2022)
  • Run execution details(display stdout/stderr logs) (Start: Apr 25 2022, Shipped: May 17 2022)
  • Long sequences(up to 5M of steps) support (Start: Apr 25 2022, Shipped: Jun 22 2022)

In Progress

  • Figures Explorer
  • Stable remote tracking server

To Do

Aim UI

  • Runs management
    • Runs explorer – query and visualize runs data(images, audio, distributions, ...) in a central dashboard
  • Explorers
    • Audio Explorer
    • Text Explorer
    • Distributions Explorer
  • Dashboards – customizable layouts with embedded explorers

SDK and Storage

  • Scalability
    • Smooth UI and SDK experience with over 10.000 runs
  • Runs management
    • SDK interfaces
      • Reporting – query and compare runs, explore data with familiar tools such as matlpotlib and pandas
      • Manipulations – copy, move, delete runs, params and sequences
    • CLI interfaces
      • Reporting - runs summary and run details in a CLI compatible format
      • Manipulations – copy, move, delete runs, params and sequences

Integrations

  • ML Frameworks:
    • Shortlist: MONAI, SpaCy, AllenNLP, Raytune, fast.ai, KerasTuner
  • Datasets versioning tools
    • Shortlist: HuggingFace Datasets
  • Resource management tools
    • Shortlist: Kubeflow, Slurm
  • Workflow orchestration tools
  • Others: Hydra, Google MLMD, Streamlit, ...

On hold

  • scikit-learn integration
  • Cloud storage support – store runs blob(e.g. images) data on the cloud (Start: Mar 21 2022)
  • Artifact storage – store files, model checkpoints, and beyond (Start: Mar 21 2022)

Community

If you have questions

  1. Read the docs
  2. Open a feature request or report a bug
  3. Join our slack

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

aim-3.12.1.tar.gz (1.4 MB view details)

Uploaded Source

Built Distributions

aim-3.12.1-cp310-cp310-manylinux_2_24_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.24+ x86-64

aim-3.12.1-cp310-cp310-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

aim-3.12.1-cp310-cp310-macosx_10_14_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10 macOS 10.14+ x86-64

aim-3.12.1-cp39-cp39-manylinux_2_24_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.24+ x86-64

aim-3.12.1-cp39-cp39-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

aim-3.12.1-cp39-cp39-macosx_10_14_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

aim-3.12.1-cp38-cp38-manylinux_2_24_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.24+ x86-64

aim-3.12.1-cp38-cp38-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

aim-3.12.1-cp38-cp38-macosx_10_14_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

aim-3.12.1-cp37-cp37m-manylinux_2_24_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.24+ x86-64

aim-3.12.1-cp37-cp37m-macosx_10_14_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

aim-3.12.1-cp36-cp36m-manylinux_2_24_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.24+ x86-64

aim-3.12.1-cp36-cp36m-macosx_10_14_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

Details for the file aim-3.12.1.tar.gz.

File metadata

  • Download URL: aim-3.12.1.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.4

File hashes

Hashes for aim-3.12.1.tar.gz
Algorithm Hash digest
SHA256 c47b660f56f8a03b4caecf386f899dbd6eb5f0d3a6134c8688bebaa7cf34e356
MD5 3483025e462855a7911b98fe46ebc5e9
BLAKE2b-256 16553e8975ddd7a52016c6983f4e46ec28884df6cc314e3869e67495307f2080

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp310-cp310-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 b75c13bcb86f2ac0a63cba5f4902f352b0be1a7527a1674b6310b800ce4f1923
MD5 3623d56c67634cf3319108a23dc5b2a3
BLAKE2b-256 532422c51100b332f5026324e78ea7c4f333a957fb12d1d1ec5b1ddec84f4a78

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f421786b462fb5f287b633baac63e95f0a5fc84e383dbcb993f7d38b749c7906
MD5 1d77f7c99acf45e60b543cdc6b1b9427
BLAKE2b-256 fd74caeaf49bd6aa41c72acbbfce41945e139deb4ff7d38e741d68339591d2d8

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 a2ffac209b0af86e9ce7ab237bfc3a2df04670d12880d9b6ea47758724d8b433
MD5 4f5e621214aeb7d0c68cee79986b3206
BLAKE2b-256 b0de3ab863508a910298e30c8b041abdc0df06b2d01fa16f71ba2658e7fae080

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp39-cp39-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp39-cp39-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 57c9635ab1b7fc0fe66eb951e4bebf8f2719c1be07cab60a92050a8817cda26e
MD5 a7d45e04bac51ef625baad929bd489d2
BLAKE2b-256 a819c1df87aa138139a47924398767a09e9fb652ebc197dcc06eda8dc01ee616

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0669a862155a240e2cbee520e5a7db449709830f572613c19848483fcc63c15d
MD5 d8533ee4415e4e5f2868a6e578d71476
BLAKE2b-256 b11fbc2196f7d1371ae3886a5b0b3ada759c4489e1d797bc9be0abf33067521b

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 ded71427e0eb3b18fff911dac85d9933fbc80b8a53e50b85044bb423f7f4753c
MD5 97485f8262fdb347c0e7e9ada978c3fb
BLAKE2b-256 b8434d8cb86608a9912ea70f94c811f8a3877e9aab0631534ba1ad0983f99139

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp38-cp38-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp38-cp38-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 233fed72323afa925a3f557711de9fcddc9e8f0e9255048d2abd1455069103fe
MD5 d9ece49ef67292e9c9367123c79b2a48
BLAKE2b-256 4285c99f9116e7789c7b40c540f4c401a0399947be4fec1e688081747bf76321

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40d649943ad19c8d51ba80dfc1de23b486969eca6508912f0eeb06fe034e6e1c
MD5 fe93a691902ad1843bc0fbf29776c01a
BLAKE2b-256 1c6b7b31676580daa963f17ad5c47e0c3ab765df7ae0c796bc54424eb5211ec0

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 c250fab9e533537536f6cf9014b4e80744b6324e35c7efc788cede60be40c26d
MD5 5698392ff58c6b5dbb52c97098fb2e36
BLAKE2b-256 7fba67d7a9ecdadaf6804788652f6eb4fee44e81225b7a3682e3a66b6d196934

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp37-cp37m-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp37-cp37m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 0e026bc6e5568024626eadae2493209539ded795fab5e54cb8052d6b3c2713a3
MD5 8052d8ff688a4b849485e5a8b78cb6cf
BLAKE2b-256 a193259df901f57b6388b7daddda5fca5b8791b9225b90877ec29728fbc083f2

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 fe070c9cac1369cf8fccf6ca700a8a36c8f867fe34b1d4e0102a54371c525901
MD5 5870708c9ef9c943d56cc510a3b32a9a
BLAKE2b-256 3e93c415afda0dbaf7d02f11354b6df0b67795e7348fd72883886049f5317079

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp36-cp36m-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for aim-3.12.1-cp36-cp36m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 8ddc16f29a0ba8d83c899cb4cc19be4bd67d09db5feff1ef41f899b6fdf65205
MD5 cbb6e1506f71ade218de4e83ce15b521
BLAKE2b-256 3743931ce2e92cc7408483965916f4ea96c9c1d0d00c41e60a2c80afa5bd4830

See more details on using hashes here.

File details

Details for the file aim-3.12.1-cp36-cp36m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: aim-3.12.1-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.6m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.4 CPython/3.6.13

File hashes

Hashes for aim-3.12.1-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 34f93e080626584e359e8f8ace5e6567ee7a1de3ee2931f7a6fb3ccd37131b39
MD5 c67cc21c078973cf96ac47f3d9d06607
BLAKE2b-256 cd10531bacc06481e7cfbc57a8bf6ff1145651881acb73a4ba2e5a8e9d2b44b2

See more details on using hashes here.

Supported by

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