Overview#
Initialize a Beaker client
with Beaker.from_env()
:
>>> from beaker import *
>>> beaker = Beaker.from_env(default_workspace=workspace_name)
Accounts#
Manage your Beaker account with Beaker.account
.
For example, you can check who you are logged in as with
Beaker.account.whoami()
:
>>> username = beaker.account.whoami().name
Important
In this example - and all other examples - beaker
is an instance of the
Beaker
client class, not the beaker
module.
See Quick start to learn how to instantiate the client.
Organizations#
Manage Beaker organizations with Beaker.organization
.
For example, you can get information about an organization with
Beaker.organization.get()
:
>>> beaker.organization.get(beaker_org_name).display_name
'AI2'
You can also add, get, list, or remove members with
Beaker.organization.add_member()
,
.get_member()
,
.list_members()
, or
.remove_member()
, respectively.
Workspaces#
Manage Beaker workspaces with Beaker.workspace
.
For example, you can create a workspace with Beaker.workspace.ensure()
:
>>> workspace = beaker.workspace.ensure(workspace_name)
You can retreive metadata about a workspace with Beaker.workspace.get()
:
>>> beaker.workspace.get(workspace_name).id
'01G370GVHJQZYF50XYXM7VB53N'
You can list datasets in a workspace with
Beaker.workspace.datasets()
:
>>> datasets = beaker.workspace.datasets(workspace_name, results=False)
Similarly, you can list experiments or images with
Beaker.workspace.experiments()
or
Beaker.workspace.images()
,
respectively.
Clusters#
Manage Beaker clusters with Beaker.cluster
.
For example, you can get information about a cluster with
Beaker.cluster.get()
:
>>> beaker.cluster.get(beaker_cluster_name).name
'ai2/canary'
Or you could check how many GPUs are free on an on-premise cluster with
Beaker.cluster.utilization()
:
>>> free_gpus = 0
>>> for node_util in beaker.cluster.utilization(beaker_on_prem_cluster_name).nodes:
... free_gpus += node_util.free.gpu_count
Nodes#
Manage Beaker nodes with Beaker.node
.
For example, you can get information about a node with
Beaker.node.get()
:
>>> beaker.node.get(beaker_node_id).limits.gpu_count
8
Images#
Manage Beaker images with Beaker.image
.
For example, upload a local Docker image to Beaker with
Beaker.image.create()
:
>>> image = beaker.image.create(beaker_image_name, docker_image_name, quiet=True)
The object returned is the same Image
object you get from
Beaker.image.get()
.
It contains some metadata about the image:
>>> image = beaker.image.get(f"{username}/{beaker_image_name}")
>>> image.original_tag
'hello-world'
Experiments#
Manage Beaker experiments with Beaker.experiment
.
For example, create an experiment with Beaker.experiment.create()
:
>>> spec = ExperimentSpec(
... budget="ai2/allennlp",
... tasks=[
... TaskSpec(
... name="main",
... image=ImageSource(beaker=image.id),
... context=TaskContext(cluster=beaker_cluster_name),
... result=ResultSpec(
... path="/unused" # required even if the task produces no output.
... ),
... ),
... ],
... )
>>> experiment = beaker.experiment.create(
... experiment_name,
... spec,
... workspace=workspace_name,
... )
Wait for the experiment to complete with
Beaker.experiment.wait_for()
:
>>> experiment = beaker.experiment.wait_for(
... experiment,
... timeout=60 * 5,
... quiet=True,
... )[0]
Get the logs from the execution of a task in an experiment with
Beaker.experiment.logs()
:
>>> logs = "".join([
... line.decode() for line in
... beaker.experiment.logs(experiment, quiet=True)
... ])
Get the results from a task in an experiment with
Beaker.experiment.results
:
>>> results = beaker.experiment.results(experiment)
Jobs#
Manage Beaker jobs with Beaker.job
.
For example, get the logs from a job with Beaker.job.logs()
(equivalent to Beaker.experiment.logs()
when there is
only one task in the experiment):
>>> job = experiment.jobs[0]
>>> logs = "".join([
... line.decode() for line in
... beaker.job.logs(job, quiet=True)
... ])
Datasets#
Manage Beaker datasets with Beaker.dataset
.
For example, create a dataset from a local file with
Beaker.dataset.create()
:
>>> dataset = beaker.dataset.create(dataset_name, "README.md", quiet=True)
Or create a dataset from a local directory:
>>> dataset = beaker.dataset.create(dataset_name, "docs/source/", force=True, quiet=True)
Tip
The force=True
flag is used to overwrite any existing dataset with the same name.
And download a dataset with Beaker.dataset.fetch()
:
>>> beaker.dataset.fetch(dataset, target=download_path, quiet=True)
You can also download a single file using
Beaker.dataset.stream_file()
:
>>> contents = b"".join(beaker.dataset.stream_file(dataset, "docs/source/conf.py", quiet=True))
Secrets#
Manage Beaker secrets with Beaker.secret
.
For example, you can read, write, or delete secrets with
Beaker.secret.read()
,
Beaker.secret.write()
, and
Beaker.secret.delete()
, respectively.
Groups#
Manage Beaker groups with Beaker.group
.
For example, create a group with Beaker.group.create()
:
>>> group = beaker.group.create(group_name, experiment)