Cette semaine, j’ai déjeuné avec un ami dont les connaissances dans le domaine duMachineLearning et desLLM dépassent largement les miennes… J’en ai profité pour lui poser de nombreuses questions.
Voici ci-dessous quelques notes de ce que j’ai retenu de notre discussion.

Avertissement : Le contenu de cette note reflète les informations que j’ai reçues pendant cette conversation. Je n’ai pas vérifié l’exactitude de ces informations, et elles pourraient ne pas être entièrement correctes. Le contenu de cette note est donc à considérer comme approximatif. N’hésitez pas à me contacter à contact@stephane-klein.info si vous constatez des erreurs.

Histoire de Llama.cpp ?

Question : quelle est l’histoire de Llama.cpp ? Comment ce projet se positionne dans l’écosystème ?

D’après ce que j’ai compris, début 2023, PyTorch était la solution “mainstream” (la seule ?) pour effectuer de l’inférence sur le modèle LLaMa — sortie en février 2023.

PyTorch — écrit en Python et C++ — est optimisée pour les GPU, plus précisément pour le framework CUDA.
PyTorch est n’est pas optimisé pour l’exécution sur CPU, ce n’est pas son objectif.

Georgi Gerganov a créé Llama.cpp pour pouvoir effectuer de l’inférence sur le modèle LLaMa sur du CPU d’une manière optimisé. Contrairement à PyTorch, plus de Python et des optimisations pour Apple Silicon, utilisation des instructions AVX2 sur les CPU x86… Par la suite, « la boucle a été bouclée » avec l’ajout du support GPU en avril 2023.

À la question « Maintenant que Llama.cpp a un support GPU, à quoi sert PyTorch ? », la réponse est : PyTorch permet beaucoup d’autres choses, comme entraîner des modèles…

Aperçu de l’historique du projet :

Comment nommer Llama.cpp ?

Question : quel est le nom d’un outil comme Llama.cpp ?

Réponse : Je n’ai pas eu de réponse univoque à cette question.

C’est un outil qui effectue des inférences sur un modèle.

Voici quelques idées de nom :

  • Moteur d’inférence (Inference Engines) ;
  • Exécuteur d’inférence (Inference runtime) ;
  • Bibliothèque d’inférence.

Personnellement,JaiDécidé d’utiliser le terme Inference Engines.

Autre projet comme Llama.cpp ?

Question : Existe-t-il un autre projet comme Llama.cpp

Oui, il existe d’autres projets, comme llm - Large Language Models for Everyone, in Rust. Article Hacker News publié le 14 mars 2023 sous le nom LLaMA-rs: a Rust port of llama.cpp for fast LLaMA inference on CPU.

Et aussi, https://github.com/karpathy/llm.c - LLM training in simple, raw C/CUDA (from).
Le README de ce projet liste de nombreuses autres implémentations de Inference Engines.

Mais, à ce jour, Llama.cpp semble être l’Inference Engines le plus complet et celui qui fait consensus.

GPU vs CPU

Question : Jai l’impression qu’il est possible de compiler des programmes généralistes sur GPU, dans ce cas, pourquoi ne pas remplacer les CPU par des GPU ? Pourquoi ne pas tout exécuter par des GPU ?

Mon ami n’a pas eu une réponse non équivoque à cette question. Il m’a répondu que l’intérêt du CPU reste sans doute sa faible consommation énergique par rapport au GPU.

Après ce déjeuner, j’ai fait des recherches et je suis tombé sur l’article Wikipedia nommé General-purpose computing on graphics processing units (je suis tombé dessus via l’article ROCm).

Cet article contient une section nommée GPU vs. CPU, mais qui ne répond pas à mes questions à ce sujet 🤷‍♂️.

ROCm ?

Question : J’ai du mal à comprendre ROCm, j’ai l’impression que cela apporte le support du framework CUDA sur AMD, c’est bien cela ?

Réponse : oui.

J’ai ensuite lu ici :

HIPIFY is a source-to-source compiling tool. It translates CUDA to HIP and reverse, either using a Clang-based tool, or a sed-like Perl script.

RAG ?

Question : comment setup facilement un RAG ?

Réponse : regarde llama_index.

JaiDécouvert ensuite https://github.com/abetlen/llama-cpp-python

Simple Python bindings for @ggerganov’s llama.cpp library. This package provides:

  • Low-level access to C API via ctypes interface.
  • High-level Python API for text completion
    • OpenAI-like API
    • LangChain compatibility
    • LlamaIndex compatibility

dottextai / outlines

Il m’a partagé le projet https://github.com/outlines-dev/outlines alias dottxtai, pour le moment, je ne sais pas trop à quoi ça sert, mais je pense que c’est intéressant.

Embedding ?

Question : Thibault Neveu parle souvent d’embedding dans ses vidéos et j’ai du mal à comprendre concrètement ce que c’est, tu peux m’expliquer ?

Le vrai terme est Word embedding et d’après ce que j’ai compris, en simplifiant, je dirais que c’est le résultat d’une “sérialisation” de mots ou de textes.

JaiDécouvert ensuite l’article Word Embeddings in NLP: An Introduction (from) que j’ai survolé.JaimeraisUnJour prendre le temps de le lire avec attention.

Transformers ?

Question : et maintenant, peux-tu me vulgariser le concept de transformer ?

Réponse : non, je t’invite à lire l’article Natural Language Processing: the age of Transformers.

Entrainement décentralisé ?

Question : existe-t-il un système communautaire pour permettre de générer des modèles de manière décentralisée ?

Réponse - Oui, voici quelques liens :

Au passage, j’ai ajouté https://huggingface.co/blog/ à mon agrégateur RSS (miniflux).

La suite…

Nous avons parlé de nombreux autres sujets sur cette thématique, mais j’ai décidé de m’arrêter là pour cette note et de la publier. Peut-être que je publierai la suite un autre jour 🤷‍♂️.