เริ่มต้นใช้งานบัญชี Qiskit Runtime service
ก่อนใช้งาน Qiskit Runtime ต้องเริ่มต้น (สร้าง instance) บัญชีก่อนโดยส่ง (โหลด) credentials ซึ่ง credentials เหล่านี้สามารถส่งด้วยตนเองทุกครั้งที่เริ่มต้น Qiskit Runtime service หรือบันทึกไว้เพื่อใช้ซ้ำได้
- หากใช้คอมพิวเตอร์สาธารณะหรือสภาพแวดล้อมที่ไม่น่าเชื่อถือ ให้ทำตามคำแนะนำใน เริ่มต้นบริการในสภาพแวดล้อมที่ไม่น่าเชื่อถือ แทน
- ทำตาม คำแนะนำเหล่านี้ หากต้องการเชื่อมต่อโดยใช้ REST API แทนการใช้ Qiskit
- หากจำเป็น ใช้ ข้อมูลนี้ เพื่อตั้งค่า firewall ให้สามารถเข้าถึง IBM Quantum API endpoints ได้
ก่อนเริ่มต้น
ตรวจสอบให้แน่ใจว่าได้ดำเนินการขั้นตอนเหล่านี้แล้ว:
- ตรวจสอบว่าเป็นสมาชิกของบัญชี IBM Cloud ดู ตั้งค่าบัญชี IBM Cloud สำหรับคำแนะนำ
- สร้าง (หรือมีสิทธิ์เข้าถึง) อย่างน้อยหนึ่ง instance ทำตามขั้นตอนเหล่านี้เพื่อตรวจสอบ:
- เข้าสู่ระบบ IBM Quantum Platform
- ตรวจสอบให้แน่ใจว่าเลือกบัญชีและภูมิภาคที่ถูกต้องใน account switcher ในส่วนหัว
- หากมี instance แสดงอยู่หนึ่งหรือมากกว่า ขั้นตอนนี้เสร็จสิ้นแล้ว มิฉะนั้น สร้าง instance
- ตรวจสอบว่ากำลังทำงานในสภาพแวดล้อม Python ที่ใช้งานอยู่โดยติดตั้ง Qiskit SDK และ Qiskit Runtime แล้ว
- เปิดใช้งาน Python virtual environment และรัน Python ใน virtual environment นั้น
ค้นหา access credentials
- ค้นหา API key (เรียกอีกชื่อว่า API token) จาก dashboard สร้าง API key แล้วคัดลอกไปยังตำแหน่งที่ปลอดภัยเพื่อใช้สำหรับการยืนยันตัวตน token จะไม่แสดงอีกครั้ง โปรดทราบว่าสามารถใช้ API key เดียวเชื่อมต่อกับทุกภูมิภาคได้
- (ไม่บังคับ) ค้นหา instance ที่ต้องการใช้จากหน้า Instances วางเมาส์เหนือ CRN แล้วคลิกไอคอนเพื่อคัดลอก จากนั้นบันทึกไว้ในตำแหน่งที่ปลอดภัยเพื่อใช้ระบุ instance
เชื่อมต่อ Qiskit กับ Qiskit Runtime service instance
คำแนะนำเหล่านี้ออกแบบสำหรับ qiskit_ibm_runtime v0.42 หรือใหม่กว่า บางฟีเจอร์ไม่รองรับในเวอร์ชันก่อนหน้าของ qiskit_ibm_runtime ในกรณีเหล่านี้ ควรระบุค่าสำหรับ channel, token และ instance เสมอ ไม่ว่าจะเป็นแบบชัดเจนหรือผ่าน saved account
โค้ดพื้นฐานสำหรับเชื่อมต่อ Qiskit กับ Qiskit Runtime service instance มีดังนี้ อย่างไรก็ตาม มีหลายวิธีในการปรับแต่ง QiskitRuntimeService options ตามความต้องการ ซึ่งอธิบายในส่วนถัดไป
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(channel=<channel>,
# For `token`, use the 44-character API_KEY you created
# and saved from the IBM Quantum Platform dashboard
token=<your-API_KEY>,
instance=<instance_CRN>)
channel เริ่มต้นคือ ibm_quantum_platform เนื่องจากนี่คือ channel ที่เหมาะสมเกือบเสมอ จึงไม่ได้รวมไว้ในตัวอย่าง
เส้นทางเริ่มต้นด่วน: ระบุ credentials อย่างชัดเจน
วิธีที่เร็วที่สุดในการเริ่มใช้งาน QiskitRuntimeService instance คือวิธี direct instantiation: ระบุ API token (key) และ CRN (instance identifier) อย่างชัดเจนทุกครั้งที่ต้องการเริ่มต้น Qiskit Runtime service ดู ค้นหา access credentials หากจำเป็น
from qiskit_ibm_runtime import QiskitRuntimeService
# For `token`, use the 44-character API_KEY you created
# and saved from the IBM Quantum Platform dashboard
service = QiskitRuntimeService(token=<cloud_api_key>,
instance=<instance_CRN>)
วิธีนี้เชื่อถือได้แต่อาจยุ่งยากหากต้องโหลดรายละเอียดเดิมซ้ำหลายครั้ง เพื่อหลีกเลี่ยงการโหลด credentials หลายครั้ง หากทำงานในสภาพแวดล้อม Python ที่เชื่อถือได้ (เช่น บน laptop หรือ workstation ส่วนตัว) สามารถใช้ saved account credentials ตามที่อธิบายในส่วนถัดไปได้
แม้ว่าพารามิเตอร์ input instance จะเป็นตัวเลือก แต่แนะนำให้ระบุข้อมูลนี้เสมอ เว้นแต่ต้องการใช้ service เดียวเพื่อทำงานกับหลาย instances ในกรณีนี้ ดูส่วน การเลือก instance อัตโนมัติ
เส้นทางเริ่มต้นด่วน: ระบุ saved credentials
หากบันทึก credentials ไว้แล้ว ใช้โค้ดต่อไปนี้เพื่อใช้ default credentials สำหรับคำแนะนำในการบันทึก credentials ดู บันทึก access credentials
from qiskit_ibm_runtime import QiskitRuntimeService
# run every time you need the service
service = QiskitRuntimeService()
...
หากตั้งชื่อ credentials หนึ่งชุดหรือมากกว่า — เช่น สำหรับ open และ premium access — ใช้โค้ดต่อไปนี้เพื่อใช้ชุด credentials ที่มีชื่อ
from qiskit_ibm_runtime import QiskitRuntimeService
# run every time you need the service
service = QiskitRuntimeService(name="<name_of_saved_credentials>")
...
ข้อควรพิจารณาเมื่อโหลด saved credentials
-
หากเริ่มต้น service ด้วย
tokenและnametokenจะถูกละเว้นและโหลดรายละเอียดที่บันทึกไว้จากบัญชีnameในตัวอย่างต่อไปนี้ service โหลดรายละเอียดจาก
account_Aและไม่ใช้token_B:from qiskit_ibm_runtime import QiskitRuntimeServiceservice = QiskitRuntimeService(token="token_B", name="account_A") -
หากระบุ
nameและinstanceเมื่อเริ่มต้น service service จะพยายามโหลดบัญชีnameและ เชื่อมต่อกับinstanceที่ระบุ หากมีความขัดแย้ง จะมีการแจ้งเตือนในตัวอย่างต่อไปนี้ service พยายามโหลด credentials ของ
account_Aและใช้ instanceCRN_B— แม้จะมี instance ที่แตกต่างระบุอยู่ในaccount_A:from qiskit_ibm_runtime import QiskitRuntimeServiceservice = QiskitRuntimeService(instance="CRN_B", name="account_A") -
service พยายามโหลด default saved account เฉพาะเมื่อไม่ได้ระบุ
tokenหรือnameเมื่อเริ่มต้น service อย่างไรก็ตาม หากระบุinstanceอย่างชัดเจน service จะพยายามเชื่อมต่อกับ instance นั้นโดยใช้ default credentials หากมีความขัดแย้ง จะมีการแจ้งเตือนในตัวอย่างต่อไปนี้ service พยายามโหลด default credentials และใช้ instance
CRN_B— แม้จะมี instance ที่แตกต่างระบุอยู่ใน default account:from qiskit_ibm_runtime import QiskitRuntimeServiceservice = QiskitRuntimeService(instance="CRN_B") -
หากบันทึก credentials หลายชุดแต่ไม่ระบุชุดใดเมื่อเริ่มต้น service และไม่มี default saved account ชุดที่ชื่อมาเป็นลำดับสุดท้ายตามลำดับตัวอักษรจะถูกใช้
ในตัวอย่างต่อไปนี้ ผู้ใช้บันทึกบัญชีชื่อ "my_premium" และ "my_open" แต่ไม่ได้ทำเครื่องหมายชุดใดเป็น default จากนั้นเริ่มต้น service โดยใช้โค้ดต่อไปนี้ ในกรณีนี้ จะใช้ credentials "my_premium":
from qiskit_ibm_runtime import QiskitRuntimeServiceservice = QiskitRuntimeService() -
หากได้รับข้อผิดพลาด "401 Unauthorized" อย่างต่อเนื่อง อาจกำลังพยายามใช้ bearer token แทน API key
เลือก instance อัตโนมัติ
หากระบุ token แต่ ไม่ระบุ instance CRN เมื่อสร้าง service instance QiskitRuntimeService จะยืนยันตัวตนกับบัญชีที่ระบุโดย token และใช้การเลือก instance อัตโนมัติเพื่อเลือก instance ที่เหมาะสมที่สุดสำหรับงานที่ร้องขอ หากมี instances หลายตัวในบัญชี service จะเลือกจาก instances ที่มีอยู่โดยอัตโนมัติ ขึ้นอยู่กับทรัพยากรที่ร้องขอและ QiskitRuntimeService options เหล่านี้ (หากตั้งไว้): plans_preference, region, tags
plans_preference: ประเภทของแผน instance ที่ต้องการจัดลำดับความสำคัญ ตัวอย่างเช่น หากส่ง [open] เข้าไป จะมีเฉพาะ Open Plan instances เท่านั้น ค่าที่ยอมรับคือopen,premium,pay-as-you-go,flexและon-premหากไม่ระบุplans_preferenceแผนฟรีจะถูกจัดลำดับความสำคัญก่อนแผนที่ต้องเสียเงินregion: ภูมิภาคของ instance ค่าที่ยอมรับคือus-eastและeu-detags: tags ของ instance รับรายการ tag name strings
สามารถตั้งค่า saved credentials เพื่อเลือก instance อัตโนมัติได้
instance ถูกค้นหาและใช้ในลำดับนี้:
- หากบัญชีของคุณมีสิทธิ์เข้าถึงเพียงหนึ่ง instance จะถูกเลือกโดยอัตโนมัติ
- หากกำลังใช้ saved credentials และระบุ instance ไว้กับ credentials นั้น instance นั้นจะถูกใช้ ดู ข้อควรพิจารณาเมื่อโหลด saved credentials
- หากบัญชีของคุณมีหลาย instances ที่สามารถเข้าถึง QPU ที่ร้องขอ ระบบจะใช้ plan preferences ที่ระบุเพื่อเลือกแผนและ instance สำหรับ Qiskit Runtime v0.42 และใหม่กว่า แผนฟรีจะถูกจัดลำดับความสำคัญโดยค่าเริ่มต้น
- หากบัญชีของคุณมีสิทธิ์เข้าถึงหลาย instances แต่มีเพียงหนึ่งที่สามารถเข้าถึง QPU ที่ร้องขอ instance ที่มีสิทธิ์เข้าถึงจะถูกเลือก หาก instance นี้ไม่เกี่ยวข้องกับแผนฟรี จะมีค่าใช้จ่ายเกิดขึ้น
ตัวอย่าง
ในตัวอย่างนี้ service ค้นหา instances ทั้งหมดที่มีให้กับบัญชีเพื่อหาตัวที่สามารถเข้าถึง Backend ที่ระบุ:
service = QiskitRuntimeService(token=<your-API_KEY>)
ในตัวอย่างนี้ service ค้นหา instances ทั้งหมดที่มีให้กับบัญชีในภูมิภาค EU เพื่อหาตัวที่สามารถเข้าถึง Backend ที่ระบุ:
service = QiskitRuntimeService(token=<your-API_KEY>, region="eu-de")
ในตัวอย่างนี้ service ค้นหา instances ทั้งหมดที่มีให้กับบัญชีและมี tag services เพื่อหาตัวที่สามารถเข้าถึง Backend ที่ระบุ:
service = QiskitRuntimeService(token=<your-API_KEY>, tags=['services'])
ในตัวอย่างนี้ service ค้นหา instances ทั้งหมดแบบ premium และ open ที่มีให้กับบัญชีเพื่อหาตัวที่สามารถเข้าถึง Backend ที่ระบุ หาก Backend อยู่ทั้งใน Premium และ Open Plan instance จะจัดลำดับความสำคัญ Premium Plan instance เพราะ premium ระบุอยู่ก่อนใน plans_preference
service = QiskitRuntimeService(token=<your-API_KEY>,
plans_preference=['premium', 'open'])
ตรวจสอบว่าเลือก instance ใด
instance ที่เลือกจะถูกส่งคืนเป็นการแจ้งเตือน นอกจากนี้ สามารถรัน service.active_instance() เพื่อตรวจสอบ active instance ได้
การทดสอบภายในเครื่องด้วย Qiskit Runtime
คลาส QiskitRuntimeService สามารถเริ่มต้นด้วย channel=local เพื่อทำ local simulation ในกรณีนี้ไม่จำเป็นต้องยืนยันตัวตนและไม่ต้องระบุค่าสำหรับ token หรือ instance ดังนั้นจึงไม่แนะนำให้บันทึก local account แต่ให้ใช้ direct instantiation แทน:
from qiskit_ibm_runtime import QiskitRuntimeService
# Initialize for local testing
service = QiskitRuntimeService(channel="local")
ขั้นตอนต่อไป
- สร้างและจัดการ instances
- เริ่มต้นบริการในสภาพแวดล้อมที่ไม่น่าเชื่อถือ
- ตั้งค่าเพื่อใช้ IBM Quantum Platform ด้วย REST API
- ทำตามขั้นตอนใน Hello world เพื่อเขียนและรัน quantum program