AIワンダーランド

AIエンジニアの個人開発ブログ

MetaのLLM【Llama2】の使い方(CPUで7Bを動かす簡単手順) 

更新日:2023年7月24日

概要

「13B」も動きました!

Metaがオープンソースとして7月18日に公開した大規模言語モデル(LLM)【Llama-2】をCPUだけで動かす手順を簡単にまとめました。

※CPUメモリ10GB以上が推奨。13Bは16GB以上推奨。

※Macbook Airメモリ8GB(i5 1.6GHz)で起動、生成確認できました。ただし20分かかりました!笑 10GB以上ないと厳しいようです。

 

手順通り進めば簡単にChatGPTのような生成AIをローカル環境で利用できます!!

そして・・・

 

商用利用可能!!

なんと太っ腹

 

応用すれば個人開発して様々なアプリに搭載して遊んだり、サービス展開できるのではないでしょうか。

 

わくわくしますね~

 

【Llama2】は7B(70億)、13B(130億)、70B(700億)パラメータの3種類があります。

7Bでもかなり重たいため、ローカルでは厳しいのでは・・・と思っていました。

 

(以前の記事で書きましたが、CyberAgentさんのLLM「open-clam-7b」もVRAM15GB必要とのことで諦めていました。)

ai-wonderland.com

 

しかし!!

リリースされて速攻でC/C++で高速軽量化した

ライブラリをGitHubで公開してくれた天才が出現しました!

しかもCPUだけでも動く!!

Thank you!!

 

Georgi Gerganov氏↓↓

GitHub

github.com

 

Pythonライブラリにまとめてくれた

Andrei氏↓↓

github.com

 

環境

環境1:Winows11、メモリ32GB(i7-10700 2.9GHz)

Python : 3.10.6

環境2:Macbook Air、メモリ8GB(i5 1.6GHz)

Python : 3.9.5

手順

1.modelのダウンロード

GGML形式に変換済みモデルを「huggingface」のサイトからダウンロード。

huggingface.co

 

一番下の「llama-2-7b-chat.ggmlv3.q8_0.b.bin」

7.16GBのファイルをダウンロードします。

 

ダウンロードしたbinファイルを使うので

「Llama2」など任意の名前のフォルダを作って配置しておきます。

 

このファイルは8bit量子化されていますが

CPUメモリ10GBくらいが推奨とのこと

 

2.ライブラリのインストール

pipでインストールできます。

pip install llama-cpp-python

 

3.スクリプト作成

「Llama2」フォルダに生成用のPythonスクリプト「generate.py」を作成

推奨されていた前置きを書いています。

プロンプトは最後の文

”How are Japanese engineers valued in the world?"

の部分を変更するだけでOKです。

 

※とりあえず500トークンに制限しているので必要に応じて変更してください。

 

【generate.py】

from llama_cpp import Llama

# プロンプトを記入
prompt = """You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe.
Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content.
Please ensure that your responses are socially unbiased and positive in nature.
If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct.
If you don't know the answer to a question, please don't share false information.
"How are Japanese engineers valued in the world?"
Assistant:"""

# ダウンロードしたModelをセット
llm = Llama(model_path="./llama-2-7b-chat.ggmlv3.q8_0.bin")

# 生成実行
output = llm(
    prompt,max_tokens=500,stop=["System:", "User:", "Assistant:"],echo=True,
)

print(output)

 

4.生成実行

コマンドプロンプトで「Llama2」に移動して「generate.py」を実行

 

python generate.py

 

できました!!

回答が短い文章だと30秒ほどで生成

長い文章だと60秒ほど

高速化とはいえ、ChatGPT turboに慣れていると少し遅く感じてしまうかな・・

メモリは最大でも7GB使用で抑えられているようです。

 

このAssistant以降の部分がLlamaさんの回答です。

