メインコンテンツへスキップ

Qiskit Runtimeサービスアカウントを初期化する

Qiskit Runtimeを使用する前に、認証情報を送信(読み込み)してアカウントを初期化(インスタンス化)する必要があります。この認証情報は、Qiskit Runtimeサービスを初期化するたびに手動で送信することも、再利用のために保存することもできます。

注意事項
  • 公共のコンピューターやその他の信頼できない環境を使用している場合は、代わりに信頼できない環境でのサービスの初期化の手順に従ってください。
  • Qiskitを使用せずにREST APIで接続する場合は、こちらの手順に従ってください。
  • 必要に応じて、この情報を参照してファイアウォールを設定し、IBM Quantum APIエンドポイントへのアクセスを有効にしてください。

始める前に

以下の手順が完了していることを確認してください:

  1. IBM Cloudアカウントのメンバーであることを確認してください。手順についてはIBM Cloudアカウントの設定を参照してください。
  2. 少なくとも1つのインスタンスを作成する(またはアクセス権を持つ)。確認するには次の手順に従ってください:
    1. IBM Quantum Platformにログインします。
    2. ヘッダーのアカウント切り替えで正しいアカウントとリージョンが選択されていることを確認します。
    3. 1つ以上のインスタンスが表示されている場合は、この手順は完了です。表示されていない場合は、インスタンスを作成してください。
  3. Qiskit SDKとQiskit RuntimeがインストールされたアクティブなPython環境で作業していることを確認してください。
  4. Python仮想環境を有効化し、仮想環境内でPythonを実行してください。

アクセス認証情報を確認する

  1. APIキー(_APIトークン_とも呼ばれます)を確認してください。ダッシュボードからAPIキーを作成し、認証に使用できるよう安全な場所にコピーしておいてください。このトークンは再表示されません。なお、1つのAPIキーで任意のリージョンに接続できます。
  2. オプション:使用するインスタンスをインスタンスページで確認してください。CRNにカーソルを合わせてコピーアイコンをクリックし、インスタンスの識別に使用できるよう安全な場所に保存してください。

QiskitをQiskit Runtimeサービスインスタンスに接続する

備考

これらの手順はqiskit_ibm_runtime v0.42以降向けに設計されています。それより古いバージョンのqiskit_ibm_runtimeでは一部の機能が利用できません。その場合は、明示的にまたは保存済みアカウントを通じて、channeltokeninstanceの値を常に指定してください。

QiskitをQiskit Runtimeサービスインスタンスに接続する基本コードを以下に示します。ただし、ニーズに応じてQiskitRuntimeServiceのオプションをカスタマイズする方法はいくつかあります。これらのオプションについては以下のセクションで説明します。

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService(channel=<channel>,
token=<your-API_KEY>, # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
instance=<instance_CRN>)
備考

デフォルトのチャネルはibm_quantum_platformです。これはほぼ常に適切なチャネルであるため、例には含まれていません。

クイックスタートパス:認証情報を明示的に指定する

QiskitRuntimeServiceインスタンスを起動する最も速い方法は、直接インスタンス化の方法です。Qiskit Runtimeサービスを初期化するたびに、APIトークン(キー)とCRN(インスタンス識別子)を明示的に指定します。必要に応じてアクセス認証情報を確認するを参照してください。

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService(token=<cloud_api_key>, # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
instance=<instance_CRN>)

この方法は確実ですが、同じ詳細を繰り返し読み込む必要がある場合は手間がかかることがあります。認証情報を複数回読み込まないようにするために、信頼できるPython環境(個人のラップトップやワークステーションなど)で作業している場合は、次のセクションで説明するように保存済みアカウント認証情報を使用できます。

instance入力パラメーターはオプションですが、複数のインスタンスで作業するために単一のサービスを使用したい場合を除き、常にこの情報を指定することをお勧めします。その場合は自動インスタンス選択のセクションを参照してください。

クイックスタートパス:保存済み認証情報を指定する

すでに認証情報を保存している場合は、次のコードを使用してデフォルトの認証情報を適用してください。認証情報の保存手順については、アクセス認証情報を保存するを参照してください。

from qiskit_ibm_runtime import QiskitRuntimeService

# run every time you need the service
service = QiskitRuntimeService()
...

オープンアクセスとプレミアムアクセスなど、1つまたは複数の名前付き認証情報セットを保存している場合は、次のコードを使用して名前付き認証情報セットを使用してください。

from qiskit_ibm_runtime import QiskitRuntimeService

# run every time you need the service
service = QiskitRuntimeService(name="<name_of_saved_credentials>")
...

