[PYTHON] J'ai essayé de résoudre le problème d'optimisation du placement de la machine virtuelle (version simple) avec blueqat

La dernière fois, j'ai vérifié le fonctionnement de VQE en utilisant blueqat. Cette fois, je vais essayer de résoudre le problème d'optimisation de la machine virtuelle (version simplifiée) avec VQE de blueqat.

Quel est le problème d'optimisation du placement des machines virtuelles?

En un mot, c'est un problème qui nécessite ** "Quel type d'arrangement est une machine virtuelle qui peut être raisonnablement intégrée dans une infrastructure virtuelle?" **. Je l'appelle actuellement ainsi, mais y a-t-il un nom officiel ...?

Contexte de réflexion sur ce problème

Mon travail quotidien consiste à utiliser les produits VMware pour fournir des machines virtuelles dans un environnement sur site et pour exploiter et maintenir l'ensemble de la plate-forme. La plate-forme est une plate-forme de taille moyenne d'environ 700 VM. Quand je suis en affaires, je pense: "N'est-il pas possible de libérer un peu plus de ressources (notamment CPU et mémoire) en concevant la disposition des machines virtuelles?

Je pense que chaque administrateur d'infrastructure est le même, mais en fournissant une nouvelle machine virtuelle, vous pouvez être particulièrement conscient de ce qui suit.

Cette perspective est très importante car la surcharge d'une seule machine physique peut affecter les performances de la machine virtuelle. De plus, en tant qu'administrateur de plate-forme, lorsque de nouvelles exigences pour la création d'une machine virtuelle apparaissent, c'est facile car vous n'avez qu'à vérifier la capacité restante de la plate-forme actuelle. Mais qu'en est-il des perspectives suivantes?

Penser le placement sous cet angle peut être une tâche ardue. Ce que l'on entend ici par «utiliser» est de savoir si les machines virtuelles peuvent être compactées et placées sans effort. Par conséquent, il est nécessaire de juger s'il est optimal dans son ensemble, y compris la machine virtuelle en cours d'exécution. Bien sûr, ce n'est pas le cas lorsque des fonctions de répartition de charge telles que DRS sont activées, mais d'après mon expérience, de nombreuses entreprises traditionnelles ne s'appuient pas sur ces fonctions et sont gérées par des humains. Et ces optimisations dans leur ensemble peuvent être envisagées non seulement pour l'administrateur de l'environnement sur site mais aussi pour l'opérateur cloud en remplaçant la machine virtuelle par une instance etc., ce qui est un élément très important pour la gestion des opérations d'une énorme infrastructure.

En supposant qu'il existe 1 000 machines virtuelles et 100 machines physiques, le nombre total de combinaisons sera de 100 000 (1 000 x 100). Eh bien, c'est tout à fait le cas avec les ordinateurs classiques, mais si vous devenez opérateur cloud, ce nombre ne suffira pas ...

Prérequis pour résoudre le problème

Si vous emballez soudainement trop de choses, vous serez crevé, alors compliquez progressivement le problème. Cette fois, nous résoudrons le problème dans les conditions suivantes.

--Une machine physique

Je suis désolé d'imposer diverses conditions, mais laissez-moi continuer cette fois.

Définition du problème spécifique

Considérez un état dans lequel une machine virtuelle avec les spécifications requises suivantes est installée sur une machine physique avec 6 cœurs de processeur (limite supérieure).

--VM0: 2 cœurs --VM1: 4 cœurs --VM2: 5 cœurs --VM3: 8 cœurs

Lorsqu'on ne considère pas le sur-engagement, quelle est la combinaison de machines virtuelles qui peut tirer le meilleur parti des performances des machines physiques? De plus, cette fois, nous ne placerons pas de machines virtuelles dépassant la limite supérieure du processeur (6 cœurs) des machines physiques. Dans le cas de cette configuration problématique, il est recommandé de ne placer que VM0 et VM2 (2 cœurs + 4 cœurs = 6 cœurs).

Hamiltonien

Cette fois hamiltonien est comme suit

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}

Il est exprimé par.

