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.2.tar.gz (1.4 MB view details)

Uploaded Source

Built Distributions

aim-3.12.2-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.2-cp310-cp310-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

aim-3.12.2-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.2-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.2-cp39-cp39-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

aim-3.12.2-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.2-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.2-cp38-cp38-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

aim-3.12.2-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.2-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.2-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.2-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.2-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.2.tar.gz.

File metadata

  • Download URL: aim-3.12.2.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.2.tar.gz
Algorithm Hash digest
SHA256 1e15059ede9d8c8bc05bd9921dbf16b4b8bafccd67db37fcea6ec2f3b3f5dbcc
MD5 efb002cc6ba287cb04efd3ca043189a0
BLAKE2b-256 d8cd93c2e9ce67b26010a36b39a949f9d2e8c2ce387d03e40148dfc990eec4cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 2a7448e70e06a73290ed851a262fa18e64801e693afb815921ed7e43d14d378f
MD5 23ee80c4e37ffa8c8bd2933de3cbc0f8
BLAKE2b-256 d6490bcebaf89c69317cf79c91dd496c7938d61a44a8e675e39f0ee28e840987

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e4b1b14aca0e2b0a60fac5d369524be33527f5bf0ca5afd3226e0dc78147a737
MD5 893deb14e646b5f0b676d49df0a8470f
BLAKE2b-256 1a3402c5d2ccac504cc8f8e1a68913008bdd7966dc8876bfc37bbccb073a75fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 f27d1cc66544fdf20d3fde90f1e9ae0bd9f69b7d38aa95b27914a762bf122497
MD5 9383a4bf8fe77b224fd9fa0339544ecf
BLAKE2b-256 ef52e24a0c5342e09e3e7834737b290762712d42bd6ad84e75d0ad22933923a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp39-cp39-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 bc61407f5b306a191d4a21c099d8a8ca8baad559e87c300a68c615e5942436a2
MD5 48436c2be35470925deb11f1c324274e
BLAKE2b-256 8ac691a332ac0c74f49b7d0a06611e632ab22313e1cdcc97ea11ccbb6a38b4c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 12b91e7e32a95dd11ce49937804bf808f800a8d5a4a88cd74c992d1f3fe08d90
MD5 9ed201410ce2963dcc16d1d50cdce963
BLAKE2b-256 599de24e81cad76895503afa0826cf12440e8b914d78e6c68bb1f3a0743c7f2c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 f8910cd2cf2816e46312daa87d9201dea4dd7de1214d55f3f6b43a0743739f5b
MD5 94883a13de9269700fc1696ed1d3aeb8
BLAKE2b-256 cf75a73f66086be47005978506016e522a14a8f3c7283fe6c19b9c5b236b01c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp38-cp38-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 584ea6dc528462b2934754377fa3c0487360735cdb9fa48bcaa28207e6e4baf1
MD5 0efa5430d31dd24bb76123fb505f7655
BLAKE2b-256 d80224ac01f830e9245ae472ed60b090d2e50ba977b20bc613392bca0786d2e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40960d6a021a78bbf06daa5b34189ba3e18defba2ceca77b77735fd7e0b20760
MD5 0718be7fe10e4de3f1f21bdc03ee0d70
BLAKE2b-256 32886a122e77c23ed36e93f8609d4731b17d06e375bc5dd7e476bad97b896b6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 0121a33b4476807cd64ad3604ccb6362b53d99d3f1865f84b7b8188040bb037d
MD5 900d89efe6e5cba2e8c4a46f10acecca
BLAKE2b-256 678ade0045e149373498dae4c8d9f9c5f1112e99a77761d286a597413c12d22c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp37-cp37m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 a69aeec3bd8f64952ae83de56997afd503fc3205ebaea86da617b32d3a0ec1e9
MD5 c36deb204af0faceb60ed1cfc9ca7af5
BLAKE2b-256 12d258b77747e70d7441423fc7496f9b0ca3d90611f844706048ac820d91488a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 1c15d8ed31adb3f15e2c96c6c8c05b50f15188cd5c633d1f5e05d0387a726c74
MD5 2cad5522b5c5574e58432d69abd83b6e
BLAKE2b-256 b41e14e00d954f44f52b265d8bd7ec60f3ae01074363b2aa6e2003b0a5e4b8bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.2-cp36-cp36m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 5e5a08d00673b56c79cd269a8cc58440165fcbf12b5d97b62897d1bdac523fba
MD5 3ff4836a81ceee0c5eca0e21fc7cc868
BLAKE2b-256 d8add296269fe380b3bd8c63f258ddc20c3c8d97e315a0717334c3c21e6994fb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aim-3.12.2-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.2-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 c82b74bab9e47c6d9b6d63c8a1781879d18cf43dbd60474542eaacb11a0b209b
MD5 1085fb9171dea9c18cf49d12b54ebff5
BLAKE2b-256 8fd06b892b31a20049fb8ab30be1f7e2cdfa94a596272159c47944a4dbfae056

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