(user_script)= # How to write `user_script` ## `user_script` `user_script` can be added when you have your own classes and functions defined in a separate Python file. Olive will automatically use the classes and functions in your script. `user_script` can be either a `str` path to your script file, or a `Path` object. You can define your custom functions, and use them as attributes in configurations. Olive supports following custom attributes in different configurations: * `dataloader_func`: function name of your dataloader function. * `post_processing_func`: function name of your post processing function. * `evaluate_func`: function name of your evaluate function. * `metric_func`: function name of your metric function (`OpenVINOQuantization` pass only). ### Examples You can create your own `my_script.py` with `dataloader_func` and `post_processing_func`: ``` # my_script.py class MyDataLoader: def __init__(self, data_dir, batchsize): ... def __len__(self): ... def __getitem__(self): ... def create_dataloader(data_dir, batchsize): return MyDataloader(data_dir, batchsize) def post_process(output): # your post processing logic here ... ``` Use `my_script.py` with Olive workflow configuration json file(sub_types name should be the returned dict key of your custom function): ``` ``` "metrics":[ { "name": "accuracy", "type": "accuracy", "sub_types": [ {"name": "accuracy_score", "priority": 1, "goal": {"type": "max-degradation", "value": 0.01}}, {"name": "f1_score"}, {"name": "auc", "metric_config": {"reorder": true}} ], "user_config":{ "post_processing_func": "post_process", "user_script": "user_script.py", "dataloader_func": "create_dataloader", "batch_size": 4 } } ] ``` ## `script_dir` `script_dir` is the directory where you collect your own modules that will be used in Olive. Olive will append this directory to your `sys.path` for your Python interpreter. `script_dir` can be either a `str` path to your script file, or a `Path` object. ### Examples You can place your own Python modules, let's say `file.py`, in `my_modules` directory ``` - my_olive_project - my_modules - file.py - my_script.py ``` Your script can use this module directly when specifying `script_dir` in configuration: ``` # my_script.py import file # You can use file module here print(file.my_val) ... ``` Use `script_dir` and `my_script.py` with Olive workflow configuration json file: ``` "metrics":[ { "name": "accuracy", "type": "accuracy", "sub_types": [ {"name": "accuracy_score", "priority": 1, "goal": {"type": "max-degradation", "value": 0.01}}, {"name": "f1_score"}, {"name": "auc", "metric_config": {"reorder": true}} ] "user_config":{ "post_processing_func": "post_process", "user_script": "user_script.py", "script_dir": "my_modules" "dataloader_func": "create_dataloader", "batch_size": 4 } } ] ```