tensil-ai / tensil

Open source machine learning accelerators
https://www.tensil.ai
Other
348 stars 28 forks source link

Embedded driver support for reading model from flash memory #26

Closed petrohi closed 2 years ago

petrohi commented 2 years ago

In this PR we add embedded driver support for reading model from on-board flash memory.

The driver follows model description to first load the program and then each constant in the description order. The binary file to program the flash is prepared by concatenating tprog and tdata files. Following is the example where we first prepare the manifest and then load and run the model:

flash_init();

struct flash flash;
int status = flash_open(&flash);

if (status != XST_SUCCESS)
    return -1;

error_t error = ERROR_NONE;

struct driver driver;
error = driver_init(&driver);

if (error)
    return -1;

struct model resnet_model;

memcpy(&resnet_model.arch, &driver.arch, sizeof(struct architecture));
resnet_model.prog.size = 2064296;

resnet_model.consts_size = 1;
resnet_model.consts[0].base = 0;
resnet_model.consts[0].size = 71341;

resnet_model.inputs_size = 1;
strncpy(resnet_model.inputs[0].name, "x:0", MAX_STRING_SIZE);
resnet_model.inputs[0].base = 0;
resnet_model.inputs[0].size = 1024;

resnet_model.outputs_size = 1;
strncpy(resnet_model.outputs[0].name, "Identity:0", MAX_STRING_SIZE);
resnet_model.outputs[0].base = 32;
resnet_model.outputs[0].size = 2;

error = driver_load_model_from_flash(&driver, &resnet_model, &flash);

if (error)
    return -1;

error = driver_load_model_input_from_flash(&driver, &resnet_model, "x:0",
                                            &flash);

if (error)
    return -1;

error = driver_run(&driver, false, false, false, false);

if (error)
    return -1;

error =
    driver_print_model_output_vectors(&driver, &resnet_model, "Identity:0");

if (error)
    return -1;

Also:

shortcut-integration[bot] commented 2 years ago

This pull request has been linked to Shortcut Story #431: Embedded driver support for reading model from flash memory.