Vous pouvez lire le billet sur le blog La Minute pour plus d'informations sur les RSS !
Canaux
2732 éléments (56 non lus) dans 55 canaux
- Décryptagéo, l'information géographique
- Cybergeo (10 non lus)
- Revue Internationale de Géomatique (RIG)
- SIGMAG & SIGTV.FR - Un autre regard sur la géomatique (1 non lus)
- Mappemonde (10 non lus)
- Imagerie Géospatiale
- Toute l’actualité des Geoservices de l'IGN (2 non lus)
- arcOrama, un blog sur les SIG, ceux d ESRI en particulier
- arcOpole - Actualités du Programme
- Géoclip, le générateur d'observatoires cartographiques
- Blog GEOCONCEPT FR
- Géoblogs (GeoRezo.net)
- Conseil national de l'information géolocalisée
- Geotribu
- Les cafés géographiques (2 non lus)
- UrbaLine (le blog d'Aline sur l'urba, la géomatique, et l'habitat)
- Icem7
- Séries temporelles (CESBIO) (2 non lus)
- Datafoncier, données pour les territoires (Cerema)
- Cartes et figures du monde (2 non lus)
- SIGEA: actualités des SIG pour l'enseignement agricole
- Data and GIS tips
- Neogeo Technologies
- ReLucBlog
- L'Atelier de Cartographie
- My Geomatic
- archeomatic (le blog d'un archéologue à l’INRAP)
- Cartographies numériques (9 non lus)
- Veille cartographie
- Makina Corpus (3 non lus)
- Oslandia (5 non lus)
- Camptocamp
- Carnet (neo)cartographique
- Le blog de Geomatys
- GEOMATIQUE
- Geomatick
- CartONG (actualités)
Neogeo Technologies
-
9:00
Votre application est-elle compatible avec la licence Affero GPL 3.0???
sur Neogeo TechnologiesLors du changement de licence sur OneGeo Suite, il est important d’examiner la compatibilité des dépendances avec Affero GPL. Au vu des implications qui en découlent, est-il surtout possible de vérifier que nos dépendances aient toujours une licence conforme ?
La compatibilité entre les licences?La compatibilité de licences inclut deux éléments clé à prendre en compte :
- Le projet en lui-même (ex : un module Python, une bibliothèque de fonctions, etc.) ;
- Un travail dérivé (ex : un logiciel complet comme FireFox). Les travaux dérivés d’un projet, quant à eux, peuvent être des modifications du code du projet ou des produits intégrant le projet.
Une compatibilité des licences sera possible lorsque le travail dérivé possède une licence qui n’enfreint pas les règles de la licence du projet.
Les licences « copyleft » obligent à redistribuer les travaux dérivés sous la même licence (ou une compatible) pour protéger les libertés du code et de l’utilisateur. A contrario, les licences permissives autorisent le changement de licence, et il est également possible de faire un produit propriétaire, en intégrant des composants sous ce type de licence. Par exemple, Sony base son système d’exploitation propriétaire de la Playstation sur FreeBSD, qui est un logiciel libre sous licence FreeBSD.?
Source : [https:] (Creative Commons BY-SA-3.0)?Dans ce schéma, le code en domaine public est intégrable dans un produit MIT, lui-même dans un produit sous licence BSD, lui-même dans un produit licence Apache 2.0, et ainsi de suite jusqu’à la licence Affero GPL 3.
Deux catégories supplémentaires sont introduites par ce schéma?:
- Weakly protective (faiblement protectrice)?: elle implique qu’une modification du code doit être sous la même licence (donc rester libre). Néanmoins, l’intégration du projet peut se faire dans un produit sous une autre licence (même propriétaire).
- Network Protective (protectrice des utilisateurs réseau)?: la licence GPL protège les utilisateurs de la machine. Dans le cadre d’applications client-serveur, la partie serveur protège l’utilisateur du serveur, donc l’administrateur système. Une conformité à la GPL existe dans le cas où l’administrateur système de OneGeo Suite a accès aux sources modifiées du produit, mais pas l’utilisateur de la partie client. Les licences Network Protective permet aussi de protéger la liberté des utilisateurs du client.
Notez bien les versions des licences : par exemple la licence Apache 2.0 est compatible avec la licence LGPL, alors que la version 1.1 ne l’est pas.
Pour vous aiguiller, voici quelques incompatibilités à souligner?:
- Apache 1.1 ou MPL 1.1 (Mozilla Public Licence) ne sont pas compatibles avec les licences GPL, alors qu’une clause explicite de compatibilité existe dans les versions 2.0 de ces mêmes licences ;
- CC-BY-3.0?empêche de changer la licence, donc impossible à changer en AGPL. La version 4.0 permet explicitement de changer la licence en GPL 3.0 et donc en AGPL 3.0 ;
- Licence originelle BSD?: elle forçait à indiquer une notice de copyright dans la documentation du produit final, ce qui peut poser problème quand il y a de nombreux composants avec cette licence dans un produit.
En pratique, la conformité de licence peut se vérifier grâce au DevOps.
Pour illustrer nos projets, essentiellement en Python et Javascript, nous vous présentons deux outils simples qui pourront vous aider. Dans ces exemples, nous nous en servirons en ligne de commande, afin de comparer les licences des dépendances avec une liste validée de licences.?
Vérification des licences en Python?L’outil « pylic » analyse tous les modules Python installés dans l’environnement virtuel et compare leurs licences avec une section du pyproject.toml. S’il trouve un module avec une licence non validée, il sort en émettant erreur que l’on pourra exploiter dans une CI.
Commençons par installer le programme?:?
$ pip install pylic?
Ensuite, nous indiquons à “pylic” les licences compatibles avec notre logiciel, en lui donnant une liste de licences compatibles AGPL 3.0, dans la section tool.pylic de notre pyproject.toml :
$ cat << EOF >> pyproject.toml? [tool.pylic]? safe_licenses = [? "Apache Software License", "BSD License",? "BSD",? "MIT License",? "MIT",? "Mozilla Public License 2.0 (MPL 2.0)",? "GNU Library or Lesser General Public License (LGPL)",? "GNU Lesser General Public License v3 or later (LGPLv3+)",? ? "Python Software Foundation License",? "Historical Permission Notice and Disclaimer (HPND)"? ? ]? EOF?
Vous remarquerez que ces licences ont parfois des noms très similaires. En effet, “pylic” s’appuie sur le nom déclaré par le mainteneur du module python (dans le setup.cfg/setup.py…) qui n’est pas normalisé. Nous devons déclarer comme « safe » les deux identifiants « MIT » et « MIT License », alors que nous aurions pu utiliser les identifiants de licence SPDX dans la configuration du module Python.
Revenons à “pylic” et lançons une vérification :
$ pylic check? ✨ All licenses ok ✨?
Comment peut-on faire en cas de non-conformité ?
En commentant la licence « Apache Software License » de pyproject.toml, nous obtenons ce message :
$ pylic check? Found unsafe licenses:? ? nltk (3.8.1): Apache Software License? ? phonenumbers (8.13.8): Apache Software License? ? importlib-metadata (6.1.0): Apache Software License ? bleach (6.0.0): Apache Software License? ? cryptography (42.0.1): Apache Software License? ? regex (2023.12.25): Apache Software License? ? django-onegeo-suite (1.0.2): Apache Software License? ? requests (2.31.0): Apache Software License? ? packaging (23.2): Apache Software License? ? pyOpenSSL (24.0.0): Apache Software License? ? tzdata (2023.4): Apache Software License? ? elasticsearch (7.17.9): Apache Software License? ? async-timeout (4.0.3): Apache Software License? ? josepy (1.14.0): Apache Software License? ? django-onegeo-rproxy-mapstore2 (1.0.0b2): Apache Software License?
Plutôt simple, non???
De la même façon, on peut vérifier les licences des projets javascript avec license-checker. ilIl n’est toujours pas au courant des licences qui existent donc il faudra construire la liste à la main.?
L’utilisation est plutôt simple?:?
$ npx license-checker --onlyAllow "CC-BY-4.0;ISC;Apache-2.0;BSD-3-Clause;Custom: [https:] Domain;CC0-1.0;MPL-2.0" --production??
Package « @fortawesome/fontawesome-common-types@0.2.36 » is licensed under « MIT » which is not permitted by the –onlyAllow flag. Exiting.?
?On obtient des erreurs pour chaque licence non autorisée.?
L’option «?–onlyAllow?» permet de lister les licences autorisées séparées par des point virgules «?;?». Tandis que l’option «?–production?» permet d’écarter les licences des modules de la section «?devDependencies?» du package.json.?
Pensez aussi à corriger la section «?license?» du package.json pour ne pas perturber l’outil?:?
? "license": "AGPL-3.0-only",?
Je vous conseille aussi d’ajouter un script dans le package.json pour automatiser les vérifications?:?
cat package.json?? {? [...]? ? "scripts": {? [...]??? "lint": "vue-cli-service lint",? ??? "license-checker": "license-checker --onlyAllow \"MIT;CC-BY-4.0;ISC;Apache-2.0;BSD-3-Clause;Custom: [https:] Domain;CC0-1.0;MPL-2.0\" --production" ? },?
On peut ainsi lancer simplement?:?
$ npm run? license-checker?
Il existe probablement des outils plus sophistiqués pour vérifier la compatibilité des licences des bibliothèque externes utilisées par votre projet, notamment en utilisant la matrice de compatibilité des licences de l’OSADL?: [https:]] ?
Mais pour une utilisation légère et rapide dans une CI, ces deux outils feront l’affaire, en investissant néanmoins un peu de temps pour vérifier les nouvelles licences qui peuvent apparaître pendant la vie de votre projet.? ?
Sources?:?[https:]] ?: image compatibilité?
[https:]] ?: informations sur les compatibilités avec la GPL?
[https:]] : compatibilité Apache 2.0 et GPL?
[https:]] : utilisation de license-checker?
Rédacteur : Sébastien DA ROCHA
-
8:00
Le changement de licence OneGeo Suite
sur Neogeo TechnologiesAujourd’hui, l’implication de NEOGEO dans la communauté géomatique prend une autre dimension. En adoptant la licence Affero GPL pour nos logiciels OneGeo Suite et GeoContrib, nous souhaitons renforcer cet engagement.
Pourquoi ce changement ?À travers l’adoption de cette nouvelle licence, l’objectif est double :
1. Protéger les innovations : Nous souhaitons garantir que les développements réalisés par Neogeo et nos clients demeurent libres. Cette démarche permet de préserver la richesse et la valeur ajoutée de notre travail.
2. Partager et collaborer : Lorsqu’un acteur, issu ou non du monde de la géomatique, décide de s’appuyer sur nos travaux, ses contributions seront accessibles à toute la communauté. C’est un cercle vertueux : plus nous collaborons, plus le logiciel s’enrichit pour le bénéfice de tous.
Ce changement sera effectif à partir de la version OneGeo Suite 1.1 et pour la version stable GeoContrib 5.4.
Les 4 libertés du logiciel libre : Un rappel essentielLa notion de logiciel libre repose sur 4 libertés fondamentales :
- Le droit d’utiliser le logiciel sans restriction
- Le droit d’étudier le logiciel
- Le droit de diffuser le logiciel
- Le droit de modifier le logiciel et de diffuser les modifications
Le Copyleftt : En la matière, le copyleft est un gage d’égalité et de liberté qui vise à empêcher la restriction des droits des utilisateurs.
Le logiciel peut être modifié mais sa licence doit rester compatible, tout en conservant notamment le droit de copier le code source. Le copyleft garantit donc que les logiciels libres le restent.
Les licences libres en un coup d’œilIl existe actuellement plusieurs licences libres :
- Apache : Une licence permissive qui autorise la modification de la licence des fichiers modifiés exclusivement.
- GPL : Sans doute la licence libre la plus populaire et le pilier du copyleft. Elle exige que les produits dérivés et programmes associés adoptent une licence compatible, garantissant les mêmes droits aux utilisateurs.
- LGPL : Une variante de la GPL, la LGPL offre plus de flexibilité sur l’intégration du code dans un produit sous une autre licence (même non libre) tout en restant compatible avec la GPL.
- Affero GPL : La principale différence entre la GPL et l’AGPL réside dans la façon dont elles traitent l’utilisation du logiciel sur des serveurs distants. L’AGPL a été créée pour s’assurer que les services Web basés sur des logiciels libres donnent accès au code source aux utilisateurs distants (même s’ils n’ont pas téléchargé le logiciel).
D’autres licences sont également disponibles mais plus contraignantes en matière de libertés :
- SSPL (Server Side Public License) : utilisée par MongoDB et ElasticSearch, la licence limite la mise à disposition d’un logiciel sur des hébergeurs Cloud. Elle vise essentiellement les géants du cloud comme AWS. La plupart des utilisateurs peuvent continuer d’utiliser MongoDB et ElasticSearch comme avant. Cette licence n’est pas reconnue par l’OSI (Open Source Initiative) comme « open source » et celle-ci est parfois critiquée pour ses exigences jugées excessives ;
- Freemium (ou shareware) : les logiciels sont gratuits mais le plus souvent non modifiables
- CLAs (Contributor License Agreements) : À l’instar d’une NDA (Non Disclosure Agreement), l’agrément doit être signé par les contributeurs afin de céder leurs droits. Cette licence permet également à l’entreprise d’utiliser les contributions d’une manière qui ne serait pas permise par la licence open source sous laquelle le logiciel est publié (ex : changer de licence).
Le passage des solutions sur cette nouvelle licence traduit notre volonté de renforcer la liberté, la collaboration et l’innovation dans le domaine géomatique. Nous souhaitons également que ce changement profite à toute la communauté, ainsi que les évolutions qui en découleront.
Rédacteur : Sébastien DA ROCHA
-
16:12
GPT, capturez-les tous !
sur Neogeo TechnologiesChatGPT est un agent conversationnel qui peut vous aider au quotidien. Néanmoins, vous ne savez pas réellement ce que OpenAI, son créateur, fait de vos conversations. Il n’est, d’ailleurs, pas conseillé de lui parler de sujets confidentiels.
Si vous souhaitez l’utiliser dans vos produits, l’API peut rapidement coûter très cher (compter environ 3 centimes pour le traitement de cet article par exemple, multiplié par le nombre de requêtes par utilisateur, multiplié par les demandes de chaque utilisateur…). Heureusement, la communauté Open Source propose petit à petit des alternatives.
La première étape était la publication de Llama par Meta (Facebook). Il s’agit d’un modèle d’intelligence presque libre et limité à 500 millions d’utilisateurs. Au-delà, il faut les contacter pour avoir le droit de l’utiliser. Il est également possible de le récupérer sur nos ordinateurs et de s’en servir de façon strictement privée.
Pour télécharger le modèle, il faut néanmoins montrer patte blanche en remplissant un formulaire et recevoir un lien, par mail, avec une durée de vie limité. En cas d’expérimentation, cela peut vite devenir contraignant.
Démocratisation techniqueLes développeurs de llama.cpp (surtout Georgi GERGANOV) ont optimisé ce moteur qui vous permet de discuter avec les modèles Llama2.
Les modèles de Llama2Llama2 est disponible en plusieurs tailles (nombre de paramètres) : 7B, 13B et 70B. L’unité « B » correspond à des milliards de paramètres.
Sachant que chaque paramètre est stocké sur 2 octets (des flottants de demi-précision), il faut au moins 16Go de RAM pour charger le petit modèle 7B. Les gros modèles sont plus pertinents, mais beaucoup plus lents.
Les optimisationsLes développeurs de LLama.cpp ont travaillé sur 2 optimisations :
-
- Pouvoir lancer les calculs (appelés «?inférence?») sur le CPU en utilisant au maximum ses capacités (optimisation M1, AVX-512 ou AVX2…) et en codant le moteur d’inférence en C++ et sûrement des morceaux en assembleur? ;
- Compresser le modèle sans trop perdre de pertinence.
Pour ce dernier point, ils ont développé un codage flottant du 4bits : q4_0 (d’autres variantes avec plus de bits existent). Nous pouvons désormais utiliser un modèle 7B avec 4Go de RAM?! À noter que l’on peut tout de même un peu perdre en pertinence.
Le travail de llama.cpp est prodigieux mais difficile à utiliser : il arrive que le modèle réponde de manière erronée ou ne rende pas la main après la réponse.
OllamaDésormais la relève existe : Ollama !
Considéré comme le docker des LLM, il nous permet de télécharger, questionner, supprimer des modèles en une ligne de commande. Concernant les performances, Ollama est une surcouche en Go et utilise llama.cpp.
Les instructions d’installation sont disponibles ici : [https:]
Une fois installé, vous pouvez télécharger un modèle aussi simplement que :
ollama pull llama2
Une fois téléchargé, vous pouvez le questionner comme ceci :
ollama run llama2 >>> comment faire une jointure entre 2 dataframes Pandas ? There are several ways to join two pandas DataFrames. Here are a few methods: 1. `merge()`: This is the most common method for joining two DataFrames. It joins the two DataFrames based on a common column, called the "join key". The joined DataFrame will have the columns from both DataFrames. "` df_left = pd.read_csv('left_data.csv') ...
Attention, Ollama installe aussi un service Systemd en arrière plan. Si vous préférez le lancer à la main, au hasard pour contrôler la RAM de disponible sur votre machine :
Quel modèle ?# désactiver le démarrage auto avec la machine sudo systemctl disable ollama.service # Couper réellement le service sudo systemctl stop ollama.service
Llama a apporté son lot de révolutions, mais d’autres équipes de chercheurs ont repris le flambeau, notamment Mistral AI qui a réussi à créer des petits modèles très efficaces.
Récemment, Hugging Face (l’équivalent de Github dans la sphère IA) a encore amélioré Mistral en créant Zephyr, un petit modèle qui a de très bons résultats pour parler dans plusieurs langues.
$ ollama run zephyr:7b >>> comment faire une jointure entre 2 dataframes Pandas ? Pour joindre deux DataFrames en Pandas, vous pouvez utiliser la méthode `merge()`. Ci-dessous une explication de comment utiliser cette méthode : 1. Assurez-vous que les deux DataFrames ont une colonne commune sur laquelle joindre les données. Soit df1 et df2, on appellera cette colonne 'common_column'. ...
Zephyr n’a pas de clause de restriction à 500 millions d’utilisateurs (licence Apache 2.0), il répond en français et sera plus économe en ressources.
Ci-dessous, une liste de quelques modèles :
S’il en détecte un, Ollama va automatiquement utiliser le GPU. Sinon, il se rabat sur le CPU en essayant de tirer parti des instructions disponibles (AVX2, AVX512, NEON pour les M1/M2…)
DockerSi vous utilisez l’image docker de Ollama, il faut penser à couper le service Ollama ou à changer de port TCP d’écoute dans le docker-compose.yaml.
Voici un docker-compose minimaliste :
--- version: '3.8' services: ollama: image: ollama/ollama:latest ports: - "11434:11434" volumes: - ollama:/root/.ollama restart: unless-stopped volumes: ollama:
Ensuite, un petit
docker compose up -d
pour lancer le serveur.Comment pouvons-nous lancer une inférence ?
$ docker compose exec ollama ollama run zephyr:7b >>> Salut Bonjour, Je suis heureux d'aider quelqu'un aujourd'hui. Votre expression "Salut" est une forme courante de salutation en français. En France, c'est souvent utilisé entre amis ou entre personnes qui connaissent déjà l'un l'autre. Dans les situations où vous souhaitez être plus formel ou professionnel, vous pouvez utiliser "Bonjour" ou "Bonsoir" suivi du prénom de la personne ou simplement "Madame" ou "Monsieur" si vous ne connaissez pas le prénom. J'espère que cela vous a été utile. Si vous avez d'autres questions, n'hésitez pas à me contacter. Bien à vous, [Votre nom] >>>
En revanche, utiliser la console de l’image n’est pas pratique, sauf si vous souhaitez télécharger une image et plus jamais y retoucher. Et surtout, nous pouvons utiliser l’API HTTP :
$ curl -X POST [localhost:11435] -d '{ "model": "zephyr:7b", "prompt": "raconte moi une courte histoire drôle"}' {"model":"zephyr:7b","created_at":"2024-01-11T15:27:47.516708062Z","response":"Il","done":false} {"model":"zephyr:7b","created_at":"2024-01-11T15:27:47.534749456Z","response":" y","done":false} ...
Pour faciliter la lecture de l’inférence, vous pouvez afficher le texte token par token dans notre app. Il est également possible de s’en servir en python. Voici un exemple de client inclut dans le dépôt :
Il est toujours possible d’utiliser le client installé précédemment ollama en ligne de commande, pour requêter le serveur à distance :
Docker et l’accélération avec une carte graphique Nvidia$ OLLAMA_HOST=127.0.0.1:11435 ollama run zephyr:7b-beta-q6_K "raconte moi une courte histoire drôle"
Vous remarquerez que l’inférence dans le docker n’est pas très rapide. En effet, docker ne laisse pas le container accéder à la carte graphique, par conséquent l’inférence se fait sur le CPU.
Pour cela, il faut installer un paquet fourni par Nvidia afin de configurer le docker proprement :
$ curl -fsSL [https:] | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L [https:] | \ sed 's#deb [https:] [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] [https:] | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list $ apt update $ apt install -y nvidia-container-toolkit
Une fois ce paquet installé, il faut utiliser l’outil fournit pour configurer docker :
$ nvidia-ctk runtime configure --runtime=docker
Cela va modifier votre configuration de docker
/etc/docker/daemon.json
pour activer un runtime nvidia :{ "runtimes": { "nvidia": { "args": [], "path": "nvidia-container-runtime" } } }
Ensuite, il suffit de redémarrer docker :
$ systemctl restart docker
Désormais, vous devriez pouvoir accéder à votre GPU Nvidia depuis le container :
$ docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu a48641193673: Already exists Digest: sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b Status: Downloaded newer image for ubuntu:latest Thu Jan 11 15:46:38 2024 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 525.147.05 Driver Version: 525.147.05 CUDA Version: 12.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA GeForce ... On | 00000000:2D:00.0 On | N/A | | 31% 33C P5 32W / 225W | 1778MiB / 8192MiB | 2% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+
Une fois cela terminé, l’accès doit être donné à votre container en modifiant le docker-compose.yaml:
--- version: '3.8' services: ollama: image: ollama/ollama:latest ports: - "11435:11434" volumes: - ollama:/root/.ollama restart: unless-stopped deploy: resources: reservations: devices: - driver: nvidia capabilities: [gpu] count: all volumes: ollama:
Grâce au
Conclusiondocker compose up -d
, notre inférence est désormais beaucoup plus rapide.Nous avons découvert comment utiliser les LLM libre, avec des projets comme Ollama et Zephyr, qui rendent l’IA plus démocratique et accessible à un plus grand nombre. Plus besoin de se soucier des coûts prohibitifs de l’API OpenAI, lorsque vous pouvez exploiter ces modèles de langage gratuits et Open source.
Que vous soyez un développeur, un chercheur ou un professionnel de l’IA, Ollama offre des opportunités passionnantes pour innover, créer et résoudre des problèmes. Le monde de l’IA est désormais entre vos mains.
SourcesRédacteur : Sébastien DA ROCHA
-
-
9:00
GPT, capturez-les tous !
sur Neogeo TechnologiesChatGPT est un agent conversationnel qui peut vous aider au quotidien. Néanmoins, vous ne savez pas réellement ce que OpenAI, son créateur, fait de vos conversations. Il n’est, d’ailleurs, pas conseillé de lui parler de sujets confidentiels.
Si vous souhaitez l’utiliser dans vos produits, l’API peut rapidement coûter très cher (compter environ 3 centimes pour le traitement de cet article par exemple, multiplié par le nombre de requêtes par utilisateur, multiplié par les demandes de chaque utilisateur…). Heureusement, la communauté Open Source propose petit à petit des alternatives.
La première étape était la publication de Llama par Meta (Facebook). Il s’agit d’un modèle d’intelligence presque libre et limité à 500 millions d’utilisateurs. Au-delà, il faut les contacter pour avoir le droit de l’utiliser. Il est également possible de le récupérer sur nos ordinateurs et de s’en servir de façon strictement privée.
Pour télécharger le modèle, il faut néanmoins montrer patte blanche en remplissant un formulaire et recevoir un lien, par mail, avec une durée de vie limité. En cas d’expérimentation, cela peut vite devenir contraignant.
Démocratisation techniqueLes développeurs de llama.cpp (surtout Georgi GERGANOV) ont optimisé ce moteur qui vous permet de discuter avec les modèles Llama2.
Les modèles de Llama2Llama2 est disponible en plusieurs tailles (nombre de paramètres) : 7B, 13B et 70B. L’unité « B » correspond à des milliards de paramètres.
Sachant que chaque paramètre est stocké sur 2 octets (des flottants de demi-précision), il faut au moins 16Go de RAM pour charger le petit modèle 7B. Les gros modèles sont plus pertinents, mais beaucoup plus lents.
Les optimisationsLes développeurs de LLama.cpp ont travaillé sur 2 optimisations :
- Pouvoir lancer les calculs (appelés « inférence ») sur le CPU en utilisant au maximum ses capacités (optimisation M1, AVX-512 ou AVX2…) et en codant le moteur d’inférence en C++ et sûrement des morceaux en assembleur ;
- Compresser le modèle sans trop perdre de pertinence.
Pour ce dernier point, ils ont développé un codage flottant du 4bits : q4_0 (d’autres variantes avec plus de bits existent). Nous pouvons désormais utiliser un modèle 7B avec 4Go de RAM ! À noter que l’on peut tout de même un peu perdre en pertinence.
Le travail de llama.cpp est prodigieux mais difficile à utiliser : il arrive que le modèle réponde de manière erronée ou ne rende pas la main après la réponse.
OllamaDésormais la relève existe : Ollama !
Considéré comme le docker des LLM, il nous permet de télécharger, questionner, supprimer des modèles en une ligne de commande. Concernant les performances, Ollama est une surcouche en Go et utilise llama.cpp.
Les instructions d’installation sont disponibles ici : [https:]] .
Une fois installé, vous pouvez télécharger un modèle aussi simplement que :
ollama pull llama2
Une fois téléchargé, vous pouvez le questionner comme ceci :
ollama run llama2 >>> comment faire une jointure entre 2 dataframes Pandas ? There are several ways to join two pandas DataFrames. Here are a few methods: 1. `merge()`: This is the most common method for joining two DataFrames. It joins the two DataFrames based on a common column, called the "join key". The joined DataFrame will have the columns from both DataFrames. ``` df_left = pd.read_csv('left_data.csv') ...
Attention, Ollama installe aussi un service Systemd en arrière-plan. Si vous préférez le lancer manuellement, au hasard pour contrôler la RAM de disponible sur votre machine, vous devez :
Quel modèle ?# désactiver le démarrage auto avec la machine sudo systemctl disable ollama.service # Couper réellement le service sudo systemctl stop ollama.service
Llama a apporté son lot de révolutions, mais d’autres équipes de chercheurs ont repris le flambeau, notamment Mistral AI qui a réussi à créer des petits modèles très efficaces.
Récemment, Hugging Face (l’équivalent de Github dans la sphère IA) a encore amélioré Mistral en créant Zephyr, un petit modèle qui a de très bon résultats pour parler dans plusieurs langues.
ollama run zephyr:7b >>> comment faire une jointure entre 2 dataframes Pandas ? Pour joindre deux DataFrames en Pandas, vous pouvez utiliser la méthode `merge()`. Ci-dessous une explication de comment utiliser cette méthode : 1. Assurez-vous que les deux DataFrames ont une colonne commune sur laquelle joindre les données. Soit df1 et df2, on appellera cette colonne 'common_column'. ...
Zephyr n’a pas de clause de restriction à 500 millions d’utilisateurs (licence Apache 2.0), il répond en français et sera plus économe en ressources.
Ci-dessous, une liste de quelques modèles :
S’il en détecte un, Ollama va automatiquement utiliser le GPU. Sinon, il se rabat sur le CPU en essayant de tirer parti des instructions disponibles (AVX2, AVX512, NEON pour les M1/M2…)
DockerSi vous utilisez l’image docker de Ollama, il faut penser à couper le service Ollama ou à changer de port TCP d’écoute dans le docker-compose.yaml.
Voici un docker-compose minimaliste :
--- version: '3.8' services: ollama: image: ollama/ollama:latest ports: - "11434:11434" volumes: - ollama:/root/.ollama restart: unless-stopped volumes: ollama:
Ensuite, un petit docker compose up -d pour lancer le serveur.
Comment pouvons-nous alors lancer une inférence ?
$ docker compose exec ollama ollama run zephyr:7b >>> Salut Bonjour, Je suis heureux d'aider quelqu'un aujourd'hui. Votre expression "Salut" est une forme courante de salutation en français. En France, c'est souvent utilisé entre amis ou entre personnes qui connaissent déjà l'un l'autre. Dans les situations où vous souhaitez être plus formel ou professionnel, vous pouvez utiliser "Bonjour" ou "Bonsoir" suivi du prénom de la personne ou simplement "Madame" ou "Monsieur" si vous ne connaissez pas le prénom. J'espère que cela vous a été utile. Si vous avez d'autres questions, n'hésitez pas à me contacter. Bien à vous, [Votre nom] >>>
En revanche, utiliser la console de l’image n’est pas pratique, sauf si vous souhaitez télécharger une image et plus jamais y retoucher. Et surtout, nous pouvons utiliser l’API HTTP :
curl -X POST [localhost:11435] -d '{ "model": "zephyr:7b", "prompt": "raconte moi une courte histoire drôle"}' {"model":"zephyr:7b","created_at":"2024-01-11T15:27:47.516708062Z","response":"Il","done":false} {"model":"zephyr:7b","created_at":"2024-01-11T15:27:47.534749456Z","response":" y","done":false} ...
Pour faciliter la lecture de l’inférence, vous pouvez afficher le texte token par token dans notre app. Il est également possible de s’en servir en python. Voici un exemple de client inclut dans le dépôt :
Il est toujours possible d’utiliser le client installé précédemment ollama en ligne de commande, pour requêter le serveur à distance :
Docker et l’accélération avec une carte graphique NvidiaOLLAMA_HOST=127.0.0.1:11435 ollama run zephyr:7b-beta-q6_K "raconte moi une courte histoire drôle"
Vous remarquerez que l’inférence dans le docker n’est pas très rapide. En effet, docker ne laisse pas le container accéder à la carte graphique, par conséquent l’inférence se fait sur le CPU.
Pour cela, il faut installer un paquet fourni par Nvidia afin de configurer le docker proprement :
curl -fsSL [https:] | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L [https:] | \ sed 's#deb [https:] [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] [https:] | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list apt update apt install -y nvidia-container-toolkit
Une fois ce paquet installé, il faut utiliser l’outil fournit pour configurer docker :
sudo nvidia-ctk runtime configure --runtime=docker
Cela va modifier votre configuration de docker /etc/docker/daemon.json pour activer un runtime nvidia :
{ "runtimes": { "nvidia": { "args": [], "path": "nvidia-container-runtime" } } }
Ensuite, il suffit de redémarrer docker :
systemctl restart docker
Désormais, vous devriez pouvoir accéder à votre GPU Nvidia depuis le container :
$ docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu a48641193673: Already exists Digest: sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b Status: Downloaded newer image for ubuntu:latest Thu Jan 11 15:46:38 2024 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 525.147.05 Driver Version: 525.147.05 CUDA Version: 12.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA GeForce ... On | 00000000:2D:00.0 On | N/A | | 31% 33C P5 32W / 225W | 1778MiB / 8192MiB | 2% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+
Une fois cela terminé, l’accès doit être donnée à votre container en modifiant le docker-compose.yaml:
--- version: '3.8' services: ollama: image: ollama/ollama:latest ports: - "11435:11434" volumes: - ollama:/root/.ollama restart: unless-stopped deploy: resources: reservations: devices: - driver: nvidia capabilities: [gpu] count: all volumes: ollama:
Grâce au docker compose up -d, notre inférence est désormais beaucoup plus rapide.
ConclusionNous avons découvert comment utiliser les LLM libre, avec des projets comme Ollama et Zephyr, qui rendent l’IA plus démocratique et accessible à un plus grand nombre. Plus besoin de se soucier des coûts prohibitifs de l’API OpenAI, lorsque vous pouvez exploiter ces modèles de langage gratuits et Open source.
Que vous soyez un développeur, un chercheur ou un professionnel de l’IA, Ollama offre des opportunités passionnantes pour innover, créer et résoudre des problèmes. Le monde de l’IA est désormais entre vos mains.
Sources :Rédacteur : Sébastien DA ROCHA
-
10:13
Séminaire, octobre 2022
sur Neogeo TechnologiesBrainstorming, ateliers de travail, balade en fat bike sur la plage…
L’air marin a permis aux collaborateurs de faire émerger de nouvelles idées qui confirment la vision commune des deux entreprises.
Retour en images sur le séminaire organisé pour les équipes de GEOFIT GROUP et de NEOGEO.
-
10:13
Atelier avec le SMEAG
sur Neogeo TechnologiesEn janvier dernier s’est déroulé un atelier avec les équipes du SMEAG – Syndicat Mixte d’Études et d’Aménagement de la Garonne.
L’objectif était de présenter la maquette réalisée dans le cadre de la refonte de leur site internet. Le résultat a été très ???????, les personnes présentes ont approuvées le parcours utilisateur et le design associé.
Nos équipes de production travaillent désormais sur la ????????????? et le ?????????????? du site.
-
10:09
OneGeo Suite, interview GIP ATGERI
sur Neogeo TechnologiesLors des Geo Data Days 2022, nous avons eu l’occasion d’interviewer AnneSAGOT Responsable du Pôle PIGMA, et Emeric PROUTEAU, Référent technique, à propos de la mise en place d’une nouvelle plateforme de données en Nouvelle-Aquitaine.
Ce projet, porté par nos équipes et le GIP ATGeRi, s’est passé «?????? ??? ??? ????????? », malgré les contraintes et imprévus que l’on vous laisse découvrir…
-
10:08
L’Open Source
sur Neogeo TechnologiesChez Neogeo, nous marchons à l’Open Source ! Mais qu’est ce que l’Open Source ?
En quelques slides, découvrez l’un de nos domaines d’expertise.