Example entrypoint and Dockerfile

Entrypoint example (runner.py):

runner.py
from qiskit_aer import AerSimulator
from qiskit_serverless import get_arguments, save_result
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Session

def custom_function(arguments):
     service = arguments.get("service")
     circuit = arguments.get("circuit")
     observable = arguments.get("observable")

     if service:
         backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
         session = Session(backend=backend)
     else:
         backend = AerSimulator()

    target = backend.target
    pm = generate_preset_pass_manager(target=target, optimization_level=3)

    target_circuit = pm.run(circuit)
    target_observable = observable.apply_layout(target_circuit.layout)

    from qiskit_ibm_runtime import EstimatorV2 as Estimator
    if service:
        estimator = Estimator(session=session)
    else:
        estimator = Estimator(backend=backend)
    job = estimator.run([(target_circuit, target_observable)])

    if service:
        session.close()
    return job.result()[0].data.evs

class Runner:
    def run(self, arguments: dict) -> dict:
        return custom_function(arguments)

Dockerfile:

Dockerfile
FROM icr.io/quantum-public/qiskit-serverless/ray-node:0.29.0

# install all necessary dependencies for your custom image

# copy our function implementation in `/runner/runner.py` of the docker image
USER 0
RUN  pip install qiskit_aer

WORKDIR /runner
COPY ./runner.py /runner
WORKDIR /

USER 1000

Follow the steps in the Deploy a Custom Function Image section to deploy and run the function using local infrastructure.