見出し画像

【ローカルLLM】Windows10でllama.cppを動かす

はじめに


今更ながら、ローカルLLMを試してみましたので、手順などを残しておこうと思います。

普段はChatGTPを使っているのですが、AIエージェントをローカルに閉じて動かしてみたいと思っているので、llama.cppを使えるようにしておきます。

llama.cppは本来莫大なリソースが必要なLLMを普通のパソコンでもなんとか動かせるようにしてくれる優れものツールだとか。すげー。


環境


今回は、AIの勉強にも使える!という大義名分のもと購入したゲーミングPCをいい加減活用しようということで、Windowsでやってみます。

  • OS:Windows10 64bit

  • CPU:AMD Ryzen 5 3600

  • GPU:GeForce RTX 3060

こういう記事は初めて書くので、自分の環境を示す情報はこれであっているのか不安ですが一応。
では早速始めていきます。

w64devkitの準備


llama.cppはC/C++で実装されており、コンパイルしなければいけないので、そのための環境を作ります。
(WindowsではデフォルトではC/C++のコンパイルができないということを初めて知りました…つくづく無知だ)

llama.cppのusageにw64devkitを使えと書いてあるのでそれに従います。

w64devkitはWindows向けのC/C++の開発キットで、コンパイルなどを行うことができるツール。各種コマンドを実行できるようになる他、LinuxライクなCLIを使うことができるアプリケーションも含んでいます。

2024/02/29 時点で最新版のバージョン1.21.0を使います。

まずは、w64devkitをダウンロードします。

  1. w64devkitにアクセスし、下部Assetsより、w64devkit-fortran-1.21.0.zip をダウンロードし、解凍する

  2. フォルダ全体をC:\Program Filesに移動(任意の場所でOK)

次に、環境変数の設定をします。

  1. 画面左下の検索窓から、「システム環境変数の編集」を検索し、実行。

  2. 「環境変数」をクリック

  3. 「システム環境変数」内の「PATH」の項目を選択し、編集をクリック。

  4. 「新規」をクリックし、C:¥Program Files¥w64devkit¥bin(先ほどdevkitを配置したディレクトリ+bin)を入力。

コマンドプロンプトで動作確認します。

  1. gitコマンドなどを打ってみて、動作するか確認する。

  2. ここがうまくいかなければ、環境変数の設定がうまくできているかを確認する。

これで、llama.cppをコンパイルする準備が完了です。

llama.cppの準備


公式GitHubの指示に従い、llama.cppを準備していきます。

まずは、先ほどのw64devkitディレクトリ内にあるw64devkit.exeを実行します。このようなCLIが起動します。

w64devkit.exe起動画面

次に、GitHubからllama.cppのリポジトリをcloneしてきます。

git clone https://github.com/ggerganov/llama.cpp

w64devkitの導入により、Windowsのコマンドプロンプトからでもgitコマンドが実行できるようになっていますが、私の環境ではこの後のコンパイルでエラーが出たため上手くいきませんでしたが、このようにw64devkit.exeのCLI上でcloneすると上手くいきました。

コマンドプロンプトではうまくいかないけど、w64devkit.exeでは成功することが結構あります。私のような雑魚にはなぜそういうことが起こるのか理解できていません。要調査。

次に、コンパイルを行います。llama.cppディレクトリに移動して

cd llama.cpp

makeを実行。

make

これでllam.cpp自体の準備は完了です。

LLMモデルの準備


実際に動かすモデル(の重み)を用意しておく必要があります。今回は、llama-2-7bの4bit量子化モデルを使ってみたいと思います。

量子化とは、元のモデルのパラメータをより少ないビット数で表現することで軽く、速く動くようにしたもの…という程度の理解です。今はまだね。

Hugging Faceからモデルをダウンロードしてきます。
llama-2-7b.Q4_K_M.gguf

download itをクリックして、ダウンロード。完了したら、適当な場所(llama.cpp/modelsとか)に配置しておく。

いざ実行


モデルの配置ができたので、いよいよ実行です。
llama.cppディレクトリに入って、下記コマンドを実行します。日本語は苦手らしいのでプロンプトは英語です。

main -m models/llama-2-7b.Q4_K_M.gguf --prompt "Q:Tell me about the highest mountain inJapan. A:"

実行結果はこんな感じです。

