# LLMs Local: Pourquoi et Comment ?

Yannis Bendi-Ouis, Xavier Hinaut

► To cite this version:

Yannis Bendi-Ouis, Xavier Hinaut. LLMs Local: Pourquoi et Comment ?. Midis de la Bidouille à l'Inria, Nov 2023, Bordeaux, France. hal-04851146

HAL Id: hal-04851146

https://hal.science/hal-04851146v1

Submitted on 20 Dec 2024

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
LLMs local
-
Pourquoi et
comment ?

<figure><img src="image_2.png" /><figcaption>LLAMA 2</figcaption></figure>

<figure><img src="image_3.png" /><figcaption>CHATGPT</figcaption></figure>

<figure><img src="image_4.png" /><figcaption>MISTRAL AI</figcaption></figure>
<figure><img src="image_5.png" /><figcaption>LLAMA 2</figcaption></figure>

<figure><img src="image_6.png" /><figcaption>CHATGPT</figcaption></figure>

<figure><img src="image_7.png" /><figcaption>MISTRAL AI</figcaption></figure>
# Sommaire

01. Qu'est-ce qu'un Transformer

02. Des modèles open-sources

03. Le prompt : la création d'agents

04. LLaMA.cpp et la communauté open-source

Puis un peu de pratique !
Inria

# Pourquoi faire du local ?
# Pourquoi faire du local ?

* Pas besoin de connection internet
<figure><img src="image_8.png" /></figure>

# Pourquoi faire du local ?

* Pas besoin de connection internet

* Plus petite consommation d'énergie
# Pourquoi faire du local ?

* Pas besoin de connection internet

* Plus petite consommation d'énergie

* Protection des données et de la vie privée
# Pourquoi faire du local ?

* Pas besoin de connection internet

* Plus petite consommation d'énergie

* Protection des données et de la vie privée

* Décentralise le pouvoir (toute les données ne vont pas au même endroit)
# Pourquoi faire du local ?

* Pas besoin de connection internet

* Plus petite consommation d'énergie

* Protection des données et de la vie privée

* Décentralise le pouvoir (toute les données ne vont pas au même endroit)

* Réduction des risques de biais volontaires (propagande, manipulation de masse)
01

# Qu'est ce qu'un
Transformers ?
# L'architecture d'un Transformers

<figure><img src="image_9.png" /></figure>

* Initialement prévu pour
de la traduction
# L'architecture d'un Transformers

<figure><img src="image_10.png" /></figure>

* Initialement prévu pour
de la traduction
# Encodeur et Décodeur

<figure><img src="image_11.png" /><figcaption>Décodeur</figcaption></figure>

<footnote>* Initialement prévu pour
de la traduction</footnote>
Encodeur

> Son but est de compresser les données qu'il reçoit,
de manière à ce qu'elle puisse être ensuite décoder par
le décodeur.
# Encodeur

> Son but est de compresser les données qu'il reçoit, de manière à ce qu'elle puisse être ensuite décodeur par le décodeur.

> Il peut être capable de transformer un texte en un simple vecteur (modèle BERT).

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo

<figure><img src="image_12.png" /></figure>

<table><tr><td>0.12</td><td>0.42</td><td>0.89</td><td>1.56</td><td>2.11</td><td>0.08</td><td>1.95</td><td>1.12</td><td>0.88</td><td>2.02</td></tr></table>
## Encodeur

> Son but est de compresser les données qu'il reçoit, de manière à ce qu'elle puisse être ensuite décodeur par le décodeur.

> Il peut être capable de transformer un texte en un simple vecteur (modèle BERT).

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo

<figure><img src="image_13.png" /></figure>

<table><tr><td>0.12</td><td>0.42</td><td>0.89</td><td>1.56</td><td>2.11</td><td>0.08</td><td>1.95</td><td>1.12</td><td>0.88</td><td>2.02</td></tr></table>

## Décodeur

> Son but est de décodeur des données issues de l'encodeur.
## Encodeur

> Son but est de compresser les données qu'il reçoit, de manière à ce qu'elle puisse être ensuite décodeur par le décodeur.

