57
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi 5上で軽量LLM、TinyLlamaを動かしてみる

Last updated at Posted at 2024-02-18

先日、日本で発売されたRaspberry Pi 5 (メモリ4GB)が届いたので、流行りのLLMを動かしてみました。動作の様子は次のツイートに掲載しています。

ニューヨークにあるエンパイアステートビルの説明をしてくれています。

用いたOSは、2023-12-05にリリースされたRaspberry Pi OS (64-bit) with Desktopです。
Raspberry Pi Imagerを用いてSDカードにイメージを書き込み起動しました。

TinyLlamaの環境準備

まずターミナル上で以下のコマンドを実行して、Hugging FaceのサイトからTinyLlamaのモデルをダウンロードしてきます。操作は/home/pi/直下で行っています。

wget https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf

次にPythonのプログラムで必要となるllama-cpp-pythonをインストールします。

python -m venv llama2
llama2/bin/pip install llama-cpp-python

次にviなどのテキストエディタで以下のPythonプログラム、llama2.pyを作成します。

llama2.py
import sys
from llama_cpp import Llama
llm = Llama(model_path="tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf", verbose=False)
output = llm("<user>\n" + sys.argv[1] + "\n<assistant>\n", max_tokens=40)
print(output['choices'][0]["text"] + "...")

本Pythonプログラムではllama-cpp-pythonをインストールすることで利用できるようになったllama_cppライブラリを用いて、TinyLlamaのモデルを読み込み、llm()関数を用いてプロンプトを渡しています。プロンプトはコマンドライン引数から生成しています。また、max_tokens=40で出力する回答の長さを最大40文字に制限しています。

Pythonプログラムの動作確認のため、以下のコマンドを実行してみます。

llama2/bin/python llama2.py "What is Empire State Building?"

実行ログが出力され、最後に以下の回答が出力されました。

The Empire State Building is a famous landmark and iconic building located in Midtown Manhattan, New York City. It was designed by the architects R. M. Schindler and...

それらしい回答が返ってきましたね。実行時間も5秒程で実用的な応答時間です。

チャットUIのプログラムを読み込み

コマンド操作では見栄えが良くないため、チャットUIも開発してみました。ここではローコードで素早くフロントエンド画面を開発できるNode-REDという開発ツールに開発済のプログラム(フロー)を読み込みます。Node-REDインストールスクリプトが用意されているため、Raspberry Piのターミナル上で次のコマンドを実行します。

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

設定ウィサードの中で聞かれる「Do you want to enable the Project feature?」ではYesを選択し、GitHubリポジトリからプログラムを取得できるようにします。

最後にNode-REDを自動起動するように設定してRaspberry Piを再起動します。

sudo systemctl enable nodered.service
sudo reboot

再起動した後はRaspberry Pi上にポート1880番でHTTPサーバが立ち上がります。ブラウザからhttp://localhost:1880にアクセスするとNode-REDの開発環境であるフローエディタが表示されます。

最初のウィザード画面ではGitHubリポジトリからフローを取得するため「プロジェクトのクローン」を選択します。

Screenshot 2024-02-18 at 12.10.59.png

次にユーザ情報を設定した後「GitHubリポジトリのURL」の入力欄に「https://github.com/kazuhitoyokoi/tinyllama」を貼り付けます。

Screenshot 2024-02-18 at 12.11.28.png

これでフローが読み込まれますが、いくつか必要なノード部品がインストールされていない状態です。そのため、右上のメニューからプロジェクト->設定を選択して、プロジェクトの設定画面を開きます。

Screenshot 2024-02-18 at 12.12.08.png

依存関係のタブの中に、必要なノード部品が表示されるため、インストールボタンを押して追加します。

Screenshot 2024-02-18 at 12.12.16.png

これでフローが動くようになりました。チャットUIの画面を開くため、右側のサイドバーにあるダッシュボード2.0タブを選択し、ダッシュボードを開くためのボタンをクリックします。

Screenshot 2024-02-18 at 12.12.46.png

すると、デモ動画と同じチャットUIの画面が表示されます。

Screenshot 2024-02-18 at 12.14.02.png

下の入力欄に英語で質問文を入力してみましょう。ChapGPTの様に賢い回答をしてくれることでしょう。

最後に

半年ほど前までは、LLMの推論処理だけでも高性能なハードウェアが必要でした。現在はLLMの軽量化も進み、Raspberry Piの性能も上がったことで1万円程度の安価なハードウェアでもChatGPTライクなアプリを手元で動かせるようになりました。
最小限のコーディングで本格的なアプリを開発できるローコード開発ツールを用いることで、たった24行のソースコードだけでチャットアプリを作れることにも驚きです。
2024年もどんどん技術が進化してゆくでしょう。楽しみです。

57
60
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?