Log start
main: build = 2216 (5207b3fb)
main: built with cc (GCC) 13.2.0 for x86_64-w64-mingw32
main: seed  = 1710063935
llama_model_loader: loaded meta data with 19 key-value pairs and 291 tensors from models/llama-2-7b.Q4_K_M.gguf (version GGUF V2)
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv   0:                       general.architecture str              = llama
:
:
Q:Tell me about the highest mountain inJapan. A:The highest mountain in Japan is Mount Fuji. The mountain has a height of 3,776 meters (12,400 feet) and it is located on the island of Honshu. It can be seen from Tokyo as well as other cities along with the Pacific Ocean. [end of text]

出力をChatGPTで日本語約するとこんな感じです。

Q: 日本で最も高い山について教えてください。
A: 日本で最も高い山は富士山です。この山は標高3,776メートル(12,400フィート)で、本州島に位置しています。東京や太平洋沿岸の他の都市からも見ることができます。

内容的に間違ったことは言ってませんね、いい感じ!
ちなみに、質問をするような際には、プロンプトの中で「Q:XXX A:」などと書いておく必要があるようです。
これがないプロンプトを試してみると、

Tell me about the highest mountain in Japan.

Tell me about the highest mountain in Japan. everybody wants to know, but nobody tells you anything about it. Well I’ll tell you everything. Mount Fuji is the tallest mountain in Japan (3776 m). Its base is 800 meters above sea level and its top reaches almost 10,000 feet of altitude. It has a conical shape with a wide summit and steep sides that can be seen from Tokyo. The Japanese call Mount Fuji “Fujisan” or “Fuji-san” for short. The word fuji in Japan means wisteria flower, which is also called Fuyumi in English, so it was named after this beautiful bloom to honor the gods who live on top of Mount Fuji. The first recorded sighting of Mount Fuji dates back to 660 AD when a monk named Sōka Gakko climbed up its slopes while studying Buddhism under his master’s guidance at Kofuku Temple near Kyoto City (Japan). He returned home after many years away from Japan and wrote about what he had seen during those travels which included visiting various shrines along with experiencing life in different parts of Asia such as China, Korea, Vietnam etc… Most people are familiar with Mount Fuji as an iconic symbol representing Japan. The mountain is also known for its beautiful scenery and unique atmosphere that makes it one of the most popular tourist destinations in Asia. Mount Fuji has been designated a World Heritage Site by UNESCO because of its cultural significance and natural beauty; however there are still many other reasons why you should visit this place if you want to experience something special during your travels around Japan!

訳:日本で最も高い山について教えてください。誰もが知りたがっていますが、誰もそれについて何も教えてくれません。よく、私が全てを教えましょう。 富士山は日本で最も高い山です(3,776メートル)。その基部は海抜800メートルにあり、頂上はほぼ10,000フィートの高度に達します。富士山は、広い頂上と急な側面を持つ円錐形をしており、東京から見ることができます。 日本人は富士山を「富士山」または略して「ふじさん」と呼びます。日本での「富士」は藤の花を意味し、英語でフユミとも呼ばれるため、この美しい花にちなんで名付けられ、富士山の頂上に住む神々を讃えるためです。 富士山の最初の記録された目撃は、660年にさかのぼります。その時、僧侶の草香学校が、京都市(日本)近くの興福寺で師の指導のもと仏教を学びながら、その斜面を登りました。彼は日本を離れて多年後に帰国し、その旅行中に見たものについて書き残しました。その内容には、中国、韓国、ベトナムなどアジアの異なる部分での生活を経験し、さまざまな神社を訪れたことが含まれています。 多くの人々が、富士山を日本を代表する象徴的なシンボルとして知っています。また、美しい風景とユニークな雰囲気で知られており、アジアで最も人気のある観光地の一つです。 富士山は、その文化的な意義と自然の美しさのために、ユネスコによって世界遺産に指定されています。しかし、日本を旅行中に特別な体験をしたい場合に訪れるべき理由は他にもたくさんあります

なんかエッセイっぽくなりました。そして長いし合ってるのかどうかよくわからない内容になりました。

LLMは、ざっくり言うと「次に来そうな文章を予測し続ける」処理を行っているらしいので、Q: /A: をつけてやることで、「質問に対する答えとして適切な文章」が生成され、つけなければ「文章を翻訳してください。彼と初めて交わしたのはその言葉だった…」のような文章の書き出しとして認識されてしまうのかもしれません。

ただ、何をつけるのかは使うモデルによって決まっているようなので、モデルごとに確認する必要があるようです。

何はともあれ、llama.cppが使えるようになりました!

次にやりたいこと


  • llama.cppでGPUを使った推論をする

  • llama.cppをpythonで実行する

  • BabyAGIを試す(OpenAI API, ローカルLLM)


この記事が気に入ったらサポートをしてみませんか?