Maison > Périphériques technologiques > IA > LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

WBOY
Libérer: 2023-04-11 19:27:43
avant
947 Les gens l'ont consulté

Il n'y a pas si longtemps, après que Meta ait publié le grand modèle de langage open source LLaMA, les internautes ont publié un lien de téléchargement sans seuil, qui était « misérablement » ouvert.

Dès que la nouvelle est sortie, le cercle s'est animé instantanément et tout le monde a commencé à le télécharger et à le tester.

Mais ces amis qui n'ont pas de carte graphique de haut niveau ne peuvent que regarder le modèle et soupirer.

Cependant, ce n’est pas un gros problème. Georgi Gerganov a récemment réalisé un projet appelé "llama.cpp" - LLaMA peut être exécuté sans GPU.

LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

Adresse du projet : https://github.com/ggerganov/llama.cpp

Oui, cela inclut également les Mac équipés de puces Apple. Et a également reçu le support de transfert de LeCun.

LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

Exécuter LLaMA sur Mac M1/M2

Actuellement, il existe deux tutoriels relativement complets, basés respectivement sur les processeurs M1 et M2 d'Apple.

LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

Premier article : https://dev.l1x.be/posts/2023/03/12/using-llama-with-m1-mac/

LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

Deuxième article : https://til.simonwillison.net/llms/llama-7b-m2

Sans plus tarder, regardons d'abord l'effet.

Par exemple, sur le plus petit modèle 7B, demandez : "Qui a été la première personne à atterrir sur la lune ?"

Très vite, les résultats sont tombés en quelques secondes.

LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

-p 'Le premier homme à mettre le pied sur la lune était'

Le premier homme à mettre le pied sur la lune était l'astronaute Neil A. Armstrong, 38 ans.

Le 20 juillet 1969, Apollo 11 se pose sur la Lune.

Apollo 11 a été la première mission habitée à atterrir sur la lune et a été le point culminant de la course à l'espace. En juillet 1969, Neil Armstrong et Edwin « Buzz » Aldrin sont devenus les premiers humains à atterrir sur la Lune.

Apollo 11 a été lancé depuis le Centre spatial Kennedy le 16 juillet.

Il n’y a aucune erreur factuelle évidente dans l’âge, le deuxième prénom et la date d’atterrissage d’Armstrong sur la lune. Ce n’est pas évident pour un si petit modèle.

Si vous utilisez les conseils suivants, vous pouvez générer du code Python pratique.

-p 'def open_and_return_content(filename):'
Copier après la connexion
def open_and_return_content(filename):
"""Opens file (returning the content) and performs basic sanity checks"""if os.path.isfile(filename):
with open(filename) as f:
content = f.read()
return contentelse:
print('WARNING: file "{}" does not exist'.format(filename), file=sys.stderr)
return ''def get_file_info(filename, fullpath):
"""Get file information (i.e., permission, owner, group, size)"""
Copier après la connexion
接下来,我们就来看看具体是如何实现的。
Copier après la connexion

Étape 1 : Téléchargez le modèle

La première chose à faire est de télécharger le modèle LLaMA.

Vous pouvez soumettre une candidature à Meta via le formulaire officiel, ou l'obtenir directement à partir du lien partagé par les internautes.

Quoi qu'il en soit, lorsque vous aurez terminé, vous verrez cette pile de trucs :

LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

Comme vous pouvez le voir, différents modèles sont dans des dossiers différents. Chaque modèle possède un params.json contenant des détails sur le modèle. Par exemple :

LeCun aime : Exécuter LLaMA sur des puces Apple M1/M2 ! Le modèle à 13 milliards de paramètres ne nécessite que 4 Go de mémoire

Étape 2 : Installer les dépendances

首先,你需要安装Xcode来编译C++项目。

xcode-select --install
Copier après la connexion

接下来,是构建C++项目的依赖项(pkgconfig和cmake)。

brew install pkgconfig cmake
Copier après la connexion

在环境的配置上,假如你用的是Python 3.11,则可以创建一个虚拟环境:

