Letztes Mal habe ich den Betrieb von VQE mit blueqat überprüft. Dieses Mal werde ich versuchen, das Optimierungsproblem der virtuellen Maschine (vereinfachte Version) mit VQE von blueqat zu lösen.
Kurz gesagt, es ist ein Problem, das erfordert ** "Welche Art der Platzierung von virtuellen Maschinen kann angemessen in eine virtuelle Infrastruktur gepackt werden?" **. Ich nenne es derzeit so, aber gibt es einen offiziellen Namen ...?
Meine tägliche Arbeit besteht darin, VMware-Produkte zu verwenden, um virtuelle Maschinen in einer lokalen Umgebung bereitzustellen und die gesamte Plattform zu betreiben und zu warten. Die Plattform ist eine mittelgroße Plattform mit ca. 700VM. Wenn ich im Geschäft bin, denke ich: "Ist es nicht möglich, ein wenig mehr Ressourcen (insbesondere CPU und Speicher) freizugeben, indem das Layout virtueller Maschinen entwickelt wird?"
Ich denke, dass jeder Infrastrukturadministrator derselbe ist, aber wenn Sie eine neue virtuelle Maschine bereitstellen, sind Sie sich möglicherweise der folgenden Punkte besonders bewusst.
Diese Perspektive ist sehr wichtig, da das Überladen einer einzelnen physischen Maschine die Leistung der virtuellen Maschine beeinträchtigen kann. Als Plattformadministrator ist es außerdem einfach, neue Anforderungen für die Erstellung einer virtuellen Maschine zu stellen, da Sie nur die aktuelle Kapazität der Plattform überprüfen müssen. Aber was ist mit den folgenden Perspektiven?
――Ist das Layout so, dass die Ressourcen physischer Maschinen in der gesamten Infrastruktur effektiv genutzt werden können?
Aus dieser Perspektive über die Platzierung nachzudenken, kann eine entmutigende Aufgabe sein. Mit "Verwenden" ist hier gemeint, ob die virtuellen Maschinen ohne Belastung gepackt und platziert werden können. Daher muss beurteilt werden, ob es insgesamt optimal ist, einschließlich der aktuell ausgeführten virtuellen Maschine. Dies ist natürlich nicht der Fall, wenn Lastverteilungsfunktionen wie DRS aktiviert sind, aber meiner Erfahrung nach verlassen sich viele ältere Unternehmen nicht auf solche Funktionen und werden von Menschen verwaltet. Und diese Optimierungen insgesamt können nicht nur für den Administrator der On-Premise-Umgebung, sondern auch für den Cloud-Betreiber in Betracht gezogen werden, indem die virtuelle Maschine durch eine Instanz usw. ersetzt wird. Dies ist ein sehr wichtiges Element für das Betriebsmanagement einer riesigen Infrastruktur.
Unter der Annahme, dass es 1000 virtuelle Maschinen und 100 physische Maschinen gibt, beträgt die Gesamtzahl der Kombinationen 100.000 (1000 x 100). Nun, dies ist bei klassischen Computern durchaus der Fall, aber wenn Sie Cloud-Betreiber werden, reicht diese Zahl nicht aus ...
Wenn Sie plötzlich zu viele Dinge einpacken, werden Sie verletzt, was das Problem allmählich kompliziert. Dieses Mal werden wir das Problem unter den folgenden Bedingungen lösen.
Es tut mir leid, verschiedene Bedingungen aufzuerlegen, aber diesmal lassen Sie mich damit weitermachen.
Stellen Sie sich einen Zustand vor, in dem eine virtuelle Maschine mit den folgenden erforderlichen Spezifikationen auf einer physischen Maschine mit 6 CPU-Kernen installiert ist (Obergrenze).
Welche Kombination von virtuellen Maschinen kann die Leistung physischer Maschinen optimal nutzen, wenn keine Überbindung berücksichtigt wird? Außerdem werden diesmal keine virtuellen Maschinen platziert, die die CPU-Obergrenze (6 Kerne) physischer Maschinen überschreiten. Bei dieser Problemeinstellung wird empfohlen, nur VM0 und VM2 (2 Kerne + 4 Kerne = 6 Kerne) zu platzieren.
Diesmal ist Hamiltonian wie folgt
H = -A\sum _{\alpha \in \rm{VM}}w_{\alpha}x_{\alpha} + B_{1}(W_{limit}-\sum _{\alpha \in \rm{VM}}w_{\alpha}x_{\alpha})^{2}
Es wird ausgedrückt durch.
$ x_ {\ alpha} $ gibt an, ob die $ \ alpha $ -te virtuelle Maschine auf der physischen Maschine installiert wird (1: installiert, 0: nicht installiert). Und $ W_ {\ rm {limit}} $ repräsentiert das CPU-Limit der physischen Maschine (in diesem Fall 6 Kerne), und $ w_ {\ alpha} $ repräsentiert die CPU-Ressource, die von der $ \ alpha $ -ten virtuellen Maschine benötigt wird. Ich bin. Außerdem sind $ A $ und $ B_1 $ Parameter, die das Gewicht jedes Terms ausdrücken. Wenn Sie damit vertraut sind, handelt es sich um ** [Rucksackproblem](https://ja.wikipedia.org/wiki/%E3%83%8A%E3%83%83%E3% Sehr ähnlich zu 83% 97% E3% 82% B5% E3% 83% 83% E3% 82% AF% E5% 95% 8F% E9% A1% 8C) **. Im Gegensatz zum normalen Rucksackproblem sind jedoch "Wert" und "Lautstärke" gleich (in diesem Fall CPU).
Ungefähr zu dieser Zeit wollte ich eine einfache Entwicklung mit IPad Pro durchführen, also habe ich sie mit Google Colaboratory ausgeführt.
Installieren Sie zuerst blueqat. Nicht erforderlich, wenn Sie ein lokales Jupyter-Notebook verwenden und es bereits installiert haben.
pip install blueqat
Bibliothek importieren
from blueqat.pauli import qubo_bit as q
from blueqat.vqe import Vqe, QaoaAnsatz
import numpy as np
Definitionsklasse für virtuelle Maschinen
class VirtualMachine():
def __init__(self, number, cost):
self.__number = number
self.__cost = cost
@property
def cost(self):
return self.__cost
Hamiltonsche Konstruktionsfunktion
def create_Hamiltonian(CpuLimit, vms, params):
# first term of Hamiltonian
h1 = 0.0
for i in range(len(vms)):
h1 -= vms[i].cost * q(i)
# second term of Hamiltonian
h2 = 0.0
vmtotalCpu = 0.0
for j in range(len(vms)):
vmtotalCpu += vms[j].cost * q(j)
h2 = (CpuLimit - vmtotalCpu)**2
return params[0] * h1 + params[1] * h2
Hauptverarbeitung
#Physical Machine CPUlimit
CpuLimit = 6
#create Virtual Machine
vms = []
vms.append(VirtualMachine(number=0, cost=2))
vms.append(VirtualMachine(number=1, cost=4))
vms.append(VirtualMachine(number=2, cost=5))
vms.append(VirtualMachine(number=3, cost=8))
#Hyper Parameter(A=100)
Params =[1.0, 100.0]
#Create Hamiltonian
h = create_Hamiltonian(CpuLimit, vms, Params)
ansatz = QaoaAnsatz(h, 20)
runner = Vqe(ansatz)
result = runner.run()
print("mode:")
print(result.most_common(10))
mode:
(((1, 1, 0, 0), 0.7896332746515127), ((1, 0, 1, 0), 0.08187420835800963), ((0, 0, 1, 0), 0.0748323470871601), ((0, 1, 0, 0), 0.04708791984791466), ((0, 0, 0, 1), 0.005451806960418528), ((1, 0, 0, 1), 0.0005107132984061434), ((1, 1, 1, 0), 0.00015463766513252268), ((0, 1, 1, 0), 0.00014643503666132072), ((0, 0, 1, 1), 0.0001069655788835076), ((0, 0, 0, 0), 8.715493427846994e-05))
Wie man die Ausgabe liest, ist ((((Lösungskombination 1, Erscheinungswahrscheinlichkeit von Kombination 1)), (Lösungskombination 2, Erscheinungswahrscheinlichkeit von Kombination 2), ...)). (Die Ausgabereihenfolge ist die Reihenfolge mit der höchsten Erscheinungswahrscheinlichkeit.) (1,1,0,0) gibt an, dass VM0 und VM1 platziert sind, und die Erscheinungswahrscheinlichkeit beträgt 78%. Es war ein gutes Ergebnis. In der Realität ändert sich jedoch die Wahrscheinlichkeit des Auftretens einer Lösung bei jeder Ausführung, und die Lösung, die am wahrscheinlichsten erscheint, kann ebenfalls schwanken. Warum···? Dieses Ausführungsergebnis wird ungefähr 3 oder 4 Mal ausgeführt und das beste wird veröffentlicht. Wenn jemand die Ursache kennt, lassen Sie es mich bitte wissen.
Als nächstes möchte ich optimieren, wenn es mehrere physische Maschinen gibt. Ich frage mich, ob ich es gut kann