• chevron_right

      France 2 et France 3 ne diffusent pas les clips de campagnes des européennes et favorisent LREM / RN

      news.movim.eu / LinuxFRJournaux · 07:31

    En théorie, l'accès au média est censé être équitable pour les 38 listes. La règle a changé pour y introduire une notion de proportionnalité avec les résultats de vote. C'est encore une prime à ceux qui sont en place.

    La seul règle d'équité qui restait concernant la diffusion des clips de campagne sur le service publique comme France 2. Or, 2 soirs de suites, les clips n'ont pas été diffusé comme l'avait tiré au sort l'ARCOM et publié dans le journal officiel.

    Au lieu des 7 clips prévu à une heure de grandes écoutes, les spot RN et LREM ont été diffusé ! Et cela a 3 reprises (2 fois France 2 et une fois France 3).

    Est-ce que les avocats du Parti Pirate vont devoir passer en contentieux pour son clip ? Il est censé passer ce soir juste après le journal de 20h.

    https://x.com/pbeyssac/status/1795888403432550666

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/niconico/journaux/france-2-et-france-3-ne-diffusent-pas-les-clips-de-campagnes-des-europeennes-et-favorisent-lrem-rn

    • chevron_right

      Nixos la distribution reproductible et déclaratif.

      news.movim.eu / LinuxFRJournaux · Yesterday - 23:09 · 14 minutes

    Voila Nixos, c'est le genre de distribution que quand on t'explique ça te fait penser à un truc futile, pour geeks, un truc pour développeurs et non pour être utilisé en simple utilisateur du dimanche, c'est totalement abstrait, on ne voit pas ce que ça peut apporter, du moins pas autant qu'une fois dans les mains, puis on se dit que ça demande des efforts, beaucoup car tout est à réapprendre sauf que ce qu'on y apprend est pour cette distribution et ne s'applique pas aux autres. Une fois qu'on la lance, c'est le bordel, on y comprends pas des masses, ça change beaucoup de ce qu'on connaît, on est perdu, on doit se taper un wiki et toute la documentation qu'on peut trouver… Enfin on tente des choses, mais chaque changement demande de rebuilder l'OS, comme avec un générateur de sites statiques ( GSS ), oui c'est ça si on veut comprendre ce que c'est que Nixos, faut prendre l'exemple des GSS , les distributions classiques (Arch, Debian, Fedora, Gentoo, openSUSE, Slack, Ubuntu…) sont comme les CMS , comme un Wordpress, un PluXml, ou encore un SPIP, on donne en directe ce que l'on veut et il nous donne directement ce que l'on souhaite, si on fait un changement c'est de suite que ça s'opère, généralement la configuration est explosé en plusieurs endroits. Si il y a une couille dans le pâté, c'est foutu, pas de retours en arrière, pas de sauvegardes, pas de possibilités de rattraper sans faire des sauvegardes par nous même. Or, Nixos est comme un GSS , comme Astro, Eleventy, Hexo, Hugo, Jeckyll, Pelican, Zola; on a un fichier pour régler comme on le souhaite, généralement un unique fichier mais on peut l'exploser pour qu'il soit plus visible, et lui va interpréter ce fichier pour construire notre site selon ce qu'on y a mit dedans, après une phase de build/compilation, le site est là. Comme pour les GSS , c'est un coup à prendre, au début on trouve ça durs et on ne voit pas trop les bénéfices, puis une fois dedans, on se demande comment on a pu faire autrement.

    je l'ai donc installé une nouvelle fois, l'installation est vraiment facile avec l' installateur graphique qui nous pond un fichier de conf pré-mâché qui n'attends par la suite que les modifications voulues par l'utilisateur. Sinon, il y a l'autre façon de l'installer (Minimal ISO image), celui qui ne dépaysera pas les utilisateurs de Arch ou Gentoo, il suffit de booter sur un live usb et lire la documentation . L'administration est inexistante tout comme la maintenance qui pourra se faire automatiser mais j'en parlerais plus loin.

    C'est simple, tout se passe dans le fichier /etc/nixos/configuration.nix qui contient l'état désiré du système (ce que veut l'utilisateur) et la commande nixos-rebuild applique et s'occupe de tout. Voyons voir un cas concret, prenons mon fichier:

    # Edit this configuration file to define what should be installed on
    # your system.  Help is available in the configuration.nix(5) man page
    # and in the NixOS manual (accessible by running ‘nixos-help’).
    
    { config, pkgs, ... }:
    
    {
      imports =
        [ # Include the results of the hardware scan.
          ./hardware-configuration.nix
        ];
    
      # Bootloader.
      boot.loader.systemd-boot.enable = true;
      boot.loader.efi.canTouchEfiVariables = true;
      boot.supportedFilesystems = [ "ntfs" ];
    
      networking.hostName = "debiancerlinux"; # Define your hostname.
      # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.
    
      # Configure network proxy if necessary
      # networking.proxy.default = "http://user:password@proxy:port/";
      # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
    
      # Enable networking
      networking.networkmanager.enable = true;
    
      # Set your time zone.
      time.timeZone = "Europe/Paris";
    
      # Select internationalisation properties.
      i18n.defaultLocale = "fr_FR.UTF-8";
    
      i18n.extraLocaleSettings = {
        LC_ADDRESS = "fr_FR.UTF-8";
        LC_IDENTIFICATION = "fr_FR.UTF-8";
        LC_MEASUREMENT = "fr_FR.UTF-8";
        LC_MONETARY = "fr_FR.UTF-8";
        LC_NAME = "fr_FR.UTF-8";
        LC_NUMERIC = "fr_FR.UTF-8";
        LC_PAPER = "fr_FR.UTF-8";
        LC_TELEPHONE = "fr_FR.UTF-8";
        LC_TIME = "fr_FR.UTF-8";
      };
    
      # Enable the X11 windowing system.
      services.xserver.enable = true;
    
      # Enable the GNOME Desktop Environment.
      #services.xserver.displayManager.gdm.enable = true;
      #services.xserver.desktopManager.gnome.enable = true;
      services.gnome.games.enable = true;  
    
      # Enable the KDE Plasma Desktop Environment.
      #services.xserver.displayManager.sddm.enable = true;
      #services.xserver.desktopManager.plasma5.enable = true;
    
      # Enable autres bureaux.
      services.xserver.displayManager.lightdm.enable = true;
      services.xserver.desktopManager.xfce.enable = true;
      services.xserver.desktopManager.mate.enable = true;
      #services.xserver.windowManager.xmonad.enable = true;
      #services.xserver.windowManager.twm.enable = true;
      #services.xserver.windowManager.icewm.enable = true;
      #services.xserver.windowManager.i3.enable = true;
      #services.xserver.windowManager.herbstluftwm.enable = true;
    
      # Activer l'autologin.
      services.xserver.displayManager.autoLogin.enable = true;
      services.xserver.displayManager.autoLogin.user = "sebastien";
    
      services.xserver.videoDrivers = [ "nvidia" ];
      #services.xserver.displayManager.defaultSession = "gnome";
    
      # Pour l'utilisation de flatpak:
      services.flatpak.enable = true;
      xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
      #xdg.portal.config.common.default = "gtk";
    
      # Configure keymap in X11
      services.xserver = {
        layout = "fr";
        xkbVariant = "";
      };
    
      # Configure console keymap
      console.keyMap = "fr";
    
      # Enable CUPS to print documents.
      services.printing.enable = true;
      services.printing.drivers = [ pkgs.hplip ];
      services.avahi.enable = true;
      # for a WiFi printer
      services.avahi.openFirewall = true;
      # for an USB printer
      #services.ipp-usb.enable = true;
      # scan
      hardware.sane.enable = true;
      hardware.sane.extraBackends = [ pkgs.hplipWithPlugin ];
    
      # Activer le Bluetooth
      hardware.bluetooth.enable = true;
      #hardware.bluetooth.package = [ pkgs.bluez ];
      services.blueman.enable = true;
      hardware.bluetooth.powerOnBoot = false;
    
      # Enable sound with pipewire.
      sound.enable = true;
      hardware.pulseaudio.enable = false;
      security.rtkit.enable = true;
      services.pipewire = {
        enable = true;
        alsa.enable = true;
        alsa.support32Bit = true;
        pulse.enable = true;
        # If you want to use JACK applications, uncomment this
        #jack.enable = true;
    
        # use the example session manager (no others are packaged yet so this is enabled by default,
        # no need to redefine it in your config for now)
        #media-session.enable = true;
      };
    
      # Enable touchpad support (enabled default in most desktopManager).
      # services.xserver.libinput.enable = true;
    
      # Define a user account. Don't forget to set a password with ‘passwd’.
      users.users.sebastien = {
        isNormalUser = true;
        description = "Sebastien CHAVAUX";
        extraGroups = [ "networkmanager" "wheel" "scanner" "lp" "disk" ];
        packages = with pkgs; [
        #  firefox
        #  thunderbird
        ];
      };
    
      # Allow unfree packages
      nixpkgs.config.allowUnfree = true;
    
      # List packages installed in system profile. To search, run:
      # $ nix search wget
      environment.systemPackages = with pkgs; [
      #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
       appimage-run
       amber-theme
       amule
       aspell
       aspellDicts.fr
       blueman
       bashInteractiveFHS
       #bluez
       bluez-tools
       brasero
       cataclysm-dda
       claws-mail
       deluge
       detox
       dgen-sdl
       discord
       enchant
       fceux
       firefox
       filezilla
       flare
       #flatpak
       gimp
       git
       glaxnimate
       gnome.gnome-boxes
       gnome.gnome-tweaks
       gnome-multi-writer
       gnomeExtensions.gsconnect
       gnome.simple-scan
       hexchat
       hplip
       htop
       hugo
       humanity-icon-theme
       hunspell
       hunspellDicts.fr-moderne
       hunspellDicts.fr-any
       hunspellDicts.fr-classique
       ispell
       libsForQt5.ghostwriter
       libsForQt5.kdenlive
       libsForQt5.soundkonverter
       libsForQt5.libkdegames
       libreoffice
       gspell
       mc
       minidlna
       minetest
       mldonkey
       mplayer
       mpv
       neofetch
       nestopia
       nodejs_18
       ntfs3g
       obs-studio
       p7zip
       pitivi
       qbittorrent
       quodlibet
       retroarchFull
       rocksndiamonds
       scummvm
       smplayer
       soundconverter
       sound-juicer
       the-legend-of-edgar
       thunderbird
       typora
       ubuntu_font_family
       vlc
       wesnoth
       wget
       wine-staging
       #vscode-with-extensions
       vscode-fhs
       xsane
       xarchiver
       xfce.thunar-archive-plugin
       xfce.thunar-volman
       xfce.xfce4-pulseaudio-plugin
       #xfce.xfce4-volumed-pulse
       yaru-theme
       yt-dlp
       zeroadPackages.zeroad-unwrapped
       zola
       # wget
      ];
    
      # Some programs need SUID wrappers, can be configured further or are
      # started in user sessions.
      # programs.mtr.enable = true;
      # programs.gnupg.agent = {
      #   enable = true;
      #   enableSSHSupport = true;
      # };
    
      # List services that you want to enable:
    
      # Enable the OpenSSH daemon.
      #services.openssh.enable = true;
      #services.openssh.openFirewall = true;
      #services.openssh.ports = [ 4444 ];
    
      # Open ports in the firewall.
      #networking.firewall.allowedTCPPorts = [ 4444 ];
      #networking.firewall.allowedUDPPorts = [ 4444 ];
      # Or disable the firewall altogether.
      networking.firewall.enable = true;
    
      # This value determines the NixOS release from which the default
      # settings for stateful data, like file locations and database versions
      # on your system were taken. It‘s perfectly fine and recommended to leave
      # this value at the release version of the first install of this system.
      # Before changing this value read the documentation for this option
      # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
      system.stateVersion = "23.11"; # Did you read the comment?
      system.autoUpgrade.enable = true;
      system.autoUpgrade.allowReboot = false;
      system.autoUpgrade.channel = "https://channels.nixos.org/nixos-23.11";
      nix.optimise.automatic = true;
      nix.gc = {
       automatic = true;
       dates = "weekly";
       options = "--delete-older-than 7d";
    };
      nix.settings.auto-optimise-store = true;
    
      ##Commandes Experimentales
      nix.settings.experimental-features = [ "flakes" "nix-command" ];
    }

    Commençons par le langage, c'est du nix , c'est spécial, c'est pas pire que d'autres, c'est pas mieux, je trouve que le fichier de conf est compréhensible, d'après Wikipedia c'est un langage de programmation fonctionnel paresseux. Perso, je trouve que ça me fait penser de loin à JS, en même temps je ne suis pas développeur.

    Maintenant qu'on a fait cet aparté, reprenons, ce fichier (configuration.nix) placé au bon endroit (/etc/nixos/) suivit d'un sudo nixos-rebuild switch va demander au système de construire comme je l'entends mon OS:

    • définir mon hostname:
    networking.hostName = "debiancerlinux"; # Define your hostname.
    • mes locales:
      # Set your time zone.
      time.timeZone = "Europe/Paris";
    
      # Select internationalisation properties.
      i18n.defaultLocale = "fr_FR.UTF-8";
    
      i18n.extraLocaleSettings = {
        LC_ADDRESS = "fr_FR.UTF-8";
        LC_IDENTIFICATION = "fr_FR.UTF-8";
        LC_MEASUREMENT = "fr_FR.UTF-8";
        LC_MONETARY = "fr_FR.UTF-8";
        LC_NAME = "fr_FR.UTF-8";
        LC_NUMERIC = "fr_FR.UTF-8";
        LC_PAPER = "fr_FR.UTF-8";
        LC_TELEPHONE = "fr_FR.UTF-8";
        LC_TIME = "fr_FR.UTF-8";
      };
    • activer l'interface graphique avec l'environnement qui va bien:
      # Enable the X11 windowing system.
      services.xserver.enable = true;
    
      # Enable the GNOME Desktop Environment.
      #services.xserver.displayManager.gdm.enable = true;
      #services.xserver.desktopManager.gnome.enable = true;
      services.gnome.games.enable = true;  
    
      # Enable the KDE Plasma Desktop Environment.
      #services.xserver.displayManager.sddm.enable = true;
      #services.xserver.desktopManager.plasma5.enable = true;
    
      # Enable autres bureaux.
      services.xserver.displayManager.lightdm.enable = true;
      services.xserver.desktopManager.xfce.enable = true;
      services.xserver.desktopManager.mate.enable = true;
      #services.xserver.windowManager.xmonad.enable = true;
      #services.xserver.windowManager.twm.enable = true;
      #services.xserver.windowManager.icewm.enable = true;
      #services.xserver.windowManager.i3.enable = true;
      #services.xserver.windowManager.herbstluftwm.enable = true;
    • activer l'autologin pour mon utilisateur:
     # Activer l'autologin.
      services.xserver.displayManager.autoLogin.enable = true;
      services.xserver.displayManager.autoLogin.user = "sebastien";
    • utiliser les pilotes proprios de Nvidia:
      services.xserver.videoDrivers = [ "nvidia" ];
      #services.xserver.displayManager.defaultSession = "gnome";

    Bon, je pense que vous avez compris un peu l'idée et que c'est assez explicite pour ne pas passer au scribe ligne par ligne, mais rajoutons tout de même le choix des paquets (logiciels) qu'on veut, ceux-ci sont déclarables au niveau de l'utilisateur ( users.users.sebastien ) ou au niveau du système ( environment.systemPackages ). Je peux déclarer les paquets pour l'ensemble des utilisateurs (typiquement les trucs tel que neofetch , htop , mc ) et je peux installer des paquets qui ne seront visibles qu'au niveau de l'utilisateur. Je pourrai très bien créer un second utilisateur et lui donner une autre liste de paquets, il n'aura pas les mêmes programmes d'installés, en gros il ne verra pas les programmes qui sont pour moi et moi je ne verrai pas les siens à moins qu'ils fassent partie de la déclaration du système ou qu'on l'a en commun et si paquets communs y a, les données sont mutualisés pour économiser de la place. Bref, chacun peut avoir son OS personnalisé sans empiéter sur celui des autres.

    Si quelque chose ne va pas, il ne construit pas le système et nous préviens de ce qui ne va pas, nous donnant même un exemple de ce qui est attendu. Si c'est bon, il build (littéralement c'est de la compilation) et on reboot, on s'aperçoit alors qu'il nous a fait une ligne de plus dans le grub avec l'ancien système et le nouveau.

    Alors pourquoi NixOS est mieux pour moi? C'est assez simple à comprendre, Debian était déjà ennuyeuse car elle nécessite une maintenance proche de zéro, avec Nixos on est sur du zéro maintenance puisque celle-ci se résume à l'édition du fichier configuration.nix , rien d'autre. Si ce fichier ne bouge pas, il n'y a rien de changé, on peut aussi automatiser les mises à jour, mais on verra plus bas. Si changement, nixpkg va s'occuper de tout, tout seul, d'une façon invisible, comme par magie, un peu comme une boite noire et incompréhensible, c'est efficace, ça "justemarchecommeilfaut"!

    De manière un peu obscure, cette magie s'occupe de désinstaller et d'installer ce qui est demandé, générer les configurations des services, faire une sauvegarde avant et après le build… C'est tellement puissant que je peux versionner ma config avec git. C'est tout aussi facilement que je reviens en arrière si je ne suis pas satisfait de mes changements.

    Bref, le système est toujours dans un état propre et à jour. J'aime cette sensation du tank que ça procure, puisque le système aussi est versionné. Chaque nouveau nixos-rebuild exécuté avec succès, ajoute une nouvelle entrée dans Grub pour charger votre système nouvellement créé. Actuellement, je peux choisir de booter sur différentes générations du système (différentes options sont disponibles tel que "NixOS generation 35 - 2024-05-15" ou "NixOS generation 36 - 2024-05-15") qui me permettent de facilement démarrer à un état antérieur du système. C'est simple, magique, ça "justemarche", j'adhère…

    La gestion des paquets est vraiment originale, il n'y en a pas, pas comme on l'entends classiquement dans les autres distributions! C'est très simple je demande au système que tel logiciel soit disponible en l'ajoutant dans la liste des applications de configuration.nix (vu plus haut) et lui s'occupe de tout. À l'inverse, je ne veux plus d'un logiciel, je supprime (ou commente) sa ligne dans configuration.nix , c'est tout. Mon système est propre et il le reste, pas de dépendances restantes, pas de restes de configurations, ni de fichiers…

    Exemple d'applications ajoutées:

      environment.systemPackages = with pkgs; [
      #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
       appimage-run
       amber-theme
       amule
       aspell
       aspellDicts.fr

    Exemple d'applications retirées:

      environment.systemPackages = with pkgs; [
      #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
       #appimage-run
       amber-theme
       #amule
       aspell
       aspellDicts.fr

    Notez que pour supprimer les logiciels appimage-run et amule j'ai seulement commenté (rajouté un # devant) les lignes et que j'aurais très bien pu supprimer les lignes directement.

    Tous les fichiers de l'OS sont en lecture seule, il n'est pas possible d'éditer un fichier de configuration pour ajouter ou changer une option. Par exemple, pour Lightdm, il n'y aura pas de fichier lightdm.conf dans /ect pour automatiser la connexion d'un utilisateur, il suffira de rajouter deux lignes dans configuration.nix :

    # Activer l'autologin.
      services.xserver.displayManager.autoLogin.enable = true;
      services.xserver.displayManager.autoLogin.user = "sebastien";

    Mais allons plus loin, admettons que je veux tester un truc, je sais pas moi, par exemple Element un client pour matrix, juste le tester car il y a plein d'autres clients et je veux faire mon choix, pas la peine de l'installer, Nixos ou plutôt la commande Nix va créer un nouvel environnement temporaire (shell) où le programme est disponible. Tant que je ne quitte pas le shell, j'aurais le programme , si je quitte le shell, l’environnement est détruit. J'aime bien ce que je lis un peu partout en parlant de Nixos: Pensez containers, mais sans les containers. Plus concrètement, sous Linux (et ailleurs aussi), quand on appelle un binaire ls par exemple, le shell (bash par exemple) va chercher le chemin dans $PATH , Nix utilise ça pour permettre de faire des "virtualenv" généralisés, quand on fait un nix-shell , ça met temporairement dans le $PATH le chemin des paquets demandés. Nix-env (je n'en parle pas plus car on perd la puissance de Nix pour l'utiliser comme un simple gestionnaire de paquets classique, style DNF , APT , Pacman …) fonctionne pareil, sauf que ça le met dans virtualenv global (celui de la session utilisateur). En gros nix-shell c'est comme bash -c 'source venv/bin/activate; bash' , si on sort du shell les dépendances disparaissent. Prenons un cas concret, je vais repartir sur mon exemple avec Element que je n'ai pas sur mon système:

    [sebastien@debiancerlinux:~/git/11ty]$ element
    The program 'element' is not in your PATH. It is provided by several packages.
    You can make it available in an ephemeral shell by typing one of the following:
      nix-shell -p element
      nix-shell -p elements
      nix-shell -p elementsd
      nix-shell -p element-web
      nix-shell -p element-desktop
      nix-shell -p element-web-unwrapped
      ...

    Je l'installe temporairement dans un shell et je le lance depuis celui-ci:

    [sebastien@debiancerlinux:~/git/11ty]$nix-shell -p element-desktop
    [nix-shell:~/git/11ty]$ element-desktop

    Voila, je peux l'utiliser comme si il était réellement installer en durs sur mon système…

    Pour quitter le shell:

    [nix-shell:~/git/11ty]$ exit
    exit
    
    [sebastien@debiancerlinux:~/git/11ty]$

    Ça permet de créer des environnements de développement reproductibles qu'on pourra partager. On fait notre shell.nix qui aura tout le nécessaire à notre projet et un nix-shell plus tard ça roule.

    C'est une nouvelle façon de voir l'informatique, il n'y a plus de sens d'installer à tout va des applications qu'on utilise rarement, ces trucs dont je n'ai besoin que trop ponctuellement. Et puis les autres applications que j'utilise quotidiennement, voir plusieurs fois par jour et que je continue d'indiquer dans mon configuration.nix .

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/seb95/journaux/nixos-la-distribution-reproductible-et-declaratif

    • chevron_right

      LLM auto-hébergés ou non : mon expérience

      news.movim.eu / LinuxFRJournaux · Yesterday - 11:58 · 4 minutes

    Sommaire

    Introduction

    En tant que grand utilisateur des LLM (Large Language Models), je trouve que ce sont d'excellents outils pour diverses tâches comme l'analyse de logs, l'aide à la programmation de scripts, etc. Cependant, une question cruciale se pose rapidement : faut-il les auto-héberger ou les utiliser via des services en ligne ? Dans cet article, je partage mon expérience sur ce sujet.

    Catégories de LLM

    Je classe les LLM en trois catégories principales :

    1. Les petits modèles

    Ces modèles peuvent tourner localement sur votre machine, lentement sur le CPU ou plus rapidement avec un GPU d'au moins 8 Go de mémoire (NVIDIA, AMD ou Mac). Ils fonctionnent en local, sans connexion internet, ce qui est idéal pour la confidentialité. Cependant, ils sont vite limités et conviennent mieux pour des tâches spécifiques comme le RAG (Retrieval Augmented Generation) ou s'ils ont été fine-tunés dans un domaine précis.

    Exemples : LLaMA 3 8b, Mistral 7b, phi3 3b, et tous les modèles en dessous de 10 à 15 milliards de paramètres.

    2. Les modèles moyens

    Ces modèles peuvent également tourner localement si vous avez un bon GPU avec suffisamment de mémoire (32 Go, voire 16 Go pour certains modèles quantifiés sur 2 bits). Ils sont plus intelligents que les petits modèles, mais moins que les grands. Dans mon expérience, ils suffisent dans 95% des cas pour l'aide au codage et 100% pour la traduction ou la correction de texte.

    Exemples : LLaMA 3 70b, Mistral 8x7b (celui que j'utilise au quotidien), Command-R (35b), et tous les modèles jusqu'à 100 milliards de paramètres.

    3. Les grands modèles

    Pour faire tourner ces modèles localement, il faut beaucoup d'argent. Ce sont généralement des modèles non ouverts ou des modèles ouverts de très grande taille.

    Exemples : le futur LLaMA 3 400b, Mistral 8x22b, QWen 110b, Command-R-Plus, DBRX.

    Auto-hébergement ou services en ligne

    L'auto-hébergement peut se faire de manière complète (frontend et backend) ou hybride (frontend auto-hébergé et inférence sur un endpoint distant). Pour le frontend, j'utilise deux containers Docker chez moi : Chat UI de Hugging Face et Open Webui.

    Pour le backend, on peut soit auto-héberger l'inférence avec des outils comme OLLaMa ou LLaMA.cpp, soit utiliser un endpoint externe via une API (OpenAI, Mistral AI, Together AI, Hugging Face, Groq, etc.). Ces endpoints offrent généralement des bibliothèques pour Python ou JavaScript, compatibles avec l'API OpenAI.

    Bien que l'inférence sur un endpoint ne soit pas idéale pour la confidentialité, c'est tout de même mieux que rien, car on peut changer d'endpoint pour brouiller les pistes.

    Ma configuration

    J'ai acheté d'occasion un ordinateur Dell Precision 5820 avec 32 Go de RAM, un CPU Xeon W-2125, une alimentation de 900W et deux cartes NVIDIA Quadro P5000 de 16 Go de RAM chacune, pour un total de 646 CHF.

    J'ai installé Ubuntu Server 22.4 avec Docker et les pilotes NVIDIA. Ma machine dispose donc de 32 Go de RAM GPU utilisables pour l'inférence. J'utilise OLLaMa, réparti sur les deux cartes, et Mistral 8x7b quantifié sur 4 bits (2 bits sur une seule carte, mais l'inférence est deux fois plus lente). En inférence, je fais environ 24 tokens/seconde. Le chargement initial du modèle (24 Go) prend un peu de temps. J'ai également essayé LLaMA 3 70b quantifié sur 2 bits, mais c'est très lent (3 tokens/seconde).

    Consommation électrique

    Au repos, mon infrastructure (1 serveur Proxmox, 1 serveur de sauvegarde Proxmox, 1 Synology DS218+, la machine d'inférence, le routeur, le switch et l'onduleur) consomme environ 260W.

    En inférence, la consommation monte à environ 420W, soit une puissance supplémentaire de 200W. Sur 24h, cela représente une consommation de 6,19 kWh, soit un coût de 1,61 CHF/jour.

    Pour réduire cette consommation et les coûts, plusieurs options sont possibles :

    1. Installer des panneaux solaires (trop cher pour moi actuellement, mais je vais brancher un panneau solaire de 600W maximum sur une prise, comme autorisé en Suisse).
    2. Arrêter la machine d'inférence la nuit.
    3. Faire l'inférence sur des endpoints (moins idéal pour la confidentialité).

    Inférence sur des endpoints

    Hugging Face permet de faire de l'inférence sur tous les modèles de moins de 10 Go de RAM et sur quelques gros modèles (LLaMA 3 70b, Mistral 8x22b, etc.). Il est possible de cloner Chat UI qui tourne sur Hugging Face et de le faire tourner dans un espace privé. Attention, cela peut parfois être lent le soir, même avec un abonnement à 9€/mois.

    Together AI est une société américaine qui offre un crédit de 25$ à l'ouverture d'un compte. Les prix sont les suivants :

    • Mistral 8x7b : 0,60$/million de tokens
    • LLaMA 3 70b : 0,90$/million de tokens
    • Mistral 8x22b : 1,20$/million de tokens

    Mistral AI est une société française qui propose des modèles Mistral, avec un paiement au million de tokens selon le poids du modèle.

    Groq permet une inférence très rapide (300 à 500 tokens/seconde pour LLaMA 3 ou Mistral 8x7b). Lors de ma dernière utilisation, c'était gratuit car en phase de bêta.

    Les modèles propriétaires comme ChatGPT sont généralement trop chers, bien qu'ils puissent résoudre certains problèmes que mes modèles ne parviennent pas à résoudre (et vice-versa).

    Conclusion

    En résumé, l'auto-hébergement des LLM offre un meilleur contrôle sur la confidentialité, mais nécessite des investissements en matériel et en consommation électrique. Les services en ligne sont une alternative intéressante, mais avec des compromis en termes de confidentialité et de coûts. Le choix dépendra de vos besoins spécifiques et de votre budget.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/jobpilot/journaux/llm-auto-heberges-ou-non-mon-experience

    • chevron_right

      Nhacai77

      news.movim.eu / LinuxFRJournaux · Yesterday - 11:56

    Khám phá Kubet77 - một địa điểm trực tuyến độc đáo cho người yêu thích giải trí. Với sự đa dạng trong trò chơi và các chương trình khuyến mãi hấp dẫn, Kubet77 mang đến cho người chơi những trải nghiệm thú vị và cơ hội chiến thắng đầy bất ngờ.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/kubet77chinhthuc12/journaux/nhacai77

    • chevron_right

      L’IA permet-elle de voir ou entendre le futur proche ? et notre cerveaux, le peut-il ?

      news.movim.eu / LinuxFRJournaux · 3 days ago - 19:32 · 1 minute

    Salut Journal,

    Je tenais à te faire part d’une réflexion du jour…

    J’ai récemment fait l’acquisition d’un casque couvrant bluetooth. J’étais sur le quai de la gare et j’écoutais un « le meilleur de Schubert »…

    Le casque couvrant atténue de fait le bruit ambiant, mail il propose également une fonctionnalité numérique, qui repose sur des micros, pour encore réduire la perception de ce bruit.

    Je me dis alors qu’il doit y avoir probablement une légère latence malgré tout, entre le son qui arrive aux micros et le son (« inverse » j’imagine) émis par les haut-parleurs…

    Sauf que je me dis que sur base d’une décomposition en séries de Fourier, un algorithme peut compenser cette latence.

    Et puis je me dis que de nos jours ont fait mieux pour anticiper toute sorte de signaux plus ou moins complexes, l’IA !

    Alors je délire dans ma tête et j’imagine une machine qui, sur base du contexte, et de nombreuses autres données, capteurs et sources, pourrait probablement estimer la suite du son ! Et pourquoi pas nous donner à entendre les 2 ou 3 secondes prochaines, à l’avance ! Les prochains mots qui vont être prononcés par notre interlocuteur, etc.

    Serait-ce diable possible ?

    À ton avis, qu’en penses-tu ?

    Et aussi, je repense à ces expériences qui montreraient que nous agissons une fraction de seconde avant d’avoir pris conscience de la situation, et avant de connaître la raison et le sens que nous prétendrons avoir de ces actions.

    Et je me demande si cela est si extraordinaire que ça finalement…

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/space_e_man/journaux/l-ia-permet-elle-de-voir-ou-entendre-le-futur-proche-et-notre-cerveaux-le-peut-il

    • chevron_right

      ICQ sera bronsonisé fin juin

      news.movim.eu / LinuxFRJournaux · 5 days ago - 06:11 · 1 minute

    Bonjour Nal,

    Le mois prochain nous ne pourrons plus clavarder via ce célèbre service privateur . C'est l'occasion de passer sur une alternative libre, oui mais laquelle ?

    • IRC ? C'est sans doute le plus simple et en plus depuis la version 3 , certains clients/serveurs gèrent enfin un historique ;
    • XMPP ? Avec ses milliers de XEP et son actualité riche , c'est sans doute le plus complet. Bon par contre, il va falloir se mettre d'accord pour avoir le même client et le même serveur, sinon on aura le même niveau de fonctionnalités que talk .
    • Matrix.org ? Sans doute le plus sécurisé niveau chiffrement, mais attention à ne pas perdre ses clefs. Là aussi il faudra se mettre d'accord sur un client commun, car ils ne sont pas tous égaux.
    • Delta Chat ? Un bon compromis entre sécurité, fonctionnalité et simplicité. Par contre, il n'y a qu'un seul client et il n'a pas de version web.

    Ou alors, on développe enfin une nouvelle solution qui adressera tous les besoins… Ça ne doit pas être si compliqué de faire un chat !

    standards

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/devnewton/journaux/icq-sera-bronsonise-fin-juin

    • chevron_right

      windows linuxifié, linux windowsifié?

      news.movim.eu / LinuxFRJournaux · 6 days ago - 16:47 · 1 minute

    bonjour,

    depuis quelques mois, les changements et améliorations (ou pas) des deux os concurrents, apparaissent une terminologie qui m'a parue assez étonnante, mais potentiellement vraie par moment :
    "windows s'est linuxifié, linux s'est windowsifié"

    pour ma part, je pense que c'est en partie vrai, de :

    *coté microsoft :
    *arrivée de différents outils pratiques pour les dev
    *clic droit sur le menu démarrer comme raccourci vers de nombreux outils pour.. non néophytes
    *arrivée de différentes solutions pour émuler linux sur windows

    *financement de projets de l'OSS
    *microsoft azure tournerait sous linux (véridique?)
    *microsoft devient peu à peu un fournisseur de services par abonnements (pourquoi s'en priverait-il?), abandonnant progressivement son modèle du début dse années 2000, à savoir lutter contre la concurrence des systèmes d'exp.

    coté linux :
    *acceptation du monde non libre, de par les pilotes, cf debian qui n'est plus 100% libre
    *fenêtres à gérer ressemblant de plus en plus au monde windows.. avoir une popup qui apparait ne me parait pas trop cohérent par rapport au monde linux.. (oui, sur mint/ubuntu, ca arrive)
    *flatpak et autres magasins génériques dispos sur toutes les distros
    *ultra-facilité d'ubuntu (qui fut qualifié jadis de "windows xp gratuit", avec les médailles qui correspondent)
    * récupération par l'industrie 3D et du JV : redhat, centos, steamos..
    https://gyptazy.ch/snac/gyptazy/p/1715705844.668875
    ( https://gyptazy.ch/snac/gyptazy/s/aa7e26100028b45ee45882640c6778b1.jpg )

    linux is the new windows?

    ..qu'en pensez vous?

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/tkr/journaux/windows-linuxifie-linux-windowsifie

    • chevron_right

      Sortie de Pavucontrol 6.0, et du fork PulseControl

      news.movim.eu / LinuxFRJournaux · 6 days ago - 05:51 · 2 minutes

    Cher journal,

    Hier est sorti pavucontrol 6.0, avec comme changements :

    • Migration de Gtk 3 vers 4.
    • Inclusion des fichiers UI comme ressource dans l'exécutable.
    • Renommage de "Set as fallback" en "Set as default" (en anglais, en français le texte parlait déjà de défaut).
    • Prise en charge des moniteurs 144 Hz par les bars de niveau du volume.
    • Lorsque l'icône d'une application ne peut pas être trouvé, utilisation d'une icône par défaut au lieu de l'icône d'image manquante, ce qui devrait être plus courant avec Gtk4.
    • Beaucoup de mise à jour des traductions.
    • Abandon d'autotools en faveur de meson.
    • La dépendance à libcanberra a été rendue optionnelle.

    https://www.freedesktop.org/software/pulseaudio/pavucontrol/

    Je suis fier d'avoir été l'auteur des deux premiers points.

    Après m'être familiarisé avec le code de pavucontrol en effectuant un simple port où je tentais de rester aussi proche de possible que l'original, je me suis rendu compte qu'il y avait beaucoup de refactorisation du code et de modifications de l'interface que je souhaitais effectuer, et que je ne savais pas trop comment communiquer avec l'équipe actuelle, surtout rapidement (j'ai commencé à travailler sur le port après plus de deux mois sans réaction sur ma pull request).

    J'introduis donc PulseControl, un fork de pavucontrol utilisant libadwaita, qui vise à moderniser et améliorer l'interface.

    Quelques unes des différences :

    • Remplacement des menus contextuels (pour forcer l'arrêt d'un flux, ou pour renommer les périphériques) par des boutons. Les menus contextuels étaient peu pratiques, et difficile à découvrir (rien n'indiquait leur présence),
    • Les périphériques inaccessibles ou débranchés sont cachés par défaut, et affichées en fin de liste et en italique dans les menus déroulants,
    • Les différentes entrées de chaque onglet sont regroupées par type (par exemple Sortie matérielle ou virtuelle)
    • Ajout d'un bouton pour créer des sorties virtuelles, soit vide soit combinaison de deux sorties autres sorties.

    L'onglet Périphériques de sortie de pavucontrol sur mon ordinateur portable:
    Capture d'écran de pavucontrol

    Le même onglet sur PulseControl
    onglet sur PulseControl

    Je suis à la recherche de gens pour tester PulseControl, vérifier que l'application fonctionne bien sur des configurations matérielles variées, et recueillir avis et suggestion sur l'interface.

    Vous pouvez tester PulseControl sur l'AUR si vous utilisez ArchLinux :

    https://aur.archlinux.org/packages/pulsecontrol-git

    ou bien compiler sur votre distribution :

    git clone -b fork --single-branch "https://gitlab.freedesktop.org/oxayotl/pavucontrol.git"
    cd pavucontrol && meson setup builddir -Dlynx=false && cd builddir && meson compile
    ./src/pulsecontrol
    

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/oxayotl2/journaux/sortie-de-pavucontrol-6-0-et-du-fork-pulsecontrol

    • chevron_right

      Dev update du jeu Bim!

      news.movim.eu / LinuxFRJournaux · 7 days ago - 20:52 · 7 minutes

    Sommaire

    La dernière fois je t'ai parlé de la mise en place du développement Bim!, un jeu mobile en PvP que je développe pour jouer avec les copains et aussi pour pratiquer l'approche « Entity Component System ».

    Le projet a bien avancé depuis et j'ai envie de faire un petit point bilan, que voici ci-dessous.

    Quoi de neuf dans Bim!

    Quand nous nous sommes quittés à la fin du dernier journal nous avions un jeu fonctionnel en réseau dans un terminal, ainsi que les base d'une application Android. Ce n'était pas grand chose mais cela permettait de valider l'outillage, le cycle de dev, et les grandes lignes de l'implémentation. Depuis j'ai ajouté pas mal de nouveautés.

    Dans le gameplay

    Pour commencer, j'ai ajouté le fait d'éliminer les joueurs qui sont en collision avec une flamme. Ensuite j'ai ajouté l'arrêt du jeu quand il ne reste au plus qu'un seul joueur. Oui, c'est tout bête, mais si ce n'est pas codé ça n'arrive pas…

    J'ai ensuite ajouté un joystick logiciel pour contrôler le joueur. Je n'aime pas trop cela mais pour l'instant je n'ai pas mieux. D'ailleurs figure-toi que ce n'est pas évident à régler ce truc et j'ai fait beaucoup d'allers-retours entre une simulation de stick analogique ou de croix directionnelle ; le déplacement unidirectionnel ou multidirectionnel quand on pointe plutôt en diagonale ; le contournement automatique des obstacles ou pas… C'est pas simple.

    Lorsque je développais le prototype dans un terminal j'avais implémenté le déplacement du joueur case par case. Avec l'application graphique cela ne collait évidemment plus. J'ai donc implémenté le déplacement fractionnel pour cette dernière.

    D'ailleurs, puisqu'on parle de cela, j'ai dû laisser de côté la version en ligne de commande. En effet, le joueur ne peut s'y déplacer d'une fraction d'une case, ce qui rendait les deux versions incompatibles. Soit le mouvement était saccadé dans l'application, soit il y avait une grosse latence dans le terminal. J'aurais pu isoler chaque mode (faire jouer les terminaux avec des terminaux) mais pour éviter d'avoir trop de cas à gérer j'ai préféré trancher.

    J'ai ensuite ajouté la possibilité de déposer une bombe. Et oui, j'ai implémenté les flammes avant les bombes qui les créent…

    Enfin, j'ai ajouté les power-ups de bombe et de flamme, ajoutant chacun une unité respective au joueur.

    Et avec ça, on a suffisamment pour faire quelques parties :)

    Réseau

    Du côté du réseau j'ai eu quelques petites surprises. Déjà quelques messages arrivaient incomplets si je stressais le système, donc il a fallu mettre des gardes pour les ignorer.

    J'ai aussi ajouté la connexion au serveur de jeu lorsqu'on lance l'appli. Sans ça, pas de jeu en réseau. Puis, cela en place, j'ai pu ensuite lancer une demande pour une nouvelle partie lorsque l'utilisateur clique sur le bouton « Play ». Ensuite j'ai ajouté la création de la partie du côté serveur, puis la proposition de la partie au joueur. Celui-ci doit la valider puis lorsque tous les joueurs ont validé le serveur donne le signal pour lancer la partie. Tout cela était assez simple puisque le protocole était déjà implémenté pour le client dans un terminal.

    Concernant le regroupement des joueurs pour les matchs, j'avais initialement prévu de les réunir dans une salle nommée à leur discrétion. Il s'est avéré que c'était assez galère à gérer, et vu qu'en plus cela demandait un peu d'interface pour saisir le nom de la salle, j'ai finalement mis cela de côté en faveur d'un regroupement au premier venu. En gros, si tu lances une partie, tu joueras avec les une à trois autres personnes qui en lancent en même temps.

    Autour du jeu

    J'ai ajouté de quoi faire de la localisation en utilisant Gettext. Ce n'était pas hyper simple car je voulais que le fichier .pot ainsi que les .po associés soient mis à jour lors du build. Il y a bien quelques commandes dispos pour utiliser Gettext via CMake mais rien qui ne collait avec ce que je voulais. J'ai donc du bricoler implémenter magistralement, en CMakeScript, une collecte des sources à partir des targets déclarés dans les CMakeLists.txt, puis créer un nouveau target générant le .pot à partir de ces sources. Une fois cela fait le chemin du .pot au fichier de traductions compilé est assez trivial.

    Bien évidemment ça aurait été trop simple s'il n'y avait eu que cela. Malheureusement j'ai aussi quelques chaînes à traduire depuis des fichiers de ressources. Pour que cela se mette bien avec xgettext j'ai ajouté une moulinette en Python pour extraire ces textes et les mettre dans un fichier C que xgettext saura lire, tout cela avec les dépendances de build correctes, ça donne:

      ressources
          |
          v
      moulinette    code source
          |              |
          v              |
      xgettext <---------+
          |
          v
        .pot            .po
          |              |
          v              |
       msgmerge <--------+
          |
          v
        msgfmt
          |
          v
         .mo
    

    Et encore, je passe sur le fait que, sans contournement, la génération du .pot déclenchait toute la chaîne de génération des fichiers de traduction car il embarque la date de création du fichier…

    Petite surprise avec les tests ThreadSanitizer qui échouent de temps en temps au lancement. Il s'avère que cet outil ainsi que AddressSanitizer n'aiment pas trop ASLR. Si jamais tu rencontres un crash au lancement d'un programme compilé avec ces outils tu sauras que ça se résout avec un sysctl vm.mmap_rnd_bits=28 (cf. le bug #1716 de ces outils ).

    Enfin, grosse étape, j'ai ajouté un conteneur Docker et des scripts pour le déploiement du serveur.

    En dehors de ces gros morceaux, j'ai ajouté quelques bricoles de rigueur comme la compilation avec -Werror et l'écriture des fichiers .gdb lors du build release,

    Note que je n'ai pas eu à retoucher l'environnement de build ni la CI, ce qui est assez chouette.

    Pour la suite

    Il me reste encore quelques étapes à compléter avant de faire un build public. Déjà il n'y a pas de possibilité de rejouer ; une fois le match terminé il faut relancer l'appli en faire un second. Ensuite il y a quelques ajustements de gameplay à faire : les bombes explosent trop tôt, le ressenti du stick n'est pas très agréable, le joueur devrait être bloqué par les bombes, et deux-trois autres trucs.

    Idéalement il faudrait que j'ajoute un peu de latence sur les inputs aussi pour éviter de voir l'autre joueur sauter d'une position à l'autre. Ce n'est pas indispensable pour jouer mais ça serait plus agréable.

    La dernière fois une personne très intelligente a laissé ce commentaire :

    il y aurait sans doute pas mal de boulot pour savoir ce qu'est un bon test automatique d'un jeu.

    Et bien je dois dire que les quelques tests que j'ai mis m'ont pas mal aidé dans le dev en validant le fonctionnel avant de gérer l'affichage. Ce sont des tests assez simples, du genre « flamme + joueur = élimination du joueur », ou encore « flamme + bombe = explosion de la bombe ». J'ai aussi quelques tests qui lancent un serveur et des demandes de parties, pour valider le protocole. De plus, ECS est vraiment confortable pour cela : pas besoin de créer tout un monde pour tester un truc, il suffit de créer les entités avec les bons composants et on peut faire tourner des systèmes indépendamment.

    Ces derniers temps j'ai un peu ignoré les tests sur les nouveautés et je dois dire que ça manque rapidement. Je sais que dès que j'aurai à toucher par exemple aux power-ups, je vais craindre de casser quelque chose. Les tests, c'est bien.

    Enfin un truc qui manque grandement ce sont de bons graphismes. Là dessus j'aimerais bien laisser la main à quelqu'un qui sait faire !


    Garanti dessiné au pad.

    Ça se trouve où

    Pour l'instant il n'y a pas de build public mais si tu veux tu peux cloner le dépôt et taper ./setup.sh --help . Tu devrais trouver un moyen de sortir un build Linux ou un build Android en debug (pour la release il faut configurer la signature). L'application se connectera alors directement au serveur actuellement déployé.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • wifi_tethering open_in_new

      This post is public

      linuxfr.org /users/julien_jorge/journaux/dev-update-du-jeu-bim