SelectCudaDevice
Introduction
The SelectCudaDevice
widget in Supervisely is a user interface element that enables users to select CUDA devices available on their agent. It automatically detects and lists the devices, displaying each with its corresponding RAM usage. Additionally, a refresh button allows users to update the list and view real-time device and memory usage. The widget also includes an event handler that activates when a user selects a device from the dropdown menu.
Function signature
SelectCudaDevice(
get_list_on_init = True,
sort_by_free_ram = False,
include_cpu_option = False,
widget_id = None,
)
Parameters
get_list_on_init
Optional[bool]
Whether to retrieve and display the list of CUDA devices upon initialization. Default is True
.
sort_by_free_ram
Optional[bool]
Whether to sort the CUDA devices by their available free RAM. Default is False
.
include_cpu_option
Optional[bool]
Whether to include CPU as an option in the device list. Default is False
.
widget_id
str
An optional ID for the widget.
get_list_on_init
Determine if you want to get the device list on widget initialization. If True
, the widget retrieves information about device on initialization. Default is True
.
type: Optional[bool]
default value: True
Initialize the empty widget, and then manually refresh it to find the devices:
widget = SelectCudaDevice(get_list_on_init=False)
# some code here
widget.refresh()
sort_by_free_ram
If True
, the device list will automatically be sorted by its free RAM value. Default is False
.
type: Optional[bool]
default value: False
Initialize the widget sorting it by free RAM:
widget = SelectCudaDevice(sort_by_free_ram=True)
include_cpu_option
If True
, selector will include CPU as a device option. Default is False
.
type: Optional[bool]
default value: False
Initialize the widget with CPU as a device option:
widget = SelectCudaDevice(include_cpu_option=True)
widget_id
An optional ID for the widget.
type: str
default value: None
Initialize the widget with an ID:
widget = SelectCudaDevice(widget_id="select_cuda_device")
Methods and attributes
get_device()
Get currently selected device.
set_device(value: str)
Set the device to be displayed in the widget (overrides current).
refresh()
Get up-to-date information about available devices and set them as options in the selector.
Mini app example
You can find this example in our GitHub repository:
selection/023_select_cuda_device/src/main.py
Import libraries
import os
import supervisely as sly
from dotenv import load_dotenv
from supervisely.app.widgets import Card, SelectCudaDevice, Container, Text
Init API client
First, we load environment variables with credentials and init API for communicating with Supervisely Instance:
load_dotenv("local.env")
load_dotenv(os.path.expanduser("~/supervisely.env"))
api = sly.Api()
Initialize the SelectCudaDevice
widget
SelectCudaDevice
widgetLet's initialize the SelectCudaDevice
widget with no devices:
cuda_device = SelectCudaDevice(
get_list_on_init=False,
include_cpu_option=True,
)
Then, we can manually refresh the widget, retrieving the devices information when we need to.
cuda_device.refresh()
Create an event handler for the SelectCudaDevice
widget
SelectCudaDevice
widgetNow, let's create a event handler for the SelectCudaDevice widget, when the value of the widget is changed.
value_changed_info = Text(status="info")
value_changed_info.hide()
@cuda_device.value_changed
def new_device_selected(device: str):
text = "Value changed: {}".format(device)
value_changed_info.text = text
value_changed_info.show()
Create app layout
Prepare a layout for the app using Card
widget with the content
parameter and place widget that we've just created in the Container
widget.
card = Card(
title="Select Cuda Device",
content=Container(widgets=[value_changed_info, cuda_device]),
)
layout = Container(widgets=[card])
Create an app using the layout
Create an app object with the layout parameter.
app = sly.Application(layout=layout)
Last updated
Was this helpful?