Experience et conclusion

This commit is contained in:
Leopold Clement 2021-08-22 14:08:54 +02:00
parent 8a5d7bcdd2
commit 2f227270f2
12 changed files with 218 additions and 22 deletions

25
dot/struct.dot Normal file
View file

@ -0,0 +1,25 @@
digraph struc{
rankdir = LR
node[shape=Mrecord]
root[label = "<n>Root - dict\{\} | <a1> charge | <a2> mesure"]
charge[label = "<n>list[float]"]
dmesure[label="list[]"]
mesure[label = "<n>dict\{\}|<a1>rtos | <a2>rtts |<a3> n_tokens | <a4>n_envoies | <a5>n_echec"]
rtos[label = "list[float]"]
rtts[label = "list[]"]
n_tokens[label = "list[float]"]
n_envoies[label = "list[float]"]
n_echec[label = "list[float]"]
rtt[label = "list[float]"]
root:<a1> -> charge:<n>
root:<a2> -> dmesure
dmesure -> mesure:<n>
mesure:<a1>->rtos
mesure:<a2>->rtts->rtt
mesure:<a3>->n_tokens
mesure:<a4>->n_envoies
mesure:<a5>->n_echec
}

View file

@ -86,7 +86,7 @@
\sisetup{locale = FR} % Pour avoir les bonnes conventions typographiques des unités
% ------------- Une biliographie -------------
\bibliographystyle{plain-fr} % Biblio en français
\bibliographystyle{alpha-fr} % Biblio en français
% ------------- Les options du paquet -------------
@ -118,6 +118,7 @@
\DeclareCaptionFont{CaptionENS}{\color{ENSRougeBrique}}
\captionsetup[table]{labelfont={CaptionENS,bf}}
\captionsetup[figure]{labelfont={CaptionENS,bf}}
\captionsetup[listing]{labelfont={CaptionENS,bf}}
\captionsetup[subfigure]{labelfont=bf,textfont=sf}

View file

