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

Uploaded Source

Built Distributions

aim-3.12.0-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.0-cp310-cp310-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

aim-3.12.0-cp310-cp310-macosx_10_14_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10 macOS 10.14+ x86-64

aim-3.12.0-cp39-cp39-manylinux_2_24_x86_64.whl (5.5 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.24+ x86-64

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

Uploaded CPython 3.9 macOS 11.0+ ARM64

aim-3.12.0-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.0-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.0-cp38-cp38-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

aim-3.12.0-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.0-cp37-cp37m-manylinux_2_24_x86_64.whl (5.4 MB view details)

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

aim-3.12.0-cp37-cp37m-macosx_10_14_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

aim-3.12.0-cp36-cp36m-manylinux_2_24_x86_64.whl (5.2 MB view details)

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

aim-3.12.0-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.0.tar.gz.

File metadata

  • Download URL: aim-3.12.0.tar.gz
  • Upload date:
  • Size: 1.5 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.0.tar.gz
Algorithm Hash digest
SHA256 7ffb6707d317b2257b6633471eb5f25028dd89435ea7067e66d0fb024671c5aa
MD5 ac1afb7a3fdb3689304885a884647fbd
BLAKE2b-256 4e4f0183fd2a7b20aa05d6ad0877ca783950a8d9fc4771790b315182b9b80876

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 385d3e3733e0238843ec90d691c828795649ab7738f5ef004cd3075557b5e6cf
MD5 9c03214a3a8b4cb245f2bed2db005d5d
BLAKE2b-256 ed2b85b4ada566f63bcc137b59a26280e3f3b2a9ae21b9443752794547accd21

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b58c2901f1f654aeec11b7442e760705b05bac5b9a0d6f92df624ec74c9e01fc
MD5 8fb07009ad9eccaf6af0baa499aeffe8
BLAKE2b-256 3c8a272ef1bfbccb4fd95572093d2eeb39c8dca1238233d0501be5c27bdf7fd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 383de2039477b000cc3279293403d7c7cf83cd5894958c9e2f2f4ef5b9cb6ddd
MD5 2becd2dbd884b5eb87c9e8085897aed7
BLAKE2b-256 fb15118749c05c51f8e1b74a6a8c5192d20277110629ee36a5122fe54cc7299b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp39-cp39-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 3e2879ca0c6a91d457446803409febf4c98474cfec0f57c0ee7594c1ad854f65
MD5 a1166f4e5aad5b296a3d86b9da492238
BLAKE2b-256 1a037437c1596f4d49b4126f42790b523da09ab4bb82013d1464e01acd8e161d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f60b60b2685633fdd0faf1a7a1625e7d8e1decdffe209dc6318f43cb92720df2
MD5 2474cbeea360c8e6d0ed96de70df4a0d
BLAKE2b-256 52d96b75990a951f75c152ddabcf0477d1aef0b5a82bf542f0db1be200bc5d03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 e2180a2e399f9ef924cf09b4aa5ea5d5e6b6821f5b76f9463ac95c37dcac5400
MD5 61b61b35550a06af245c1e59f16efe76
BLAKE2b-256 cf90ceced5a5feca757786fc20c5425d6c8b71845313bfcc6a5b2cdceb123ecb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp38-cp38-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 792e3495a38d00675594b7e40b54a47324070782a5400eb036c918ef173bb4e8
MD5 910dac019f9e5b1d3c2ef6cd8acc0c0b
BLAKE2b-256 313ed929c8706adc7d5820fe732c1b7bbc7447d9ef5e5119c258b174aaf656a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39cbb7a204e41fb5da6447c7b38631347666a74a8473c992bd663afd79b05829
MD5 18edfa5c1049e7d19a41a9cb473acec9
BLAKE2b-256 b3469af9acc9c8fadcb4d9a0f6a0aa4f9e8d1a1a0b526c68dcb10fe9cc749a18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 4824bcdb52d6f3ac7233e80e92ddded3f78471fb09897d638e0558945e08799a
MD5 6507cf0f451b6237fe40a08a8e85841f
BLAKE2b-256 43cb6f003f3330021205a2145930f7c78f3cd04a79faf26c2edca45c512fc585

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp37-cp37m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 48153c248bd90b2181469a70d27fca92fac45d9200d871ec6584cb0617927ae6
MD5 2f46acb34bb067a8dd1c0b6dd7190109
BLAKE2b-256 a4385e3ebca1ee6a030b68781317d4c88692f106f5b6a05fc952c50942e929ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 3c0fcd1210de2003e8f7e1199526f74474b83f1f54d76b9acec1b622131c59bc
MD5 adaad53050c47182e886c4265a9b5359
BLAKE2b-256 6a35c9020f2df901ae0f822cdc143c69dcd9970b93d87df2dbf06e8b6ca73bf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aim-3.12.0-cp36-cp36m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 664c42ae4cb9d6942515db2d83f8f15c5c149cf00f771c172a1bf155d25aa6c8
MD5 608f29d2b21c8d51962233b931153e3e
BLAKE2b-256 6b9f050efc39715297823f74225d3995be494623755c4edf0886bc6caff57de7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aim-3.12.0-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.0-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 585c61dd4f3143d24ba491d169f54f29314e12f30a8334d3e0b433e17cd2102e
MD5 7557918b7ceb9f9e41ccd6e95375672c
BLAKE2b-256 46475d710e0582ea64989a62129ec8ecff13b964db9f0e7ade4474d37821596d

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