KhiopsML / khiops

Khiops is an AutoML suite for supervised and unsupervised learning
https://khiops.org
BSD 3-Clause Clear License
36 stars 4 forks source link

Khiops launches very slowly on Windows, e-buro #350

Closed marcboulle closed 1 week ago

marcboulle commented 3 months ago

Description

When you click on the Khiops icon, Khiops launches very slowly on Windows, e-buro. It takes between 10 and 20 seconds (some times almost one minute) before seeing the application window.

Questions/Ideas

Context

marcboulle commented 2 months ago

A tester dans les trois cas d'installation:

A tester: en mode batch et GUI

A tester: Khiops et Khiops coclustering (sans MPI)

lucaurelien commented 2 months ago

Je contacte la DSI pour la partie eburo

marcboulle commented 2 months ago

Protocole de test

Test d'installation Windows, avec la dernière version de l'installeur (khiops-10.2.2-setup.exe) disponible sur le site On désinstalle préalablement l'outil existant.

Tests depuis un shell dos, répétés plusieurs fois pour estimer la variation du temps:

Puis test additionnel avec un scénario d'apprentissage.

Résultats

Résultats identiques quel que soit le répertoire d'installation

Pas d'impact du toolkit java, testé avec

Résultats détaillés, en lancement normal

Résultats détaillés, en lancement en tant qu'administrateur

Attention: en mode admin, on se retrouve initialement dans le répertoire C:\Windows\Systeme32, et non dans le répertoire attendu C:\users\public\khiops_data, ce qui rend l'accès aux exemple très pénible

Test additionnels en mode batch avec scenario

Scenario d'apprentissage sur la base adult, sans les arbres Utilisation du scenario en mode batch: -i ... -e ... -b

ClassManagement.OpenFile       // Open...
ClassFileName C:\Users\Public\khiops_data\samples\Adult\Adult.kdic     // Dictionary file
OK                             // Open

TrainDatabase.DatabaseFiles.List.Key Adult         // List item selection
TrainDatabase.DatabaseFiles.DataTableName C:\Users\Public\khiops_data\samples\Adult\Adult.txt        // Data table file
AnalysisSpec.TargetAttributeName class   // Target variable
AnalysisResults.ResultFilesDirectory Test          // Result files directory
AnalysisSpec.PredictorsSpec.ConstructionSpec.MaxTreeNumber 0 // Max number of trees
ComputeStats                   // Train model
Exit                           // Close
OK                             // Yes

Résultats: overhead sur le temps global d'exécution, de plus de 5 s en mode user, vs le mode admin

Test selon le nombres de processeurs

Paramétrage préalable par set KHIOPS_PROC_NUMBER=1,... Temps recueillis dans le log: cumul du Data preparation time et du SNB train time

Résultats de références sur la même machine, dans mon environnement de développement:

Résultats obtenus depuis un shell en mode admin, depuis C:\Applications\khiops\bin, avec la commande khiops.cmd -i scenarioTrain._kh -e log.txt

Synthèse

Impact répertoire d'installation: aucun Impact MPI: significatif, de 2 à 5 s, même en mode admin Impact mode admin vs user: énorme, on passe d'utilisable à non utilisable

Performances très dégradées avec le nombre de coeurs

Actions

Résolution du problème de performance dégradée avec le nombre de coeurs

Explication trouvée en comparant khiops_env et kht_test

Solution: dans khiops_env, lancer mpi avec la commande set KHIOPS_MPI_COMMAND="%MSMPI_BIN%mpiexec" -n %KHIOPS_PROC_NUMBER% au lieu de set KHIOPS_MPI_COMMAND="%MSMPI_BIN%mpiexec" -al spr:P -n %KHIOPS_PROC_NUMBER% /priority 1 On retrouve les performances attendues

La correction sera prise en compte avec la pull request en cours https://github.com/KhiopsML/khiops/pull/343

Problème du lancement en mode admin

Problèmes potentiels à investiguer

marcboulle commented 2 weeks ago

Bilan d'analyse et tests sur l'impact de l'antivirus MDE (Microsoft Defender for Endpoint)

marcboulle commented 2 weeks ago

Identication d'un problème Java avec les FileChooser

L'hypothèse de l'antivirus ayant été écartée, le code a été instrumenté pour identifier à quel moment on perd une vingtaine de secondes lors de l'ouverture de l'application GUI en mode utilisateur.

Le résultat est que tout le temps passé provient d'une unique unique instruction java dans GUIFileDirectoryChooser: private static JFileChooser globalFileChooser = new JFileChooser();

Il s'agit de la première instanciation d'un FileChooser dans la GUI, qui prend un temps très long. Ce problème est apparemment connu: https://stackoverflow.com/questions/49792375/jfilechooser-is-very-slow-when-using-windows-look-and-feel https://forums.oracle.com/ords/apexds/post/jfilechooser-incredibly-slow-both-to-initialize-and-to-chan-0912 https://bugs.openjdk.org/browse/JDK-6372808

En fait, le FileChooser avec le loook and feel Windows commence par scanner l'ensemble de tous les drives de la machine pour dimensionner la fenêtre du FileChooser. En cas de drives réseaux dont l'accès peut être très lent, cela peut entrainer un temps d'attente considérable. Et effectivement, sur mon poste développeur, plusieurs drives réseaux sont utilisés (montés en mode administrateur), ce qui n'est pas le cas sur la plupart des postes bureautiques.

Solution potentielles

Solution 1: préchargement d'un FileChooser

Solution 2: passer à un look and feel "metal" (cf. Illustration ci-dessous)

Solution 3: passer à un look and feel "metal" uniquement pour le FileChooser sous Windows

Solution 4: garder l'ergonomie Windows, aevc un FileChooser bridé n'ayant pas préalablement scanné les drives réseaux

Illustration

Look and Feel Metal

Look and Feel Windows

Look and Feel Windows, sans le scan des drives réseaux image

lucaurelien commented 2 weeks ago

Pour ma part, je trouve la Solution 2 (passer à un look and feel "metal") satisfaisante.

marcboulle commented 2 weeks ago

On part sur la solution 2, meilleurs compromis entre ergonomie et rapidité dans les cas d'usage. Et même look and feel sur toutes les plateformes.