> Il peut être capable de transformer un texte en un simple vecteur (modèle BERT).

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo

<figure><img src="image_14.png" /></figure>

<table><tr><td>0.12</td><td>0.42</td><td>0.89</td><td>1.56</td><td>2.11</td><td>0.08</td><td>1.95</td><td>1.12</td><td>0.88</td><td>2.02</td></tr></table>

## Décodeur

> Son but est de décodeur des données issues de l'encodeur.

> On a remarqué que si on ne lui donne pas de données issues de l'encodeur, mais qu'on lui donne le début d'une séquence, il est capable de la continuer.
## Encodeur

> Son but est de compresser les données qu'il reçoit, de manière à ce qu'elle puisse être ensuite décodeur par le décodeur.

> Il peut être capable de transformer un texte en un simple vecteur (modèle BERT).

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo

<figure><img src="image_15.png" /></figure>

<table><tr><td>0.12</td><td>0.42</td><td>0.89</td><td>1.56</td><td>2.11</td><td>0.08</td><td>1.95</td><td>1.12</td><td>0.88</td><td>2.02</td></tr></table>

## Décodeur

> Son but est de décodeur des données issues de l'encodeur.

> On a remarqué que si on ne lui donne pas de données issues de l'encodeur, mais qu'on lui donne le début d'une séquence, il est capable de la continuer.

> Dans notre cas (texte), il est capable de deviner le prochain mot d'une phrase.
## Encodeur

> Son but est de compresser les données qu'il reçoit, de manière à ce qu'elle puisse être ensuite décodeur par le décodeur.

> Il peut être capable de transformer un texte en un simple vecteur (modèle BERT).

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo

<figure><img src="image_16.png" /></figure>

<table><tr><td>0.12</td><td>0.42</td><td>0.89</td><td>1.56</td><td>2.11</td><td>0.08</td><td>1.95</td><td>1.12</td><td>0.88</td><td>2.02</td></tr></table>

## Décodeur

> Son but est de décodeur des données issues de l'encodeur.

> On a remarqué que si on ne lui donne pas de données issues de l'encodeur, mais qu'on lui donne le début d'une séquence, il est capable de la continuer.

> Dans notre cas (texte), il est capable de deviner le prochain mot d'une phrase.

> C'est chatGPT.
Des modèles, toujours
plus de modèles
Toujours plus gros, toujours plus fort !

<table><thead><tr><td>Modèle</td><td>Architecture</td><td>Nombre paramètres</td></tr></thead><tbody><tr><td>GPT (2017)</td><td>Décodeur</td><td>120.000.000 (120M)</td></tr><tr><td>BERT (2018)</td><td>Encodeur</td><td>340.000.000 (340M)</td></tr><tr><td>GPT-2 XL (2019)</td><td>Décodeur</td><td>1.500.000.000 (1.5B)</td></tr><tr><td>GPT-3 (2020)</td><td>Décodeur</td><td>175.000.000.000 (175B)</td></tr><tr><td>GPT-4 (2023)</td><td>Décodeur + MOE</td><td>1.760.000.000.000 (8 * 220B)</td></tr></tbody></table>
Autant avec moins ?

<table><thead><tr><td>Modèle</td><td>Architecture</td><td>Nombre paramètres</td></tr></thead><tbody><tr><td>GPT (2017)</td><td>Décodeur</td><td>120.000.000 (120M)</td></tr><tr><td>BERT (2018)</td><td>Encodeur</td><td>340.000.000 (340M)</td></tr><tr><td>GPT-2 XL (2019)</td><td>Décodeur</td><td>1.500.000.000 (1.5B)</td></tr><tr><td>GPT-3 (2020)</td><td>Décodeur</td><td>175.000.000.000 (175B)</td></tr><tr><td>GPT-4 (2023)</td><td>Décodeur + MOE</td><td>1.760.000.000.000 (8 * 220B)</td></tr><tr><td>LLaMA-2 (2023)</td><td>Décodeur</td><td>7B - 14B - 70B</td></tr><tr><td>Mistral (2023)</td><td>Décodeur</td><td>7.000.000.000 (7B)</td></tr><tr><td>GPT-3.5-turbo (2023)</td><td>Décodeur</td><td>20.000.000.000 (20B)</td></tr></tbody></table>
# Autant avec moins ?

