{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "008d2ceb-f6fa-42f6-a7df-6bd604775278",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"샘플러 빠른 시작\"\n",
        "description: \"IBM Quantum 샘플러 프리미티브 사용 방법에 대한 빠른 시작 가이드.\"\n",
        "---\n",
        "\n",
        "<span id=\"sampler-quickstart\" />\n",
        "\n",
        "# 샘플러 빠른 시작\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b7e96291-0925-4d7f-81a8-a7738549477c",
      "metadata": {},
      "source": [
        "샘플러의 핵심 임무는 하나 이상의 양자 회로 실행 결과로 생성된 출력 레지스터를 샘플링하는 것입니다. [동적 회로](/docs/guides/execute-dynamic-circuits) 와 매개변수화 회로를 입력으로 제출할 수 있습니다(매개변수화 회로를 제출할 경우, 매개변수 값도 함께 제공해야 합니다). Sampler는 [오류 억제를](/docs/guides/error-mitigation-and-suppression-techniques) 위한 내장형 동적 분리 및 트위링 기능도 지원합니다.\n",
        "\n",
        "이 주제의 단계에서는 Sampler를 설정하는 방법, 구성에 사용할 수 있는 옵션을 살펴보는 방법, 그리고 프로그램에서 Sampler를 호출하는 방법을 설명합니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "818a2b3d-3950-4a28-8e37-39959c56484b",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "{/*\n",
        "  DO NOT EDIT THIS CELL!!!\n",
        "  This cell's content is generated automatically by a script. Anything you add\n",
        "  here will be removed next time the notebook is run. To add new content, create\n",
        "  a new cell before or after this one.\n",
        "  */}\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"패키지 버전\">\n",
        "    이 페이지의 코드는 다음 요구 사항을 바탕으로 개발되었습니다.\n",
        "    이 버전 이상을 사용하시기를 권장합니다.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.2\n",
        "    qiskit-ibm-runtime~=0.47.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "64e2e09f-8528-4088-897b-1529b451ab1e",
      "metadata": {},
      "source": [
        "<span id=\"steps-to-use-the-sampler-primitive\" />\n",
        "\n",
        "## 샘플러 프리미티브 사용 방법\n",
        "\n",
        "<span id=\"1-initialize-the-account\" />\n",
        "\n",
        "### 1. 계정 초기화\n",
        "\n",
        "먼저 계정을 초기화해야 합니다. 그런 다음 기대값을 계산하는 데 사용할 QPU를 선택할 수 있습니다.\n",
        "\n",
        "아직 [계](/docs/guides/cloud-setup) 정을 만들지 않으셨다면, ‘ IBM Cloud 계정 설정’ 항목의 단계를 따르세요.\n",
        "\n",
        "<Admonition type=\"note\" title=\"분할 게이트\">\n",
        "  새로 지원되는 [분할 게이트](/docs/guides/fractional-gates) 를 사용하려면, `QiskitRuntimeService` 인스턴스에서 백엔드를 요청할 때 를 `use_fractional_gates=True` 설정하십시오. 예를 들어,\n",
        "\n",
        "  ```python\n",
        "  service = QiskitRuntimeService()\n",
        "  fractional_gate_backend = service.least_busy(use_fractional_gates=True)\n",
        "  ```\n",
        "\n",
        "  이 기능은 실험적인 기능이며, 향후 변경될 수 있습니다.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "b40504d7-aee5-4b30-98b1-265e70bece8d",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import QiskitRuntimeService\n",
        "\n",
        "service = QiskitRuntimeService()\n",
        "backend = service.least_busy(\n",
        "    operational=True, simulator=False, min_num_qubits=127\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "73374fbc-d3b6-4d2d-84c6-edf85b43ea25",
      "metadata": {},
      "source": [
        "<span id=\"2-create-a-circuit\" />\n",
        "\n",
        "### 2. 회로 만들기\n",
        "\n",
        "샘플러 프리미티브의 입력으로 최소한 하나의 회로가 필요합니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "dfe23a34-2ea9-48af-bd1d-c7e3185aa80c",
      "metadata": {},
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "from qiskit.circuit.library import efficient_su2\n",
        "\n",
        "circuit = efficient_su2(127, entanglement=\"linear\")\n",
        "circuit.measure_all()\n",
        "# The circuit is parametrized, so we will define the parameter values for execution\n",
        "param_values = np.random.rand(circuit.num_parameters)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6cf08ef6-34d3-42e6-8cb3-391b60217289",
      "metadata": {},
      "source": [
        "회로와 관측량은 QPU에서 지원하는 명령어만 사용하도록 변환되어야 합니다(이를 *명령어 집합 아키텍처(ISA)* 회로라고 합니다). 이를 위해 트랜스파일러를 사용하세요.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "062bd89b-b13e-46d0-96b6-6c84b2131415",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            ">>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])\n"
          ]
        }
      ],
      "source": [
        "from qiskit.transpiler import generate_preset_pass_manager\n",
        "\n",
        "pm = generate_preset_pass_manager(optimization_level=1, backend=backend)\n",
        "isa_circuit = pm.run(circuit)\n",
        "print(f\">>> Circuit ops (ISA): {isa_circuit.count_ops()}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "cf0f2c0a-8574-45c6-a43b-1a99eac81279",
      "metadata": {},
      "source": [
        "<span id=\"3-initialize-the-ibm-quantum-sampler\" />\n",
        "\n",
        "### 3. IBM Quantum 샘플러 초기화\n",
        "\n",
        "Sampler를 초기화할 때, 매개변수를 `mode` 사용하여 실행할 모드를 지정하십시오.  가능한 값은 각각 배치, 세션, 작업 실행 모드에 해당하는 `batch`, `session`, 또는 객체입니다 `backend` . 자세한 내용은 [‘ IBM Quantum Compute Service 실행 모드 개요’를](/docs/guides/execution-modes) 참조하십시오. Open Plan 사용자는 세션 작업을 제출할 수 없으므로 유의하시기 바랍니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "a2b80dca-dff8-49f9-8154-e2cb0b768507",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import SamplerV2 as Sampler\n",
        "\n",
        "sampler = Sampler(mode=backend)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f35972bf-17d3-40be-852b-9e56615c7c3c",
      "metadata": {},
      "source": [
        "<span id=\"4-invoke-sampler-and-get-results\" />\n",
        "\n",
        "### 4. Sampler를 호출하고 결과를 확인합니다\n",
        "\n",
        "다음으로, `run()` 메서드를 호출하여 출력을 생성합니다. 회로 및 선택적 매개변수 값 집합은 *기본 통합 블록* ( PUB ) 튜플 형태로 입력됩니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "e52e6a96-dc23-4f76-8152-b54514a99dfb",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            ">>> Job ID: dab7lb6rrl7c7386gjgg\n"
          ]
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            ">>> Job Status: QUEUED\n"
          ]
        }
      ],
      "source": [
        "job = sampler.run([(isa_circuit, param_values)])\n",
        "print(f\">>> Job ID: {job.job_id()}\")\n",
        "print(f\">>> Job Status: {job.status()}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "4543fac5-abdc-4440-a1a2-d32aabe135d6",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "First ten results for the 'meas' output register: ['1110001000100100100111011000001001000101010000001100010010110011001100110111100000000110001000011001101000110100101110101010011', '1110101100010101010001010111111011000110011010100101001100110101010010101010101110001010100100000000011110101101011000100000100', '1100110011101000110000000100110111101010110001100010111100001101100001010100111001101010101110000101010001001101010101001000100', '1011001001011000000101010111111010011101001111010100001011110011000101110101011001100110011011110011101010000111001111110110011', '1110111011011111101011110101110101010110011001100110101111100100011101100011011100101100101001001111110101111010101110111111011', '0101001110001110010001010100010111011001000000011110000000000001110000010010101101011001000100000001011011101111010010110111110', '1101101001000100010000110001000101010010101011000011000011001010000111100110010101010110100110011010101100001011100110001111011', '1000110011111111100010101010101111001001100001110111101001100111010101010111110110011000110011010010010000100000100010010010101', '0101010100110011110011010000000100011001111100101100101100101111101110100001101101111010100011011000010011111010001100110000010', '0010000111011100000000110000001110001100010011000100101110111111100011001100011001101010011111111100000000011100101101111010100']\n"
          ]
        }
      ],
      "source": [
        "result = job.result()\n",
        "\n",
        "# Get results for the first (and only) PUB\n",
        "pub_result = result[0]\n",
        "print(\n",
        "    f\"First ten results for the 'meas' output register: \"\n",
        "    f\"{pub_result.data.meas.get_bitstrings()[:10]}\"\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d38dd409-e0d8-4749-bb22-58ae9a53d26a",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## 다음 단계\n",
        "\n",
        "<Admonition type=\"tip\" title=\"권장사항\">\n",
        "  * 양자 컴퓨터에서 실행하기 전에 [로컬 환경에서 테스트하는](local-testing-mode) 방법을 알아보세요.\n",
        "  * 자세한 [예시를](sampler-examples) 살펴보세요.\n",
        "  * IBM Quantum Learning 의 [‘Cost’ 함수](/learning/courses/variational-algorithm-design/cost-functions) 강의를 따라가며 기본형(primitives)을 연습해 보세요.\n",
        "  * [‘트랜스파일’](transpile/) 섹션에서 로컬 환경에서 트랜스파일하는 방법을 알아보세요.\n",
        "  * [‘트랜스파일러 설정 비교’](/docs/guides/circuit-transpilation-settings#compare-transpiler-settings) 가이드를 확인해 보세요.\n",
        "  * [기본 옵션](/docs/guides/runtime-options-overview) 사용법을 알아보세요.\n",
        "  * [샘플러](/docs/api/qiskit-ibm-runtime/options-sampler-options) 옵션에 대한 API를 확인하세요.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}