Skip to main contentIBM Quantum Documentation

Transpile circuits remotely with the Qiskit transpiler service

The Qiskit transpiler service provides transpilation capabilities on the cloud. In addition to the local Qiskit transpiler capabilities, your transpilation tasks can benefit from both IBM Quantum™ cloud resources and AI-powered transpiler passes.

The Qiskit transpiler service offers a Python library to seamlessly integrate this service and its capabilities into your current Qiskit patterns and workflows.

Note

This experimental service is only available for IBM Quantum Premium Plan users. The service is an alpha release, subject to change. If you have feedback or want to contact the developer team, please use this Qiskit Slack Workspace channel(opens in a new tab).


Install the qiskit-transpiler-service package

To use the Qiskit transpiler service, install the qiskit-transpiler-service package:

pip install qiskit-transpiler-service

By default, the package tries to authenticate to IBM Quantum services with the defined Qiskit API token, and uses your token from the QISKIT_IBM_TOKEN environment variable or from the file ~/.qiskit/qiskit-ibm.json (under the section default-ibm-quantum).

Note: This package requires Qiskit SDK 1.0 by default.


qiskit-transpiler-service transpile options

  • backend_name (optional, str) - A backend name as it would be expected by QiskitRuntimeService (for example, ibm_sherbrooke). If this is set, the transpile method uses the layout from the specified backend for the transpilation operation. If any other option is set that impacts these settings, such as coupling_map, the backend_name settings are overridden.
  • coupling_map (optional, List[List[int]]) - A valid coupling map list (for example, [[0,1],[1,2]]). If this is set, the transpile method uses this coupling map for the transpilation operation. If defined, it overrides any value specified for target.
  • optimization_level (int) - The potential optimization level to apply during the transpilation process. Valid values are [1,2,3], where 1 is the least optimization (and fastest), and 3 the most optimization (and most time-intensive).
  • ai (bool) - Whether to use AI capabilities during transpilation. The AI capabilities available can be for AIRouting transpiling passes or other AI synthesis methods. If this value is True, the service applies different AI-powered transpiling passes depending on the optimization_level requested.
  • qiskit_transpile_options (dict) - A Python dictionary object that can include any other option that is valid in the Qiskit transpile() method. If the qiskit_transpile_options input includes optimization_level, it is discarded in favor of the optimization_level specified as parameter input. If the qiskit_transpile_options includes any option not recognized by the Qiskit transpile() method, the library raises an error.

Examples

The following examples demonstrate how to transpile circuits using the Qiskit transpiler service with different parameters.

  1. Create a circuit and call the Qiskit transpiler service to transpile the circuit with ibm_sherbrooke as the backend_name, 3 as the optimization_level, and without using AI during the transpilation.

    from qiskit.circuit.library import EfficientSU2
    from qiskit_transpiler_service.transpiler_service import TranspilerService
     
    circuit = EfficientSU2(101, entanglement="circular", reps=1).decompose()
     
    cloud_transpiler_service = TranspilerService(
        backend_name="ibm_sherbrooke",
        ai=False,
        optimization_level=3,
    )
    transpiled_circuit = cloud_transpiler_service.run(circuit)

Note: you only can use backend_name devices you have access to with your IBM Quantum account. Apart from the backend_name, the TranspilerService also allows coupling_map as parameter.

  1. Produce a similar circuit and transpile it, requesting AI transpiling capabilities by setting the flag ai to True:

    from qiskit.circuit.library import EfficientSU2
    from qiskit_transpiler_service.transpiler_service import TranspilerService
     
    circuit = EfficientSU2(101, entanglement="circular", reps=1).decompose()
     
    cloud_transpiler_service = TranspilerService(
        backend_name="ibm_sherbrooke",
        ai=True,
        optimization_level=1,
    )
    transpiled_circuit = cloud_transpiler_service.run(circuit)

Next steps

Recommendations
Was this page helpful?
Report a bug or request content on GitHub.