Architecture
The overall architecture of HAMi is shown below:

HAMi consists of the following components:
- HAMi MutatingWebhook
- HAMi scheduler-extender
- Device-plugin (HAMi-device-plugin)
- In-container resource control (HAMi-Core)
HAMi MutatingWebhook checks whether a task can be handled by HAMi. It scans the resource fields of each submitted pod; if every resource the pod requests is either cpu, memory, or a HAMi resource, it sets the pod's schedulerName to HAMi-scheduler.
The HAMi scheduler is responsible for assigning tasks to the appropriate nodes and devices. It also maintains a global view of heterogeneous computing devices for monitoring.
The device-plugin layer reads the scheduling result from the task's annotations and maps the corresponding device into the container.
The in-container resource control monitors resource usage within the container and provides hard isolation.