Guide for the IBM Quantum Developer Certification Exam
ในปี 2021 นี้ เรื่องของ Quantum Computing ไม่ใช่เรื่องไกลตัวอีกต่อไป ด้วยเครื่องมือต่าง ๆ มากมายที่เราสามารถหยิบมาใช้ได้ฟรี รวมถึงความรู้ที่สามารถหาได้ง่ายขึ้น ซึ่งหนึ่งในเครื่องมือที่นิยมใช้กันมากในปัจจุบัน คือ IBM Qiskit
หลังจากที่ผมได้รับ Voucher สอบ IBM Quantum Developer Certification Exam มาจากบทความนี้
ผมเลยเริ่มสนใจเกี่ยวกับตัวข้อสอบนี้ขึ้นมา และ ได้ไปสอบมา ซึ่งคิดว่าเป็นประสบการณ์ที่น่าสนใจ เลยอยากจะมาแชร์ให้กับเพื่อน ๆ ที่อยากจะไปสอบ ได้เตรียมตัวกัน
Qiskit
Qiskit เป็น Open-source SDK สำหรับการเขียนโปรแกรมบน Quantum Computer ของ IBM ทำให้เราสามารถ สร้าง Quantum Circuit ใช้งาน Quantum Hardware พัฒนา Quantum Algorithms รวมถึงการศึกษาเกียวกับการจัดการ Noise ต่าง ๆ
ซึ่ง Qiskit เป็นหนึ่งในเครื่องมือยอดนิยม เนื่องจากมี Library บนภาษา Python รวมถึงมี Resource สำหรับการศึกษาที่เยอะ และ เข้าใจง่าย ทำให้นักพัฒนาจากสายงาน Computer สามารถศึกษาได้ง่าย
IBM Quantum Developer Certification
เมื่อ 30 มีนาคม 2564 ที่ผ่านมา ทาง IBM ได้มีการประกาศเปิดตัว IBM Quantum Developer Certification — the first-ever certification program for quantum computing ซึ่งเป็น Certification สำหรับการใช้งาน Qiskit ในการ สร้าง และ ใช้งาน Quantum Program บน Quantum Compute ซึ่งมีการให้สมัครเพื่อสอบได้ฟรีในช่วงแรกด้วย
Exam
ในส่วนของข้อสอบนั้น เราสามารถสมัครได้ทาง IBM Professional Certification Program — C1000–112 : Fundamentals of Quantum Computation Using Qiskit v0.2X Developer ซึ่งการสอบจะเป็นการสอบบนระบบของ PearsonVUE เป็นเวลา 90 นาที ในลักษณะ ข้อกา แบบ Closed Book ไม่สามารถค้นหาใน Internet หรือลองเขียนโค๊ดดูได้ แต่ในระบบ PearsonVUE จะมี Whiteboard ให้สามารถใช้ mouse เขียนทดเลขได้บ้าง แนะนำว่าสำหรับคนที่ไม่เคยสอบด้วยระบบของ PearsonVUE ให้ลอง Test การใช้งานระบบดูด้วย ไม่งั้นอาจจะงงได้
ในตัวข้อสอบจะมีการวัดความเข้าใจใน 10 หัวข้อด้วยกัน
Perform Operations on Quantum Circuits
ซึ่งจะมีหัวข้อย่อยดังนี้
- Construct multi-qubit quantum registers : เกี่ยวกับการ Define ตัว Quantum Circuit ขึ้นมา แนะนำให้ศึกษาเกี่ยวกับ Syntax และขั้นตอนในการกำหนด Circuit แบบต่าง ๆ ว่าลำดับการกำหนด รวมถึง Parameter มีอะไรบ้าง qiskit.circuit.QuantumCircuit — Qiskit 0.28.0 documentation
- Measure quantum circuits in classical registers : เกี่ยวกับการวัดทาง Quantum ซึ่งในส่วนนี้แนะนำให้ดู Syntax และ ดูผลลัพท์ของ Measurement ว่าจะได้ผลลัพท์อย่างไรออกมา Lab 2. Quantum Measurement (qiskit.org)
- Use single-qubit gates : เกี่ยวกับตัว Single Qubit Gates ทั้งหมดที่มีใน Qiskit สิ่งที่ควรจะจำได้คือ 1. แต่ละ Gate จะทำการ Transform State ไปในทิศทางไหนเมื่อใช้ใน Qiskit เช่น X gate ถ้ามองจากด้านหน้าของ Bloch Sphere จะหมุน State ทวนเข็มนาฬิกาไป 180 องศาตามแกน X 2. ในแต่ละ Gate เราสามารถใช้ Gate อื่นตัวใดบ้างมาประกอบกันเป็น Gate นี้ เช่น X = HZH 3. ใน Gate ใดที่มีความสัมพันธ์กันบ้าง เช่น Z, S, T Gate เป็นกรณีหนึ่งของ P Gate เท่านั้น 4. ถ้าจะให้ดีควรจะจำ Matrix ของ แต่ละ Gate ได้ด้วย และ อย่าลืมดู Syntax ในการกำหนด Gate ต่าง ๆ Single Qubit Gates (qiskit.org)
- Use multi-qubit gates : เกี่ยวกับการใช้งาน Gate กับ Multiple Qubits ทั้ง Multiple Qubits Gates และ Single Qubit Gate with Multiple Qubits ซึ่งควรจะศึกษาเกี่ยวกับหน้าที่ของ Multiple Qubits Gates ทั้งหมดใน Qiskit รวมถึง Matrix ของมันด้วย และ ควรจะรู้วิธีการคำนวน Matrix เมื่อนำหลาย ๆ Single Qubit Gates มารวมกันเป็น Multiple Qubits Gate Multiple Qubits and Entangled States (qiskit.org)
- Use barrier operations : หัวข้อย่อยนี้จะเกี่ยวกับการใช้งาน Barrier Operator ควรจะศึกษาเกี่ยวกับ Syntax และ หน้าที่ของมัน qiskit.circuit.library.Barrier — Qiskit 0.28.0 documentation
- Return the circuit depth : เกี่ยวกับเรื่องการคำนวน Circuit Depth ควรศึกษาวิธีการคำนวน และ Syntax How to calculate the depth of a quantum circuit in Qiskit? | by Arnaldo Gunzi | Arnaldo Gunzi Quantum | Medium
- Extend quantum circuits : เกี่ยวกับการเชื่อมต่อ Quantum Circuit หลาย ๆ Circuit เข้าด้วยกัน แนะนำให้ลองศึกษา Syntax How can I combine two quantum circuits? 1 Minute Qiskit — YouTube
- Return the OpenQASM string for a circuit : เกี่ยวกับการใช้งาน QASM ซึ่งศึกษาได้จาก How can I convert a quantum circuit to and from QASM? 1 Minute Qiskit — YouTube
Executing Experiments
หัวข้อนี้จะเกี่ยวกับการ Execute Circuit ของเรา ซึ่งควรจะศึกษาใน Document ว่า Function นี้สามารถทำอะไรได้บ้าง Executing Experiments (qiskit.execute_function) — Qiskit 0.28.0 documentation นอกจากนี้ยังควรดูเกี่ยวกับ Arguments ต่าง ๆ ที่เราสามารถใส่ได้ ว่าแต่ละ Argument มีความหมายว่าอะไร และ ผลลัพท์ของ Execute ที่ได้เป็น BaseJob นั้นสามารถนำไปทำอะไรได้บ้าง qiskit.providers.BaseJob — Qiskit 0.28.0 documentation
Implement BasicAer: Python-based Simulators
เกี่ยวกับหนึ่งใน Backend ของ Qiskit ที่ชื่อว่า BasicAer ซึ่งภายในจะมี Simulator สำหรับการ Execute Quantum Circuit ของเราอยู่หลายแบบด้วยกัน โดยเราต้องศึกษาว่าในแต่ละ Simulator จะให้ผลลัพท์ออกมาในลักษณะใดบ้าง BasicAer: Python-based Simulators (qiskit.providers.basicaer) — Qiskit 0.28.0 documentation และผลลัพท์ที่ได้จากแต่ละ Simulator สามารถนำไปใช้งานอย่างไรได้บ้าง
Implement Qasm
QASM หรือ Quantum Assembly Language เป็นภาษาที่ใช้บน Quantum Computer ของ IBM ซึ่งเราไม่จำเป็นต้องศึกษาถึง Syntax ของ QASM แต่ให้ศึกษาเกี่ยวกับ วิธีการทำงานของ OpenQASM และ วิธีการ Create QASM files จาก Quantum Circuit และการ Read QASM files GitHub — Qiskit/openqasm: Quantum assembly language for extended quantum circuits
Compare and Contrast Quantum Information
ซึ่งจะมีหัวข้อย่อยดังนี้
- Use operators : เกี่ยวกับ วิธีการใช้ Operator ต่าง ๆ ใน Qiskit ทั้ง Syntax และ ผลลัพท์ของ Operator นั้น ๆ Operators — Qiskit 0.28.0 documentation รวมถึงควรจะศึกษาเกี่ยวกับ Extension บน Qiskit ว่า แต่ละ Extension ใช้ทำอะไรบ้าง Quantum Circuit Extensions (qiskit.extensions) — Qiskit 0.28.0 documentation
- Measure fidelity : เกี่ยวกับ ค่า Fidelity ซึ่งควรจะศึกษาให้รู้ว่า Fidelity คืออะไร และ ใน Qiskit เราสามารถวัด Fidelity แบบไหนได้บ้าง Quantum Information (qiskit.quantum_info) — Qiskit 0.28.0 documentation
Return the Experiment Results
ซึ่งจะมีหัวข้อย่อยดังนี้
- Return the histogram data of an experiment : ให้จำว่าขั้นตอนในการที่จะได้ผลลัพท์ของ Quantum Circuit เป็น Histogram จะต้องทำอย่างไรบ้าง qiskit.visualization.plot_histogram — Qiskit 0.28.0 documentation
- Return the statevector of an experiment : เกี่ยวกับขั้นตอนในการได้ผลลัพท์ออกมาเป็น Statevector รวมถึงเรื่องของ Statevector Object qiskit.quantum_info.Statevector — Qiskit 0.28.0 documentation
- Return the unitary of an experiment : เกี่ยวกับขั้นตอนในการได้ผลลัพท์ออกมาเป็น Density Matrix รวมถึงเรื่องของ DennsityMatrix Object qiskit.quantum_info.DensityMatrix — Qiskit 0.28.0 documentation
Use Qiskit Tools
เป็นเนื้อหาเกี่ยวกับ Monitor the status of a job instance ซึ่งเป็นวิธีการใช้ Function ต่าง ๆ ใน Job ของ Qiskit ว่ามี Method ที่ใช้ในการทำอะไรได้บ้าง Job (qiskit.providers.ibmq.job) — Qiskit 0.28.0 documentation
Display and Use System Information
ซึ่งจะมีหัวข้อย่อยดังนี้
- Perform operations around the Qiskit version : หัวนี้เกี่ยวกับเรื่องSyntax ของการการดู Qiskit version ว่าทำได้อย่างไรในภาษา Python
- Use information gained from qiskit_backend_overview : เกี่ยวกับการดู Qiskit Backend Overview ว่ามี Syntax อย่างไร และ มีข้อมูลอะไรที่สามารถดูได้บ้าง
Construct Visualizations
ในเรื่องของ Visualizations จะเป็นวิธีการแสดงผลลัพท์ของ Quantum State แบบต่าง ๆ ซึ่งจะต้องดู Syntax ของ Function ต่าง ๆ ว่ามี Plot รูปแบบใดบ้าง และ จะใช้ต้องให้ State Input อยุ่ในรูปแบบใด Visualizations (qiskit.visualization) — Qiskit 0.28.0 documentation
ซึ่งจะมีหัวข้อย่อยดังนี้
- Draw a circuit : วิธีการ Visualize Quantum Circuit ทำได้อย่างไร และ สามารถ Visualize ใน Format ใดได้บ้าง มี Parameter อะไรบ้าง Visualizing a Quantum Circuit — Qiskit 0.28.0 documentation
- Plot a histogram of data : ถ้าจะ Plot Histogram จากผลลัพท์ของ Quantum State สามารถทำได้อย่างไรบ้าง qiskit.visualization.plot_histogram — Qiskit 0.28.0 documentation
- Plot a Bloch multivector : การ Plot Bloch Multivector ได้ผลลัพท์เป็นอะไร และ ต้องมี Input เป็นอะไร qiskit.visualization.plot_bloch_multivector — Qiskit 0.28.0 documentation
- Plot a Bloch vector : การ Plot Bloch Vectorได้ผลลัพท์เป็นอะไร และ ต้องมี Input เป็นอะไร qiskit.visualization.plot_bloch_vector — Qiskit 0.28.0 documentation
- Plot a QSphere : การ Plot QSphere ได้ผลลัพท์เป็นอะไร และ ต้องมี Input เป็นอะไร qiskit.visualization.plot_state_qsphere — Qiskit 0.28.0 documentation
- Plot a density matrix : การ Plot Density Matrix ได้ผลลัพท์เป็นอะไร และ ต้องมี Input เป็นอะไร qiskit.visualization.plot_state_hinton — Qiskit 0.28.0 documentation
- Plot a gate map with error rates : การ Plot Gate Map คืออะไร ได้ผลลัพท์เป็นอะไร และ ต้องมี Input เป็นอะไร qiskit.visualization.plot_gate_map — Qiskit 0.28.0 documentation
Access Aer Provider
Aer Provider จะมี Backend อยู่หลายตัวด้วยกัน ซึ่งจะมีหัวข้อย่อยดังนี้
- Assess a statevector_simulator backend
- Assess a qasm_simulator backend
- Assess a unitary_simulator backend
โดยทั้ง 3 ตัวให้ศึกษาจาก Aer Provider (qiskit.providers.aer) — Qiskit 0.28.0 documentation ว่าแต่ละ Backend จะให้ผลลัพท์ในการ Run เป็นอะไร และ สามารถกำหนด Backend ได้อย่างไรบ้าง
Conclusion
เนื้อหา และ การเตรียมตัวทั้งหมดของ IBM Quantum Developer Certification Exam ก็จะมีประมาณนี้ ซึ่งนอกจากเนื้อหาข้างต้นที่ได้บอกไป ก็ควรที่จะมีความรู้เกี่ยวกับ ทฤษฎี Quantum พื้นฐานอยู่ด้วย โดยสามารถศึกษาจาก Resources อื่น ๆ เพิ่มเติม ทั้ง Sample Exam และ ทฤษฎี Quantum ได้ตาม Link ด้านล่าง