আপনি কীভাবে ডি-ওয়েভ ডিভাইসের জন্য একটি সাধারণ প্রোগ্রাম লিখবেন?


27

আমি জানতে চাই যে কীভাবে ডি-ওয়েভ ডিভাইসের জন্য কোনও কোড কোডে লেখা হয় এবং ডিভাইসে জমা দেওয়া হয়।

উত্তরে একটি সাধারণ সমস্যার জন্য এর নির্দিষ্ট উদাহরণটি দেখা ভাল হবে। আমি অনুমান করি যে ডি-ওয়েভ ডিভাইসের "হ্যালো ওয়ার্ল্ড" একটি সাধারণ 2 ডি ইসিং মডেলের গ্রাউন্ড স্টেটগুলি সন্ধান করার মতো কিছু হবে , যেহেতু এটিই ধরণের সমস্যাটি সরাসরি হার্ডওয়্যার দ্বারা উপলব্ধি করা। সুতরাং সম্ভবত এটি দেখতে একটি চমৎকার উদাহরণ হবে। তবে দক্ষতার জিনিসগুলি যদি বিকল্প বিকল্প উপযুক্ত হয়, আমি বিকল্প দেখতে পেরে খুশি হব।

উত্তর:


24

ডি-ওয়েভ ওয়ার্ল্ডের 'হ্যালো ওয়ার্ল্ড' সমতুল্য 2D চেকবোর্ডের উদাহরণ। এই উদাহরণে, আপনাকে 4 টি নোড সহ নিম্নলিখিত বর্গ গ্রাফ দেওয়া হবে:

                                                  square_graph

আসুন আমরা নির্ধারণ করি যে আমরা color কালো যদি এবং সাদা যদি রঙ । লক্ষ্যটি হ'ল গ্রাফের চারটি শীর্ষে একটি চেকবোর্ড প্যাটার্ন তৈরি করা। এই ফলাফলটি অর্জনের জন্য এবং সংজ্ঞায়নের বিভিন্ন উপায় রয়েছে । প্রথমত, এই সমস্যার দুটি সম্ভাব্য সমাধান রয়েছে:σiσi=1σi=+1hJ

               checkerboard_solutions

ডি ওয়েভ কোয়ান্টাম এ্যানিলার ইসিং হ্যামিল্টোনিয়ানকে আমরা সংজ্ঞায়িত করেছি এবং এটির বিভিন্ন সংযোজক সেটিংসের প্রভাব বোঝা গুরুত্বপূর্ণ। উদাহরণস্বরূপ বিবেচনা করুন :J0,1

যদি আমরা এটিকে সেট করে রাখি , তবে উভয় কুইবিট একই মান গ্রহণ করলে হ্যামিলটোনীয় হ্রাস করা হবে। আমরা বলি নেতিবাচক দম্পতি সম্পর্কিত । আমরা যদি এটি সেট করে তবে দুটি কুইবিট যদি বিপরীত মান নেয় তবে হ্যামিলটোনিয়ান হ্রাস করা হয়। সুতরাং, ইতিবাচক দম্পতিরা বিরোধী-সংযুক্তিJ0,1=1J0,1=+1

চেকবোর্ডের উদাহরণে আমরা প্রতি জোড়া প্রতিবেশী বিরোধী-সম্পর্ক স্থাপন করতে চাই যা নিম্নলিখিত হ্যামিলটনিয়ানকে জন্ম দেয়:

H=σ0σ1+σ0σ2+σ1σ3+σ2σ3

বিক্ষোভের স্বার্থে, আমরা তম কুইবিটে একটি পক্ষপাতিত্ব শব্দটি যুক্ত করি যাতে আমরা কেবল সমাধান # 1 পাই। এই সমাধানটির জন্য এবং তাই আমরা এর পক্ষপাত সেট করি । চূড়ান্ত হ্যামিলটনিয়ান এখন:0σ0=1h0=1

H=σ0+σ0σ1+σ0σ2+σ1σ3+σ2σ3

সুতরাং এটি কোড আপ করা যাক!

দ্রষ্টব্য: যে কোনও কাজের জন্য আপনি ডি-ওয়েভের ক্লাউড পরিষেবাটিতে অ্যাক্সেসের প্রয়োজন।

