Heim > Artikel > Technologie-Peripheriegeräte > LeCun gefällt: Läuft LLaMA auf dem Apple M1/M2-Chip! Das 13-Milliarden-Parameter-Modell benötigt nur 4 GB Speicher
Vor nicht allzu langer Zeit, nachdem Meta das Open-Source-Modell LLaMA für große Sprachen veröffentlicht hatte, veröffentlichten Internetnutzer einen Download-Link ohne Schwellenwert, der „erbärmlich“ offen war.
Sobald die Nachricht bekannt wurde, wurde der Kreis sofort lebendig und alle begannen, es herunterzuladen und zu testen.
Aber Freunde, die keine Grafikkarte der Spitzenklasse haben, können nur beim Anblick des Modells seufzen.
Allerdings ist es kein großes Problem. Georgi Gerganov hat kürzlich ein Projekt namens „llama.cpp“ erstellt – LLaMA kann ohne GPU ausgeführt werden.
Projektadresse: https://github.com/ggerganov/llama.cpp
Ja, dazu gehören auch Macs, die mit Apple-Chips ausgestattet sind. Und erhielt auch speditionelle Unterstützung von LeCun.
Derzeit gibt es zwei relativ umfassende Tutorials, die auf den M1- bzw. M2-Prozessoren von Apple basieren.
Erster Artikel: https://dev.l1x.be/posts/2023/03/12/using-llama-with-m1-mac/
Zweiter Artikel: https://til.simonwillison.net/llms/llama-7b-m2
Schauen wir uns ohne weitere Umschweife zunächst die Wirkung an.
Fragen Sie zum Beispiel beim kleinsten 7B-Modell: „Wer war der erste Mensch, der auf dem Mond landete?“
Sehr schnell, die Ergebnisse kamen in wenigen Sekunden vor.
-p „Der erste Mensch, der den Mond betrat, war“
Der erste Mensch, der den Mond betrat, war der 38-jährige Astronaut Neil A. Armstrong.
Am 20. Juli 1969 landete Apollo 11 auf dem Mond.
Apollo 11 war die erste bemannte Mission, die auf dem Mond landete, und der Höhepunkt des Weltraumrennens. Im Juli 1969 landeten Neil Armstrong und Edwin „Buzz“ Aldrin als erste Menschen auf dem Mond.
Apollo 11 startete am 16. Juli vom Kennedy Space Center.
Es gibt keine offensichtlichen sachlichen Fehler in Bezug auf Armstrongs Alter, seinen zweiten Vornamen und das Datum seiner Landung auf dem Mond. Das ist für ein so kleines Modell nicht einfach.
Wenn Sie die folgenden Tipps verwenden, können Sie praktischen Python-Code generieren.
-p 'def open_and_return_content(filename):'
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)"""
接下来,我们就来看看具体是如何实现的。
Schritt 1: Modell herunterladen
Als erstes müssen Sie das LLaMA-Modell herunterladen.
Sie können einen Antrag über das offizielle Formular bei Meta einreichen oder ihn direkt über den von Internetnutzern geteilten Link erhalten.
Wie auch immer, wenn Sie fertig sind, werden Sie diesen Stapel Zeug sehen:
Wie Sie sehen können, befinden sich verschiedene Modelle in verschiedenen Ordnern. Jedes Modell verfügt über eine params.json mit Details zum Modell. Zum Beispiel:
Schritt 2: Abhängigkeiten installieren
首先,你需要安装Xcode来编译C++项目。
xcode-select --install
接下来,是构建C++项目的依赖项(pkgconfig和cmake)。
brew install pkgconfig cmake
在环境的配置上,假如你用的是Python 3.11,则可以创建一个虚拟环境:
/opt/homebrew/bin/python3.11 -m venv venv
然后激活venv。(如果是fish以外的shell,只要去掉.fish后缀即可)
. venv/bin/activate.fish
最后,安装Torch。
pip3 install --pre torch torchvision --extra-index-url https://download.pytorch.org/whl/nightly/cpu
如果你对利用新的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
第三步:编译LLaMA CPP
git clone git@github.com:ggerganov/llama.cpp.git
在安装完所有的依赖项后,你可以运行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
第四步:转换模型
假设你已经把模型放在llama.cpp repo中的models/下。
python convert-pth-to-ggml.py models/7B 1
那么,应该会看到像这样的输出:
{'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 )
下一步将是进行量化处理:
./quantize ./models/7B/ggml-model-f16.bin ./models/7B/ggml-model-q4_0.bin 2
输出如下:
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
第五步:运行模型
./main -m ./models/7B/ggml-model-q4_0.bin -t 8 -n 128 -p 'The first president of the USA was '
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
第二位博主表示,在运行时,13B模型使用了大约4GB的内存,以及748%的CPU。(设定的就是让模型使用8个CPU核心)
GPT-3和ChatGPT效果如此之好的关键原因之一是,它们都经过了指令微调,
这种额外的训练使它们有能力对人类的指令做出有效的反应。比如「总结一下这个」或「写一首关于水獭的诗」或「从这篇文章中提取要点」。
撰写教程的博主表示,据他观察,LLaMA并没有这样的能力。
也就是说,给LLaMA的提示需要采用经典的形式:「一些将由......完成的文本」。这也让提示工程变得更加困难。
举个例子,博主至今都还没有想出一个正确的提示,从而让LLaMA实现文本的总结。
Das obige ist der detaillierte Inhalt vonLeCun gefällt: Läuft LLaMA auf dem Apple M1/M2-Chip! Das 13-Milliarden-Parameter-Modell benötigt nur 4 GB Speicher. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!