/opt/homebrew/bin/python3.11 -m venv venv
Copier après la connexion

然后激活venv。(如果是fish以外的shell,只要去掉.fish后缀即可)

. venv/bin/activate.fish
Copier après la connexion

最后,安装Torch。

pip3 install --pre torch torchvision --extra-index-url https://download.pytorch.org/whl/nightly/cpu
Copier après la connexion


如果你对利用新的Metal性能着色器(MPS)后端进行GPU训练加速感兴趣,可以通过运行以下程序来进行验证。但这不是在M1上运行LLaMA的必要条件。

python
Python 3.11.2 (main, Feb 16 2023, 02:55:59) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch; torch.backends.mps.is_available()True
Copier après la connexion

第三步:编译LLaMA CPP

git clone git@github.com:ggerganov/llama.cpp.git
Copier après la connexion

在安装完所有的依赖项后,你可以运行make:

make
I llama.cpp build info:
I UNAME_S:Darwin
I UNAME_P:arm
I UNAME_M:arm64
I CFLAGS: -I.-O3 -DNDEBUG -std=c11 -fPIC -pthread -DGGML_USE_ACCELERATE
I CXXFLAGS: -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread
I LDFLAGS: -framework Accelerate
I CC: Apple clang version 14.0.0 (clang-1400.0.29.202)I CXX:Apple clang version 14.0.0 (clang-1400.0.29.202)
cc-I.-O3 -DNDEBUG -std=c11 -fPIC -pthread -DGGML_USE_ACCELERATE -c ggml.c -o ggml.o
c++ -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread -c utils.cpp -o utils.o
c++ -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread main.cpp ggml.o utils.o -o main-framework Accelerate
./main -h
usage: ./main [options]
options:
-h, --helpshow this help message and exit
-s SEED, --seed SEEDRNG seed (default: -1)
-t N, --threads N number of threads to use during computation (default: 4)
-p PROMPT, --prompt PROMPT
prompt to start generation with (default: random)
-n N, --n_predict N number of tokens to predict (default: 128)
--top_k N top-k sampling (default: 40)
--top_p N top-p sampling (default: 0.9)
--temp Ntemperature (default: 0.8)
-b N, --batch_size Nbatch size for prompt processing (default: 8)
-m FNAME, --model FNAME
model path (default: models/llama-7B/ggml-model.bin)
c++ -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread quantize.cpp ggml.o utils.o -o quantize-framework Accelerate
Copier après la connexion

第四步:转换模型

假设你已经把模型放在llama.cpp repo中的models/下。

python convert-pth-to-ggml.py models/7B 1
Copier après la connexion

那么,应该会看到像这样的输出:

{'dim': 4096, 'multiple_of': 256, 'n_heads': 32, 'n_layers': 32, 'norm_eps': 1e-06, 'vocab_size': 32000}n_parts =1Processing part0Processing variable: tok_embeddings.weight with shape:torch.Size([32000, 4096])and type:torch.float16
Processing variable: norm.weight with shape:torch.Size([4096])and type:torch.float16
Converting to float32
Processing variable: output.weight with shape:torch.Size([32000, 4096])and type:torch.float16
Processing variable: layers.0.attention.wq.weight with shape:torch.Size([4096, 4096])and type:torch.f
loat16
Processing variable: layers.0.attention.wk.weight with shape:torch.Size([4096, 4096])and type:torch.f
loat16
Processing variable: layers.0.attention.wv.weight with shape:torch.Size([4096, 4096])and type:torch.f
loat16
Processing variable: layers.0.attention.wo.weight with shape:torch.Size([4096, 4096])and type:torch.f
loat16
Processing variable: layers.0.feed_forward.w1.weight with shape:torch.Size([11008, 4096])and type:tor
ch.float16
Processing variable: layers.0.feed_forward.w2.weight with shape:torch.Size([4096, 11008])and type:tor
ch.float16
Processing variable: layers.0.feed_forward.w3.weight with shape:torch.Size([11008, 4096])and type:tor
ch.float16
Processing variable: layers.0.attention_norm.weight with shape:torch.Size([4096])and type:torch.float
16...
Done. Output file: models/7B/ggml-model-f16.bin, (part0 )
Copier après la connexion

