A modified version of runc adding a custom pre-start hook to all containers
If environment variable HABANA_VISIBLE_DEVICES is set in the OCI spec, the hook will configure Habana device access for the container by leveraging habana-container-cli from project libhabana-container.
- Habana-Container-Runtime
All binaries are build under dist/{BINARY_NAME}_architecture/{BINARY_NAME}.
Available architectures:
- linux_amd64
- linux_386
- linux_arm64
# Build all binaries
make build-binary
# Build only habana-container-runtime
make build-runtime
# Build only habana-container-hook
make build-hook
# Build only habana-container-cli (libhabana-container)
make build-cliAfter building the binaries, copy the config from packaging/config.toml
into /etc/habana-container-runtime/config.toml and edit for your
environment.
You must have docker installed. Building the packages is done using goreleaser.
make releaseArtifacts are found under dist/ folder.
Installation and usage guides can be found in the habana.ai docs
sudo tee /etc/docker/daemon.json <<EOF
{
"runtimes": {
"habana": {
"path": "/usr/bin/habana-container-runtime",
"runtimeArgs": []
}
}
}
EOF
sudo systemctl restart dockerYou can optionally reconfigure the default runtime by adding the following to /etc/docker/daemon.json:
"default-runtime": "habana"
sudo tee /etc/containerd/config.toml <<EOF
disabled_plugins = []
version = 2
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
[plugins."io.containerd.grpc.v1.cri".containerd]
default_runtime_name = "habana"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.habana]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.habana.options]
BinaryName = "/usr/bin/habana-container-runtime"
[plugins."io.containerd.runtime.v1.linux"]
runtime = "habana-container-runtime"
EOF
sudo systemctl restart containerdCreate new config file at /etc/crio/crio.conf.d/99-habana-ai.conf.
[crio.runtime]
default_runtime = "habana-ai"
[crio.runtime.runtimes.habana-ai]
runtime_path = "/usr/local/habana/bin/habana-container-runtime"
monitor_env = [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
]Restart crio service: systemctl restart crio.service
Currently habana-container-runtime has to be used with habana-container-hook and libhabana-container
Bellow is the case when host machine has 8 Habana devices and mount all by HABANA_VISIBLE_DEVICES=all
docker run --rm --runtime=habana -e HABANA_VISIBLE_DEVICES=all ubuntu:22.04 /bin/bash -c "ls /dev/accel/*"
/dev/accel/accel0
/dev/accel/accel1
/dev/accel/accel2
/dev/accel/accel3
/dev/accel/accel4
/dev/accel/accel5
/dev/accel/accel6
/dev/accel/accel7
/dev/accel/accel_controlD0
/dev/accel/accel_controlD1
/dev/accel/accel_controlD2
/dev/accel/accel_controlD3
/dev/accel/accel_controlD4
/dev/accel/accel_controlD5
/dev/accel/accel_controlD6
/dev/accel/accel_controlD7Each environment variable maps to an command-line argument for habana-container-cli from libhabana-container.
This variable controls which Habana devices will be made accessible inside the container.
0,1,2…: a comma-separated list of index(es).all: all Habana devices will be accessible, this is the default value in our container images.
Variable hold the last error from the runtime flow. The runtime does not fail the pod creation in most cases, so we propagate the error inside the container for debugging purposes.
See options here
- Please let us know by filing a new issue
- You can contribute by opening a pull request