$ x_ {\ alpha} $ indique si la machine virtuelle $ \ alpha $ th sera installée sur la machine physique (1: installée, 0: non installée). Et $ W_ {\ rm {limit}} $ représente la limite CPU de la machine physique (6 cœurs dans ce cas), et $ w_ {\ alpha} $ représente la ressource CPU requise par la machine virtuelle $ \ alpha $ th. Je suis. De plus, $ A $ et $ B_1 $ sont des paramètres qui expriment le poids de chaque terme. Si vous le connaissez, ce problème est ** [Knapsack issue](https://ja.wikipedia.org/wiki/%E3%83%8A%E3%83%83%E3% Très similaire à 83% 97% E3% 82% B5% E3% 83% 83% E3% 82% AF% E5% 95% 8F% E9% A1% 8C) **. Cependant, contrairement au problème normal du sac à dos, la "valeur" et le "volume" sont les mêmes (CPU dans ce cas).

Environnement d'exécution

À cette époque, je voulais faire du développement simple avec IPad Pro, alors je l'ai exécuté avec Google Colaboratory.

Code source

Tout d'abord, installez blueqat. Non requis si vous utilisez un notebook Jupyter local et que vous l'avez déjà installé.

pip install blueqat

Importer la bibliothèque

from blueqat.pauli import qubo_bit as q
from blueqat.vqe import Vqe, QaoaAnsatz
import numpy as np

Classe de définition de machine virtuelle

class VirtualMachine():
    def __init__(self, number, cost):
        self.__number = number
        self.__cost = cost

    @property
    def cost(self):
        return self.__cost

Fonction de construction hamiltonienne

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

Traitement principal


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

Résultat d'exécution

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

Quant à la lecture de la sortie, il s'agit de ((((combinaison de solutions 1, probabilité d'apparition de la combinaison 1), (combinaison de solutions 2, probabilité d'apparition de la combinaison 2), ...)). (L'ordre de sortie est l'ordre avec la probabilité d'apparition la plus élevée) (1,1,0,0) indique que VM0 et VM1 sont placés et que la probabilité d'apparition est de 78%. C'était un bon résultat. Cependant, en réalité, la probabilité d'occurrence d'une solution change à chaque fois qu'elle est exécutée, et la solution qui est la plus susceptible d'apparaître peut également fluctuer. Pourquoi···? Ce résultat d'exécution est exécuté environ 3 ou 4 fois et le meilleur est affiché. Si quelqu'un connaît la cause, faites-le moi savoir.

Calendrier suivant

Ensuite, je voudrais optimiser lorsqu'il y a plusieurs machines physiques. Je me demande si je peux bien le faire

Recommended Posts

J'ai essayé de résoudre le problème d'optimisation du placement de la machine virtuelle (version simple) avec blueqat
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de résoudre le problème d'optimisation des combinaisons avec Qiskit
J'ai essayé de résoudre Soma Cube avec python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
Je voulais résoudre le problème ABC164 A ~ D avec Python
J'ai essayé de résoudre le problème de planification des équipes par diverses méthodes
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé d'exprimer de la tristesse et de la joie face au problème du mariage stable.
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
J'ai essayé de sauvegarder les données avec discorde
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé de mettre en œuvre le problème du voyageur de commerce
J'ai essayé de résoudre la version 2020 de 100 coups de traitement de langue [Chapitre 1: Mouvement préparatoire 00-04]
J'ai essayé de résoudre la version 2020 de 100 traitements linguistiques [Chapitre 1: Mouvement préparatoire 05-09]
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de passer par l'optimisation bayésienne. (Avec des exemples)
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
[Keras] J'ai essayé de résoudre le problème de classification des zones de type beignet par apprentissage automatique [Étude]
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️
Je voulais résoudre le concours de programmation Panasonic 2020 avec Python
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de notifier les informations de retard de train avec LINE Notify
J'ai essayé de simuler l'optimisation des publicités à l'aide de l'algorithme Bandit
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Introduction ~
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé de résoudre 100 traitements linguistiques Knock 2020 version [Chapitre 2: Commandes UNIX 10 à 14]
Essayez de résoudre le problème N Queen avec SA de PyQUBO
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé d'afficher le temps de lecture de la vidéo (OpenCV: version Python)
J'ai essayé de démarrer avec Bitcoin Systre le week-end
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de résoudre 100 traitements linguistiques Knock 2020 version [Chapitre 2: Commandes UNIX 15-19]
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de résoudre la première question de l'examen d'entrée en mathématiques 2019 de l'Université de Tokyo avec python sympy
J'ai essayé "Implémentation d'un algorithme génétique (GA) en python pour résoudre le problème du voyageur de commerce (TSP)"
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Implémentation ~
Essayez de résoudre le problème de minimisation des fonctions en utilisant l'optimisation des groupes de particules
(Apprentissage automatique) J'ai essayé de comprendre attentivement l'algorithme EM dans la distribution gaussienne mixte avec l'implémentation.
Je souhaite résoudre le problème de fuite de mémoire lors de la sortie d'un grand nombre d'images avec Matplotlib
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Battle Edition ~
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
Résolvez un simple problème de voyageur de commerce à l'aide d'une machine Boltzmann avec recuit simulé
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python