保存済み認証情報を読み込む際の注意事項

  • tokennameを指定してサービスを初期化した場合、tokenは無視され、nameアカウントの保存済み詳細が読み込まれます。

    次の例では、サービスはaccount_Aの詳細を読み込み、token_Bは使用しません:

    from qiskit_ibm_runtime import QiskitRuntimeService

    service = QiskitRuntimeService(token="token_B", name="account_A")
  • サービスの初期化時にnameinstanceを指定した場合、サービスはnameアカウントを読み込み、かつ指定されたinstanceに接続しようとします。競合がある場合は警告が表示されます。

    次の例では、サービスはaccount_Aの認証情報を読み込み、account_Aに別のインスタンスが指定されていても、インスタンスCRN_Bを使用しようとします:

    from qiskit_ibm_runtime import QiskitRuntimeService

    service = QiskitRuntimeService(instance="CRN_B", name="account_A")
  • サービスの初期化時にtokenまたはnameを指定しない場合にのみ、サービスはデフォルトの保存済みアカウントを読み込もうとします。ただし、instanceが明示的に指定されている場合、サービスはデフォルトの認証情報を使用してそのインスタンスに接続しようとします。競合がある場合は警告が表示されます。

    次の例では、サービスはデフォルトの認証情報を読み込み、デフォルトアカウントに別のインスタンスが指定されていても、インスタンスCRN_Bを使用しようとします:

    from qiskit_ibm_runtime import QiskitRuntimeService

    service = QiskitRuntimeService(instance="CRN_B")
  • 複数の認証情報セットを保存していて、サービスの初期化時にそのうちの1つを指定せず、デフォルトの保存済みアカウントもない場合は、アルファベット順で最後に来る名前のものが使用されます。

    次の例では、ユーザーが「my_premium」と「my_open」という名前のアカウントを保存しましたが、どちらもデフォルトに設定していませんでした。その後、次のコードを使用してサービスを初期化しました。この場合、「my_premium」の認証情報が使用されます:

    from qiskit_ibm_runtime import QiskitRuntimeService

    service = QiskitRuntimeService()
  • 「401 Unauthorized」エラーが繰り返し発生する場合は、APIキーの代わりにベアラートークンを使用しようとしている可能性があります。

インスタンスを自動的に選択する

サービスのインスタンス化時にトークンを指定するがインスタンスCRNを指定しない場合、QiskitRuntimeServiceはトークンで識別されるアカウントに認証し、自動インスタンス選択を使用して要求されたタスクに最も適切なインスタンスを選択します。アカウント内に複数のインスタンスが利用可能な場合、サービスは要求されたリソースと次のQiskitRuntimeServiceオプション(設定されている場合)に応じて、利用可能なインスタンスから自動的に選択します:plans_preferenceregiontags

  • plans_preference: 優先するインスタンスプランの種類。たとえば[open]が渡された場合、オープンプランのインスタンスのみが利用可能になります。指定可能な値はopenpremiumpay-as-you-goflexon-premです。plans_preferenceが指定されていない場合、無料プランが有料プランより優先されます。
  • region: インスタンスのリージョン。指定可能な値はus-easteu-deです。
  • tags: インスタンスのタグ。タグ名文字列のリストを受け付けます。
備考

保存済み認証情報でインスタンスを自動選択するよう設定できます。

インスタンスは次の順序で検索・使用されます:

  1. アカウントが1つのインスタンスにしかアクセスできない場合は、そのインスタンスがデフォルトで選択されます。
  2. 保存済み認証情報が使用されており、認証情報でインスタンスが指定されている場合は、そのインスタンスが使用されます。保存済み認証情報を読み込む際の注意事項を参照してください。
  3. アカウントが要求されたQPUにアクセスできる複数のインスタンスを持っている場合、システムは指定されたプラン設定を使用してプランとインスタンスを選択します。Qiskit Runtime v0.42以降では、デフォルトで無料プランが優先されます。
  4. アカウントが複数のインスタンスにアクセスできるが、要求されたQPUにアクセスできるのが1つだけの場合、アクセス権のあるインスタンスが選択されます。このインスタンスが無料プランに関連付けられていない場合、費用が発生します。

この例では、サービスはアカウントで利用可能なすべてのインスタンスを検索し、指定されたBackendにアクセスできるものを見つけます:

service = QiskitRuntimeService(token=<your-API_KEY>)

この例では、サービスはEUリージョンのアカウントで利用可能なすべてのインスタンスを検索し、指定されたBackendにアクセスできるものを見つけます:

service = QiskitRuntimeService(token=<your-API_KEY>, region="eu-de")

この例では、サービスはアカウントで利用可能なservicesタグが付いたすべてのインスタンスを検索し、指定されたBackendにアクセスできるものを見つけます:

service = QiskitRuntimeService(token=<your-API_KEY>, tags=['services'])

この例では、サービスはアカウントで利用可能なすべてのプレミアムおよびオープンインスタンスを検索し、指定されたBackendにアクセスできるものを見つけます。Backendがプレミアムプランとオープンプランのインスタンスの両方にある場合、plans_preferencepremiumが最初に指定されているため、プレミアムプランのインスタンスが優先されます。

service = QiskitRuntimeService(token=<your-API_KEY>, plans_preference=['premium', 'open'])

選択されたインスタンスを確認する

選択されたインスタンスは警告として返されます。また、service.active_instance()を実行してアクティブなインスタンスを確認することもできます。

Qiskit Runtimeを使用したローカルテスト

QiskitRuntimeServiceクラスはchannel=localで初期化してローカルシミュレーションを実行できます。この場合、認証は不要で、tokeninstanceの値を指定する必要はありません。そのため、ローカルアカウントを保存することはお勧めしません。代わりに直接インスタンス化を使用してください:

from qiskit_ibm_runtime import QiskitRuntimeService

# Initialize for local testing

service = QiskitRuntimeService(channel="local")

次のステップ

推奨事項