--- license: bsd-2-clause --- # Utilizing Custom ONNX Models Stored in Hugging Face within HSSM This guide will walk you through the process of using custom ONNX models stored in Hugging Face within HSSM (Hierarchical State Space Model) framework. ## Prerequisites 1. Python 3.8 or later. 2. HSSM library installed in your Python environment. 3. A pre-trained ONNX model stored on Hugging Face model hub. ## Step-by-step guide ### Step 1: Import necessary libraries ``` import pandas as pd import hssm import ssms.basic_simulators pytensor.config.floatX = "float32" ``` ### Step 2: Define HSSM Configuration You will have to define the configuration of your model. Make sure you are defining the log-likelihood kind as "approx_differentiable" and providing the Hugging Face model name in the loglik field. ``` my_hssm = hssm.HSSM( data=dataset_lan, loglik_kind = "approx_differentiable", loglik = "levy.onnx", model="custom", model_config= { "backend": "jax", "list_params": ["v", "a", "z", "alpha", "t"], "bounds": { "v": (-3.0, 3.0), "a": (0.3, 3.0), "z": (0.1, 0.9), "alpha": (1.0, 2.0), "t": (1e-3, 2.0), }, } ) ``` This creates an HSSM object my_hssm using the custom ONNX model levy.onnx from the Hugging Face repository. ``` my_hssm.sample(cores=2, draws=500, tune=500, mp_ctx="forkserver") ``` # Uploading ONNX Files to a Hugging Face Repository If your ONNX file is not currently housed in your Hugging Face repository, you can include it by adhering to the steps delineated below: 1. Import the HfApi module from huggingface_hub: ``` from huggingface_hub import HfApi ``` 2. Upload the ONNX file using the upload_file method: ``` api = HfApi() api.upload_file( path_or_fileobj="test.onnx", path_in_repo="test.onnx", repo_id="franklab/HSSM", repo_type="model", create_pr=True, ) ``` The execution of these steps will generate a Pull Request (PR) on Hugging Face, which will subsequently be evaluated by a member of our team. ## Creating a Pull Request and a New ONNX Model 1. **Creating a Pull Request on Hugging Face** Navigate to the following link: [Hugging Face PR](https://huggingface.co/franklab/HSSM/blob/refs%2Fpr%2F1/test.onnx) By doing so, you will **generate a Pull Request on Hugging Face**, which will be reviewed by our team members. 2. **Creating a Custom ONNX Model** ### Establish a Network Config and State Dictionary Files in PyTorch To construct a custom model and save it as an ONNX file, you must create a network configuration file and a state dictionary file in PyTorch. Refer to the instructions outlined in the README of the [LANFactory package](LINK_TO_LANFACTORY_PACKAGE). ### Convert Network Config and State Dictionary Files to ONNX Once you've generated the network configuration and state dictionary files, you will need to **convert these files into an ONNX format**.