

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建置您的第一個電路
<a name="braket-get-started-run-circuit"></a>

啟動筆記本執行個體後，請選擇您剛建立的筆記本，以標準 Jupyter 介面開啟執行個體。

![\[筆記本界面顯示名為 amazon-braket-test 且狀態為 InService 及其 URL 的現有筆記本執行個體。\]](http://docs.aws.amazon.com/zh_tw/braket/latest/developerguide/images/console-page.png)


Amazon Braket 筆記本執行個體會預先安裝 Amazon Braket SDK 及其所有相依性。從使用`conda_braket`核心建立新的筆記本開始。

![\[筆記本、主控台和其他工具的啟動器界面，例如終端機、文字檔案、Markdown 檔案、Python 檔案，以及反白顯示的 conda_braket Python 環境。\]](http://docs.aws.amazon.com/zh_tw/braket/latest/developerguide/images/jupyter-open.png)


您可以從簡單的「您好，世界！」開始 範例。首先，建構一個準備 Bell 狀態的電路，然後在不同的裝置上執行該電路以取得結果。

首先匯入 Start，匯入 Amazon Braket SDK 模組並定義 simpleBRAKETlong； SDK 模組，以及定義基本的 Bell 狀態電路。

```
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})
```

您準備的特定 Bell 狀態是 \$100⟩ 和 \$111⟩ 的相等疊加，以及 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 主控台提供有關量子任務的進一步資訊。導覽至主控台中的 **Quantum 任務**索引標籤，您的量子任務應該位於清單頂端。或者，您可以使用唯一的量子任務 ID 或其他條件來搜尋量子任務。

**注意**  
90 天後，Amazon Braket 會自動移除與量子任務相關聯的所有量子任務 IDs 和其他中繼資料。如需詳細資訊，請參閱[資料保留](https://docs.aws.amazon.com/braket/latest/developerguide/security.html#braket-data-retention)。

 **在 QPU 上執行** 

使用 Amazon Braket，您只需變更一行程式碼，即可在實體量子電腦上執行先前的量子電路範例。Amazon Braket 可讓您存取各種 Quantum 處理單元 (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'
```