@ -1,8 +1,16 @@
FIGURES_SVG=$(wildcard raw_img/*.svg)
FIGURES_PDF=$(subst raw_img/,pdf_img/,$(FIGURES_SVG:.svg=.pdf_tex))
all : rapport.tex rapport.bib $(FIGURES_PDF) $(UML_PNG) png_img/gain_action.png
plantuml -checkmetadata puml
DOT_DOT=$(wildcard dot/*.dot)
DOT_PNG=$(DOT_DOT:.dot=.png)
UML_PUML=$(wildcard puml/*.puml)
UML_PNG=$(UML_PUML:.puml=.png)
all : rapport.pdf
echo "done\a"
rapport.pdf : rapport.tex rapport.bib $(FIGURES_PDF) $(UML_PNG) png_img/gain_action.png $(DOT_PNG)
lualatex -shell-escape rapport.tex
bibtex rapport
makeglossaries rapport
@ -16,6 +24,8 @@ clean : clean-latex
rm -f -r pdf_img/
rm -f -r puml/*.svg
rm -f -r puml/*.png
rm -f -r dot/*.png
rm -f rapport.pdf
clean-latex :
rm -f rapport.aux
@ -23,17 +33,24 @@ clean-latex :
rm -f rapport.blg
rm -f rapport.out
rm -f rapport.log
rm -f rapport.pdf
rm -f rapport.toc
rm -f rapport.lof
rm -f rapport.lot
rm -f rapport.lol
rm -f rapport.ist
rm -f rapport.glg
rm -f rapport.gls
rm -f rapport.glo
rm -f texput.log
pdf_img/%.pdf : raw_img/%.svg pdf_img/%.pdf_tex
inkscape -D -z --file=$< --export-pdf=$@ --export-latex
pdf_img/%.pdf_tex : raw_img/%.svg
inkscape -D -z --file=$< --export-pdf=$@ --export-latex
inkscape -D -z --file=$< --export-pdf=$@ --export-latex
puml/%.png : puml/%.puml
plantuml $<
dot/%.png : dot/%.dot
dot -Tpng -o $@ $<

BIN
png_img/charge-rtts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
png_img/cropped-L2S.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
png_img/gain_action.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
png_img/varrtt_demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

9
puml/edt.puml Normal file
View file

@ -0,0 +1,9 @@
@startgantt
language fr
Project starts 2021-01-01
[Prototype design end] as [TASK1] lasts 19 days
[TASK1] is colored in Lavender/LightBlue
[Testing] lasts 14 days
[TASK1]->[Testing]
@endgantt

View file

@ -6,10 +6,10 @@
\usepackage{ensps}
\hypersetup{
pdftitle={Titre},
pdftitle={Rapport de stage, Léopold Clément},
pdfauthor={Léopold Clément},
pdfsubject={Sujet},
pdfproducer={Conversion PDF},
pdfsubject={Schémas de contrôle de congestion intelligents pour les réseaux IoT par apprentissage profond},
pdfproducer={LuaLaTex},
pdfkeywords={Quelques mots-clés} %
}
@ -167,7 +167,7 @@
\newcommand{\cubic}{TCP-Cubic}
\newcommand{\newreno}{TCP-NewReno}
\newcommand{\cpp}{C++}
\newcommand{\lss}{\emph{L2S}}
\newglossaryentry{rtt}
{
name=RTT,
@ -201,7 +201,7 @@
% Titre
\rule{\linewidth}{0.5mm} \\[0.4cm]
{ \huge \bfseries Titre du rapport éventuellement en plusieurs lignes. \\[0.4cm] }
{ \huge \bfseries Schémas de contrôle de congestion intelligents pour les réseaux IoT par apprentissage profond \\[0.4cm] }
\rule{\linewidth}{0.5mm} \\[1.5cm]
% Auteur(es) et encadrant(es)
@ -215,8 +215,8 @@
\begin{minipage}{0.4\textwidth}
\begin{flushright} \large
\emph{Encadrants :} \\
M\up{me} Lynda \textsc{Zitoune}\\
M\up{me} Véronique \textsc{Vèque}
M\up{me} Lynda \textsc{Zitoune}, professeur des universités\\
M\up{me} Véronique \textsc{Vèque}, maitresse de conferences
\end{flushright}
\end{minipage}
@ -232,6 +232,17 @@
% Table des matières
% --------------------------------------------------------------
\thispagestyle{empty}
\hspace{0pt}
\vfill
\begin{center}
\section*{Remerciement}
Je remercie Lynda
\end{center}
\vfill
\hspace{0pt}
\pagebreak
\thispagestyle{empty}
\tableofcontents
\pagebreak
@ -241,9 +252,31 @@
% --------------------------------------------------------------
\printglossary[title=Glossaire, toctitle=Glossaire]
\pagebreak
\section{Introduction}
\subsection{Présentation de l'environnement de travail}
\begin{wrapfigure}{r}{0.30\textwidth} %this figure will be at the right
\centering
\includegraphics[width=0.30\textwidth]{png_img/cropped-L2S.png}
\end{wrapfigure}
Le laboratoire des signaux et système (\lss{}) est une unité mixe de recherche entre le \emph{CNRS}, l'université PAris-Saclay et l'école CentralSupélec.
Les thématique du laboratoire sont l'automatique, les traitements du signal et les télécomunication.
En particulier, le pôle télécom et réseau se penche sur des problèmatique de tout niveaux autour des réseaux informatique, que ce soit de l'allcoation de ressource, du routage, de a compressionde donnée\dots
Ces recherches s'appuis sur un vaste socle de méthode, que ce soit la théorie des jeux, du control, des graphes, de l'optimisation ou de l'apprentissage machine.
L'équite Réseaux, Optimisation Conjointe et codage de Source (ROCS) travail sur deux thématique, l'\iot{} et les services vidéo, c'est à dire l'exploitation optimal d'une conexion limité.
C'est dans cette équipe que j'ai réalisé mon stage.
La problématique étudier est de déterminer comment intégré un processus d'apprentissage dans la gestion de la congestion des réseaux \iot{}.
En particulier, nous nous concentrons sur le protocole \coap{}.
Nos objectifs sont \begin{itemize}
\item nous familiariser avec les notions étudier et le protocole \coap{},
\item déterminer quelle métrique utilisé pour suivre l'état du réseau,
\item détermination des sénarios pertients
\item simulation ou test de ces sénarios
\end {itemize}
Le stage se déroule entrièrement en distancielle, avec des réunions hébdomadaire avec mes encadrantes soit en présentielle dans les locaux de CentralSupélec, soit sur Teams.
\subsection{Qu'est-ce qu'un réseau \iot{} ?}
@ -376,7 +409,7 @@ Le but de l'acteur est de maximiser la récompense totale qu'il va recevoir au c
Pour cela, l'acteur doit créer une fonction $\pi : \mathbb{S} \rightarrow \mathbb{A}$ permettant de donner l'action optimale à réaliser pour chaque état.
La solution optimal est définie comme l'action permetant de maximiser le retour global : \begin{equation}
R = sum_{i = 1} ^\infty r _ i \gamma ^ i
R = \sum_{i = 1} ^\infty r _ i \gamma ^ i
\label{eq:rl:R}
\end{equation}
@ -708,7 +741,7 @@ Ainsi on peut entrainer le simulateur avec la topologie du réseau que l'on veux
Malheureusment, c'est un simulateur complexe à utilisé : tout les scripts de simulation sont écrit en \cpp{}.
Par manque de temps et de compétence, les simulations sur \ns{} n'ont pas pu etre réalisé, mais cela reste une piste à étudier pour le pré-entrainement.
\subsubsection{Par création artificiel de transition}
\subsubsection{Par création artificiel de transition\label{part:yaml}}
Une autre méthode possible est de créer des transitions artificiellement.
Pour cela, l'algorithme commence par fixer une charge sur le réseau $f$, c'est à dire la fréquence à laquelle chaque client intéroge le capteur associé.
@ -861,19 +894,117 @@ La maquette physique que nous utilisont est constitué de deux machines : \begin
Les deux machines sont connectée par un réseau WiFi $2.5 GHz$ géré par le PC.
La connexion est bien trop bonne pour pouvoir etre saturée par un système CoAP classique seul, d'où l'utilisation de plusieurs maquette numérique en même temps sur le modèle physique.
\subsection{Sénario d'interet}
Les sénarios d'interet sont : \begin{itemize}
\item un réseau peu congestioner,
\item un réseau congestioner,
\item la transition de l'un à l'autre.
\end{itemize}
Mais il faut prendre en compte que on peu mettre des charges diffeente sur chaque capteur.
Ainsi on peu avoir peu de requettes sur tout les capteurs sauf un qui en a beaucoup plus.
La charge sur le réseau est définie par la fréquence à laquelle chaque client émet des requettes.
\section{Expérience et résultats}
Pour commencer, on fait quelque test en local, c'est à dire que le serveur \coap{} se trouve sur la même machine que le client.
On obtient les resultats de la figure \ref{fig:res:rtt_local}.
On constate que même en local, certain messages sont acquitté avec du retard.
Certain on un \rtt{} deux fois plus grand que la moyenne.
On peut aussi observer que $RTT_S$ a bien plus de varriation brusque que $RTT_L$.
\subsection{Montage simple}
\begin{figure}[htp]
\centering
\includegraphics[width=0.7 \textwidth]{png_img/distri_rtt_local.png}
\caption[Distribution du \rtt{} et évolution de $RTT_L$ et $RTT_S$ avec un seul client en local.]{Distribution du \rtt{} et évolution de $RTT_L$ et $RTT_S$ pendant un envoie de message sans délai entre la réception d'un messagee et l'envoie du suivant, avec un seul client en local.}
\label{fig:res:rtt_local}
\end{figure}
\subsection{Multiplication des clients}
\subsection{Etude de la maquette}
On commence par essayer de mesurer les limites du système.
Sur la figure \ref{fig:res:evo_grandeur}, on regarde les grandeurs que l'on va donner à l'agent en fonction du nombre de requette simultané que doit traiter le serveur.
On utilise le \CCA{} de \coap{} de base.
Pour généré $n$ requette, on prend $n$ client qui envoient une nouvelle requettes à la reception de l'ancienne requette.
On constate que les grandeurs semblent toutes bruité de manière non-négligéable.
On constate aussi que le taux de retransmission semble suivre un palier.
Le rapport $\eta$ semble plus sensible, et suit une courbe continu, presque une exponentielle décroissante.
Cela indique que tres rapidement le temps passé dans les queues est bien plus important que le temps de propagation.
$VARRTT$ par contre n'est pas pertinante à regarder ici, car elle mesure l'évolution du système.
Pourtant, le niveau de congestion semble avoir un impacte sur la grandeur que nous se savons pas expliquer.
En regardant la charge de calcul sur le \rasp{}, on constate que la limite créant la congestion n'est pas la saturation de la connexion WiFi entre les deux machines, mais la puissance de calcule du \rasp{} qui n'arrive pas à traiter les requettes.
\subsection{Multiplication des \rasp{}}
On peut aussi reproduire \ref{fig:res:rtt_local} mais en utilisant un seveur sur la \rasp{}.
Sur la figure \ref{fig:res:rtt_distant}, on vois que la distribution des \rtt{} est similaire, mais que certaine mesure sont tres éloigné de la moyenne.
Si on tentais de réduire le \rto{}, ces messages serais retransmie, alors que ils ne sont pas réelement perdus.
\begin{figure}[htp]
\centering
\includegraphics[width=0.7\textwidth]{png_img/n_client_saturation.png}
\caption[Evolutions des grandeurs mesurer en fonction du nombre de requette simultané]{Evolution des grandeurs mesurer en fonction du nombre de requette simultané traiter par le serveur \coap{} tournant sur une \rasp{}. Le \CCA{} de \coap{} de base est utilisé.}
\label{fig:res:evo_grandeur}
\end{figure}
\begin{figure}[htp]
\centering
\includegraphics[width=0.7 \textwidth]{png_img/distri_rtt_distant.png}
\caption[Distribution du \rtt{} et évolution de $RTT_L$ et $RTT_S$ avec un seul client.]{Distribution du \rtt{} et évolution de $RTT_L$ et $RTT_S$ pendant un envoie de message sans délai entre la réception d'un messagee et l'envoie du suivant, avec un seul client et un serveur sur le \rasp{}. Même si on ne les distingue pas sur l'histogramme, il y a quelque valeur de \rtt{} très élevées.}
\label{fig:res:rtt_distant}
\end{figure}
\begin{figure}[htp]
\centering
\includegraphics[width=0.7 \textwidth]{png_img/varrtt_demo.png}
\caption[Evolution de $VARRTT$ lors d'un changement de charge du réseau.]{Evolution de $VARRTT$ lors d'un changement de charge du réseau au moment du $500$-ième message.}
\label{fig:res:varrtt}
\end{figure}
On peut aussi faire un essaie pour voir le profil de $VARRTT$ en cas de changement de charge sur le réseaux.
On place dabbort un unique client sur le réseau, et on regarde l'évolution de $VARRTT$.
Au $500$-ieme message, on active $20$ autre client qui vont eux aussi envoyer des requettes au serveur.
Dans la figure \ref{fig:res:varrtt}, on constate que il y a bien un pic au moment de l'augmentation de la charge du système, mais il y a aussi des pics dû au bruit dans la mesure du \rtt{}.
\subsection{Test d'apprentissage}
Les testes de pré-apprentissage ont était réalisé avec : \begin{itemize}
\item des réseaux de $25$ capteur, ce qui est un ordre de grandeur du nombre de capteur dans le type de réseaux cible,
\item avec $8$ maquette en parrallèle pour acceleré la récupération d'expérience,
\item des interval de control de $30$ secondes,
\item un facteur d'apprentissage de $\alpha = 0.01$.
\end{itemize}
On obtient donc un pas d'entrainement toutes les heures.
Appres $72$ heures d'entrainement, soit $70$ pas d'entrainement, on n'a toujours pas de résultats stable.
En effet, les \rto{} ont des comportement hératique, ils convergent vers $0$ ou divergent vers $+\infty$.
On se retrove donc avec un taux d'echec important, le réseau n'est pas exploitable.
Les décisions prise par l'agent non-entrainer sont trop aléatoire pour que il puisse maintenir en etat correct du réseau.
Il faudrait attendre longtemps avant que un épisode stable se forme par hasard et que l'agent puisse exploiter la stratégie correct.
Cela montre bien que l'entrainement sur simulateur est indispensable car le pré-entrinement sur modèle réel n'est pas assez performant.
\begin{figure}
\centering
\includegraphics[width=\textwidth]{png_img/charge-rtts.png}
\caption[Répartition de la \rtt{} et du taux de retransmition en fonction de la charge du réseau.]{Répartition de la \rtt{} et du taux de retransmition en fonction de la charge du réseau. On ne vois pas clairement, mais en bas à gauche de chaque figure, il y a une zone tres dense.}
\label{fig:res:yaml}
\end{figure}
Pour palier à cela, une méthode pour crée de l'experience plus rapidement à était tenter, mais n'a pas pu etre finaliser.
Néanmoins, grace au donné récupérer, on peut tracer la figure \ref{fig:res:yaml} qui nous montre bien qu'il y a une charge critique à partir de laquelle le \rtt{} varrie beaucoup.
\clearpage
\section{Conclusion}
\lipsum[3]
La modélisation que nous proposon est une transposition de méthode existante dans un nouveau domaine.
L'apprentissage machine a déjà montrer qu'il était capable de résoudre des problèmes liée au réseaux et au \CC{}.
Nous avons proposer ici une nouvelle modélisation pour intégrer ces nouveau outils à des problématique de l'\iot{}.
On ne s'interresse plus à une connexion seule, mais à l'ensemble des connexions vers tout un réseau de capteurs.
On ne mesure que les \rtt{} de chaque message, ainsi que le nombre de retransmission.
On construit ensuite une matrices qui représente l'état du réseau durant un interval de control.
Cette matrice est utilisé par un agent IA pour determiner l'action à prendre.
Cette action est une liste de facteurs multiplicatifs à appliquer aux \rto{} de chaque capteurs.
La difficulté est que on ne peut pas récupérer assez d'expérience pour réalisé un pré-entrainement.
Pour cela, il faudrait un simulateur.
La solution de la partie \ref{part:yaml} n'a pas pu etre tester.
Par manque de temps et de capacité, ledit simulateur n'a pas pu etre réalisé.
Parmis les autres élements à perféctioner, il y a les valeurs de pondération utilisé dans la fonction de récompence, qui sont pour l'instant arbitraire.
De même, l'agent est pour l'instant assez basique, on pourrait utiliser une structure du réseau de neurrone plus complexe pour prendre en compte les particularités de la matrice d'état.
Le travail réalisé sera repris dans une thèse de \lss{}.
\clearpage
@ -886,7 +1017,7 @@ La connexion est bien trop bonne pour pouvoir etre saturée par un système CoAP
% --- Biblio par .bib
\bibliography{rapport.bib}
%\bibliographystyle{plain-fr.bst}
%\selectlanguage{french}
\selectlanguage{french}
% --- Biblio écrite à la main
%\begin{thebibliography}{7}
@ -903,9 +1034,22 @@ La connexion est bien trop bonne pour pouvoir etre saturée par un système CoAP
\appendix
\begin{appendices}
\section{Structure du code}
\section{Correspondance modélisation/code}
\begin{table}[htp]
\centering
\caption{Correspondance modélisation/code}
\begin{tabular}{lcc}
\toprule
Nom & notation mathématique & Représentation numérique\\
\midrule
\rtt& Utilisation finale & http, ssh...\\
\bottomrule
\end{tabular}
\end{table}
\begin{landscape}
\section{Structure du code}
\begin{figure}[htp]
\centering
\includegraphics[height=\vsize, width=\hsize, keepaspectratio]{puml/call_stack_envoie.png}