下一步将是进行量化处理:

./quantize ./models/7B/ggml-model-f16.bin ./models/7B/ggml-model-q4_0.bin 2
Copier après la connexion

输出如下:

llama_model_quantize: loading model from './models/7B/ggml-model-f16.bin'llama_model_quantize: n_vocab = 32000llama_model_quantize: n_ctx = 512llama_model_quantize: n_embd= 4096llama_model_quantize: n_mult= 256llama_model_quantize: n_head= 32llama_model_quantize: n_layer = 32llama_model_quantize: f16 = 1...
layers.31.attention_norm.weight - [ 4096, 1], type =f32 size =0.016 MB
layers.31.ffn_norm.weight - [ 4096, 1], type =f32 size =0.016 MB
llama_model_quantize: model size= 25705.02 MB
llama_model_quantize: quant size=4017.27 MB
llama_model_quantize: hist: 0.000 0.022 0.019 0.033 0.053 0.078 0.104 0.125 0.134 0.125 0.104 0.078 0.053 0.033 0.019 0.022


main: quantize time = 29389.45 ms
main:total time = 29389.45 ms
Copier après la connexion

第五步:运行模型

./main -m ./models/7B/ggml-model-q4_0.bin 
-t 8 
-n 128 
-p 'The first president of the USA was '
Copier après la connexion
main: seed = 1678615879llama_model_load: loading model from './models/7B/ggml-model-q4_0.bin' - please wait ...
llama_model_load: n_vocab = 32000llama_model_load: n_ctx = 512llama_model_load: n_embd= 4096llama_model_load: n_mult= 256llama_model_load: n_head= 32llama_model_load: n_layer = 32llama_model_load: n_rot = 128llama_model_load: f16 = 2llama_model_load: n_ff= 11008llama_model_load: n_parts = 1llama_model_load: ggml ctx size = 4529.34 MB
llama_model_load: memory_size = 512.00 MB, n_mem = 16384llama_model_load: loading model part 1/1 from './models/7B/ggml-model-q4_0.bin'llama_model_load: .................................... donellama_model_load: model size =4017.27 MB / num tensors = 291
main: prompt: 'The first president of the USA was 'main: number of tokens in prompt = 9 1 -> ''1576 -> 'The' 937 -> ' first'6673 -> ' president' 310 -> ' of' 278 -> ' the'8278 -> ' USA' 471 -> ' was' 29871 -> ' '
sampling parameters: temp = 0.800000, top_k = 40, top_p = 0.950000


The first president of the USA was 57 years old when he assumed office (George Washington). Nowadays, the US electorate expects the new president to be more young at heart. President Donald Trump was 70 years old when he was inaugurated. In contrast to his predecessors, he is physically fit, healthy and active. And his fitness has been a prominent theme of his presidency. During the presidential campaign, he famously said he
 would be the “most active president ever” — a statement Trump has not yet achieved, but one that fits his approach to the office. His tweets demonstrate his physical activity.


main: mem per token = 14434244 bytes
main: load time =1311.74 ms
main: sample time = 278.96 ms
main:predict time =7375.89 ms / 54.23 ms per token
main:total time =9216.61 ms
Copier après la connexion

资源使用情况

第二位博主表示,在运行时,13B模型使用了大约4GB的内存,以及748%的CPU。(设定的就是让模型使用8个CPU核心)

没有指令微调

GPT-3和ChatGPT效果如此之好的关键原因之一是,它们都经过了指令微调,

这种额外的训练使它们有能力对人类的指令做出有效的反应。比如「总结一下这个」或「写一首关于水獭的诗」或「从这篇文章中提取要点」。

撰写教程的博主表示,据他观察,LLaMA并没有这样的能力。

也就是说,给LLaMA的提示需要采用经典的形式:「一些将由......完成的文本」。这也让提示工程变得更加困难。

举个例子,博主至今都还没有想出一个正确的提示,从而让LLaMA实现文本的总结。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal