แนะนำการ Transpilation
Transpilation คือกระบวนการเขียน Circuit input ที่กำหนดให้มาใหม่ ให้ตรงกับ topology ของอุปกรณ์ควอนตัมนั้น ๆ และเพิ่มประสิทธิภาพ instruction ใน Circuit สำหรับการรันบนคอมพิวเตอร์ควอนตัมที่มีสัญญาณรบกวน เอกสารนี้ครอบคลุมเครื่องมือและ workflow สำหรับ transpilation แบบ local ที่ผู้ใช้ Qiskit ทุกคนสามารถใช้ได้ หากคุณใช้ Primitive และสนใจเฉพาะตัวเลือก transpilation เริ่มต้นที่ IBM Quantum Compute Service ให้ไว้ อ่านหัวข้อ Error mitigation and suppression techniques
กระบวนการ transpilation รับ Circuit ที่มี instruction ของคุณ:
จากนั้น Transpilation แปลง Circuit ให้ใช้เฉพาะ instruction ที่มีบน Backend ที่เลือก และเพิ่มประสิทธิภาพ instruction เหล่านั้นเพื่อลดผลกระทบของสัญญาณรบกวน:
องค์ประกอบสำคัญของ Qiskit SDK คือ transpiler ซึ่งออกแบบมาเพื่อความเป็นโมดูลและความสามารถในการขยาย การใช้งานหลักคือการเขียนการแปลง Circuit ใหม่ (เรียกว่า transpiler passes) และรวมเข้ากับ pass ที่มีอยู่แล้ว ซึ่งช่วยลดความลึกและความซับซ้อนของ Circuit ควอนตัมได้อย่างมาก pass ใดถูกเชื่อมโยงเข้าด้วยกันและในลำดับใดมีผลอย่างมากต่อผลลัพธ์สุดท้าย pipeline นี้ถูกกำหนดโดยออบเจ็กต์ PassManager และ StagedPassManager StagedPassManager ทำหน้าที่ควบคุมการทำงานของ PassManagers หนึ่งตัวหรือมากกว่า และกำหนดลำดับที่ถูกดำเนินการ ในขณะที่ออบเจ็กต์ PassManager เป็นเพียงชุดรวมของ pass หนึ่งตัวหรือมากกว่า ลองนึกภาพ StagedPassManager เป็นเหมือนวาทยกรในวงออร์เคสตรา PassManagers เป็นเหมือนกลุ่มเครื่องดนตรีต่าง ๆ และออบเจ็กต์ Pass เป็นเหมือนนักดนตรีแต่ละคน ด้วยวิธีนี้ คุณสามารถสร้าง Circuit ควอนตัมที่มีประสิทธิภาพด้านฮาร์ดแวร์ ซึ่งช่วยให้คุณรัน utility-scale work ได้ในขณะที่ยังควบคุม noise ได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับ pass manager stage ในหัวข้อ Transpiler stages
สถาปัตยกรรมชุด Instruction
นอกเหนือจากการลดความลึกและความซับซ้อนของ Circuit ควอนตัม Transpiler ยังออกแบบมาเพื่อแปลง instruction ที่มีอยู่ใน QuantumCircuit ที่กำหนดให้เป็นไปตาม Instruction Set Architecture (ISA) ของ Backend เฉพาะ Circuit ที่เป็นไปตาม ISA ประกอบด้วยเฉพาะ instruction ที่ Backend รองรับผ่าน Target ของฮาร์ดแวร์ เช่น basis gate ที่มีของฮาร์ดแวร์ การวัด การ reset และการดำเนินการ control flow และเป็นไปตามข้อจำกัดที่ระบุโดย connectivity ของฮาร์ดแวร์ นั่นคือ CouplingMap ของ target เมื่อส่งงานไปยัง IBM Quantum® Backend Circuit ต้องเป็นไปตาม ISA ของ Backend
ขั้นตอนของ Transpiler
pipeline Transpiler ที่สร้างไว้ล่วงหน้าของ Qiskit ประกอบด้วยหกขั้นตอนพื้นฐาน:
-
init- pass นี้รัน pass เบื้องต้นที่จำเป็นก่อนที่ Circuit จะถูกฝัง โดยทั่วไปจะเกี่ยวข้องกับการคลี่ instruction แบบกำหนดเองและแปลง Circuit เป็นเกต 1 คิวบิตและ 2 คิวบิตทั้งหมด ตามค่าเริ่มต้น จะตรวจสอบความถูกต้องของ instruction ใน Circuit และแปล multi-qubit gate เป็นเกต 1 คิวบิตและ 2 คิวบิต -
layout- pass นี้ใช้ layout โดยแมป Qubit เสมือนใน Circuit ของคุณกับ Qubit ทางกายภาพของ QPU -
routing- pass นี้รันหลังจากมีการใช้ layout และจะฉีด Gate (คือ SWAP) ลงใน Circuit เดิมเพื่อให้เข้ากันได้กับ connectivity ของ QPU (coupling map) -
translation- pass นี้แปล Gate ใน Circuit เป็นชุด instruction basis set ของ QPU -
optimization- pass นี้รัน optimization loop เพื่อหา decomposition ที่มีประสิทธิภาพมากขึ้นของ Circuit ควอนตัมจนกว่าจะตรงตามเงื่อนไข (เช่น ความลึกที่กำหนด) -
scheduling- ขั้นตอนนี้ใช้กับ scheduling pass ที่คำนึงถึงฮาร์ดแวร์ ถ้าผู้ใช้ระบุวิธี scheduling ขั้นตอนนี้จะคำนึงถึงเวลาที่ว่างทั้งหมดใน Circuit
ถ้าคุณปรับแต่ง workflow transpilation ให้ใช้ขั้นตอนเหล่านี้เป็นแนวทางระหว่างการพัฒนา
Transpile ด้วย Pass Manager
วิธีที่แนะนำในการ transpile Circuit คือสร้าง staged pass manager แล้วรัน method run ด้วย Circuit ของคุณเป็น input คุณสามารถใช้ฟังก์ชัน generate_preset_pass_manager เพื่อสร้าง staged pass manager ที่มีค่าเริ่มต้นที่สมเหตุสมผล
ผู้ใช้ขั้นสูงสามารถปรับแต่งชุดออบเจ็กต์ PassManager และ StagedPassManager และกำหนดลำดับที่แต่ละขั้นตอนรัน ซึ่งสามารถเปลี่ยน Circuit output สุดท้ายได้อย่างมาก ในความเป็นจริง แนวทางแบบกำหนดเองในการ transpile อัลกอริทึมควอนตัมมักให้การระงับข้อผิดพลาดที่มีประสิทธิภาพมากกว่าแนวทางเริ่มต้น แนวทางแบบกำหนดเองเกี่ยวข้องกับการเขียน Circuit ควอนตัมใหม่ให้ตรงกับข้อจำกัดของฮาร์ดแวร์และระงับผลกระทบของสัญญาณรบกวน การไหลของตรรกะสำหรับ toolchain นี้ปรับแต่งได้และไม่จำเป็นต้องเป็นแบบเส้นตรง กระบวนการ transpilation สามารถเตรียม iterative loop สาขาเงื่อนไข และพฤติกรรมที่ซับซ้อนอื่นๆ จุดเริ่มต้นที่ดีเมื่อพัฒนาชุด pass แบบกำหนดเองคือการตรวจสอบลำดับการแปลงเริ่มต้น
สำหรับภาพรวมของการ transpile โดยใช้ pass manager ดู Transpile with pass managers
Transpilation เริ่มต้น
สำหรับวิธีการ "out-of-the-box" ที่ง่ายกว่าแต่ปรับแต่งได้น้อยกว่าในการใช้ Transpiler ให้ใช้ฟังก์ชัน qiskit.compiler.transpile ฟังก์ชันนี้สร้างและรันออบเจ็กต์ StagedPassManager ที่ preset ไว้ตามตัวเลือกต่างๆ รวมถึง flag optimization_level ที่ตั้งได้เป็น 0, 1, 2 หรือ 3 ระดับที่สูงขึ้นสร้าง Circuit ที่เพิ่มประสิทธิภาพมากขึ้นแลกกับเวลา transpilation ที่นานขึ้น
ขั้นตอนถัดไป
- หากต้องการเรียนรู้วิธีใช้ฟังก์ชัน
generate_preset_passmanagerเริ่มต้นด้วยหัวข้อ Transpilation default settings and configuration options - เรียนรู้ต่อเกี่ยวกับ transpilation ด้วยหัวข้อ Transpiler stages
- ลองใช้คู่มือ Compare transpiler settings
- ลองทำตัวอย่าง end-to-end ที่ใช้ Circuit ที่ transpile แล้วใน tutorial Ground-state energy estimation of the Heisenberg chain with VQE
- ดู เอกสาร Transpile API
- เรียนรู้ วิธี transpile Circuit