<table><thead><tr><td>Modèle</td><td>Architecture</td><td>Nombre paramètres</td></tr></thead><tbody><tr><td>GPT (2017)</td><td>Décodeur</td><td>120.000.000 (120M)</td></tr><tr><td>BERT (2018)</td><td>Encodeur</td><td>340.000.000 (340M)</td></tr><tr><td>GPT-2 XL (2019)</td><td>Décodeur</td><td>1.500.000.000 (1.5B)</td></tr><tr><td>GPT-3 (2020)</td><td>Décodeur</td><td>175.000.000.000 (175B)</td></tr><tr><td>GPT-4 (2023)</td><td>Décodeur + MOE</td><td>1.760.000.000.000 (8 * 220B)</td></tr><tr><td>LLaMA-2 (2023)</td><td>Décodeur</td><td>7B - 14B - 70B</td></tr><tr><td>Mistral (2023)</td><td>Décodeur</td><td>7.000.000.000 (7B)</td></tr><tr><td>GPT-3.5-turbo (2023)</td><td>Décodeur</td><td>20.000.000.000 (20B)</td></tr></tbody></table>

> Et il en existe encore plein ! Notamment si on compte les version finetuned.
Des modèles de base open-source

<figure><img src="image_17.png" /></figure>

Falcon
(7B, 40B, 180B)

Emirats Arabes Unis
Juin 2023

<figure><img src="image_18.png" /></figure>

Llama 2
(7B, 13B, 70B)

Etats-Unis
Juillet 2023

<figure><img src="image_19.png" /></figure>

Mistral
(7B)

France
Septembre 2023
03

Le prompt :
la création d'agents
Format de prompt

system

user

assistant

user

assistant

...
Format de prompt

system

user

assistant

user

assistant

...

Tu es un assistant, tu dois répondre aux questions que l'utilisateur te pose.

Si tu ne sais pas, réponds "Je ne sais pas".

Tu dois toujours répondre de manière courtoise et polie.
Format de prompt

system

Tu es un assistant, tu dois répondre aux questions que l'utilisateur te pose.

Si tu ne sais pas, réponds "Je ne sais pas".

Tu dois toujours répondre de manière courtoise et polie.

user

assistant

user

assistant

Quelle est la réponse à la vie à l'univers et au reste ?

...
Format de prompt

system

Tu es un assistant, tu dois répondre aux questions que l'utilisateur te pose.

Si tu ne sais pas, réponds "Je ne sais pas".

Tu dois toujours répondre de manière courtoise et polie.

user

assistant

Quelle est la réponse à la vie à l'univers et au reste ?

user

assistant

La réponse à la question sur la vie, l'univers et tout le reste est "42".

...
Format de prompt

system

Tu es un assistant, tu dois répondre aux questions que
l'utilisateur te pose.

Si tu ne sais pas, réponds "Je ne sais pas".

Tu dois toujours répondre de manière courtoise et polie.

user

<figure><img src="image_20.png" /></figure>

assistant

Quelle est la réponse à la vie à
l'univers et au reste ?

user

<figure><img src="image_21.png" /></figure>

assistant

La réponse à la question sur la vie, l'univers et
tout le reste est "42".

...


system{system_message}


user{user_message}


assistant
Format de prompt

system

Tu es un assistant, tu dois répondre aux questions que
l'utilisateur te pose.

Si tu ne sais pas, réponds "Je ne sais pas".

Tu dois toujours répondre de manière courtoise et polie.

user

assistant

Quelle est la réponse à la vie à
l'univers et au reste ?

user

assistant

La réponse à la question sur la vie, l'univers et
tout le reste est "42".

...


system{system_message}



user{user_message}



assistant
# LLaMA.cpp

Une communauté open-source
# Le projet d'une soirée : LLaMA.cpp

> https://github.com/ggerganov/llama.cpp

