Metaの大規模言語モデル「Llama2」を使ってみました。

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だとほんの数秒で答えが出てきます。

Mount Fuji, located on Honshu Island in Japan, is the highest mountain in the country and an iconic symbol of Japanese culture and identity. At 3,776 meters (12,388 feet) above sea level, it is also the highest volcano in the world and has been designated a UNESCO World Heritage Site since 1984. The mountain is considered sacred by the Shinto religion and is a popular destination for hikers and pilgrims.

翻訳すると、

日本の本州に位置する富士山は、日本で最も高い山であり、日本の文化とアイデンティティの象徴である。海抜3,776メートル(12,388フィート)、世界で最も高い火山でもあり、1984年以来ユネスコの世界遺産に指定されている。山は神道で神聖視され、ハイカーや巡礼者に人気の観光地である。

なかなか、優秀です。でも、世界遺産登録は2013年ですけどね。

目次