Metaが大規模言語モデル「Llama2」を無償で使えるようにしたと発表しました。
リクエストさえすれば誰でも無償で使える、ということで早速リクエストをしました。
ちなみに、環境は「MacBook Pro M1 Pro 16GB」です。
ローカル環境でCha-GPT並みの大規模言語モデルを取り扱うことができる、というのは大きな魅力です。
Metaのホームページからリクエスト
Download the Modelというボタンを押すと、氏名、メールアドレス、国籍、所属(会社名など)を入力します。
すると、登録したメールアドレスにメールが届きます。そこに記載されているURLがダウンロード時に必要になります。
ターミナルを起動し、仮想環境を構築
まず、Llama2を動かすための仮想環境を作成しておきます。
また、モデルなどを入れておくフォルダもあらかじめ作成しておき、ディレクトリを変更しておきましょう。
なお、モデルのダウンロードには、wgetとmd5sumコマンドが必要になりますので、あらかじめインストールしておく必要があります。
wgetはHomebrewで開発環境を作成した段階でインストールされていると思いますので、md5sumをインストールします。
md5sumのインストールは簡単です。(ちなみに、md5sumという名前では出てきません)
$brew install md5sha1sum
また、あらかじめ、Pytorch、fairscale、fire、sentencepiece、transformersもインストールしておきます。
$conda install pytorch
$conda install fairscale
$conda install fire
$conda install sentencepiece
$pip install transformers
モデルをダウンロードし、実行しましたが失敗
メールのURLをクリックすると、READMEとdownload.shへのリンクが表示されますので、download.shをクリックし、ファイルをフォルダにダウンロードし、以下のコマンドを実行します。
$bash download.sh
すると、「Enter the URL from email:」と表示されますので、ここにメールに記載されているURLをコピーします。次に、どのモデルをダウンロードするか聞かれますので、「7B-chat」などと入力します。「7B-chat」だけなら3分ほどでダウンロードが終わりました。
何も入力しないと全部ダウンロードすることになり、ものすごく時間がかかるそうです。ファイルサイズも200GBを超えるそうなので、全部をダウンロードするのはやめておいたほうが無難です。
なお、モデルは全部で6種類あります。
- Llama2 7B
- Llama2 7B-chat
- Llama2 13B
- Llama2 13B-chat
- Llama2 70B
- Llama2 70B-chat
GitHubに記載の通り、コマンドを入力してみます。
$torchrun --nproc_per_node 1 example_chat_completion.py \
--ckpt_dir llama-2-7b-chat/ \
--tokenizer_path tokenizer.model \
--max_seq_len 128 --max_batch_size 4
すると、以下のエラーが出てしまい、残念ながら動きません。
NOTE: Redirects are currently not supported in Windows or MacOs.
M1 Macでは難しそうです。他に方法がないか探していたところ、次の方法を試してみたら動きました。
Llama.cppを使う
「Llama.cpp」を利用するには、「Llama 2」モデルをGGML形式に変換したものが必要です。この変換したモデルがHuggingFaceに公開されていますので、これをダウンロードします。
ダウンロードするに当たっては、Hugging Faceに登録が必要です。
今回は、以下のモデルをダウンロードしました。上記で作成したフォルダに入れておきます。
作成した仮想環境に「llama-cpp-python」をインストール
「llama-cpp-python」をインストールします。
$pip install llama-cpp-python
以下のファイルを作成し、モデルと同じフォルダに入れます。
from llama_cpp import Llama
prompt = """User: What is Mt.Fuji?
Assistant:"""
llm = Llama(model_path="./llama-2-7b-chat.ggmlv3.q8_0.bin")
output = llm(
prompt,
max_tokens=64,
stop=["System:", "User:", "Assistant:", "\n"],
echo=True,
)
print(output)
7B-chatだとほんの数秒で答えが出てきます。
翻訳すると、
なかなか、優秀です。でも、世界遺産登録は2013年ですけどね。