<figure><img src="image_22.png" /></figure>
# Le projet d'une soirée : LLaMA.cpp

> https://github.com/ggerganov/llama.cpp

<figure><img src="image_23.png" /></figure>

> https://github.com/abetlen/llama-cpp-python

<figure><img src="image_24.png" /></figure>
# Un thread Reddit : r/LocalLLaMA

> https://www.reddit.com/r/LocalLLaMA/

<figure><img src="image_25.png" /></figure>
# Quantification

Float 32

<figure><img src="image_26.png" /></figure>

<figure><img src="image_27.png" /></figure>

<figure><img src="image_28.png" /></figure>

Signe

Entier

Décimale
# Quantification

## Float 32

<figure><img src="image_29.png" /></figure>

<figure><img src="image_30.png" /></figure>

Signe

Entier

<figure><img src="image_31.png" /></figure>

Décimale

## Float 16

<figure><img src="image_32.png" /></figure>

<figure><img src="image_33.png" /></figure>

<figure><img src="image_34.png" /></figure>

<figure><img src="image_35.png" /></figure>
# Quantification

## Float 32

<figure><img src="image_36.png" /></figure>

<figure><img src="image_37.png" /></figure>

<figure><img src="image_38.png" /></figure>

Signe

Entier

Décimale

<figure><img src="image_39.png" /></figure>

## Float 16

<figure><img src="image_40.png" /></figure>

<figure><img src="image_41.png" /></figure>

<figure><img src="image_42.png" /></figure>

<figure><img src="image_43.png" /></figure>

## Float 8

<figure><img src="image_44.png" /></figure>

<figure><img src="image_45.png" /></figure>

<figure><img src="image_46.png" /></figure>
# Quantification

<figure><img src="image_47.png" /></figure>

Signe

<figure><img src="image_48.png" /></figure>

Entier

Float 32

<figure><img src="image_49.png" /></figure>

Décimale

<figure><img src="image_50.png" /></figure>

Float 16

<figure><img src="image_51.png" /></figure>

<figure><img src="image_52.png" /></figure>

<figure><img src="image_53.png" /></figure>

<figure><img src="image_54.png" /></figure>

Float 8

<figure><img src="image_55.png" /></figure>

<figure><img src="image_56.png" /></figure>

<figure><img src="image_57.png" /></figure>

<figure><img src="image_58.png" /></figure>

Float 2, 3, 4, 5, 6, 7, 8
# Le github des modèles d'IA : HuggingFace

> https://huggingface.co/TheBloke

<figure><img src="image_59.png" /></figure>

1181

<figure><img src="image_60.png" /></figure>

Tom Jobbins

PRO

TheBloke

Follow

<figure><img src="image_61.png" /></figure>

10272 followers

8 following

<figure><img src="image_62.png" /></figure>

TheBlokeAI

<figure><img src="image_63.png" /></figure>

TheBloke

<figure><img src="image_64.png" /></figure>

## Collections 1

### Recent models: last 100 repos, sorted by creation date

<figure><img src="image_65.png" /></figure>

The last 100 repos I have created. Sorted by creation date descend...

<figure><img src="image_66.png" /></figure>

TheBloke/OpenOrca-Zephyr-7B-AWQ

<figure><img src="image_67.png" /></figure>

Text Generation

Updated about 9 hours ago

<figure><img src="image_68.png" /></figure>

TheBloke/OpenOrca-Zephyr-7B-GGUF

Updated about 10 hours ago

<figure><img src="image_69.png" /></figure>

4

<figure><img src="image_70.png" /></figure>

TheBloke/OpenOrca-Zephyr-7B-GPTQ

<figure><img src="image_71.png" /></figure>

Text Generation

Updated about 9 hours ago

<figure><img src="image_72.png" /></figure>

<figure><img src="image_73.png" /></figure>

TheBloke/Poro-34B-GPTQ

<figure><img src="image_74.png" /></figure>

## Models 2893

<figure><img src="image_75.png" /></figure>
C'est parti pour la
pratique !

https://github.com/Naowak/Local-LLMs