Skip to main content
Hugging Face provides thousands of pre-trained models for natural language processing, computer vision, audio processing, and more. You can integrate these models into your to deploy AI capabilities without training models from scratch. This guide shows you how to load and use Hugging Face models in your Serverless handlers, using sentiment analysis as an example that you can adapt for other model types. This guide covers two approaches:

Install dependencies

Your handler needs the transformers library to load Hugging Face models, and torch to run inference. Install both in your development environment:
When deploying to Runpod, you’ll need to include these dependencies in your Dockerfile or requirements file.

Load models at runtime

Create a file named handler.py and follow these steps to build a handler that performs sentiment analysis using a Hugging Face model.
1

Import libraries

Start by importing the necessary libraries:
handler.py
The pipeline function from the transformers library provides a simple interface for using pre-trained models. It handles tokenization, model inference, and post-processing automatically.
2

Load the model efficiently

Load your model outside the handler function to avoid reloading it on every request. This significantly improves performance by initializing the model only once when the starts:
handler.py
The pipeline function takes two arguments: the task type (like "sentiment-analysis", "text-generation", or "image-classification") and the specific model identifier from the Hugging Face model hub.
3

Define the handler function

Create a handler function that extracts input text from the request, validates it, runs inference, and returns results:
handler.py
The handler follows Runpod’s standard pattern: extract input, validate it, process it, and return results. The model returns a list of predictions, so we take the first result with [0] and extract the label and confidence score.
4

Start the Serverless worker

Add this line at the end of your file to register the handler and start the worker:
handler.py

Complete implementation

Here’s the complete code:
handler.py

Test locally

Create a test input file to verify your handler works correctly:
test_input.json
Run your handler locally using the Runpod SDK:
You should see output indicating successful sentiment analysis:
The first time you run this, Hugging Face will download the model files. Subsequent runs will use the cached model.

Adapt for other models

This pattern works for any Hugging Face model. To use a different model:
  1. Choose your model: Browse the Hugging Face model hub to find a model for your task.
  2. Update the pipeline: Change the task type and model identifier:
  3. Adjust input/output handling: Different models expect different input formats and return different output structures. Check the model’s documentation on Hugging Face to understand its API.

Use cached models

The example above downloads models when workers start, which works fine for development and testing. For production endpoints, we highly recommend using cached models instead. Cached models provide faster cold starts (seconds instead of minutes) and eliminate charges for model download time.

Enable model caching

To enable cached models on your endpoint:
1

Open endpoint settings

Navigate to the Serverless section of the console. Either create a new endpoint or select Manage → Edit Endpoint on an existing one.
2

Configure the model

Scroll to the Model field and enter your Hugging Face model identifier.For example: distilbert/distilbert-base-uncased-finetuned-sst-2-english
3

Deploy

Save your endpoint configuration. Runpod will automatically cache the model and make it available to your workers.

Locate cached models

Cached models are stored at /runpod-volume/huggingface-cache/hub/ following Hugging Face cache conventions. Add this helper function to your handler to resolve the correct snapshot path:

Adapt your handler for cached models

Once model caching is enabled, you need to update your handler to load the model from the local cache instead of downloading it. Here’s how the code changes:
The key differences are:
  • Offline mode: Setting HF_HUB_OFFLINE and TRANSFORMERS_OFFLINE prevents accidental downloads if the model isn’t cached.
  • Local path: Instead of a model identifier, you pass the resolved local path to the cached model files.
  • local_files_only: This flag tells the transformers library to only use local files.

Complete cached implementation

Here’s the complete handler using cached models:
handler.py
For a complete walkthrough including Dockerfile creation and deployment, see the cached model tutorial.

Other best practices

When deploying Hugging Face models to production endpoints, keep these additional considerations in mind:
  • Model size: Larger models require more VRAM and take longer to load. Choose the smallest model that meets your accuracy requirements.
  • GPU utilization: Most Hugging Face models run faster on GPUs. Ensure your endpoint uses GPU workers for optimal performance.
  • Batch processing: If your model supports batching, process multiple inputs together to improve throughput.

Next steps