洋食の日記

「だ・である」調ではなく「です・ます」調で書きはじめれば良かったなと後悔してる人のブログです

llama_cpp.rbを使ってRubyでLlama2を利用する

概要

llama.cppのRuby bindingsであるllama_cpp.rbでもLlama2が使えた。

github.com

インストール

llama_cpp.rbのインストールは、通常のnative extensionsなgemと同様である。

$ gem install llama_cpp

もしmacOSを利用しているなら、metalオプションをつけると少し速くなる。

$ gem install llama_cpp -- --with-metal

Llama2のダウンロード

Llama2対応については、本家llama.cppのIssueでも話題になっていて、有志によりllama.cppで読み込めるggmlモデル化および量子化されたものがある。これをダウロードして利用した。

Add llama 2 model · Issue #2262 · ggerganov/llama.cpp · GitHub

$ wget https://huggingface.co/TheBloke/Llama-2-7B-GGML/resolve/main/llama-2-7b.ggmlv3.q4_0.bin

使用方法

Llama2の量子化モデルを読み込むことができ、テキスト生成も問題なく動いた。

require 'llama_cpp'

params = LLaMACpp::ContextParams.new
model = LLaMACpp::Model.new(model_path: 'llama-2-7b.ggmlv3.q4_0.bin', params: params)
context = LLaMACpp::Context.new(model: model)

puts LLaMACpp.generate(context, 'Hello, World.')

Llama2は日本語もイケるようなので、チャットを日本語で試してみる。

$ wget https://raw.githubusercontent.com/yoshoku/llama_cpp.rb/main/examples/chat.rb
$ wget https://raw.githubusercontent.com/yoshoku/llama_cpp.rb/main/examples/prompt_jp.txt
$ ruby chat.rb --model llama-2-7b.ggmlv3.q4_0.bin --file prompt_jp.txt

日本語で回答してくれた。本当に日本の家電最大メーカーが三菱かどうかは知らない。

おわりに

GPT-3.5に匹敵するとされるLlama2の登場で、ローカルでの大規模言語モデル(Large Language Model, LLM)の利用の幅が広がりましたね。