Intel Mac上でllama.cppを使って日本語LLM(ELYZA & Stabilityai beta)を使ってみる
以前、Intel Mac miniでLLMをローカルで動かす記事を書きました。GPUを使わずCPUのみでの実行にはなりますが、LLM を試すことは可能です。
Intel MacでGPUを使わずに大規模言語モデルと戯れてみた
Intel MacでLlama 2モデルと戯れてみる
この記事を書いた時には、日本語のLLMのrinnaなど36億パラメータや40億パラメータのモデルが提供されていましたが、ここにきて、70億〜100億パラメータ、さらに700億バラメータのモデルが出てきました。正確には日英バイリンガルモデルだそうです。
システム構成は次のとおり
Mac mini Late 2018
3.2GHz 6 cores Intel Core i7
64GB 2667MHz DDR4
Sonoma 14.1
ここでは、ggerganovさんによるllama.cppを利用して、モデルとしてELYZA-japanese-Llama-2-7bとStabilityaiのjapanese-stablelm-instruct-betaの7b, 70bバージョンをIntel MacでGPUなしでCPUのみで試してみます。
1. HuggingFaceからモデルをダウンロード
Intel MacでGPUを使わずに大規模言語モデルと戯れてみたで作ったコンテナchatllmsshを起動してSSHを使ってログインします。huggingface-hubをインストールします。
$ pip install huggingface-hub
download.pyを作成します。例えば、ELYZA-japanese-Llama-2-7b-instructをダウンロードするならこんな感じ。
from huggingface_hub import snapshot_download
model_id="elyza/ELYZA-japanese-Llama-2-7b-instruct"
snapshot_download(repo_id=model_id, local_dir="ELYZA-japanese-Llama-2-7b-instruct",
local_dir_use_symlinks=False, revision="main")
以下のとおり、先程のPythonコードを実行します。
$ python3 download.py
モデルが大きくてダウンロードの途中で失敗する場合には、Hagging Faceの"Files and versions"タブから個別にファイルをダウンロードしましょう。
2. ggerganov / llama.cppをインストール
Dockerコンテナ上ではなく、Mac上にggerganov/lima.cppをダウンロードしてmakeします。
$ git clone https://github.com/ggerganov/llama.cpp.git
$ cd llama.cpp
$ make -j
私が使ったlima.cppのリビジョンのhashは465219bでしたので、必要があればmakeする前にリビジョンを合わせてください。
$ git checkout 465219b
ただし、Intel Macで実行する場合、オリジナルのMakefileだとMetal前提のコードを作るかもしれません。
# Mac OS + Arm can report x86_64
# ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-128254678
9
#ifeq ($(UNAME_S),Darwin)
# ifndef LLAMA_NO_METAL
# LLAMA_METAL := 1
# endif
#
# ifneq ($(UNAME_P),arm)
# SYSCTL_M := $(shell sysctl -n hw.optional.arm64 2>/dev/null)
# ifeq ($(SYSCTL_M),1)
# # UNAME_P := arm
# # UNAME_M := arm64
# warn := $(warning Your arch is announced as x86_64, but it seems to actually be ARM64. Not fixing that can lead to bad performance. For more info see: https://github.com/ggerganov/whisper.cpp/issues/66\#issuecomment-1282546789)
# endif
# endif
#endif
私は上の箇所をコメントアウトしました。最新バージョンではどうなのか試してません。
3. ダウンロードしたモデルをGGUFフォーマットに変換
コンテナchatllmsshにログインして以下の手順を実行します。
Tutorial: How to convert HuggingFace model to GGUF format #2948が参考になりました。
$ pip install -r llama.cpp/requirements.txt
$ python3 llama.cpp/convert.py [先ほどダウンロードしたELYZA-japanese-Llama-2-7b-instructのディレクトリ]
変換が成功しますと、ELYZA-japanese-Llama-2-7b-instructディレクトリの中に変換されたggufファイルができています。
ただし、 ELYZA-japanese-Llama-2-7b-fast 及び Japanese-StableLM-Instruct-JAVocab-Beta は、日本語データでtokenizerを拡張したモデルですが、上のコンバーターで素直に変換できませんでした(私が分かっていないだけかもしれませんが)。
momongaさんが変換済みデータを提供されていますので、上で変換したモデルを含めてここからダウンロード可能です。
4. 量子化
ggufファイルへの変換が成功すれば後は簡単です。コンテナ上ではなく、Mac上で先程makeしたquantizeを使います。
$ ./quantize [先程生成したggufファイル] [type]
引数を指定せずにquantizeを実行すると変換可能なtype一覧が表示されますので、その一覧からtypeを指定してください。
5. 言語モデルを試す
次のようなShell scriptを作ってLLMへ指示してみます。
#!/bin/sh
prompt='[INST] <<SYS>>あなたは役立つアシスタントです。\n<</SYS>>\n\n'
prompt+=$1
prompt+='[/INST]'
[Path to /]main -m [Path to /]japanese-stablelm-instruct-beta-7b-[type].gguf -n 4096 -t 10 -p "$prompt"
-tのパラメータはスレッド数ですので、CPUに合わせて調整してください。
こんな感じで指示を与えてみます。
$ ./chat-c4.sh 次の質問に適切に答えなさい。\\n\\n日本の高い山のリストを名前と標高を含めて作りなさい。
stabilityaiの70Bモデルも、かなり遅いですが自分の環境では動きました。実用的な速度で使うなら7Bモデルかなと思います。
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- 実家のAmazon Echo Show 5に別アカウントのAmazon Alexaアプリから呼びかけするためのAlexaアプリによる設定(2025.01.02)
- Intel Mac で ELYZA-japanese-Llama-2-13b 及び phi-2 とllama.cppで戯れてみた(2024.01.14)
- 分離型キーボードで親指シフト(NICOLA配列)を試す(Majestouch Xacro M10SP JIS配列)(2024.01.06)
- Microsoft Office Word のショートカットキーの一部をEmacs風のキーバインドにしてみた(2023.12.18)
- Intel Mac上でllama.cppのサーバ機能を使って日本語LLMを使ってみる(2023.11.12)
コメント