

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 最初の回路を構築する
<a name="braket-get-started-run-circuit"></a>

ノートブックインスタンスが起動したら、作成したノートブックを選択して、標準の Jupyter インターフェイスでインスタンスを開きます。

![amazon-braket-test という名前を持ち、InService ステータスである既存のノートブックインスタンスとその URLを示している、ノートブックインターフェイス。](http://docs.aws.amazon.com/ja_jp/braket/latest/developerguide/images/console-page.png)


Amazon Braket ノートブックインスタンスは、Amazon Braket SDK とそのすべての依存関係があらかじめインストールされています。`conda_braket` カーネルを使用して新しいノートブックを作成することから始めます。

![ノートブック、コンソール、ターミナル、および、テキストファイル、マークダウンファイル、Python ファイルなどその他のツールに使用するランチャーインターフェイス。conda_braket Python 環境が強調表示されています。](http://docs.aws.amazon.com/ja_jp/braket/latest/developerguide/images/jupyter-open.png)


シンプルな「こんにちは、世界！」という 例から始めることができます。まず、ベル状態を準備する回路を構築し、その回路を異なるデバイスで実行して結果を取得します。

まず、Amazon Braket SDK モジュールをインポートし、simpleBRAKETlong SDK モジュールを定義して、基本的なベル状態回路を定義します。

```
import boto3
from braket.aws import AwsDevice
from braket.devices import LocalSimulator
from braket.circuits import Circuit

# Create the circuit
bell = Circuit().h(0).cnot(0, 1)
```

回路を視覚化するには、次のコマンドを使用します。

```
print(bell)
```

```
T  : │  0  │  1  │
      ┌───┐       
q0 : ─┤ H ├───●───
      └───┘   │   
            ┌─┴─┐ 
q1 : ───────┤ X ├─
            └───┘ 
T  : │  0  │  1  │
```

 **[ローカルシミュレーターで回路を実行する]** 

次に、回路を実行する量子デバイスを選択します。Amazon Braket SDK には、ラピッドプロトタイピングとテスト用のローカルシミュレーターが付属しています。ローカルシミュレーターは、最大 25 qubits (ローカルハードウェアによって異なります) の小さい回路に使用することをお勧めします。

ローカルシミュレーターをインスタンス化するコードは次のとおりです。

```
# Instantiate the local simulator
local_sim = LocalSimulator()
```

次に、回路を実行するコードは次のとおりです。

```
# Run the circuit
result = local_sim.run(bell, shots=1000).result()
counts = result.measurement_counts
print(counts)
```

次のような結果が表示されます。

```
Counter({'11': 503, '00': 497})
```

準備した特定のベル状態は \|00> と \|11> の等しい重ね合わせであり、期待どおり、測定結果として 00 と 11 (shot ノイズまで含めて) がほぼ等しい分布となりました。

 **オンデマンドシミュレーターで回路を実行する** 

Amazon Braket は、より大きな回路を実行するためのオンデマンドのハイパフォーマンスシミュレーター SV1 へのアクセスも提供します。SV1 は、最大 34 qubits で構成される量子回路のシミュレーションを可能にするオンデマンドの状態ベクトルシミュレーターです。詳細については、SV1[「サポートされているデバイス](braket-devices.md)」セクションと「 AWS コンソール」を参照してください。SV1 (および TN1 または QPU) でタスクを実行する場合、量子タスクの結果はアカウントの S3 バケットに保存されます。バケットを指定しない場合、Braket SDK によりデフォルトのバケット `amazon-braket-{region}-{accountID}` が作成されます。詳細については、「[Amazon Braket へのアクセスの管理](braket-manage-access.md)」を参照してください。

**注記**  
実際の既存のバケット名を入力します。次の例では、バケット名として `amazon-braket-s3-demo-bucket` が表示されます。Amazon Braket のバケット名は常に `amazon-braket-` で始まり、追加した他の識別文字が続きます。S3 バケットを設定する方法に関する情報が必要な場合は、「[Amazon S3 の開始方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)」を参照してください。

```
# Get the account ID
aws_account_id = boto3.client("sts").get_caller_identity()["Account"]

# The name of the bucket
my_bucket = "amazon-braket-s3-demo-bucket"

# The name of the folder in the bucket
my_prefix = "simulation-output"
s3_folder = (my_bucket, my_prefix)
```

SV1 で回路を実行するには、`.run()` コールの位置引数として前に選択した S3 バケットの場所を指定する必要があります。

```
# Choose the cloud-based on-demand simulator to run your circuit
device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1")

# Run the circuit
task = device.run(bell, s3_folder, shots=100)

# Display the results
print(task.result().measurement_counts)
```

Amazon Braket コンソールには、量子タスクに関する詳細情報が表示されます。コンソールの **[量子タスク]** タブに移動します。量子タスクはリストの上部にあるはずです。または、一意の量子タスク ID またはその他の条件を使用して量子タスクを検索することもできます。

**注記**  
90 日後、Amazon Braket は、量子タスクに関連付けられているすべての量子タスク ID およびその他のメタデータを自動的に削除します。詳細については、「[データ保持期間](https://docs.aws.amazon.com/braket/latest/developerguide/security.html#braket-data-retention)」を参照してください。

 **QPU で実行する** 

Amazon Braket を使用すると、1 行のコードを変更するだけで、物理量子コンピュータで前の量子回路の例を実行できます。Amazon Braket は、さまざまな量子処理ユニット (QPU) デバイスへのアクセスを提供します。さまざまなデバイスと可用性ウィンドウに関する情報は、[サポートされているデバイス](braket-devices.md)セクションと**、デバイス**タブの AWS コンソールで確認できます。次の例は、IQM デバイスのインスタンス化方法を示しています。

```
# Choose the IQM hardware to run your circuit
device = AwsDevice("arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet")
```

または、次のコードで IonQ デバイスを選択するという方法もあります。

```
# Choose the Ionq device to run your circuit
device = AwsDevice("arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1")
```

デバイスを選択してからワークロードを実行するまでの間に、次のコードを使用してデバイスキューの深さをクエリし、量子タスクまたはハイブリッドジョブの数を確認できます。また、カスタマーは Amazon Braket Management Console の [デバイス] ページでもデバイス固有のキューの深さを確認できます。

```
# Print your queue depth
print(device.queue_depth().quantum_tasks)
# Returns the number of quantum tasks queued on the device
# {<QueueType.NORMAL: 'Normal'>: '0', <QueueType.PRIORITY: 'Priority'>: '0'}

print(device.queue_depth().jobs)
# Returns the number of hybrid jobs queued on the device
# '2'
```

タスクを実行すると、Amazon Braket SDK が結果をポーリングします (デフォルトのタイムアウトは 5 日後です)。このデフォルトを変更するには、以下の例に示すように `.run()` コマンドの `poll_timeout_seconds` パラメータを変更します。ポーリングタイムアウトが短すぎると、QPU が利用できない場合など、ポーリング時間内に結果が返されない場合があり、ローカルタイムアウトエラーが返されることに注意してください。ポーリングを再開するには、`task.result()` 関数を呼び出します。

```
# Define quantum task with 1 day polling timeout
task = device.run(bell, s3_folder, poll_timeout_seconds=24*60*60)
print(task.result().measurement_counts)
```

また、キューの位置を確認するには、量子タスクまたはハイブリッドジョブを送信した後で `queue_position()` 関数を呼び出します。

```
print(task.queue_position().queue_position)
# Return the number of quantum tasks queued ahead of you
# '2'
```