Python client to use the hectiq lab
Project description
Contents
Tutorials
Quickstart
Login with your username and password
hectiqlab add-profile
A secret API key will be generated and stored in ~/.hectiqlab/credentials
. If you have multiple profiles, you can switch profiles with the env var HECTIQLAB_PROFILE
.
In a python script or jupyter notebook, create a run:
from pyhectiqlab.run import Run
run = Run(name="dev-run")
If the name doesn't already exist, it will be created. If a run already exists, the data will be pushed in the existing run. However, if you attach to an existing run that you are not the original author, the run will be in read-only mode.
Metrics
The metrics of a run are pushed async (no latency). We have included an internal aggregator so that you don't overflow the server with metrics. You can setup the parameters of the metrics cache using run.set_metrics_cache_settings
.
# Push a metrics
run.add_metrics(key='train/loss', value=0.982, step=10)
Save artifacts
You can save files using three approaches.
Classical run artifacts
A run artifact is a file attached to a run. It can be any type of file. Please do not use this to store large datasets (>1Gb).
# Run artifact. Overwrite if a file with the same name exists
run.add_artifacts(path_to_artifact)
The artifact is now available in the web app in the artifact tab of the run. The web app let you download the artifact, and copy a code snippet to download the artifact with the python client. Also, images (extension .png, .jpg, .jpeg) can be visualized in the web app.
The upload does not yet support streaming mode. Hence, there is no progress bar to see how the upload goes.
Step artifacts
A step artifact is a method to group similar artifacts that are generated at certain steps during a process.
step = 5 # example is an integer
# Overwrite if an artifact with this name at this step exists
run.add_artifacts(path_to_artifact, step=step)
The name of the group of the basename of the path to the artifacts. For instance, (./data/test.png, step=0)
and (./data2/test.png, step=1)
will be grouped under test.png
.
Shared artifacts
A shared artifact is a file that is attached to the project, instead of the run.
# Overwrite if a file with the same name exists
run.add_shared_artifact(path_to_artifact)
Special artifacts
You have access to certain helpers for saving complex files
# Compress a directory into zip and save it as an artifact
run.add_directory_as_zip_artifact(dirpath) # You can add the step argument for step artifacts
# Add a tensor flow model. It will run save_weights
run.add_tf_model_as_artifact(model, filename) # You can add the step argument for step artifacts
# Add your notebook if the code is run from a notebook
run.add_current_notebook()
MLModel and Datasets
Upload
You can push project models and datasets
run.add_mlmodel('./path/to/model/',
name='test-model',
version='1.0.0',
short_description='A VGG11 trained on ImageNet.')
run.add_dataset('./path/to/dataset/',
name='train-imagenet',
version='1.0.0',
short_description='The train images of ImageNet')
Download
There is multiple methods to download mlmodels and datasets (shell, etc.), check the web app to get snippets for a specific mlmodel/dataset.
run.download_mlmodel(name='test-model',
version='1.0.0',
save_path="./")
run.download_dataset(name='train-imagenet',
version='1.0.0',
save_path="./")
Config
To store the config parameters, use the Config object. You may use it just like a dictionary and it can be nested.
from pyhectiqlab import Config
nested_config = Config(path='./here', b=1)
config = Config(hello='world', a= nested_config)
# Use the nested values
config.a.path # './here'
# Use as a dict
model(**config.a)
Push a config
Configs should be pushed using the designated method. If you already pushed a config for this run, the server will update the config file. Hence, it will add the unseen elements.
run.add_config(config)
Package versions
You can store the versions of all the packages loaded in the kernel. It will also save the machine setup and the git commit if your script is part of a repo.
import torch
import numpy as np
run.add_package_versions(globals())
External git repos
If you code use a package part of a git repo (context-segments for instance), you can ask the lab to store the state of the repo.
run.add_package_repo_state('voxnet')
# It will check if voxnet.__path__ is in a git repo. If so, the commit/branch/source is stored.
States
run.completed()
run.failed()
run.completed()
run.pending()
run.running()
run.training()
Logs
logger = run.start_recording_logs()
logger.info('test')
logger.stop_recording_logs()
logger.critical('This will not be logged.')
run.start_recording_logs()
logger.info('This will be logged.')
# Check a specify channel. It will log everything that goes through torch.
logger = run.start_recording_logs('torch')
# To log: "Progress ----------"
logger.info("Progress \r")
for i in range(10):
logger.info("-\r")
Finish your log with \r
to cancel the line break.
Others
run.set_note('This is a short description that will be featured on the tab General of the run.')
run.add_meta(key='hello', value='world')
Tags
Usually, we add tags using the web client but you can do it with the python client as well.
# You can specify the colour (hex)
# If a tag with this name exists, it will simply attach it to the run
run.add_tag(name='Train', description=None, color=None)
Shell
Login/Add a profile
hectiqlab add-profile
List the projects
List the projects name and ids.
hectiqlab projects
Download shared artifacts
Download a shared artifact.
hectiqlab artifacts [project_Id]
Push a shared artifacts
Push a file into a shared artifacts of a project.
hectiqlab post_artifact [project_Id] [filename]
Custom env variables
HECTIQLAB_CREDENTIALS
: Path to the credentials file
HECTIQLAB_PROFILE
: Name of the profile to connect with
FAQ
Is it fast?
Yes, the python client is fully async so it won't slow down your runs. Every call to the lab is made on a separate thread. Hence, you won't always be alerted if something doesn't reach the server.
The metrics and the logs are managed by buffer objects. The buffer is cleared (by sending the information to the lab) when its limit is reached or after a time interval, and at deletion.
Will I be alerted if the lab is unavailable?
The run initialization (run = Run(...)
) waits for the server confirmation. If the server is down, an error will be printed and you'll be switched to a dry mode. All the other calls (add_metrics
, etc.) are fully async and don't wait for the server's response. For example, if the add_metrics
fails, you will not be alerted. This is because we don't want your run to stop because the hectiqlab is broken.
What is the dry mode?
The dry mode consists is a layer that prevents your code to crash if the hectiqlab is down. Hence, if the dry mode (or read only mode) is activated, you can call all run methods (run.add_metrics
) without errors but the data won't be pushed.
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
Built Distribution
Hashes for pyhectiqlab-1.1.14-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2cf4354a2e32fa39bfebd50fe736f7454994f961aed919ee287c75ec753bcc5 |
|
MD5 | a4afb3782090a983cda8dcc872bb5ddc |
|
BLAKE2b-256 | b546e68fbe22c35d3a38874ee14f1ec4c4af3913699f3b5f4ffb2728e7ef05d0 |