প্রথমত, আপনার dwave_sapi2( https://cloud.dwavesys.com/qubist/downloads/ ) পাইথন প্যাকেজ ইনস্টল করা আছে তা নিশ্চিত করুন । সব কিছু পাইথন ২. Py হতে চলেছে কারণ বর্তমানে ডি-ওয়েভ কোনও উচ্চতর পাইথন সংস্করণ সমর্থন করে না। বলা হচ্ছে, আসুন প্রয়োজনীয় আমদানি করুন:

from dwave_sapi2.core import solve_ising
from dwave_sapi2.embedding import find_embedding, embed_problem, unembed_answer
from dwave_sapi2.util import get_hardware_adjacency
from dwave_sapi2.remote import RemoteConnection

ডি-ওয়েভ সলভার এপিআইতে সংযোগের জন্য আপনাকে তাদের এসপিআই সলভার, এসপিআই ইউআরএল এবং আপনার কোন কোয়ান্টাম প্রসেসরটি ব্যবহার করতে চান তা নির্ধারণ করতে হবে:

DWAVE_SAPI_URL = 'https://cloud.dwavesys.com/sapi'
DWAVE_TOKEN = [your D-Wave API token]
DWAVE_SOLVER = 'DW_2000Q_VFYC_1'

আমি ডি-ওয়েভ 2000Q ভার্চুয়াল ফুল ইয়িল্ড চিমেরা (ভিএফওয়াইসি) ব্যবহার করার পরামর্শ দিচ্ছি যা কোনও মৃত কোয়েট ছাড়াই সম্পূর্ণ কার্যক্ষম চিপ! এখানে চিমেরা চিপ লেআউটটি রয়েছে:

dwave_chimera

এই মুহুর্তে আমি টিউটোরিয়ালটি দুটি স্বতন্ত্র টুকরোতে বিভক্ত করছি। প্রথম বিভাগে, আমরা ম্যানুয়ালি চিমেরা হার্ডওয়্যার গ্রাফটিতে সমস্যাটি এম্বেড করছি এবং দ্বিতীয় বিভাগে আমরা একটি হার্ডওয়্যার এম্বেডিং সন্ধান করতে ডি-ওয়েভের এমবেডিং হিউরিস্টিক ব্যবহার করছি।

ম্যানুয়াল এম্বেডিং


উপরের ডি-ওয়েভ 2000 কিউ চিপ লেআউটে উপরের বাম কোণে ইউনিট ঘরটি দেখতে এইরকম দেখাচ্ছে:

physical_qubits

দ্রষ্টব্য, সমস্ত দম্পতিরা এই চিত্রটিতে দৃশ্যমান নয়। আপনি দেখতে পাচ্ছেন, কুইট এবং কুইবিট মধ্যে কোনও সংযোগকারী নেই যা আমাদের উপরে আমাদের বর্গ গ্রাফটি সরাসরি প্রয়োগ করতে হবে। সে কারণেই আমরা এখন , , এবং । আমরা তখন উপর যান এবং সংজ্ঞায়িত একটি তালিকা এবং একটি অভিধান হিসাবে:0100142733hJ

J = {(0,4): 1, (4,3): 1, (3,7): 1, (7,0): 1}
h = [-1,0,0,0,0,0,0,0,0]

h যেহেতু আমরা qubits ব্যবহার 0 7. আমরা এখন সমাধানকারী API- এ সংযোগ স্থাপন করা এবং ডি-ওয়েভ 2000Q VFYC সমাধানকারী অনুরোধ 8 এন্ট্রি আছে:

connection = RemoteConnection(DWAVE_SAPI_URL, DWAVE_TOKEN)
solver = connection.get_solver(DWAVE_SOLVER)

এখন, আমরা পাঠ্য সংখ্যার সংজ্ঞা দিতে পারি এবং answer_mode"হিস্টোগ্রাম" হতে বেছে নিতে পারি যা ইতিমধ্যে আমাদের উপস্থিতি সংখ্যার দ্বারা ফলাফলগুলি সাজিয়ে তোলে। আমরা এখন ডি-ওয়েভ কোয়ান্টাম এ্যানিলারের সাথে ইসিংয়ের উদাহরণটি সমাধান করতে প্রস্তুত:

params = {"answer_mode": 'histogram', "num_reads": 10000}
results = solve_ising(solver, h, J, **params)
print results

আপনার নিম্নলিখিত ফলাফল পাওয়া উচিত:

{
  'timing': {
    'total_real_time': 1655206,
    'anneal_time_per_run': 20,
    'post_processing_overhead_time': 13588,
    'qpu_sampling_time': 1640000,
    'readout_time_per_run': 123,
    'qpu_delay_time_per_sample': 21,
    'qpu_anneal_time_per_sample': 20,
    'total_post_processing_time': 97081,
    'qpu_programming_time': 8748,
    'run_time_chip': 1640000,
    'qpu_access_time': 1655206,
    'qpu_readout_time_per_sample': 123
  },
  'energies': [-5.0],
  'num_occurrences': [10000],
  'solutions': [
      [1, 3, 3, 1, -1, 3, 3, -1, {
          lots of 3 's that I am omitting}]]}

আপনি দেখতে পাচ্ছেন আমরাenergies এর সঠিক স্থল রাষ্ট্র শক্তি ( ) । সমাধানের স্ট্রিং পূর্ণ যা অব্যবহৃত / অপরিশোধিত কোয়েটগুলির জন্য ডিফল্ট ফলাফল এবং যদি আমরা বিপরীত রূপান্তরগুলি প্রয়োগ করি - , , এবং - আমরা সঠিক সমাধানের স্ট্রিং পাই । সম্পন্ন!3 0 0 4 1 7 2 3 3 [ 1 , - 1 , - 1 , 1 ]5.0300417233[1,1,1,1]

হিউরিস্টিক এম্বেডিং


আপনি যদি বৃহত্তর এবং বৃহত্তর আইসিং উদাহরণগুলি তৈরি করা শুরু করেন আপনি ম্যানুয়াল এম্বেডিং করতে সক্ষম হবেন না। সুতরাং ধরা যাক আমরা আমাদের 2 ডি চেকারবোর্ড উদাহরণটি ম্যানুয়ালি এম্বেড করতে পারি না। এবং তখন আমাদের প্রাথমিক সংজ্ঞা থেকে অপরিবর্তিত থাকে:এইচJh

J = {(0,1): 1, (0,2): 1, (1,3): 1, (2,3): 1}
h = [-1,0,0,0]

আমরা আবার রিমোট সংযোগ স্থাপন করি এবং ডি-ওয়েভ 2000Q ভিএফওয়াইসি সলভার দৃষ্টান্তটি পাই:

connection = RemoteConnection(DWAVE_SAPI_URL, DWAVE_TOKEN)
solver = connection.get_solver(DWAVE_SOLVER)

আমাদের সমস্যার এম্বেডিং সন্ধানের জন্য, আমাদের প্রথমে বর্তমান হার্ডওয়্যার গ্রাফের সংলগ্ন ম্যাট্রিক্সটি পাওয়া দরকার:

adjacency = get_hardware_adjacency(solver)

এখন আসুন আমাদের সমস্যার এম্বেডিং সন্ধান করার চেষ্টা করুন:

embedding = find_embedding(J.keys(), adjacency)

আপনি যদি বড় আইজিং উদাহরণগুলির সাথে কাজ করে থাকেন তবে আপনি একাধিক থ্রেডে (একাধিক সিপিইউতে সমান্তরাল) এম্বেডিংগুলি অনুসন্ধান করতে চাইতে পারেন এবং তারপরে ক্ষুদ্রতম চেইনের দৈর্ঘ্যের সাথে এম্বেডিং নির্বাচন করুন! একটি চেইন তখন হয় যখন সংযোগের ডিগ্রি বাড়ানোর জন্য একাধিক কুইটগুলি একক কুইট হিসাবে কাজ করতে বাধ্য হয়। যাইহোক, চেইনটি যত বেশি দীর্ঘায়িত হওয়ার সম্ভাবনা তত বেশি। এবং ভাঙ্গা শৃঙ্খলা খারাপ ফলাফল দেয়!

আমরা এখন গ্রাফটিতে আমাদের সমস্যা এম্বেড করতে প্রস্তুত:

[h, j0, jc, embeddings] = embed_problem(h, J, embedding, adjacency)

j0মূল সংযোগগুলি রয়েছে যা আমরা সংজ্ঞায়িত করেছি এবং jcসংযুক্ত কাপলগুলি রয়েছে যা শৃঙ্খলার অখণ্ডতা প্রয়োগ করে (তারা শৃঙ্খলের মধ্যে কোয়েটগুলি সংযুক্ত করে)। সুতরাং, আমাদের সেগুলি আবার একটি বড় অভিধানে মিশ্রিত করা দরকার :J

J = j0.copy()
J.update(jc)

এখন, আমরা এম্বেড থাকা সমস্যাটি সমাধান করতে প্রস্তুত:

params = {"answer_mode": 'histogram', "num_reads": 10000}
raw_results = solve_ising(solver, h, J, **params)

print 'Lowest energy found: {}'.format(raw_results['energies'])
print 'Number of occurences: {}'.format(raw_results['num_occurrences'])

raw_resultsযদি না আমরা সমস্যা unembed আমাদের কাছে জানার জন্য করা হবে না। যদি কিছু শৃঙ্খলা ভেঙে যায় তবে আমরা aচ্ছিক যুক্তির দ্বারা নির্ধারিত হিসাবে সংখ্যাগরিষ্ঠ ভোটের মাধ্যমে তাদের ঠিক করছি broken_chains:

unembedded_results = unembed_answer(raw_results['solutions'],
                                    embedding, broken_chains='vote')

print 'Solution string: {}'.format(unembedded_results)

আপনি যদি এটি চালনা করেন তবে আপনার সমস্ত পাঠের মধ্যে সঠিক ফলাফল পাওয়া উচিত:

Lowest energy found: [-5.0]
Number of occurences: [10000]
Solution string: [[1, -1, -1, 1]]

আমি এই আপনার প্রশ্নের উত্তর দিয়েছে এবং আমি অত্যন্ত সব অতিরিক্তি প্যারামিটার চেক আউট যাতে আপনি পাস করতে পারেন সুপারিশ আশা solve_isingযেমন ফাংশন আপনার সমাধানগুলি মান উন্নত করার জন্য num_spin_reversal_transformsবা postprocess


9

শিরোনাম এবং প্রশ্ন সংস্থায় দুটি পৃথক প্রশ্ন জিজ্ঞাসা করা হয়েছে বলে মনে হয়। শিরোনামে আপনি "ডি-ওয়েভ ডিভাইসটির জন্য আপনি কীভাবে একটি সাধারণ প্রোগ্রাম লিখবেন?" জিজ্ঞাসা করেছেন, প্রশ্নোত্তরে থাকা অবস্থায় আপনি কীভাবে ডি-ওয়েভের অন্তর্নিহিত হার্ডওয়্যার ব্যবহার করে একটি সাধারণ 2 ডি আইসিং মডেলের গ্রাউন্ড স্টেটস খুঁজে পাবেন তা জিজ্ঞাসা করেন? ডিভাইস এবং সম্পর্কিত কোডটি কী হবে (যা আরও সুনির্দিষ্ট প্রশ্ন)।

আমি আগেরটির উত্তর দেব, যেহেতু এটি আরও সাধারণ প্রশ্ন।

মতে ডি-ওয়েভ সফটওয়্যার পৃষ্ঠা :

ডি-ওয়েভ 2000Q সিস্টেম সি / সি ++, পাইথন এবং এমএটিএলবিএর ক্লায়েন্ট লাইব্রেরি সহ একটি স্ট্যান্ডার্ড ইন্টারনেট এপিআই সরবরাহ করে (আরইএসটিফুল সার্ভিসের উপর ভিত্তি করে)। এই ইন্টারফেসটি ব্যবহারকারীগণকে কোনও নেটওয়ার্কের উপরে মেঘের সংস্থান হিসাবে সিস্টেমে অ্যাক্সেস করতে বা তাদের উচ্চ-কার্য সম্পাদনকারী কম্পিউটিং (এইচপিসি) পরিবেশ এবং ডেটা সেন্টারে একীভূত করার অনুমতি দেয়। ডি-ওয়েভের হোস্ট করা ক্লাউড পরিষেবার মাধ্যমে অ্যাক্সেসও উপলব্ধ। ডি-ওয়েভের বিকাশ সরঞ্জাম এবং ক্লায়েন্ট লাইব্রেরি ব্যবহার করে বিকাশকারীরা শিল্প-মানক সরঞ্জামগুলি ব্যবহার করে তাদের বিদ্যমান পরিবেশের মধ্যে অ্যালগরিদম এবং অ্যাপ্লিকেশন তৈরি করতে পারেন।

ব্যবহারকারীরা বিভিন্ন উপায়ে সিস্টেমে সমস্যাগুলি জমা দিতে পারেন, শেষ পর্যন্ত সমস্যাটি মানগুলির একটি সেটকে উপস্থাপন করে যা কুইটের ওজন এবং দম্পতির শক্তির সাথে সামঞ্জস্য করে। সিস্টেমটি অন্যান্য ব্যবহারকারী-নির্দিষ্ট পরামিতিগুলির সাথে এই মানগুলি গ্রহণ করে এবং কিউপিইউতে একটি একক কোয়ান্টাম মেশিন নির্দেশ (QMI) প্রেরণ করে। সমস্যার সমাধানগুলি পাওয়া যায় কুইটগুলির সর্বোত্তম কনফিগারেশনের সাথে মিল; যে, শক্তি ল্যান্ডস্কেপ সর্বনিম্ন পয়েন্ট। এই মানগুলি নেটওয়ার্কের মাধ্যমে ব্যবহারকারী প্রোগ্রামে ফিরে আসে।

যেহেতু কোয়ান্টাম কম্পিউটারগুলি ডিটারমিনিস্টিকের পরিবর্তে সম্ভাব্য, তাই একাধিক মান ফিরে পাওয়া যায় যা কেবলমাত্র সেরা সমাধান খুঁজে পাওয়া যায় না, তবে অন্যান্য খুব ভাল বিকল্পও বেছে নিতে পারে যা থেকে চয়ন করা উচিত। ব্যবহারকারীরা সিস্টেমটি ফিরে আসতে চান এমন সমাধানের সংখ্যা নির্দিষ্ট করতে পারেন।

ব্যবহারকারীরা ডি-ওয়েভ কোয়ান্টাম কম্পিউটারে বিভিন্ন উপায়ে সমস্যাগুলি জমা দিতে পারেন:

  1. সিএম, সি ++, পাইথন, বা এমএটিএলবিতে কিউএমআই তৈরি ও সম্পাদন করতে একটি প্রোগ্রাম ব্যবহার করা
  2. ডি-ওয়েভ সরঞ্জাম ব্যবহার করা যেমন:

    • কিউজেজ , অপ্টিমাইজেশান সমস্যার জন্য ডিজাইন করা একটি অনুবাদক

    • টোকিউ , একটি উচ্চ স্তরের ভাষা অনুবাদক বাধা সন্তুষ্টি সমস্যার জন্য ব্যবহৃত হয় এবং ব্যবহারকারীদের তাদের সমস্যা ডোমেনের ভাষায় "কথা বলতে" দেয়

    • কিউবিসলভ , একটি ওপেন-সোর্স, হাইব্রিড পার্টিশনিং অপটিমাইজেশন সলভার যা মূলত QPU- এ ফিট হবে for Qbsolv এখানে
      ডাউনলোড করা যেতে পারে ।

    • dw , যা একটি পাঠ্য সম্পাদকের মাধ্যমে তৈরি QMI গুলি সম্পাদন করে

  3. QMI গুলি মাধ্যমে সরাসরি প্রোগ্রামিং করে

ডি-ওয়েভ সিস্টেমের প্রোগ্রামিং মডেল সম্পর্কে আরও জানতে এই সাদা কাগজটি ডাউনলোড করুন


5

ডি-ওয়েভের ইনপুটগুলি ইন্টারঅ্যাকশনের একটি তালিকা এবং আরও সম্প্রতি কুইটগুলির আনিলিং সময়।

যেমনটি আপনি উল্লেখ করেছেন যে সমস্যা হ্যামিল্টোনীয় সমস্যাটিতে মধ্যে অন্যতম সহজ তবে এটি খুব আকর্ষণীয় নয়।Jij=1

ডি-ওয়েভ হার্ডওয়্যারটি কীভাবে চালিত হয় তার সংক্ষিপ্ত বিবরণের জন্য আমি এই কাগজে পরিশিষ্টগুলি সুপারিশ করি । (সম্পূর্ণ প্রকাশ: আমি একজন সহকারী।)


2
আরও ভাল হতে পারে যদি আপনি এখানে লিঙ্কটি না দিয়ে উত্তরের একটি বৃহত অংশ অন্তর্ভুক্ত করেন? কাগজটিতে সহকারী হওয়ায় আপনি সম্ভবত একটি ভাল সংক্ষিপ্তসার তৈরির পক্ষে উপযুক্ত।
অগাইতারিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.