[PYTHON] Ich habe versucht, das Problem der Optimierung der Platzierung virtueller Maschinen (einfache Version) mit blueqat zu lösen

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.

Was ist das Problem bei der Platzierung der virtuellen Maschine?

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 ...?

Hintergrund zum Nachdenken über dieses Problem

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 ...

Voraussetzungen zur Lösung des Problems

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.

Spezifische Problemeinstellung

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.

Hamiltonianer

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).

Ausführungsumgebung

Ungefähr zu dieser Zeit wollte ich eine einfache Entwicklung mit IPad Pro durchführen, also habe ich sie mit Google Colaboratory ausgeführt.

Quellcode

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))

Ausführungsergebnis

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.

Nächster Zeitplan

Als nächstes möchte ich optimieren, wenn es mehrere physische Maschinen gibt. Ich frage mich, ob ich es gut kann

Recommended Posts

Ich habe versucht, das Problem der Optimierung der Platzierung virtueller Maschinen (einfache Version) mit blueqat zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, Soma Cube mit Python zu lösen
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Ich habe versucht, das Schichtplanungsproblem mit verschiedenen Methoden zu lösen
Ich habe versucht, TSP mit QAOA zu lösen
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Ich habe versucht, die Daten mit Zwietracht zu speichern
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 00-04]
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 05-09]
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, die Bayes'sche Optimierung zu durchlaufen. (Mit Beispielen)
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
[Keras] Ich habe versucht, das Problem der Klassifizierung des Donut-Typ-Bereichs durch maschinelles Lernen zu lösen. [Studie]
Ich habe versucht, die Emotionen des gesamten Romans "Wetterkind" zu analysieren
Ich wollte den Panasonic Programming Contest 2020 mit Python lösen
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, die Zugverspätungsinformationen mit LINE Notify zu benachrichtigen
Ich habe versucht, die Anzeigenoptimierung mithilfe des Banditenalgorithmus zu simulieren
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe versucht, den Datenverkehr mit WebSocket in Echtzeit zu beschreiben
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, Othello AI mit Tensorflow zu machen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Einführung ~
Ich habe maschinelles Lernen mit liblinear versucht
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 10-14]
Versuchen Sie, das N Queen-Problem mit SA von PyQUBO zu lösen
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten
Ich habe versucht, die Videowiedergabezeit anzuzeigen (OpenCV: Python-Version)
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 15-19]
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, die erste Frage der Mathematik-Aufnahmeprüfung 2019 der Universität Tokio mit Python Sympy zu lösen
Ich habe versucht, "einen genetischen Algorithmus (GA) in Python zu implementieren, um das Problem des Handlungsreisenden (TSP) zu lösen".
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Implementierung ~
Versuchen Sie, das Problem der Funktionsminimierung mithilfe der Partikelgruppenoptimierung zu lösen
(Maschinelles Lernen) Ich habe versucht, den EM-Algorithmus in der gemischten Gaußschen Verteilung sorgfältig mit der Implementierung zu verstehen.
Ich möchte das Problem des Speicherverlusts bei der Ausgabe einer großen Anzahl von Bildern mit Matplotlib lösen
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Battle Edition ~
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen