Apr 4, 2022

Aim 3.8 — DVC integration & Extensible HuggingFace callbacks

Author:Gev Soghomonian
Aim 3.8 — DVC integration & Extensible HuggingFace callbacks

Aim 3.8 featuring extensible HuggingFace trainer callbacks is out !

We are on a mission to democratize AI dev tools. Thanks to the awesome Aim community for the help and contributions.

Here is what’s new:

  • Color scale of numeric values
  • DVC integration
  • Extensible HuggingFace and XGBoost callbacks

Special thanks to osoblanco, ashutoshsaboo and mohamadelgaar for the help and feedback

\ Color scale of numeric values

Due to popular demand an Aim 2.x feature is back!

Now you can color-code the aggregated metric values on the Runs Explorer. The highest values will be in green and the lowest in yellow. The color changes from yellow to green at the median.

We are surely going to iterate over this feature. Further feedbacks are welcome!

blog image

DVC integration

Now you can track the info about your DVC tracked files and datasets on Aim. With this we are iterating towards easy connection between Aim and DVC so you can connect your tracked artifacts with experiment tracking.

Share more feedback with us. How would you like to see this evolve?

The code looks as simple as this:

from aim.sdk import Run
from aim.sdk.objects.plugins.dvc_metadata import DvcData

run = Run(system_tracking_interval=None)

path_to_dvc_repo = '.'
run['dvc_info'] = DvcData(path_to_dvc_repo)

Extensible HuggingFace and XGBoost callbacks

When using Aim with your favorite frameworks, the metadata is logged through AimCallback which is limited as it allows only specific group of logged metrics per framework.

Now you can extend the AimCallback and log any other metadata made available by the framework. Detailed docs here.

Here is an example on how to extend the HuggingFace callback to track texts with Aim:

from aim.hugging_face import AimCallback
from aim import Text


class CustomCallback(AimCallback):
    def on_log(self, args, state, control,
               model=None, logs=None, **kwargs):
        super().on_log(args, state, control, model, logs, **kwargs)

        context = {
            'subset': self._current_shift,
        }
        for log_name, log_value in logs.items():
            if isinstance(log_value, str):
                self.experiment.track(Text(log_value), name=log_name, context=context)

Learn More

Aim is on a mission to democratize AI dev tools.

We have been incredibly lucky to get help and contributions from the amazing Aim community. It’s humbling and inspiring.

Try out Aim, join the Aim community, share your feedback, open issues for new features, bugs.

And don’t forget to leave Aim a star on GitHub for support.