メインコンテンツへスキップ
このプロジェクトはベータ版です。バグを見つけましたか?GitHub Issueを開く。質問やアイデアがありますか?Discussionsで質問する — フィードバックをお待ちしています!
このページの翻訳品質はいかがですか?

コンピュート・プロファイルを選択する

マネージド・ワークフローは、コンピュート・プロファイル上で実行されます。コンピュート・プロファイルは、HPCスケジューラーに要求するリソースと同様に、vCPU、メモリ、GPUの固定された組み合わせです。ワークフローをアップロードするときに、S や M などのサイズをプロファイルに対応付け、各実行はそれらのサイズのいずれかを選びます。ジョブはそのプロファイルを持つ専用のノード上で実行され、ジョブが終了するまでそのプロファイルを保持します。

プロファイルvCPUメモリ (GB)GPU
8x32832なし
16x12816128なし
48x76848768なし
128x15001281500なし
24x120x1l40s241201 L40S
20x320x2a100203202 A100
80x1200x8a1008012008 A100
160x1792x8h10016017928 H100

プロファイルIDの形式は {cpu}x{memory} で、メモリの単位はGBです。GPUを持つプロファイルの場合は {cpu}x{memory}x{count}{gpu} です。たとえば、24x120x1l40s は、24個のvCPU、120 GBのメモリ、1基のNVIDIA L40S GPUを持ちます。

利用可能なプロファイルを確認する​

どのプロファイルが利用可能かを確認するには、compute_profiles() を呼び出します。

run_workflow_remotely.ipynb

from qiskit_ibm_catalog import ManagedWorkflowClient

client = ManagedWorkflowClient()
print(client.compute_profiles())
8x32 (8 vCPU / 32 GB)
16x128 (16 vCPU / 128 GB)
48x768 (48 vCPU / 768 GB)
128x1500 (128 vCPU / 1500 GB)
24x120x1l40s (24 vCPU / 120 GB / 1l40s)
20x320x2a100 (20 vCPU / 320 GB / 2a100)
80x1200x8a100 (80 vCPU / 1200 GB / 8a100)
160x1792x8h100 (160 vCPU / 1792 GB / 8h100)

リソースからプロファイルを検索する​

プロファイルIDを入力する代わりに、compute_profile() でワークフローに必要なリソースを記述し、その結果を sizes_map の値として使用できます。cpu と memory はGB単位で渡し、GPUプロファイルの場合は gpu も渡します。

run_workflow_remotely.ipynb

profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s

sizes_map = {"S": "8x32", "L": profile}

sizes_map は、プロファイルIDと、compute_profile() が返すプロファイルを受け付け、1つのマップ内で両方を混在させることもできます。アップロードする前にプロファイルIDを確認するには、compute_profile() に渡します。たとえば client.compute_profile("16x128") のようにします。一致するプロファイルがない場合、エラーに利用可能なプロファイルが一覧表示されます。

compute_profiles() はリストを返すため、自分でフィルタリングすることもできます。たとえば、次のコードはGPUプロファイルを見つけます。

run_workflow_remotely.ipynb

gpu_profiles = [p for p in client.compute_profiles() if p.gpu]

ワークフローのデフォルトのコンピュート・プロファイルを設定する​

ほとんどのワークフローは、1つのサイズから始まります。ワークフローをアップロードするときに、sizes_map でそれをプロファイルに対応付け、default_size でデフォルトにします。

run_workflow_remotely.ipynb

from qiskit_ibm_catalog import ManagedWorkflow, ManagedWorkflowClient

client = ManagedWorkflowClient()

my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map={"M": "16x128"},
default_size="M",
)
)

ワークフローのすべての実行がこのプロファイルを使用するため、実行時にサイズを渡す必要はありません。

run_workflow_remotely.ipynb

job = my_workflow.run(circuits=circuits) # Runs on 16x128

ベストプラクティス: サイズを問題の規模に合わせる​

ワークフローは特定の問題を解き、問題の規模や複雑さが増すにつれて、異なるコンピュート・プロファイルが必要になることがあります。ワークフローごとに sizes_map を用意しておくと、次のことができます。

  • 大規模な問題に、最後まで実行できるだけの十分なコンピュート・リソースを与える。

  • 小規模な問題が、必要以上に大きなノードを使うのを防ぐ。