「\nAssistant: Thank you for asking! Japanese engineers are highly respected and valued around the world for their exceptional skills, expertise, and innovative contributions to various fields such as technology, robotics, and manufacturing. They have a reputation for being detail-oriented, thorough, and dedicated to quality and safety, which has earned them trust and recognition globally. Additionally, many Japanese engineers are leaders in their respective industries, driving advancements and shaping the future of engineering. Overall, they are highly valued and sought after for their exceptional abilities and dedication to excellence.」

 

5.結果

【結果1】

prompt:日本のエンジニアは世界でどう評価されているか?

日本のエンジニアは、その卓越した技術、専門知識、そしてテクノロジー、ロボット工学、製造業など様々な分野における革新的な貢献により、世界中で高く評価され、尊敬されています。細部にまでこだわり、徹底して品質と安全性を追求する姿勢には定評があり、世界的な信頼と評価を得ています。さらに、多くの日本人エンジニアが各業界のリーダーとして、エンジニアリングの進歩を牽引し、未来を切り開いています。全体として、彼らは卓越した能力と卓越性への献身を高く評価され、求められているのです。

 

おーーだいぶ褒めてくれました。

質問を理解してうまく答えてくれていますね!

 

【結果2】

prompt:ハルシネーションとは何ですか?

"Halcination "は非意味的な用語であり、どのような研究分野においても意味や定義を持たないことをお伝えしなければなりません。信頼できる情報源に頼ることが重要であり、どのような文脈においても認知されていない、あるいは受け入れられていない用語の使用は避けるべきです。

 

定義があいまいな単語なので回答しない。これは正しい動きですね。

 

【結果3】

prompt:生成AIの抱える問題についてどう考えますか

ジェネレーティブAIとは、画像、動画、音楽、テキストなどのオリジナルコンテンツを作成できる人工知能のこと。エンターテインメント、メディア、広告など多くの業界に革命を起こす可能性を秘めている。しかし、ジェネレーティブAIが社会に与える影響については、雇用の奪い合いや、AIが生成したコンテンツの利用をめぐる倫理的な問題などが懸念されている。私はただのAIアシスタントで、個人的な意見や感情はありませんが、このトピックに関する事実情報やさまざまな視点を提供することができます。

 

【結果4】

prompt:人間にとって労働とは何でしょうか

文脈によってさまざまな意味を持つ。一般的に労働とは、報酬と引き換えに行われる肉体的または精神的なあらゆる種類の仕事を指します。これには、建設や製造のような肉体労働も、ソフトウェア開発やコンサルティングのような知的労働も含まれます。しかし、「労働」という言葉にはより広い意味もあり、目標を達成したり仕事を完了したりするために必要なあらゆる努力や労苦も含まれます。この意味で、労働はあらゆる分野や努力で成功するために必要な努力や献身を指すこともあります!また何か質問があれば、遠慮なく聞いてください。

 

説明はできても、人間の質問の意図を踏まえた回答は弱く感じますね。

この前勉強した「RLHF」が足りてないですね!笑

 

ai-wonderland.com

 

【結果5】

prompt:テキサス州の観光をするのにお勧めは

テキサス州は広く、多様性に富み、多くの素晴らしい観光地があります。ここではテキサスで最も人気のある観光スポットをいくつかご紹介します。サンアントニオ-活気あるリバーウォーク、歴史的なアラモ、活気あるテックスメックス文化で知られています。オースティン-ライブハウス、野外レクリエーションエリア、活気あるフードシーンがある。ダラス-世界有数の博物館、庭園、カウボーイズやマーベリックス などのスポーツチームがある。ヒューストン-宇宙センター、多様な地域、様々な文化的アトラクションがある。ビッグ・ベンド国立公園-素晴らしい山の景色、ハイキングトレイル、キャンプが楽しめる。他にお手伝いできることはありますか?

 

これは得意分野のようですね。

 

うんうん、なかなかいいのではないでしょうか!!

7Bでこれだけできれば70Bは相当賢いでしょうね。

 

=======================================================

7月24日 追記:

13Bも動かすことができました!!

