Skip to main content
IBM Quantum Platform

Qiskit Functions を始めよう

Premium、Flex、および On-Prem ( IBM Quantum Platform API経由)プランをご利用のお客様は、 IBM ( Qiskit Functions )を無料でご利用開始できるほか、カタログに機能を提供しているパートナーのいずれかからライセンスを購入することも可能です。


サードパーティ製 Qiskit Functions の無料トライアルをお申し込みください

無料トライアルをお申し込みになるには、 Qiskit Functions Catalog にアクセスし、詳細パネルをご覧ください。 AccessGroupIdをクリック Request a free trial し、Functionsパートナーが求める情報( IBM Cloud を含む)を入力してください:

  1. IBM Cloud のIAMに移動します。
  2. 資格要件を確認してください。
    • ヘッダーのメニューバーで、アカウントを以下の形式のものに切り替えてください: XXXXXXX - [Organization Name]
    • その組織が、ご自身のプレミアムアカウントに登録されている組織と同じであることを確認してください。
    • 「 [あなたの]アカウント」と表示されている場合は、 個人アカウントを利用していることになります。このアカウントではプレミアムアクセスをご利用いただけません。
  3. アクセスグループIDを確認してください。
    • グループ名をクリックしてください。
    • 「詳細」 をクリックしてください。
    • アクセスグループIDをコピーしてください。 AccessGroup-まずは. から始めるべきです。

Qiskit Functions Catalog クライアントをインストールする

  1. Qiskit Functions を使い始めるには、 IBM Qiskit Functions Catalog クライアントをインストールしてください:

    pip install qiskit-ibm-catalog
    
  2. IBM Quantum Platform のダッシュボードからAPIキーを取得し、 Python の仮想環境を有効にしてください。 まだ仮想環境を設定していない場合は、 インストール手順を参照してください。

    信頼された Python 環境(個人のノートPCやワークステーションなど)で作業している場合は、 この save_account() 方法を使用して認証情報をローカルに保存してください。 (共有パソコンや公共のパソコンなど、信頼できない環境で IBM Quantum Platform への認証を行う場合は、 次の手順に進んでください。)

    save_account()これを使用するには、シェルで を実行し python 、次に以下を入力してください:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    
    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    exit()「.」と入力してください。 今後、このサービスへの認証が必要になる際は、以下の方法で認証情報を読み込むことができます:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    catalog = QiskitFunctionsCatalog()

    例:

    # Load saved credentials
    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    
    catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
  3. セキュリティリスクを最小限に抑えるため、信頼できないマシンや外部のクラウド Python 環境でのコード実行は避けてください。 信頼できない環境(例えば、公共のコンピュータなど)を使用せざるを得ない場合は、リスクを軽減するために、使用のたびに IBM Cloud のAPIキーページでAPIキーを削除し、新しいキーに変更してください。 詳細については、「 ユーザー API キーの管理」 のトピックをご覧ください。 この状況でサービスを初期化するには、次のコードを使用してください:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    
    # After using the following code, delete your API key on the
    # IBM Quantum Platform home dashboard
    catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character
    # API_KEY you created and saved from the IBM Quantum Platform Home dashboard
    APIキーを保護してください

    ソースコード、 Python スクリプト、またはノートブックファイルに、決して鍵を含めないでください。 他の人とコードを共有する際は、 Python スクリプト内にAPIキーが直接埋め込まれていないことを確認してください。 その代わりに、キーを含まないスクリプトを共有し、安全に設定するための手順を説明してください。

    うっかりキーを他人に共有してしまったり、 Git などのバージョン管理システムにキーが含まれてしまった場合は、リスクを軽減するため、直ちに IBM Cloud のAPIキー ページでキーを削除して無効化してください。 詳細については、「 ユーザー API キーの管理」 のトピックをご覧ください。


アクセス可能な関数を列挙してください

認証が完了すると、 Qiskit Functions Catalog 内の、自分がアクセス権を持つ関数のリストを表示できます:

catalog.list()

Output:

