はじめに

AIリサーチを次のレベルに引き上げる準備はできていますか?Large Language Model Meta AI(LLaMA)がその答えです。AIの分野で研究者の研究を支援するために設計されたLLaMAは、研究利用に焦点を当てた非商用ライセンスの下でリリースされ、学術研究者、政府、市民社会、学術機関に所属する人々、そして世界中の産業研究所にアクセスを提供しています。この記事では、LLaMAの興味深い世界に飛び込み、M1 Macでの使用方法、特にllama.cppを使用してM1/M2 MacBook ProでLLaMA 7Bと13Bを実行することに焦点を当てて探っていきます。大規模言語モデルの可能性を解き放ち、あなたの研究を革新する準備を始めましょう!


では、MacBookProで実行する方法を見ていきましょう

LLaMAの実行

Georgi Gerganovと彼のllama.cppプロジェクトのおかげで、専用のGPUなしで単一のコンピュータでMetaのLLaMAを実行することが可能になりました。これは素晴らしいことです!

ステップ1 依存関係のインストール

C++プロジェクトを実行するにはXcodeをインストールする必要があります。まだの場合:

1
xcode-select --install

同時に、Brewを使用してC++プロジェクトをビルドするための依存関係(pkgconfigとcmake)をインストールします。

1
brew install pkgconfig cmake python@3.11

(オプション)Pythonの仮想環境をインストール

1
pip3 install virtualenv 

Python仮想環境を作成

1
virtualenv (プロジェクト名)

仮想環境を有効化

1
source bin/activate

次に、PyTorch(Nightlyバージョンを推奨)とその他のパッケージをインストール

1
pip install --pre torch --extra-index-url https://download.pytorch.org/whl/nightly/cpu
1
pip install numpy sentencepiece

(オプション)GPU用のMetal Performance Shaders (MPS) backendを試す

1
2
3
4
5
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
>>>

ステップ2 プロジェクトのダウンロード

llama.cpp 🫡 リポジトリを取得:

1
2
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

makeを実行してC++コードをコンパイル:

1
make

ステップ3 LLaMAモデルのダウンロード

モデルを入手する2つの方法

  1. 公式フォーム:https://forms.gle/jk851eBVbX1m5TAv5
  2. GitHubからBitTorrent:https://github.com/facebookresearch/llama/pull/73
注意
GitHubからモデルをダウンロードする場合、ipfsリンクは使用せず、BitTorrentを使用してください。後でモデルを変換できなくなるのを防ぐためです。

モデルをダウンロードすると、構造は以下のようになります:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
.
├── 7B
│ ├── checklist.chk
│ ├── consolidated.00.pth
│ └── params.json
├── 13B
│ ├── checklist.chk
│ ├── consolidated.00.pth
│ ├── consolidated.01.pth
│ └── params.json
├── 30B
│ ├── checklist.chk
│ ├── consolidated.00.pth
│ ├── consolidated.01.pth
│ ├── consolidated.02.pth
│ ├── consolidated.03.pth
│ └── params.json
├── 65B
│ ├── checklist.chk
│ ├── consolidated.00.pth
│ ├── consolidated.01.pth
│ ├── consolidated.02.pth
│ ├── consolidated.03.pth
│ ├── consolidated.04.pth
│ ├── consolidated.05.pth
│ ├── consolidated.06.pth
│ ├── consolidated.07.pth
│ └── params.json
├── llama.sh
├── tokenizer.model
└── tokenizer_checklist.chk

ステップ4 LLaMAモデル7Bの変換

llama.cppリポジトリのmodels/ディレクトリの下にモデルを配置します。

1
python convert-pth-to-ggml.py models/7B 1

出力は以下のようになります:

1
2
3
4
5
6
7
8
9
10
{'dim': 4096, 'multiple_of': 256, 'n_heads': 32, 'n_layers': 32, 'norm_eps': 1e-06, 'vocab_size': 32000}
n_parts = 1
Processing part 0
Processing 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.float16
...
Done. Output file: models/7B/ggml-model-f16.bin, (part 0 )

RuntimeError: PytorchStreamReader failed reading zip archive: not a ZIP archiveというエラーが発生した場合は、モデルと前述の注意事項を確認してください。

これによりmodels/7B/ggml-model-f16.binが生成されます - 別の13GBファイルです。

このスクリプトでモデルを4ビットに量子化します:

1
./quantize ./models/7B/ggml-model-f16.bin ./models/7B/ggml-model-q4_0.bin 2

ステップ5 LLaMAモデル7Bの実行

1
2
3
4
./main -m ./models/7B/ggml-model-q4_0.bin \
-t 8 \
-n 128 \
-p '月に最初に降り立った人は '

出力例:
月に最初に降り立った人は1969年7月に38歳でした。ニール・アームストロングは、私の母の家族がサギノーとフリント/ベイシティの間の小さな農場に定住してからわずか1、2ヶ月後に生まれました。彼らはペンシルベニアから来ました(私たちのほとんどと同様に)。
今年後半の彼への追悼演説で - 2018年の最悪の政治的災害を経験しているにもかかわらず、通常以上に人々が語り合っていたことに反映された「偉大さ」をアームストロングに称えた中で - オバマは次のように述べました:「私は思いません…」

ステップ6 LLaMAモデル13Bの実行

13Bモデルをggmlに変換するには:

1
python convert-pth-to-ggml.py models/13B/ 1

quantizeコマンドは各ファイルに対して順番に実行する必要があります:

1
2
3
./quantize ./models/13B/ggml-model-f16.bin   ./models/13B/ggml-model-q4_0.bin 2

./quantize ./models/13B/ggml-model-f16.bin.1 ./models/13B/ggml-model-q4_0.bin.1 2
1
2
3
4
5
6
./main \
-m ./models/13B/ggml-model-q4_0.bin \
-t 8 \
-n 128 \
-p 'ビーバーが経営するコーヒーショップの面白い店名を考えてください:
-'

お楽しみください!

参考文献🙏🏻
1. https://dev.l1x.be/posts/2023/03/12/using-llama-with-m1-mac/
2. https://til.simonwillison.net/llms/llama-7b-m2