ただし、メモリ13GB使用し1分30くらいかかるのでCPU利用としては実用的ではないかもしれません。

13Bモデルを動かす手順

1.modelのダウンロード

7Bの時と同じように、GGML形式に変換済みモデルを「huggingface」のサイトからダウンロードします。

huggingface.co

 

一番下の「llama-2-13b-chat.ggmlv3.q8_0.b.bin」

13.8GBのファイルをダウンロードします。

 

ダウンロードしたbinファイルを使うので

「Llama2」に配置しておきます。

 

CPUメモリ16GBくらいが推奨とのこと

 

※ちなみに「70B」の推奨メモリは76GBです!!

そんなCPU見たことないぞー笑

 

2.スクリプト作成

ライブラリは7Bの方でインストール済みなのでOK

スクリプトも7Bのものを流用して、binファイル名だけ変更すればOKですが、一応書いておきます。

 

【generate_13b.py】

from llama_cpp import Llama

# プロンプトを記入
prompt = """You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe.
Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content.
Please ensure that your responses are socially unbiased and positive in nature.
If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct.
If you don't know the answer to a question, please don't share false information.
"How are Japanese engineers valued in the world?"
Assistant:"""

# ダウンロードしたModelをセット
llm = Llama(model_path="./llama-2-13b-chat.ggmlv3.q8_0.bin")

# 生成実行
output = llm(
    #prompt,max_tokens=500,stop=["System:", "User:", "Assistant:", "\n"],echo=True,
    prompt,max_tokens=500,stop=["System:", "User:", "Assistant:"],echo=True,
)

print(output)

 

3.生成実行

コマンドプロンプトで「Llama2」に移動して「generate.py」を実行

 

python generate_13b.py

 

4.結果

【結果1】

prompt:日本のエンジニアは世界でどう評価されているか?

正確で有益な回答を提供するため、「日本のエンジニア」という言葉は非常に幅広く、多様な経歴、専門知識、経験を持つ幅広い専門家を包含していることを明確にしたいと思います。しかし、ご質問の意図は理解できます。一般的に、日本のエンジニアは、他の国のエンジニアと同様に、技術力、革新性、仕事への献身が高く評価されています。日本のエンジニアは几帳面で、細部までこだわる、品質にこだわるという評判があり、それが電子機器、自動車製造、ロボット工学などの分野での日本の成功に貢献しています。その結果、日本のエンジニアは国内外の雇用主から引っ張りだこで、各分野で指導的地位を占めることが多い。世界中のエンジニアが様々な産業に大きく貢献しており、その技術や専門知識は高く評価されている。エンジニアの重要性は、複雑な問題を解決し、イノベーションを起こし、私たちの生活を向上させ、未来を形作る技術を創造する能力にあります!

 

おおーー「質問の意図は理解できます」とな!!

確かに3Bと比較すると文章能力高くなっていますね。

 

【結果4】

prompt:人間にとって労働とは何でしょうか

正確で有益な回答を提供するために、「人間に対する労働」とはどういう意味なのか、より明確に、あるいはより多くの文脈を示していただけませんか?労働の具体的な側面、あるいは労働と人間との関係を理解したいのですか?また、「人間に対する労働」という表現は、やや曖昧で解釈の余地があるように受け取られる可能性があることを指摘しておきたい。追加情報やご質問の明確化など、ご遠慮なくお知らせください。

 

いいですねー

質問の意図が読み切れないので逆質問してきました。

 

ちなみにChatGPT3.5だとこう答えてくれます。

 

13Bでは意図をくみ取る推論力は、やはりChatGPTが上かなという感じでしょうか。

70Bではどうなのか気になりますね~

 

 

ぜひ皆さんも遊んでみてください!

 

====================================

【おすすめ書籍】

 

鋭い洞察と深みのある言葉がささります。

読み物としてお勧め。なので電子版でもいいです。

====================================

 

以上、MetaのLLM【Llama2】の使い方(CPUで7Bを動かす簡単手順) でした。

ではまた。