[QiskitFunction(qunova/hivqe-chemistry),
 QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
 QiskitFunction(algorithmiq/tem),
 QiskitFunction(qedma/qesem),
 QiskitFunction(multiverse/singularity),
 QiskitFunction(ibm/circuit-function),
 QiskitFunction(q-ctrl/optimization-solver),
 QiskitFunction(colibritd/quick-pde),
 QiskitFunction(q-ctrl/performance-management),
 QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]

利用可能なバックエンドと容量を確認する

関数を実行する前に、インスタンスがどのバックエンドにアクセスできるか、および残りの実行容量がどれくらいあるかを確認してください。 run() ジョブを送信する前に同様のチェックを行うため、キャパシティやバックエンドの問題を早期に発見することができます。

インスタンスからアクセス可能なバックエンドを一覧表示してください。 結果はカタログごとにキャッシュされます。 「Pass refresh_cache=True 」をクリックして更新してください。

catalog.backends()

backends() . と同じフィルターを受け入れます QiskitRuntimeService.backends()。 たとえば、127キュービット以上のバックエンドのみを一覧表示したり、より詳細な制御を行うための関 filters 数を渡したりすることができます:

catalog.backends(min_num_qubits=127)

1つのバックエンドを検索し、アクセスできることを確認します:

catalog.backend("ibm_fez")

また、保留中のジョブが最も少ないバックエンドを取得することもできます。 least_busy() 以下のものと同じフィルターを使用します QiskitRuntimeService.least_busy()

catalog.least_busy(min_num_qubits=127)

[ ] を使用して usage() 、残りの稼働時間を確認してください。 アクティブなインスタンスに対して、 および usage_limit_reached を返します usage_remaining_seconds

catalog.usage()

たとえば、大量のジョブをバッチ処理する前に残りの容量を確認し、処理を完了するのに十分な容量が残っていない場合は停止してください:

usage = catalog.usage()
if usage["usage_remaining_seconds"] < 600:
    raise SystemExit("Not enough capacity remaining to start this batch.")

有効な関数を実行する

catalog.load("<provider/function-name>")カタログオブジェクトがインスタンス化された後、次のようにして関数を選択できます:

ibm_cf = catalog.load("ibm/circuit-function")

各Qiskit関数には、独自の入力、オプション、および出力があります。 詳細については、実行したい関数に関する具体的なドキュメントページをご確認ください。 デフォルトでは、すべてのユーザーは一度に1つの関数ジョブしか実行できません:

job = ibm_cf.run(
    pubs=[(circuit, observable)],
    instance=instance,
    backend_name=backend_name,  # E.g. "ibm_fez"
)

job.job_id

Output:

'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
Tip

run() ジョブを送信する前に、残りの容量とバックエンドへのアクセス状況を確認します。 インスタンスの容量が不足している場合、または指定したバックエンドにアクセスできない場合は、 run() ジョブをキュー内で失敗させるのではなく、直ちにエラーを発生させます。 容量が低い場合、 run() 警告を発します。 「Pass suppress_low_usage_warning=True 」を押して音を消してください。

job = ibm_cf.run(
    pubs=[(circuit, observable)],
    instance=instance,
    backend_name=backend_name,  # E.g. "ibm_fez"
    suppress_low_usage_warning=True,
)

ジョブのステータスの確認

job_idQiskit Function を使用すると、実行中のジョブのステータスを確認できます。 これには、以下のステータスが含まれます:

  • QUEUED: リモートプログラムは、Qiskitの関数キューに入っています。 キューの優先順位は、 Qiskit Functions の利用量に基づいて決定されます。

  • INITIALIZING: リモートプログラムが起動しています。これには、リモート環境のセットアップや依存関係のインストールが含まれます。

  • RUNNING: プログラムが実行中です。 また、特定の機能でサポートされている場合は、さらに詳細なステータスもいくつか含まれます。

    • RUNNING: MAPPING: この関数は現在、古典的な入力を量子入力に変換しています。
    • RUNNING: OPTIMIZING_FOR_HARDWARE: この関数は、選択されたQPUに対して最適化されています。 これには、回路のトランスパイレーション、QPUの特性評価、観測可能なバックプロパゲーションなどが含まれる可能性がある。
    • RUNNING: WAITING_FOR_QPU: この関数は、 IBM Quantum Compute Service にジョブを送信し、現在キューで待機中です。
    • RUNNING: EXECUTING_QPU: この関数には、実行中のQuantum Computeジョブがあります。
    • RUNNING: POST_PROCESSING: この関数は結果の後処理を行うもので、エラーの軽減や、量子計算の結果を古典的な結果に変換することなどが含まれます。
  • DONE: プログラムは完了しました。結果データは job.result(). を使って取得できます。

  • ERROR: 問題が発生したため、プログラムの実行が停止しました。 エラーメッセージを表示するには、[ ] を使用 job.result() してください。

  • CANCELED: プログラムは、ユーザー、サービス、またはサーバーによってキャンセルされました。

    job.status()

    Output:

    'QUEUED'
    