サイズは、部分空間のサイズ、バッチの数、量子ビットの数など、ワークフローのメモリとCPUの使用量を決める要因に基づいて決められます。

サイズを定義する​

小規模 (S)、中規模 (M)、大規模 (L)、超大規模 (XL) の問題向けに、最大4つのサイズを対応付けられます。たとえば、次のコードは3つのサイズを持つワークフローを定義します。

run_workflow_remotely.ipynb

sizes_map = {"S": "8x32", "M": "16x128", "L": "128x1500"}

my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map=sizes_map,
default_size="M",
)
)

サイズのルール​

サイズのラベルは S、M、L、XL のいずれかである必要があるため、ワークフローは最大4つのサイズを定義できます。マネージド・ワークフローは、大文字と小文字のどちらのラベルも照合し、大文字で保存します。2つのサイズを同じプロファイルに対応付けることもできます。

ワークフローは、次の場合に最初のアップロードを拒否します。

  • ラベルが S、M、L、XL のいずれでもない。

  • default_size なしで sizes_map を設定した、または sizes_map なしで default_size を設定した。

  • default_size が sizes_map のラベルのいずれでもない。

  • sizes_map の値が、利用可能なコンピュート・プロファイルではない。

再アップロード時にサイズを変更する​

同じ title でワークフローを再度アップロードすると、マネージド・ワークフローは次のようにサイズを処理します。

  • sizes_map を設定した場合、新しいサイズが、保存されているすべてのサイズに置き換わります。

  • sizes_map を省略した場合、ワークフローは保存されているサイズとデフォルトを保持します。

  • デフォルトのみを変更するには、sizes_map なしで default_size を設定します。default_size の値は、保存されているサイズのいずれかである必要があります。

sizes_map を設定するときは、毎回 default_size も設定してください。再アップロードでは default_size は必須ではありません。新しいサイズに古いデフォルトが含まれていない場合、ワークフローにはデフォルトがなくなり、function_size なしのすべての実行が失敗します。

実行ごとにサイズを選ぶ​

run() に function_size を渡すと、そのジョブに使うワークフローのサイズを1つ選べます。省略した場合、ジョブはワークフローのデフォルトのサイズを使用します。

run_workflow_remotely.ipynb

print(my_workflow.sizes()) # {'S': '8x32', 'M': '16x128', 'L': '128x1500'}
print(my_workflow.get_default_size()) # 'M'

job = my_workflow.run(function_size="L", circuits=circuits) # Runs on 128x1500
job = my_workflow.run(circuits=circuits) # Runs on the default size, M

sizes() と get_default_size() は、ワークフローを読み込んだときに保存されていたサイズを返します。ワークフローを読み込んだ後に変更されたサイズを確認するには、ワークフローをもう一度読み込んでください。

ジョブのサイズとコンピュート・プロファイルを読み取るには、ワークフローのコードで get_function_size() と get_compute_profile() を呼び出します。

source_files/my_workflow.py

from qiskit_serverless import get_compute_profile, get_function_size

print(get_function_size()) # 'L'
print(get_compute_profile()) # '128x1500'

サイズのトラブルシューティング​

問題原因
アップロードが Invalid size '...'. Valid sizes are: S, M, L, XL. で失敗する。sizes_map のラベルが、サポートされている4つのラベルのいずれでもありません。
アップロードが Unknown compute profile '...' for size '...'. で失敗する。sizes_map の値が、利用可能なプロファイルではありません。compute_profiles() でIDを確認するか、compute_profile() で検索してください。
compute_profile() が No compute profile matches ... で失敗する。まったく同じリソースを持つプロファイルがありません。GPUプロファイルの場合は、gpu も渡してください。エラーに表示されたリストからプロファイルを選んでください。
アップロードが 'default_size' is required when 'sizes' is provided. で失敗する。最初のアップロードで、default_size なしで sizes_map を設定しています。
run() が Unknown function size '...' for this function. Available sizes: ... で失敗する。function_size に渡したサイズを、ワークフローが定義していません。
run() が This function has no size. で失敗する。再アップロードによってサイズが置き換えられ、デフォルトが削除されました。default_size を指定して再度アップロードするか、function_size を渡してください。