検索結果

プログラムの実行が完了したら DONE、 を使用して job.result() 結果を取得できます。 この出力形式は関数ごとに異なるため、必ず各関数のドキュメントに従ってください:

result = job.result()
print(result)

Output:

PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})

また、ジョブはいつでもキャンセルできます:

job.cancel()

Output:

'Job has been stopped.'

関連するQuantum Computeジョブにアクセスする

Qiskit関数は、実行中に1つ以上の量子コンピューティングジョブをQPUに送信することができます。 これらのランタイムジョブのIDを取得するには、. を使用します job.runtime_jobs()。 これらのIDを使用すると、インスタンス QiskitRuntimeService からランタイムジョブオブジェクトを取得したり、 IBM Quantum® Platform ダッシュボード上でワークロードを検索したりすることができます。

runtime_job_ids = job.runtime_jobs()
runtime_job_ids

関数が実行時のジョブをセッションまたはバッチにグループ化している場合は、 を使用してセッションIDを一覧表示 job.runtime_sessions() します。 1つのセッションIDを に渡すと job.runtime_jobs() 、そのセッション内の実行中のジョブのみが返されます:

sessions = job.runtime_sessions()
session_runtime_jobs = job.runtime_jobs(runtime_session=sessions[0])
session_runtime_jobs
Note

返されるリストは空の場合もあります。 関数は、実行時に受け取ったランタイムサービスを通じてランタイムジョブを送信した場合にのみ、そのジョブを報告します。また、一部の関数はランタイムジョブを直接送信しません。


ジョブ・ログの表示

を使用して、関数の実行中に生成されるログ出力を取得 job.logs() します。 ログは、進捗状況を追跡したり、特定の ERROR 状態で終了したジョブのデバッグを行ったりするのに役立ちます。

print(job.logs().splitlines())

多くのログ行を生成する長時間実行されるジョブの場合、`` を使用して、必要な行のみを取得 job.filtered_logs() してください。 正規表現を に渡して一致する行を保持 include するか、 に渡して一致する行を削除 exclude します:

print(job.filtered_logs(include="iteration"))

以前に実行された Qiskit Functions ジョブの一覧を表示する

Qiskit Functions に送信されたすべてのジョブを一覧表示するには、以下を使用 jobs() できます:

old_jobs = catalog.jobs()
old_jobs

Output:

[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
 <Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
 <Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
 <Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
 <Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
 <Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
 <Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
 <Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
 <Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
 <Job | 629cf110-e490-4675-8a07-f6d298d166b0>]

検索結果を絞り込むには、フィルタを設定してください。 で機能別に function、でステータス別に status、で提出日別に絞り込みます created_after。 と limit : を使って検索結果をページごとに閲覧できます offset

recent_errors = catalog.jobs(
    function=ibm_cf,
    status="ERROR",
    created_after="2024-01-01T00:00:00Z",
    limit=5,
)
recent_errors

特定のジョブのジョブIDがすでにわかっている場合は、次のコマンドでそのジョブを取得できます catalog.job()

# First, get the most recent job that has been executed.
latest_job = old_jobs[0]

# We can also get that same job with `catalog.job`
job_by_id = catalog.job(latest_job.job_id)

# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id

# Print the job_id for this job.
print(job_by_id.job_id)

Output:

f6c29f49-4d5f-4fff-aca6-2e9a115b9763

エラーメッセージを取得する

ERRORプログラムのステータスが の場合、次のように を使用して job.error_message() エラーメッセージを取得します

job.error_message()

Output:

qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

次のステップ

推奨事項
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。